@@ -187,6 +187,7 @@ async def call_tool(self, name: str, args: dict[str, Any]) -> types.CallToolResu
187187 session_tool_name = self .tools [name ].name
188188 return await session .call_tool (session_tool_name , args )
189189
190+
190191 async def disconnect_from_server (self , session : mcp .ClientSession ) -> None :
191192 """Disconnects from a single MCP server."""
192193
@@ -382,11 +383,61 @@ def _component_name(self, name: str, server_info: types.Implementation) -> str:
382383
383384 async def read_resource (self , uri : AnyUrl ) -> types .ReadResourceResult :
384385 """Read a resource from the appropriate session based on the URI."""
385- print (self ._resources )
386- print (self ._resource_to_session )
387386 for name , resource in self ._resources .items ():
388387 if resource .uri == uri :
389388 session = self ._resource_to_session .get (name )
390389 if session :
391390 return await session .read_resource (uri )
392- raise ValueError (f"Resource not found: { uri } " )
391+ raise McpError (
392+ types .ErrorData (
393+ code = types .INVALID_PARAMS ,
394+ message = f"No session found for resource with URI '{ uri } '" ,
395+ )
396+ )
397+
398+ async def subscribe_resource (self , uri : AnyUrl ) -> types .EmptyResult :
399+ """Send a resources/subscribe request."""
400+ for name , resource in self ._resources .items ():
401+ if resource .uri == uri :
402+ session = self ._resource_to_session [name ]
403+ if session :
404+ return await session .subscribe_resource (uri )
405+ raise McpError (
406+ types .ErrorData (
407+ code = types .INVALID_PARAMS ,
408+ message = f"No session found for resource with URI '{ uri } '" ,
409+ )
410+ )
411+
412+ async def unsubscribe_resource (self , uri : AnyUrl ) -> types .EmptyResult :
413+ """Send a resources/unsubscribe request."""
414+ # Find the session that owns this resource
415+ for name , resource in self ._resources .items ():
416+ if resource .uri == uri :
417+ session = self ._resource_to_session .get (name )
418+ if session :
419+ return await session .unsubscribe_resource (uri )
420+
421+ raise McpError (
422+ types .ErrorData (
423+ code = types .INVALID_PARAMS ,
424+ message = f"No resource found with URI '{ uri } '" ,
425+ )
426+ )
427+
428+ async def get_prompt (
429+ self , name : str , arguments : dict [str , str ] | None = None
430+ ) -> types .GetPromptResult :
431+ """Send a prompts/get request."""
432+ if name in self ._prompts :
433+ prompt = self ._prompts [name ]
434+ session = self ._tool_to_session .get (name )
435+ if session :
436+ return await session .get_prompt (prompt .name , arguments )
437+ raise McpError (
438+ types .ErrorData (
439+ code = types .INVALID_PARAMS ,
440+ message = f"No prompt found with name '{ name } '" ,
441+ )
442+ )
443+
0 commit comments