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
2 changed files with 210 additions and 212 deletions

View file

@ -2,8 +2,9 @@ from unittest.mock import AsyncMock, MagicMock
import pytest
from mcp.server.context import ServerRequestContext
from mcp.server.experimental.request_context import Experimental
from mcp.server.mcpserver import Context
from mcp.shared.context import RequestContext
pytestmark = pytest.mark.anyio
@ -16,11 +17,12 @@ async def test_progress_token_zero_first_call():
mock_session.send_progress_notification = AsyncMock()
# Create request context with progress token 0
request_context = RequestContext(
request_context = ServerRequestContext(
request_id="test-request",
session=mock_session,
meta={"progress_token": 0},
lifespan_context=None,
experimental=Experimental(),
)
# Create context with our mocks

View file

@ -3,7 +3,6 @@ from contextlib import asynccontextmanager
from dataclasses import dataclass
from mcp.server.mcpserver import Context, MCPServer
from mcp.server.session import ServerSession
class Database: # Replace with your actual DB type
@ -45,7 +44,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: # pragma: no cover
def query_db(ctx: Context[AppContext]) -> str: # pragma: no cover
"""Tool that uses initialized resources"""
db = ctx.request_context.lifespan_context.db
return db.query()