> ## 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_server_middleware_server_session",
  "feedback": "Description of the issue"
}
```

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

</AgentInstructions>

# Server Session

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

## MiddlewareServerSession

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

      Extended ServerSession that routes initialize requests through middleware.

      This class intercepts the MCP initialize handshake at the protocol layer,
      allowing middleware to:

      * Validate client capabilities or metadata during connection
      * Log connection attempts and protocol versions
      * Reject connections early based on initialization parameters

      It also tracks all active sessions so the server can broadcast notifications
      (e.g., `notifications/resources/updated`) to all connected clients.

      The class is injected via monkey-patching of `mcp.server.session.ServerSession`
      to intercept session creation within the MCP SDK.

      Note:
      This implementation uses class attributes for middleware injection,
      which means only ONE MCPServer instance is supported per process.
      This is compatible with standard deployment patterns (e.g., uvicorn workers
      run in separate processes), but multiple MCPServer instances in the
      same process will share/override each other's middleware configuration.

      Attributes:
      \_middleware\_manager: The middleware manager to process initialize requests.
      Injected by MCPServer during initialization.
      \_transport\_type: The transport type (e.g., "stdio", "streamable-http").
      Injected by MCPServer during initialization.
      \_active\_sessions: Weak set of all active sessions for broadcasting notifications.
    </div>
  </RandomGradientBackground>

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

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