mirror of
https://github.com/PrefectHQ/fastmcp.git
synced 2026-08-09 15:19:10 +02:00
340 lines
12 KiB
Text
340 lines
12 KiB
Text
---
|
|
title: context
|
|
sidebarTitle: context
|
|
---
|
|
|
|
# `fastmcp.server.context`
|
|
|
|
## Functions
|
|
|
|
### `set_context` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L64" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
set_context(context: Context) -> Generator[Context, None, None]
|
|
```
|
|
|
|
## Classes
|
|
|
|
### `LogData` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L52" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
|
|
Data object for passing log arguments to client-side handlers.
|
|
|
|
This provides an interface to match the Python standard library logging,
|
|
for compatibility with structured logging.
|
|
|
|
|
|
### `Context` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L73" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
|
|
Context object providing access to MCP capabilities.
|
|
|
|
This provides a cleaner interface to MCP's RequestContext functionality.
|
|
It gets injected into tool and resource functions that request it via type hints.
|
|
|
|
To use context in a tool function, add a parameter with the Context type annotation:
|
|
|
|
```python
|
|
@server.tool
|
|
def my_tool(x: int, ctx: Context) -> str:
|
|
# Log messages to the client
|
|
ctx.info(f"Processing {x}")
|
|
ctx.debug("Debug info")
|
|
ctx.warning("Warning message")
|
|
ctx.error("Error message")
|
|
|
|
# Report progress
|
|
ctx.report_progress(50, 100, "Processing")
|
|
|
|
# Access resources
|
|
data = ctx.read_resource("resource://data")
|
|
|
|
# Get request info
|
|
request_id = ctx.request_id
|
|
client_id = ctx.client_id
|
|
|
|
# Manage state across the request
|
|
ctx.set_state("key", "value")
|
|
value = ctx.get_state("key")
|
|
|
|
return str(x)
|
|
```
|
|
|
|
State Management:
|
|
Context objects maintain a state dictionary that can be used to store and share
|
|
data across middleware and tool calls within a request. When a new context
|
|
is created (nested contexts), it inherits a copy of its parent's state, ensuring
|
|
that modifications in child contexts don't affect parent contexts.
|
|
|
|
The context parameter name can be anything as long as it's annotated with Context.
|
|
The context is optional - tools that don't need it can omit the parameter.
|
|
|
|
|
|
**Methods:**
|
|
|
|
#### `fastmcp` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L125" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
fastmcp(self) -> FastMCP
|
|
```
|
|
|
|
Get the FastMCP instance.
|
|
|
|
|
|
#### `request_context` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L154" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
request_context(self) -> RequestContext[ServerSession, Any, Request]
|
|
```
|
|
|
|
Access to the underlying request context.
|
|
|
|
If called outside of a request context, this will raise a ValueError.
|
|
|
|
|
|
#### `report_progress` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L164" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
report_progress(self, progress: float, total: float | None = None, message: str | None = None) -> None
|
|
```
|
|
|
|
Report progress for the current operation.
|
|
|
|
**Args:**
|
|
- `progress`: Current progress value e.g. 24
|
|
- `total`: Optional total value e.g. 100
|
|
|
|
|
|
#### `read_resource` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L191" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
read_resource(self, uri: str | AnyUrl) -> list[ReadResourceContents]
|
|
```
|
|
|
|
Read a resource by URI.
|
|
|
|
**Args:**
|
|
- `uri`: Resource URI to read
|
|
|
|
**Returns:**
|
|
- The resource content as either text or bytes
|
|
|
|
|
|
#### `log` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L204" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
log(self, message: str, level: LoggingLevel | None = None, logger_name: str | None = None, extra: Mapping[str, Any] | None = None) -> None
|
|
```
|
|
|
|
Send a log message to the client.
|
|
|
|
**Args:**
|
|
- `message`: Log message
|
|
- `level`: Optional log level. One of "debug", "info", "notice", "warning", "error", "critical",
|
|
"alert", or "emergency". Default is "info".
|
|
- `logger_name`: Optional logger name
|
|
- `extra`: Optional mapping for additional arguments
|
|
|
|
|
|
#### `client_id` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L231" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
client_id(self) -> str | None
|
|
```
|
|
|
|
Get the client ID if available.
|
|
|
|
|
|
#### `request_id` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L240" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
request_id(self) -> str
|
|
```
|
|
|
|
Get the unique ID for this request.
|
|
|
|
|
|
#### `session_id` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L245" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
session_id(self) -> str
|
|
```
|
|
|
|
Get the MCP session ID for ALL transports.
|
|
|
|
Returns the session ID that can be used as a key for session-based
|
|
data storage (e.g., Redis) to share data between tool calls within
|
|
the same client session.
|
|
|
|
**Returns:**
|
|
- The session ID for StreamableHTTP transports, or a generated ID
|
|
- for other transports.
|
|
|
|
|
|
#### `session` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L289" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
session(self) -> ServerSession
|
|
```
|
|
|
|
Access to the underlying session for advanced usage.
|
|
|
|
|
|
#### `debug` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L294" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
debug(self, message: str, logger_name: str | None = None, extra: Mapping[str, Any] | None = None) -> None
|
|
```
|
|
|
|
Send a debug log message.
|
|
|
|
|
|
#### `info` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L305" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
info(self, message: str, logger_name: str | None = None, extra: Mapping[str, Any] | None = None) -> None
|
|
```
|
|
|
|
Send an info log message.
|
|
|
|
|
|
#### `warning` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L316" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
warning(self, message: str, logger_name: str | None = None, extra: Mapping[str, Any] | None = None) -> None
|
|
```
|
|
|
|
Send a warning log message.
|
|
|
|
|
|
#### `error` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L327" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
error(self, message: str, logger_name: str | None = None, extra: Mapping[str, Any] | None = None) -> None
|
|
```
|
|
|
|
Send an error log message.
|
|
|
|
|
|
#### `list_roots` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L338" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
list_roots(self) -> list[Root]
|
|
```
|
|
|
|
List the roots available to the server, as indicated by the client.
|
|
|
|
|
|
#### `send_tool_list_changed` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L343" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
send_tool_list_changed(self) -> None
|
|
```
|
|
|
|
Send a tool list changed notification to the client.
|
|
|
|
|
|
#### `send_resource_list_changed` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L347" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
send_resource_list_changed(self) -> None
|
|
```
|
|
|
|
Send a resource list changed notification to the client.
|
|
|
|
|
|
#### `send_prompt_list_changed` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L351" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
send_prompt_list_changed(self) -> None
|
|
```
|
|
|
|
Send a prompt list changed notification to the client.
|
|
|
|
|
|
#### `sample` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L355" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
sample(self, messages: str | list[str | SamplingMessage], system_prompt: str | None = None, include_context: IncludeContext | None = None, temperature: float | None = None, max_tokens: int | None = None, model_preferences: ModelPreferences | str | list[str] | None = None) -> ContentBlock
|
|
```
|
|
|
|
Send a sampling request to the client and await the response.
|
|
|
|
Call this method at any time to have the server request an LLM
|
|
completion from the client. The client must be appropriately configured,
|
|
or the request will error.
|
|
|
|
|
|
#### `elicit` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L402" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
elicit(self, message: str, response_type: None) -> AcceptedElicitation[dict[str, Any]] | DeclinedElicitation | CancelledElicitation
|
|
```
|
|
|
|
#### `elicit` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L414" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
elicit(self, message: str, response_type: type[T]) -> AcceptedElicitation[T] | DeclinedElicitation | CancelledElicitation
|
|
```
|
|
|
|
#### `elicit` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L424" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
elicit(self, message: str, response_type: list[str]) -> AcceptedElicitation[str] | DeclinedElicitation | CancelledElicitation
|
|
```
|
|
|
|
#### `elicit` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L433" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
elicit(self, message: str, response_type: type[T] | list[str] | None = None) -> AcceptedElicitation[T] | AcceptedElicitation[dict[str, Any]] | AcceptedElicitation[str] | DeclinedElicitation | CancelledElicitation
|
|
```
|
|
|
|
Send an elicitation request to the client and await the response.
|
|
|
|
Call this method at any time to request additional information from
|
|
the user through the client. The client must support elicitation,
|
|
or the request will error.
|
|
|
|
Note that the MCP protocol only supports simple object schemas with
|
|
primitive types. You can provide a dataclass, TypedDict, or BaseModel to
|
|
comply. If you provide a primitive type, an object schema with a single
|
|
"value" field will be generated for the MCP interaction and
|
|
automatically deconstructed into the primitive type upon response.
|
|
|
|
If the response_type is None, the generated schema will be that of an
|
|
empty object in order to comply with the MCP protocol requirements.
|
|
Clients must send an empty object ("{}")in response.
|
|
|
|
**Args:**
|
|
- `message`: A human-readable message explaining what information is needed
|
|
- `response_type`: The type of the response, which should be a primitive
|
|
type or dataclass or BaseModel. If it is a primitive type, an
|
|
object schema with a single "value" field will be generated.
|
|
|
|
|
|
#### `get_http_request` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L526" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
get_http_request(self) -> Request
|
|
```
|
|
|
|
Get the active starlette request.
|
|
|
|
|
|
#### `set_state` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L541" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
set_state(self, key: str, value: Any) -> None
|
|
```
|
|
|
|
Set a value in the context state.
|
|
|
|
|
|
#### `get_state` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/context.py#L545" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
get_state(self, key: str) -> Any
|
|
```
|
|
|
|
Get a value from the context state. Returns None if the key is not found.
|
|
|