> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ooneex.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Built-in Tools

> Ready-made web search, encyclopedia, biomedical, and Linear tools you can drop into any agent

The package ships a set of function-calling [tools](/ai/agents/tools) you can add to an agent without writing any code. Each is a container-managed class — import it, add it to `getTools` (or pass it per request), and the agent can call it.

```typescript theme={null}
import { ExaSearchTool } from "@ooneex/ai/tools/ExaSearchTool";

@decorator.chat()
class ResearchChat extends Chat {
  public getModel = (): string => "anthropic/claude-sonnet-4.5";
  public getSystemPrompts = (): string[] => ["You research topics on the web."];
  public getTools = (): AiToolClassType[] => [ExaSearchTool];
  public getMiddlewares = (): AiMiddlewareClassType[] => [];
}
```

Each tool is imported from its own subpath — `@ooneex/ai/tools/<ToolName>` — so you only pull in the SDK a tool needs when you use it. API keys are read from the environment (via [`AppEnv`](/getting-started/configuration)) and clients are created lazily on first call, so registering a tool never requires its key.

## Web search

| Tool                   | Name                | What it searches                             | Key                                                        |
| ---------------------- | ------------------- | -------------------------------------------- | ---------------------------------------------------------- |
| `ExaSearchTool`        | `exa_web_search`    | The web via Exa, with highlighted snippets.  | `SEARCH_EXA_API_KEY`                                       |
| `FirecrawlSearchTool`  | `firecrawl_search`  | Web, news, and images via Firecrawl.         | `SEARCH_FIRECRAWL_API_KEY`                                 |
| `BrightDataSearchTool` | `brightdata_search` | Google organic results via Bright Data SERP. | `SEARCH_BRIGHTDATA_API_KEY`, `SEARCH_BRIGHTDATA_SERP_ZONE` |

**`ExaSearchTool`** returns the most relevant pages with title, URL, published date, author, relevance score, and highlighted snippets. The model can bias the search by `type` (`auto`, `fast`, `deep`, …), `category` (e.g. `research paper`, `news`), or include/exclude specific domains.

**`FirecrawlSearchTool`** returns pages, news, and images with URL, title, description, and — for news and images — date and image URL. The model can restrict the `sources`, filter domains, or localize by `location`.

**`BrightDataSearchTool`** returns the top Google organic results with title, URL, description, and rank, optionally localized by `country` and `language`.

## Knowledge sources

| Tool                  | Name               | What it searches                 | Key                                  |
| --------------------- | ------------------ | -------------------------------- | ------------------------------------ |
| `WikipediaSearchTool` | `wikipedia_search` | Wikipedia encyclopedia articles. | —                                    |
| `PubMedSearchTool`    | `pubmed_search`    | PubMed biomedical literature.    | `SEARCH_PUBMED_API_KEY` *(optional)* |

**`WikipediaSearchTool`** returns the most relevant articles with title, a plain-text snippet, word count, and URL. The model can pick a language edition (e.g. `en`, `fr`). No API key is required.

**`PubMedSearchTool`** accepts PubMed query syntax (field tags, boolean operators) and returns articles with PMID, title, authors, journal, publication date, DOI, and PubMed URL, sorted by relevance or publication date. A key raises the rate limit but is optional.

## Linear

Tools for reading and managing [Linear](https://linear.app) issues. They use the configured `@ooneex/linear` client.

| Tool                    | Name                  | Action                                                     |
| ----------------------- | --------------------- | ---------------------------------------------------------- |
| `LinearSearchTool`      | `linear_search`       | Search issues by free text across titles and descriptions. |
| `LinearIssueCreateTool` | `linear_issue_create` | Create an issue (requires a title and `teamId`).           |
| `LinearIssueUpdateTool` | `linear_issue_update` | Update an existing issue; only provided fields change.     |
| `LinearIssueDeleteTool` | `linear_issue_delete` | Delete an issue by id.                                     |

`LinearSearchTool` returns each matching issue's identifier, title, status, assignee, and labels. The create and update tools accept a description, assignee, project, priority (`0`=none, `1`=urgent, `2`=high, `3`=normal, `4`=low), workflow state, and labels, and return the resulting issue.

<Warning>
  `LinearIssueDeleteTool` is irreversible. Its description tells the model to call it only when a user has clearly asked to delete an issue — pair it with a tool [`onBeforeCall`](/ai/agents/tools#onbeforecall) hook or a permission check if you expose it in an agent that acts autonomously.
</Warning>

## Combining tools

An agent can hold any mix of built-in and custom tools — the model picks the right one per step:

```typescript theme={null}
import { ExaSearchTool } from "@ooneex/ai/tools/ExaSearchTool";
import { WikipediaSearchTool } from "@ooneex/ai/tools/WikipediaSearchTool";
import { LinearIssueCreateTool } from "@ooneex/ai/tools/LinearIssueCreateTool";

public getTools = (): AiToolClassType[] => [
  ExaSearchTool,
  WikipediaSearchTool,
  LinearIssueCreateTool,
];
```

To build your own, see [Tools](/ai/agents/tools).
