|
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