Skip to content

Commit 9ac97e8

Browse files
committed
Pass initialization options from run to a server session
1 parent 77ad8f2 commit 9ac97e8

File tree

1 file changed

+17
-3
lines changed

1 file changed

+17
-3
lines changed

mcp_python/server/__init__.py

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from pydantic import AnyUrl
99

1010
from mcp_python.server import types
11-
from mcp_python.server.session import ServerSession
11+
from mcp_python.server.session import InitializationOptions, ServerSession
1212
from mcp_python.server.stdio import stdio_server as stdio_server
1313
from mcp_python.shared.context import RequestContext
1414
from mcp_python.shared.session import RequestResponder
@@ -32,6 +32,7 @@
3232
ReadResourceResult,
3333
Resource,
3434
ResourceReference,
35+
ServerCapabilities,
3536
ServerResult,
3637
SetLevelRequest,
3738
SubscribeRequest,
@@ -40,7 +41,6 @@
4041

4142
logger = logging.getLogger(__name__)
4243

43-
4444
request_ctx: contextvars.ContextVar[RequestContext] = contextvars.ContextVar(
4545
"request_ctx"
4646
)
@@ -276,13 +276,27 @@ async def handler(req: CompleteRequest):
276276

277277
return decorator
278278

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+
279292
async def run(
280293
self,
281294
read_stream: MemoryObjectReceiveStream[JSONRPCMessage | Exception],
282295
write_stream: MemoryObjectSendStream[JSONRPCMessage],
296+
initialization_options: InitializationOptions
283297
):
284298
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:
286300
async for message in session.incoming_messages:
287301
logger.debug(f"Received message: {message}")
288302

0 commit comments

Comments
 (0)