3232 ReadResourceResult ,
3333 Resource ,
3434 ResourceReference ,
35+ ServerCapabilities ,
3536 ServerResult ,
3637 SetLevelRequest ,
3738 SubscribeRequest ,
4041
4142logger = logging .getLogger (__name__ )
4243
43-
4444request_ctx : contextvars .ContextVar [RequestContext ] = contextvars .ContextVar (
4545 "request_ctx"
4646)
@@ -53,6 +53,33 @@ def __init__(self, name: str):
5353 self .notification_handlers : dict [type , Callable [..., Awaitable [None ]]] = {}
5454 logger .info (f"Initializing server '{ name } '" )
5555
56+ def create_initialization_options (self ) -> types .InitializationOptions :
57+ """Create initialization options from this server instance."""
58+ def pkg_version (package : str ) -> str :
59+ try :
60+ from importlib .metadata import version
61+ return version (package )
62+ except Exception :
63+ return "unknown"
64+
65+ return types .InitializationOptions (
66+ server_name = self .name ,
67+ server_version = pkg_version ("mcp_python" ),
68+ capabilities = self .get_capabilities (),
69+ )
70+
71+ def get_capabilities (self ) -> ServerCapabilities :
72+ """Convert existing handlers to a ServerCapabilities object."""
73+ def get_capability (req_type : type ) -> dict [str , Any ] | None :
74+ return {} if req_type in self .request_handlers else None
75+
76+ return ServerCapabilities (
77+ prompts = get_capability (ListPromptsRequest ),
78+ resources = get_capability (ListResourcesRequest ),
79+ tools = get_capability (ListPromptsRequest ),
80+ logging = get_capability (SetLevelRequest )
81+ )
82+
5683 @property
5784 def request_context (self ) -> RequestContext :
5885 """If called outside of a request context, this will raise a LookupError."""
@@ -280,9 +307,10 @@ async def run(
280307 self ,
281308 read_stream : MemoryObjectReceiveStream [JSONRPCMessage | Exception ],
282309 write_stream : MemoryObjectSendStream [JSONRPCMessage ],
310+ initialization_options : types .InitializationOptions
283311 ):
284312 with warnings .catch_warnings (record = True ) as w :
285- async with ServerSession (read_stream , write_stream ) as session :
313+ async with ServerSession (read_stream , write_stream , initialization_options ) as session :
286314 async for message in session .incoming_messages :
287315 logger .debug (f"Received message: { message } " )
288316
0 commit comments