UNPKG

@mastra/core

Version:

Mastra is a framework for building AI-powered applications and agents with a modern TypeScript stack.

109 lines (82 loc) 3.61 kB
# ToolSearchProcessor The `ToolSearchProcessor` is an **input processor** that enables dynamic tool discovery and loading. Instead of providing all tools to the agent upfront, it gives the agent two meta-tools (`search_tools` and `load_tool`) that let it find and load tools on demand. This reduces context token usage when working with large tool libraries. ## Usage example ```typescript import { ToolSearchProcessor } from '@mastra/core/processors' const toolSearch = new ToolSearchProcessor({ tools: { createIssue: githubTools.createIssue, sendEmail: emailTools.send, getWeather: weatherTools.forecast, // ... many more tools }, search: { topK: 5, minScore: 0.1, }, }) ``` ## Constructor parameters **options** (`ToolSearchProcessorOptions`): Configuration options for the tool search processor **options.tools** (`Record<string, Tool>`): All tools that can be searched and loaded dynamically. These tools are not immediately available to the agent — they must be discovered via search and loaded on demand. **options.search** (`{ topK?: number; minScore?: number }`): Configuration for the search behavior. **options.search.topK** (`number`): Maximum number of tools to return in search results. **options.search.minScore** (`number`): Minimum relevance score (0-1) for including a tool in search results. **options.ttl** (`number`): Time-to-live for thread state in milliseconds. After this duration of inactivity, thread state will be cleaned up. Set to 0 to disable cleanup. ## Returns **id** (`string`): Processor identifier set to 'tool-search' **name** (`string`): Processor display name set to 'Tool Search Processor' **processInputStep** (`(args: ProcessInputStepArgs) => Promise<ProcessInputStepResult>`): Processes each step to inject search/load meta-tools and any previously loaded tools into the agent's tool set. ## Extended usage example ```typescript import { Agent } from '@mastra/core/agent' import { ToolSearchProcessor } from '@mastra/core/processors' // Tools from various integrations import { githubTools } from './tools/github' import { slackTools } from './tools/slack' import { dbTools } from './tools/database' const toolSearch = new ToolSearchProcessor({ tools: { ...githubTools, // createIssue, listPRs, mergePR, ... ...slackTools, // sendMessage, createChannel, ... ...dbTools, // query, insert, update, ... }, search: { topK: 5, minScore: 0.1, }, }) const agent = new Agent({ name: 'dynamic-tools-agent', instructions: 'You are a helpful assistant with access to many tools. Use search_tools to find relevant tools, then load_tool to make them available.', model: 'openai/gpt-5.4', inputProcessors: [toolSearch], }) ``` The agent workflow is: 1. Agent receives a user message 2. Agent calls `search_tools` with keywords (e.g., "github issue") 3. Agent reviews results and calls `load_tool` with the tool name 4. The loaded tool becomes available on the next turn 5. Agent uses the loaded tool normally ## Combining with other processors ```typescript import { Agent } from '@mastra/core/agent' import { ToolSearchProcessor, TokenLimiter } from '@mastra/core/processors' const agent = new Agent({ name: 'my-agent', model: 'openai/gpt-5.4', inputProcessors: [ new ToolSearchProcessor({ tools: allTools, search: { topK: 5 }, }), // Place TokenLimiter last to ensure context fits new TokenLimiter(127000), ], }) ``` ## Related - [Processors](https://mastra.ai/docs/agents/processors) - [Using Tools](https://mastra.ai/docs/agents/using-tools)