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

<AgentInstructions>

## Submitting Feedback

If you encounter incorrect, outdated, or confusing documentation on this page, submit feedback:

POST https://mcp-use.com/docs/feedback

```json
{
  "path": "/python/api-reference/mcp_use_agents_managers_base",
  "feedback": "Description of the issue"
}
```

Only submit feedback when you have something specific and actionable to report.

</AgentInstructions>

# Base

> Base 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/base.py" target="_blank" rel="noopener noreferrer">[https://github.com/mcp-use/mcp-use/blob/main/libraries/python/mcp\_use/agents/managers/base.py](https://github.com/mcp-use/mcp-use/blob/main/libraries/python/mcp_use/agents/managers/base.py)</a>
</Callout>

## BaseServerManager

<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> BaseServerManager</div>

      Abstract base class for server managers.

      This class defines the interface for server managers that can be used with MCPAgent.
      Custom server managers should inherit from this class and implement the required methods.
    </div>
  </RandomGradientBackground>

  ```python theme={null}
  from mcp_use.agents.managers.base import BaseServerManager
  ```

  <Card type="info">
    ### `method` has\_tool\_changes

    Check if the available tools have changed.

    **Parameters**

    > <ParamField body="current_tool_names" type="set[str]" required="True">   Set of currently known tool names </ParamField>

    **Returns**

    > <ResponseField name="returns" type="bool">True if tools have changed, False otherwise</ResponseField>

    **Signature**

    ```python wrap theme={null}
    def has_tool_changes(current_tool_names: set[str]):
    ```
  </Card>

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

    Initialize the server manager.

    **Signature**

    ```python wrap theme={null}
    def initialize():
    ```
  </Card>

  <Card type="info">
    ### `property` tools

    Get all server management tools and tools from the active server.

    **Returns**

    >     <ResponseField name="returns" type="list[langchain_core.tools.base.BaseTool]" />

    **Signature**

    ```python wrap theme={null}
    def tools():
    ```
  </Card>
</div>
