> ## 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.

# Middleware

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

## CallNext

<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> CallNext</div>
    </div>
  </RandomGradientBackground>

  ```python theme={null}
  from mcp_use.server.middleware.middleware import CallNext
  ```

  <Card type="info">
    ### `method` **init**

    **Parameters**

    > <ParamField body="args" required="True">   Parameter value </ParamField>
    > <ParamField body="kwargs" required="True">   Parameter value </ParamField>

    **Signature**

    ```python wrap theme={null}
    def __init__(args, kwargs):
    ```
  </Card>

  <Card type="info">
    ### `method` **call**

    **Parameters**

    > <ParamField body="context" type="ServerMiddlewareContext[T]" required="True">   Parameter value </ParamField>

    **Returns**

    >     <ResponseField name="returns" type="Awaitable[R]" />

    **Signature**

    ```python wrap theme={null}
    def __call__(context: ServerMiddlewareContext[T]):
    ```
  </Card>
</div>

## Middleware

<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> Middleware</div>
    </div>
  </RandomGradientBackground>

  ```python theme={null}
  from mcp_use.server.middleware.middleware import Middleware
  ```

  <Card type="info">
    ### `method` **call**

    **Parameters**

    > <ParamField body="context" type="ServerMiddlewareContext[T]" required="True">   Parameter value </ParamField>
    > <ParamField body="call_next" type="CallNext[T, Any]" required="True">   Parameter value </ParamField>

    **Returns**

    >     <ResponseField name="returns" type="Any" />

    **Signature**

    ```python wrap theme={null}
    def __call__(context: ServerMiddlewareContext[T], call_next: CallNext[T, Any]):
    ```
  </Card>

  <Card type="info">
    ### `method` on\_call\_tool

    **Parameters**

    > <ParamField body="context" type="ServerMiddlewareContext[CallToolRequestParams]" required="True">   Parameter value </ParamField>
    > <ParamField body="call_next" type="CallNext[CallToolRequestParams, Any]" required="True">   Parameter value </ParamField>

    **Returns**

    >     <ResponseField name="returns" type="Any" />

    **Signature**

    ```python wrap theme={null}
    def on_call_tool(
    context: ServerMiddlewareContext[CallToolRequestParams],
        call_next: CallNext[CallToolRequestParams,
        Any]
    ):
    ```
  </Card>

  <Card type="info">
    ### `method` on\_complete

    **Parameters**

    > <ParamField body="context" type="ServerMiddlewareContext[CompleteRequestParams]" required="True">   Parameter value </ParamField>
    > <ParamField body="call_next" type="CallNext[CompleteRequestParams, Any]" required="True">   Parameter value </ParamField>

    **Returns**

    >     <ResponseField name="returns" type="Any" />

    **Signature**

    ```python wrap theme={null}
    def on_complete(
    context: ServerMiddlewareContext[CompleteRequestParams],
        call_next: CallNext[CompleteRequestParams,
        Any]
    ):
    ```
  </Card>

  <Card type="info">
    ### `method` on\_get\_prompt

    **Parameters**

    > <ParamField body="context" type="ServerMiddlewareContext[GetPromptRequestParams]" required="True">   Parameter value </ParamField>
    > <ParamField body="call_next" type="CallNext[GetPromptRequestParams, Any]" required="True">   Parameter value </ParamField>

    **Returns**

    >     <ResponseField name="returns" type="Any" />

    **Signature**

    ```python wrap theme={null}
    def on_get_prompt(
    context: ServerMiddlewareContext[GetPromptRequestParams],
        call_next: CallNext[GetPromptRequestParams,
        Any]
    ):
    ```
  </Card>

  <Card type="info">
    ### `method` on\_initialize

    **Parameters**

    > <ParamField body="context" type="ServerMiddlewareContext[InitializeRequestParams]" required="True">   Parameter value </ParamField>
    > <ParamField body="call_next" type="CallNext[InitializeRequestParams, Any]" required="True">   Parameter value </ParamField>

    **Returns**

    >     <ResponseField name="returns" type="Any" />

    **Signature**

    ```python wrap theme={null}
    def on_initialize(
    context: ServerMiddlewareContext[InitializeRequestParams],
        call_next: CallNext[InitializeRequestParams,
        Any]
    ):
    ```
  </Card>

  <Card type="info">
    ### `method` on\_list\_prompts

    **Parameters**

    > <ParamField body="context" type="ServerMiddlewareContext[PaginatedRequestParams | None]" required="True">   Parameter value </ParamField>
    > <ParamField body="call_next" type="CallNext[PaginatedRequestParams | None, Any]" required="True">   Parameter value </ParamField>

    **Returns**

    >     <ResponseField name="returns" type="Any" />

    **Signature**

    ```python wrap theme={null}
    def on_list_prompts(
    context: ServerMiddlewareContext[PaginatedRequestParams | None],
        call_next: CallNext[PaginatedRequestParams | None,
        Any]
    ):
    ```
  </Card>

  <Card type="info">
    ### `method` on\_list\_resources

    **Parameters**

    > <ParamField body="context" type="ServerMiddlewareContext[PaginatedRequestParams | None]" required="True">   Parameter value </ParamField>
    > <ParamField body="call_next" type="CallNext[PaginatedRequestParams | None, Any]" required="True">   Parameter value </ParamField>

    **Returns**

    >     <ResponseField name="returns" type="Any" />

    **Signature**

    ```python wrap theme={null}
    def on_list_resources(
    context: ServerMiddlewareContext[PaginatedRequestParams | None],
        call_next: CallNext[PaginatedRequestParams | None,
        Any]
    ):
    ```
  </Card>

  <Card type="info">
    ### `method` on\_list\_tools

    **Parameters**

    > <ParamField body="context" type="ServerMiddlewareContext[PaginatedRequestParams | None]" required="True">   Parameter value </ParamField>
    > <ParamField body="call_next" type="CallNext[PaginatedRequestParams | None, Any]" required="True">   Parameter value </ParamField>

    **Returns**

    >     <ResponseField name="returns" type="Any" />

    **Signature**

    ```python wrap theme={null}
    def on_list_tools(
    context: ServerMiddlewareContext[PaginatedRequestParams | None],
        call_next: CallNext[PaginatedRequestParams | None,
        Any]
    ):
    ```
  </Card>

  <Card type="info">
    ### `method` on\_read\_resource

    **Parameters**

    > <ParamField body="context" type="ServerMiddlewareContext[ReadResourceRequestParams]" required="True">   Parameter value </ParamField>
    > <ParamField body="call_next" type="CallNext[ReadResourceRequestParams, Any]" required="True">   Parameter value </ParamField>

    **Returns**

    >     <ResponseField name="returns" type="Any" />

    **Signature**

    ```python wrap theme={null}
    def on_read_resource(
    context: ServerMiddlewareContext[ReadResourceRequestParams],
        call_next: CallNext[ReadResourceRequestParams,
        Any]
    ):
    ```
  </Card>

  <Card type="info">
    ### `method` on\_request

    **Parameters**

    > <ParamField body="context" type="ServerMiddlewareContext[Any]" required="True">   Parameter value </ParamField>
    > <ParamField body="call_next" type="CallNext[Any, Any]" required="True">   Parameter value </ParamField>

    **Returns**

    >     <ResponseField name="returns" type="Any" />

    **Signature**

    ```python wrap theme={null}
    def on_request(context: ServerMiddlewareContext[Any], call_next: CallNext[Any, Any]):
    ```
  </Card>

  <Card type="info">
    ### `method` on\_set\_logging\_level

    **Parameters**

    > <ParamField body="context" type="ServerMiddlewareContext[SetLevelRequestParams]" required="True">   Parameter value </ParamField>
    > <ParamField body="call_next" type="CallNext[SetLevelRequestParams, Any]" required="True">   Parameter value </ParamField>

    **Returns**

    >     <ResponseField name="returns" type="Any" />

    **Signature**

    ```python wrap theme={null}
    def on_set_logging_level(
    context: ServerMiddlewareContext[SetLevelRequestParams],
        call_next: CallNext[SetLevelRequestParams,
        Any]
    ):
    ```
  </Card>

  <Card type="info">
    ### `method` on\_subscribe\_resource

    **Parameters**

    > <ParamField body="context" type="ServerMiddlewareContext[SubscribeRequestParams]" required="True">   Parameter value </ParamField>
    > <ParamField body="call_next" type="CallNext[SubscribeRequestParams, Any]" required="True">   Parameter value </ParamField>

    **Returns**

    >     <ResponseField name="returns" type="Any" />

    **Signature**

    ```python wrap theme={null}
    def on_subscribe_resource(
    context: ServerMiddlewareContext[SubscribeRequestParams],
        call_next: CallNext[SubscribeRequestParams,
        Any]
    ):
    ```
  </Card>

  <Card type="info">
    ### `method` on\_unsubscribe\_resource

    **Parameters**

    > <ParamField body="context" type="ServerMiddlewareContext[UnsubscribeRequestParams]" required="True">   Parameter value </ParamField>
    > <ParamField body="call_next" type="CallNext[UnsubscribeRequestParams, Any]" required="True">   Parameter value </ParamField>

    **Returns**

    >     <ResponseField name="returns" type="Any" />

    **Signature**

    ```python wrap theme={null}
    def on_unsubscribe_resource(
    context: ServerMiddlewareContext[UnsubscribeRequestParams],
        call_next: CallNext[UnsubscribeRequestParams,
        Any]
    ):
    ```
  </Card>
