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

# Search Tools

> Search Tools API Documentation

export const RandomGradientBackground = ({className, color, children, grayscaled = false}) => {
  const saturation = useMemo(() => {
    if (color) {
      const values = color.split("(")[1].split(")")[0].trim().split(/\s+/);
      return parseFloat(values[1] || "0");
    }
    return grayscaled ? 0 : 0.2;
  }, [color, grayscaled]);
  const lightness = useMemo(() => {
    if (color) {
      const values = color.split("(")[1].split(")")[0].trim().split(/\s+/);
      return parseFloat(values[0] || "0.5");
    }
    return grayscaled ? 0.3 : 0.4;
  }, [color, grayscaled]);
  const randomHue = useMemo(() => {
    if (color) {
      const values = color.split("(")[1].split(")")[0].trim().split(/\s+/);
      return parseFloat(values[2] || "0");
    }
    return Math.floor(Math.random() * 360);
  }, [color]);
  const randomColor = useMemo(() => {
    if (color) {
      return color;
    }
    return `oklch(${Math.min(lightness, 1)} ${saturation} ${randomHue})`;
  }, [randomHue, saturation, lightness]);
  const lightColor = useMemo(() => {
    return `oklch(${Math.min(lightness * 2, 1)} ${saturation} ${randomHue})`;
  }, [randomHue, saturation, lightness, color]);
  const direction = useMemo(() => {
    return Math.floor(Math.random() * 360);
  }, [randomHue]);
  const brightnessFilter = useMemo(() => {
    return "1000%";
  }, []);
  return <div className={`relative overflow-hidden ${className || ""}`} style={{
    background: `${lightColor}`,
    minHeight: '100%',
    width: '100%'
  }}>
      <div className="absolute inset-0 w-full h-full" style={{
    background: `linear-gradient(${direction}deg, ${randomColor}, transparent), url(https://grainy-gradients.vercel.app/noise.svg)`,
    filter: `contrast(120%) brightness(${brightnessFilter})`,
    backgroundSize: 'cover',
    backgroundRepeat: 'no-repeat'
  }} />
      {children && <div className="relative z-10 w-full h-full">{children}</div>}
    </div>;
};

<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](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 theme={null}
  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 theme={null}
    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 theme={null}
  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 theme={null}
    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 theme={null}
    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 theme={null}
    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 theme={null}
    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 theme={null}
    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 theme={null}
  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 theme={null}
    def __init__(data: Any):
    ```
  </Card>
</div>
