Files
mcp-use__mcp-use/docs/python/api-reference/mcp_use_server_middleware_middleware.mdx
pietrozullo ad42b4bb3e docs: noindex auto-generated Python API reference instead of searchable flag
The searchable: false approach on the API Reference tab was inert on
visible tabs. Switch to per-page noindex: true frontmatter, which keeps
pages in the sidebar but excludes them from search indexing (search
engines, internal docs search, and AI context) so generic queries like
"CLI" surface curated guides instead of the generated reference.

Applied to all 73 existing reference pages and emitted by the generator
on every regeneration.

Closes MCP-2398
2026-06-29 10:23:42 +02:00

519 lines
14 KiB
Plaintext

---
title: "Middleware"
description: "Middleware API Documentation"
icon: "code"
github: "https://github.com/mcp-use/mcp-use/blob/main/libraries/python/mcp_use/server/middleware/middleware.py"
noindex: true
---
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/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</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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
from mcp_use.server.middleware.middleware import MiddlewareManager
```
<Card type="info">
### `method` __init__
**Signature**
```python wrap
def __init__():
```
</Card>
<Card type="info">
### `method` add_middleware
**Parameters**
><ParamField body="middleware" type="Middleware" required="True" > Middleware instance </ParamField>
**Signature**
```python wrap
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
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
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
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
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
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
def __init__(result: R | None = None, error: Exception | None = None, metadata: dict[str, Any] = <factory>):
```
</Card>
</div>