</div>

## MiddlewareManager

<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> MiddlewareManager</div>
    </div>
  </RandomGradientBackground>

  ```python theme={null}
  from mcp_use.server.middleware.middleware import MiddlewareManager
  ```

  <Card type="info">
    ### `method` **init**

    **Signature**

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

  <Card type="info">
    ### `method` add\_middleware

    **Parameters**

    > <ParamField body="middleware" type="Middleware" required="True">   Middleware instance </ParamField>

    **Signature**

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

  <Card type="info">
    ### `method` process\_request

    **Parameters**

    > <ParamField body="context" type="ServerMiddlewareContext[Any]" required="True">   Parameter value </ParamField>
    > <ParamField body="handler" type="Callable[[ServerMiddlewareContext[Any]], Awaitable[Any]]" required="True">   Parameter value </ParamField>

    **Returns**

    >     <ResponseField name="returns" type="Any" />

    **Signature**

    ```python wrap theme={null}
    def process_request(
    context: ServerMiddlewareContext[Any],
        handler: Callable[[ServerMiddlewareContext[Any]],
        Awaitable[Any]]
    ):
    ```
  </Card>
</div>

## ServerMiddlewareContext

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

      Immutable context passed through server middleware pipeline.
    </div>
  </RandomGradientBackground>

  ```python theme={null}
  from mcp_use.server.middleware.middleware import ServerMiddlewareContext
  ```

  <Card type="info">
    **Attributes**

    >

    <ParamField body="message" type="T" required="True">   Parameter value </ParamField>
    <ParamField body="method" type="str" required="True">   String value </ParamField>
    <ParamField body="timestamp" type="datetime" required="True">   Parameter value </ParamField>
    <ParamField body="transport" type="str" required="True">   String value </ParamField>
    <ParamField body="session_id" type="str | None" required="True">   MCP session instance </ParamField>
    <ParamField body="headers" type="dict[str, str] | None" required="True">   Dictionary of key-value pairs </ParamField>
    <ParamField body="client_ip" type="str | None" required="True">   MCP client instance </ParamField>
    <ParamField body="metadata" type="dict[str, Any]" required="True">   Dictionary of key-value pairs </ParamField>
  </Card>

  <Card type="info">
    ### `method` **init**

    **Parameters**

    > <ParamField body="message" type="T" required="True">   Parameter value </ParamField>
    > <ParamField body="method" type="str" required="True">   String value </ParamField>
    > <ParamField body="timestamp" type="datetime" required="True">   Parameter value </ParamField>
    > <ParamField body="transport" type="str" required="True">   String value </ParamField>
    > <ParamField body="session_id" type="str | None" default="None">   MCP session instance </ParamField>
    > <ParamField body="headers" type="dict[str, str] | None" default="None">   Dictionary of key-value pairs </ParamField>
    > <ParamField body="client_ip" type="str | None" default="None">   MCP client instance </ParamField>
    > <ParamField body="metadata" type="dict[str, Any]" default="<factory>">   Dictionary of key-value pairs </ParamField>

    **Signature**

    ```python wrap theme={null}
    def __init__(message: T, method: str, timestamp: datetime, transport: str, session_id: str | None = None, headers: dict[str, str] | None = None, client_ip: str | None = None, metadata: dict[str, Any] = <factory>):
    ```
  </Card>

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

    **Parameters**

    > <ParamField body="kwargs" type="Any" required="True">   Parameter value </ParamField>

    **Returns**

    >     <ResponseField name="returns" type="ServerMiddlewareContext[T]" />

    **Signature**

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

## ServerResponseContext

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

      Optional response wrapper for middleware outputs.
    </div>
  </RandomGradientBackground>

  ```python theme={null}
  from mcp_use.server.middleware.middleware import ServerResponseContext
  ```

  <Card type="info">
    **Attributes**

    >

    <ParamField body="result" type="R | None" required="True">   Parameter value </ParamField>
    <ParamField body="error" type="Exception | None" required="True">   Parameter value </ParamField>
    <ParamField body="metadata" type="dict[str, Any]" required="True">   Dictionary of key-value pairs </ParamField>
  </Card>

  <Card type="info">
    ### `method` **init**

    **Parameters**

    > <ParamField body="result" type="R | None" default="None">   Parameter value </ParamField>
    > <ParamField body="error" type="Exception | None" default="None">   Parameter value </ParamField>
    > <ParamField body="metadata" type="dict[str, Any]" default="<factory>">   Dictionary of key-value pairs </ParamField>

    **Signature**

    ```python wrap theme={null}
    def __init__(result: R | None = None, error: Exception | None = None, metadata: dict[str, Any] = <factory>):
    ```
  </Card>
</div>
