|
8 | 8 | from pydantic import AnyUrl
|
9 | 9 |
|
10 | 10 | from mcp_python.server import types
|
11 |
| -from mcp_python.server.session import ServerSession |
| 11 | +from mcp_python.server.session import InitializationOptions, ServerSession |
12 | 12 | from mcp_python.server.stdio import stdio_server as stdio_server
|
13 | 13 | from mcp_python.shared.context import RequestContext
|
14 | 14 | from mcp_python.shared.session import RequestResponder
|
|
32 | 32 | ReadResourceResult,
|
33 | 33 | Resource,
|
34 | 34 | ResourceReference,
|
| 35 | + ServerCapabilities, |
35 | 36 | ServerResult,
|
36 | 37 | SetLevelRequest,
|
37 | 38 | SubscribeRequest,
|
|
40 | 41 |
|
41 | 42 | logger = logging.getLogger(__name__)
|
42 | 43 |
|
43 |
| - |
44 | 44 | request_ctx: contextvars.ContextVar[RequestContext] = contextvars.ContextVar(
|
45 | 45 | "request_ctx"
|
46 | 46 | )
|
@@ -276,13 +276,27 @@ async def handler(req: CompleteRequest):
|
276 | 276 |
|
277 | 277 | return decorator
|
278 | 278 |
|
| 279 | + def get_capabilities(self) -> ServerCapabilities: |
| 280 | + """Convert existing handlers to a ServerCapabilities object.""" |
| 281 | + capabilities: dict[str, dict[str, Any] | None] = { |
| 282 | + "prompts": {} if ListPromptsRequest in self.request_handlers else None, |
| 283 | + "resources": {} if ListResourcesRequest in self.request_handlers else None, |
| 284 | + "tools": {} if ListPromptsRequest in self.request_handlers else None, |
| 285 | + "logging": {} if SetLevelRequest in self.request_handlers else None, |
| 286 | + } |
| 287 | + |
| 288 | + capabilities = {k: v for k, v in capabilities.items() if v is not None} |
| 289 | + |
| 290 | + return ServerCapabilities(**capabilities) |
| 291 | + |
279 | 292 | async def run(
|
280 | 293 | self,
|
281 | 294 | read_stream: MemoryObjectReceiveStream[JSONRPCMessage | Exception],
|
282 | 295 | write_stream: MemoryObjectSendStream[JSONRPCMessage],
|
| 296 | + initialization_options: InitializationOptions |
283 | 297 | ):
|
284 | 298 | with warnings.catch_warnings(record=True) as w:
|
285 |
| - async with ServerSession(read_stream, write_stream) as session: |
| 299 | + async with ServerSession(read_stream, write_stream, initialization_options) as session: |
286 | 300 | async for message in session.incoming_messages:
|
287 | 301 | logger.debug(f"Received message: {message}")
|
288 | 302 |
|
|
0 commit comments