Skip to content

Commit 0dc3067

Browse files
added few more functions, need to take a look again
1 parent a652925 commit 0dc3067

File tree

1 file changed

+54
-3
lines changed

1 file changed

+54
-3
lines changed

src/mcp/client/session_group.py

Lines changed: 54 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)