1818 ClientNotification ,
1919 ClientRequest ,
2020 CompleteRequest ,
21+ EmbeddedResource ,
2122 EmptyResult ,
2223 ErrorData ,
2324 JSONRPCMessage ,
3132 PingRequest ,
3233 ProgressNotification ,
3334 Prompt ,
35+ PromptMessage ,
3436 PromptReference ,
3537 ReadResourceRequest ,
3638 ReadResourceResult ,
4042 ServerResult ,
4143 SetLevelRequest ,
4244 SubscribeRequest ,
45+ TextContent ,
4346 Tool ,
4447 UnsubscribeRequest ,
4548)
@@ -117,8 +120,6 @@ def get_prompt(self):
117120 GetPromptRequest ,
118121 GetPromptResult ,
119122 ImageContent ,
120- SamplingMessage ,
121- TextContent ,
122123 )
123124 from mcp_python .types import (
124125 Role as Role ,
@@ -133,7 +134,7 @@ def decorator(
133134
134135 async def handler (req : GetPromptRequest ):
135136 prompt_get = await func (req .params .name , req .params .arguments )
136- messages : list [SamplingMessage ] = []
137+ messages : list [PromptMessage ] = []
137138 for message in prompt_get .messages :
138139 match message .content :
139140 case str () as text_content :
@@ -144,15 +145,17 @@ async def handler(req: GetPromptRequest):
144145 data = img_content .data ,
145146 mimeType = img_content .mime_type ,
146147 )
148+ case types .EmbeddedResource () as resource :
149+ content = EmbeddedResource (
150+ type = "resource" , resource = resource .resource
151+ )
147152 case _:
148153 raise ValueError (
149154 f"Unexpected content type: { type (message .content )} "
150155 )
151156
152- sampling_message = SamplingMessage (
153- role = message .role , content = content
154- )
155- messages .append (sampling_message )
157+ prompt_message = PromptMessage (role = message .role , content = content )
158+ messages .append (prompt_message )
156159
157160 return ServerResult (
158161 GetPromptResult (description = prompt_get .desc , messages = messages )
@@ -169,9 +172,7 @@ def decorator(func: Callable[[], Awaitable[list[Resource]]]):
169172
170173 async def handler (_ : Any ):
171174 resources = await func ()
172- return ServerResult (
173- ListResourcesResult (resources = resources )
174- )
175+ return ServerResult (ListResourcesResult (resources = resources ))
175176
176177 self .request_handlers [ListResourcesRequest ] = handler
177178 return func
@@ -216,7 +217,6 @@ async def handler(req: ReadResourceRequest):
216217
217218 return decorator
218219
219-
220220 def set_logging_level (self ):
221221 from mcp_python .types import EmptyResult
222222
@@ -276,14 +276,51 @@ async def handler(_: Any):
276276 return decorator
277277
278278 def call_tool (self ):
279- from mcp_python .types import CallToolResult
279+ from mcp_python .types import (
280+ CallToolResult ,
281+ EmbeddedResource ,
282+ ImageContent ,
283+ TextContent ,
284+ )
280285
281- def decorator (func : Callable [..., Awaitable [Any ]]):
286+ def decorator (
287+ func : Callable [
288+ ..., Awaitable [list [str | types .ImageContent | types .EmbeddedResource ]]
289+ ],
290+ ):
282291 logger .debug ("Registering handler for CallToolRequest" )
283292
284293 async def handler (req : CallToolRequest ):
285- result = await func (req .params .name , (req .params .arguments or {}))
286- return ServerResult (CallToolResult (toolResult = result ))
294+ try :
295+ results = await func (req .params .name , (req .params .arguments or {}))
296+ content = []
297+ for result in results :
298+ match result :
299+ case str () as text :
300+ content .append (TextContent (type = "text" , text = text ))
301+ case types .ImageContent () as img :
302+ content .append (
303+ ImageContent (
304+ type = "image" ,
305+ data = img .data ,
306+ mimeType = img .mime_type ,
307+ )
308+ )
309+ case types .EmbeddedResource () as resource :
310+ content .append (
311+ EmbeddedResource (
312+ type = "resource" , resource = resource .resource
313+ )
314+ )
315+
316+ return ServerResult (CallToolResult (content = content , isError = False ))
317+ except Exception as e :
318+ return ServerResult (
319+ CallToolResult (
320+ content = [TextContent (type = "text" , text = str (e ))],
321+ isError = True ,
322+ )
323+ )
287324
288325 self .request_handlers [CallToolRequest ] = handler
289326 return func
0 commit comments