@@ -55,9 +55,11 @@ def __init__(self, name: str):
55
55
56
56
def create_initialization_options (self ) -> types .InitializationOptions :
57
57
"""Create initialization options from this server instance."""
58
+
58
59
def pkg_version (package : str ) -> str :
59
60
try :
60
61
from importlib .metadata import version
62
+
61
63
return version (package )
62
64
except Exception :
63
65
return "unknown"
@@ -69,16 +71,17 @@ def pkg_version(package: str) -> str:
69
71
)
70
72
71
73
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
74
+ """Convert existing handlers to a ServerCapabilities object."""
75
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
- )
76
+ def get_capability (req_type : type ) -> dict [str , Any ] | None :
77
+ return {} if req_type in self .request_handlers else None
78
+
79
+ return ServerCapabilities (
80
+ prompts = get_capability (ListPromptsRequest ),
81
+ resources = get_capability (ListResourcesRequest ),
82
+ tools = get_capability (ListPromptsRequest ),
83
+ logging = get_capability (SetLevelRequest ),
84
+ )
82
85
83
86
@property
84
87
def request_context (self ) -> RequestContext :
@@ -87,7 +90,7 @@ def request_context(self) -> RequestContext:
87
90
88
91
def list_prompts (self ):
89
92
def decorator (func : Callable [[], Awaitable [list [Prompt ]]]):
90
- logger .debug (f "Registering handler for PromptListRequest" )
93
+ logger .debug ("Registering handler for PromptListRequest" )
91
94
92
95
async def handler (_ : Any ):
93
96
prompts = await func ()
@@ -103,17 +106,19 @@ def get_prompt(self):
103
106
GetPromptRequest ,
104
107
GetPromptResult ,
105
108
ImageContent ,
106
- Role as Role ,
107
109
SamplingMessage ,
108
110
TextContent ,
109
111
)
112
+ from mcp_python .types import (
113
+ Role as Role ,
114
+ )
110
115
111
116
def decorator (
112
117
func : Callable [
113
118
[str , dict [str , str ] | None ], Awaitable [types .PromptResponse ]
114
119
],
115
120
):
116
- logger .debug (f "Registering handler for GetPromptRequest" )
121
+ logger .debug ("Registering handler for GetPromptRequest" )
117
122
118
123
async def handler (req : GetPromptRequest ):
119
124
prompt_get = await func (req .params .name , req .params .arguments )
@@ -149,7 +154,7 @@ async def handler(req: GetPromptRequest):
149
154
150
155
def list_resources (self ):
151
156
def decorator (func : Callable [[], Awaitable [list [Resource ]]]):
152
- logger .debug (f "Registering handler for ListResourcesRequest" )
157
+ logger .debug ("Registering handler for ListResourcesRequest" )
153
158
154
159
async def handler (_ : Any ):
155
160
resources = await func ()
@@ -169,7 +174,7 @@ def read_resource(self):
169
174
)
170
175
171
176
def decorator (func : Callable [[AnyUrl ], Awaitable [str | bytes ]]):
172
- logger .debug (f "Registering handler for ReadResourceRequest" )
177
+ logger .debug ("Registering handler for ReadResourceRequest" )
173
178
174
179
async def handler (req : ReadResourceRequest ):
175
180
result = await func (req .params .uri )
@@ -204,7 +209,7 @@ def set_logging_level(self):
204
209
from mcp_python .types import EmptyResult
205
210
206
211
def decorator (func : Callable [[LoggingLevel ], Awaitable [None ]]):
207
- logger .debug (f "Registering handler for SetLevelRequest" )
212
+ logger .debug ("Registering handler for SetLevelRequest" )
208
213
209
214
async def handler (req : SetLevelRequest ):
210
215
await func (req .params .level )
@@ -219,7 +224,7 @@ def subscribe_resource(self):
219
224
from mcp_python .types import EmptyResult
220
225
221
226
def decorator (func : Callable [[AnyUrl ], Awaitable [None ]]):
222
- logger .debug (f "Registering handler for SubscribeRequest" )
227
+ logger .debug ("Registering handler for SubscribeRequest" )
223
228
224
229
async def handler (req : SubscribeRequest ):
225
230
await func (req .params .uri )
@@ -234,7 +239,7 @@ def unsubscribe_resource(self):
234
239
from mcp_python .types import EmptyResult
235
240
236
241
def decorator (func : Callable [[AnyUrl ], Awaitable [None ]]):
237
- logger .debug (f "Registering handler for UnsubscribeRequest" )
242
+ logger .debug ("Registering handler for UnsubscribeRequest" )
238
243
239
244
async def handler (req : UnsubscribeRequest ):
240
245
await func (req .params .uri )
@@ -249,7 +254,7 @@ def call_tool(self):
249
254
from mcp_python .types import CallToolResult
250
255
251
256
def decorator (func : Callable [..., Awaitable [Any ]]):
252
- logger .debug (f "Registering handler for CallToolRequest" )
257
+ logger .debug ("Registering handler for CallToolRequest" )
253
258
254
259
async def handler (req : CallToolRequest ):
255
260
result = await func (req .params .name , ** (req .params .arguments or {}))
@@ -264,7 +269,7 @@ def progress_notification(self):
264
269
def decorator (
265
270
func : Callable [[str | int , float , float | None ], Awaitable [None ]],
266
271
):
267
- logger .debug (f "Registering handler for ProgressNotification" )
272
+ logger .debug ("Registering handler for ProgressNotification" )
268
273
269
274
async def handler (req : ProgressNotification ):
270
275
await func (
@@ -286,7 +291,7 @@ def decorator(
286
291
Awaitable [Completion | None ],
287
292
],
288
293
):
289
- logger .debug (f "Registering handler for CompleteRequest" )
294
+ logger .debug ("Registering handler for CompleteRequest" )
290
295
291
296
async def handler (req : CompleteRequest ):
292
297
completion = await func (req .params .ref , req .params .argument )
@@ -307,10 +312,12 @@ async def run(
307
312
self ,
308
313
read_stream : MemoryObjectReceiveStream [JSONRPCMessage | Exception ],
309
314
write_stream : MemoryObjectSendStream [JSONRPCMessage ],
310
- initialization_options : types .InitializationOptions
315
+ initialization_options : types .InitializationOptions ,
311
316
):
312
317
with warnings .catch_warnings (record = True ) as w :
313
- async with ServerSession (read_stream , write_stream , initialization_options ) as session :
318
+ async with ServerSession (
319
+ read_stream , write_stream , initialization_options
320
+ ) as session :
314
321
async for message in session .incoming_messages :
315
322
logger .debug (f"Received message: { message } " )
316
323
@@ -359,14 +366,16 @@ async def run(
359
366
360
367
handler = self .notification_handlers [type (notify )]
361
368
logger .debug (
362
- f"Dispatching notification of type { type (notify ).__name__ } "
369
+ f"Dispatching notification of type "
370
+ f"{ type (notify ).__name__ } "
363
371
)
364
372
365
373
try :
366
374
await handler (notify )
367
375
except Exception as err :
368
376
logger .error (
369
- f"Uncaught exception in notification handler: { err } "
377
+ f"Uncaught exception in notification handler: "
378
+ f"{ err } "
370
379
)
371
380
372
381
for warning in w :
0 commit comments