Merge pull request #303 from jlowin/context

get_starlette_request → get_http_request
This commit is contained in:
Jeremiah Lowin 2025-05-02 17:37:30 -04:00 committed by GitHub
commit 5b6bec6245
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 11 additions and 5 deletions

View file

@ -253,7 +253,9 @@ async def request_info(ctx: Context) -> dict:
### Advanced Access
For advanced use cases, you can access the underlying MCP session and FastMCP server.
For advanced use cases, you can access the underlying MCP session, FastMCP server, and HTTP requests.
#### Accessing FastMCP and Sessions
```python
@mcp.tool()
@ -269,13 +271,17 @@ async def advanced_tool(ctx: Context) -> str:
return f"Server: {server_name}"
```
#### Accessing HTTP Requests
<VersionBadge version="2.2.7" />
For web applications, you can access the underlying HTTP request:
```python
@mcp.tool()
async def handle_web_request(ctx: Context) -> dict:
"""Access HTTP request information from the Starlette request."""
request = ctx.get_starlette_request()
request = ctx.get_http_request()
# Access HTTP headers, query parameters, etc.
user_agent = request.headers.get("user-agent", "Unknown")
@ -288,12 +294,12 @@ async def handle_web_request(ctx: Context) -> dict:
}
```
**Advanced Properties:**
#### Advanced Properties Reference
- **`ctx.fastmcp -> FastMCP`**: Access the server instance the context belongs to
- **`ctx.session`**: Access the raw `mcp.server.session.ServerSession` object
- **`ctx.request_context`**: Access the raw `mcp.shared.context.RequestContext` object
- **`ctx.get_starlette_request() -> Request`**: Access the active Starlette request object (when running with a web server)
- **`ctx.get_http_request() -> Request`**: Access the active Starlette request object (when running with a web server)
<Warning>
Direct use of `session` or `request_context` requires understanding the low-level MCP Python SDK and may be less stable than using the methods provided directly on the `Context` object.

View file

@ -227,7 +227,7 @@ class Context(BaseModel, Generic[ServerSessionT, LifespanContextT]):
return result.content
def get_starlette_request(self) -> Request:
def get_http_request(self) -> Request:
"""Get the active starlette request."""
request = get_current_starlette_request()
if request is None: