refactor: split RequestContext between server and client (#1987)

This commit is contained in:
Marcelo Trylesinski 2026-02-03 14:35:07 +01:00 • committed by GitHub
commit b1f7eec3cd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 210 additions and 212 deletions

View file

@ -7,7 +7,6 @@ This example demonstrates the spec-compliant polling pattern:
"""
import asyncio
from typing import Any
import click
from mcp import ClientSession
@ -24,7 +23,7 @@ from mcp.types import (
async def elicitation_callback(
context: RequestContext[ClientSession, Any],
context: RequestContext[ClientSession],
params: ElicitRequestParams,
) -> ElicitResult:
"""Handle elicitation requests from the server."""
@ -39,7 +38,7 @@ async def elicitation_callback(
async def sampling_callback(
context: RequestContext[ClientSession, Any],
context: RequestContext[ClientSession],
params: CreateMessageRequestParams,
) -> CreateMessageResult:
"""Handle sampling requests from the server."""

View file

@ -19,7 +19,7 @@ server_params = StdioServerParameters(
# Optional: create a sampling callback
async def handle_sampling_message(
context: RequestContext[ClientSession, None], params: types.CreateMessageRequestParams
context: RequestContext[ClientSession], params: types.CreateMessageRequestParams
) -> types.CreateMessageResult:
print(f"Sampling request: {params.messages}")
return types.CreateMessageResult(

View file

@ -38,7 +38,7 @@ from mcp.types import URL_ELICITATION_REQUIRED
async def handle_elicitation(
context: RequestContext[ClientSession, Any],
context: RequestContext[ClientSession],
params: types.ElicitRequestParams,
) -> types.ElicitResult | types.ErrorData:
"""Handle elicitation requests from the server.

View file

@ -5,7 +5,6 @@ from contextlib import asynccontextmanager
from dataclasses import dataclass
from mcp.server.mcpserver import Context, MCPServer
from mcp.server.session import ServerSession
# Mock database class for example
@ -51,7 +50,7 @@ mcp = MCPServer("My App", lifespan=app_lifespan)
# Access type-safe lifespan context in tools
@mcp.tool()
def query_db(ctx: Context[ServerSession, AppContext]) -> str:
def query_db(ctx: Context[AppContext]) -> str:
"""Tool that uses initialized resources."""
db = ctx.request_context.lifespan_context.db
return db.query()