---
title: "Search Tools"
description: "Search Tools API Documentation"
icon: "code"
github: "https://github.com/mcp-use/mcp-use/blob/main/libraries/python/mcp_use/agents/managers/tools/search_tools.py"
---

import {RandomGradientBackground} from "/snippets/gradient.jsx"

<Callout type="info" title="Source Code">
View the source code for this module on GitHub: <a href='https://github.com/mcp-use/mcp-use/blob/main/libraries/python/mcp_use/agents/managers/tools/search_tools.py' target='_blank' rel='noopener noreferrer'>https://github.com/mcp-use/mcp-use/blob/main/libraries/python/mcp_use/agents/managers/tools/search_tools.py</a>
</Callout>

## SearchToolsTool

<div>
<RandomGradientBackground className="rounded-lg p-4 w-full h-full rounded-full">
<div className="text-black">
<div className="text-black font-bold text-xl mb-2 mt-8"><code className="!text-black">class</code> SearchToolsTool</div>

Tool for searching for tools across all MCP servers using semantic search.

</div>
</RandomGradientBackground>
```python
from mcp_use.agents.managers.tools.search_tools import SearchToolsTool
```

<Card type="info">
**Attributes**
>
<ParamField body="name" type="ClassVar" required="True" >   Name identifier </ParamField>
<ParamField body="description" type="ClassVar" required="True" >   Parameter value </ParamField>
<ParamField body="args_schema" type="ClassVar" required="True" >   Parameter value </ParamField>

</Card>

<Card type="info">
### `method` __init__

Initialize with server manager and create a search tool.

**Parameters**
><ParamField body="server_manager" required="True" >   Server name or configuration </ParamField>

**Signature**
```python wrap
def __init__(server_manager):
```

</Card>
</div>

## ToolSearchEngine

<div>
<RandomGradientBackground className="rounded-lg p-4 w-full h-full rounded-full">
<div className="text-black">
<div className="text-black font-bold text-xl mb-2 mt-8"><code className="!text-black">class</code> ToolSearchEngine</div>

Provides semantic search capabilities for MCP tools.
    Uses vector similarity for semantic search with optional result caching.

</div>
</RandomGradientBackground>
```python
from mcp_use.agents.managers.tools.search_tools import ToolSearchEngine
```

<Card type="info">
### `method` __init__

Initialize the tool search engine.


**Parameters**
><ParamField body="server_manager" default="None" >   The ServerManager instance to get tools from </ParamField>
><ParamField body="use_caching" type="bool" default="True" >   Whether to cache query results </ParamField>

**Signature**
```python wrap
def __init__(server_manager = None, use_caching: bool = True):
```

</Card>
<Card type="info">
### `method` index_tools

Index all tools from all servers for search.



**Parameters**
><ParamField body="server_tools" type="dict[str, list[langchain_core.tools.base.BaseTool]]" required="True" >   dictionary mapping server names to their tools </ParamField>

**Signature**
```python wrap
def index_tools(server_tools: dict[str, list[langchain_core.tools.base.BaseTool]]):
```

</Card>

<Card type="info">
### `method` search

Search for tools that match the query using semantic search.



**Parameters**
><ParamField body="query" type="str" required="True" >   The search query </ParamField>
><ParamField body="top_k" type="int" default="5" >   Number of top results to return </ParamField>

**Returns**
><ResponseField name="returns" type="list[tuple[langchain_core.tools.base.BaseTool, str, float]]" >list of tuples containing (tool, server_name, score)</ResponseField>

**Signature**
```python wrap
def search(query: str, top_k: int = 5):
```

</Card>

<Card type="info">
### `method` search_tools

Search for tools across all MCP servers using semantic search.



**Parameters**
><ParamField body="query" type="str" required="True" >   The search query to find relevant tools </ParamField>
><ParamField body="top_k" type="int" default="100" >   Number of top results to return </ParamField>
><ParamField body="active_server" type="str" default="None" >   Name of the currently active server (for highlighting) </ParamField>

**Returns**
><ResponseField name="returns" type="str" >String with formatted search results</ResponseField>

**Signature**
```python wrap
def search_tools(query: str, top_k: int = 100, active_server: str = None):
```

</Card>

<Card type="info">
### `method` start_indexing

Index the tools from the server manager.


**Signature**
```python wrap
def start_indexing():
```

</Card>

</div>

## ToolSearchInput

<div>
<RandomGradientBackground className="rounded-lg p-4 w-full h-full rounded-full">
<div className="text-black">
<div className="text-black font-bold text-xl mb-2 mt-8"><code className="!text-black">class</code> ToolSearchInput</div>

Input for searching for tools across MCP servers

</div>
</RandomGradientBackground>
```python
from mcp_use.agents.managers.tools.search_tools import ToolSearchInput
```

<Card type="info">
**Attributes**
>
<ParamField body="query" type="str" required="True" >   Query string or input </ParamField>
<ParamField body="top_k" type="int" required="True" >   Integer value </ParamField>

</Card>

<Card type="info">
### `method` __init__

Create a new model by parsing and validating input data from keyword arguments.

        Raises [`ValidationError`][pydantic_core.ValidationError] if the input data cannot be
        validated to form a valid model.

        `self` is explicitly positional-only to allow `self` as a field name.

**Parameters**
><ParamField body="data" type="Any" required="True" >   Parameter value </ParamField>

**Signature**
```python wrap
def __init__(data: Any):
```

</Card>
</div>
