From a32b0d3d408709adfeec031b71873dbe94866fac Mon Sep 17 00:00:00 2001 From: kassem Date: Wed, 5 Nov 2025 06:01:22 +0200 Subject: [PATCH 1/3] fix: enhance get_resources method to support optional server name and load from all servers --- langchain_mcp_adapters/client.py | 58 ++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/langchain_mcp_adapters/client.py b/langchain_mcp_adapters/client.py index 06c27e6..332ebf5 100644 --- a/langchain_mcp_adapters/client.py +++ b/langchain_mcp_adapters/client.py @@ -203,24 +203,46 @@ async def get_prompt( return await load_mcp_prompt(session, prompt_name, arguments=arguments) async def get_resources( - self, - server_name: str, - *, - uris: str | list[str] | None = None, - ) -> list[Blob]: - """Get resources from a given MCP server. - - Args: - server_name: Name of the server to get resources from - uris: Optional resource URI or list of URIs to load. If not provided, - all resources will be loaded. - - Returns: - A list of LangChain [Blob][langchain_core.documents.base.Blob] objects. - - """ - async with self.session(server_name) as session: - return await load_mcp_resources(session, uris=uris) + self, + server_name: str | None = None, + *, + uris: str | list[str] | None = None, + ) -> list[Blob]: + """Get resources from a given MCP server. + + Args: + server_name: Optional name of the server to get resources from. + If `None`, all resources from all servers will be returned. + uris: Optional resource URI or list of URIs to load. If not provided, + all resources will be loaded. + + Returns: + A list of LangChain [Blob][langchain_core.documents.base.Blob] objects. + + """ + if server_name is not None: + if server_name not in self.connections: + msg = ( + f"Couldn't find a server with name '{server_name}', " + f"expected one of '{list(self.connections.keys())}'" + ) + raise ValueError(msg) + async with self.session(server_name) as session: + return await load_mcp_resources(session, uris=uris) + + all_resources: list[Blob] = [] + load_resource_tasks = [] + for name in self.connections: + async def load_for_server(srv_name: str) -> list[Blob]: + async with self.session(srv_name) as session: + return await load_mcp_resources(session, uris=uris) + + load_resource_tasks.append(asyncio.create_task(load_for_server(name))) + + resources_list = await asyncio.gather(*load_resource_tasks) + for resources in resources_list: + all_resources.extend(resources) + return all_resources async def __aenter__(self) -> "MultiServerMCPClient": """Async context manager entry point. From 7c20319f7234d5452bde75e060d164384d8c1d13 Mon Sep 17 00:00:00 2001 From: kassem Date: Sat, 15 Nov 2025 19:09:32 +0200 Subject: [PATCH 2/3] fix: refactor get_resources method for improved clarity and performance --- langchain_mcp_adapters/client.py | 79 ++++++++++++++++---------------- 1 file changed, 40 insertions(+), 39 deletions(-) diff --git a/langchain_mcp_adapters/client.py b/langchain_mcp_adapters/client.py index 332ebf5..af0abac 100644 --- a/langchain_mcp_adapters/client.py +++ b/langchain_mcp_adapters/client.py @@ -203,46 +203,47 @@ async def get_prompt( return await load_mcp_prompt(session, prompt_name, arguments=arguments) async def get_resources( - self, - server_name: str | None = None, - *, - uris: str | list[str] | None = None, - ) -> list[Blob]: - """Get resources from a given MCP server. - - Args: - server_name: Optional name of the server to get resources from. - If `None`, all resources from all servers will be returned. - uris: Optional resource URI or list of URIs to load. If not provided, - all resources will be loaded. - - Returns: - A list of LangChain [Blob][langchain_core.documents.base.Blob] objects. - - """ - if server_name is not None: - if server_name not in self.connections: - msg = ( - f"Couldn't find a server with name '{server_name}', " - f"expected one of '{list(self.connections.keys())}'" - ) - raise ValueError(msg) - async with self.session(server_name) as session: + self, + server_name: str | None = None, + *, + uris: str | list[str] | None = None, + ) -> list[Blob]: + """Get resources from a given MCP server. + + Args: + server_name: Optional name of the server to get resources from. + If `None`, all resources from all servers will be returned. + uris: Optional resource URI or list of URIs to load. If not provided, + all resources will be loaded. + + Returns: + A list of LangChain [Blob][langchain_core.documents.base.Blob] objects. + + """ + if server_name is not None: + if server_name not in self.connections: + msg = ( + f"Couldn't find a server with name '{server_name}', " + f"expected one of '{list(self.connections.keys())}'" + ) + raise ValueError(msg) + async with self.session(server_name) as session: + return await load_mcp_resources(session, uris=uris) + + all_resources: list[Blob] = [] + load_resource_tasks = [] + for name in self.connections: + + async def load_for_server(srv_name: str) -> list[Blob]: + async with self.session(srv_name) as session: return await load_mcp_resources(session, uris=uris) - - all_resources: list[Blob] = [] - load_resource_tasks = [] - for name in self.connections: - async def load_for_server(srv_name: str) -> list[Blob]: - async with self.session(srv_name) as session: - return await load_mcp_resources(session, uris=uris) - - load_resource_tasks.append(asyncio.create_task(load_for_server(name))) - - resources_list = await asyncio.gather(*load_resource_tasks) - for resources in resources_list: - all_resources.extend(resources) - return all_resources + + load_resource_tasks.append(asyncio.create_task(load_for_server(name))) + + resources_list = await asyncio.gather(*load_resource_tasks) + for resources in resources_list: + all_resources.extend(resources) + return all_resources async def __aenter__(self) -> "MultiServerMCPClient": """Async context manager entry point. From 5e7b1d3552c421fc99feae9230a34ea5b52eb8a8 Mon Sep 17 00:00:00 2001 From: kassem Date: Sat, 15 Nov 2025 20:10:04 +0200 Subject: [PATCH 3/3] fix: update version to 0.1.14 in pyproject.toml --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index fd3c250..f6fc90d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "pdm.backend" [project] name = "langchain-mcp-adapters" -version = "0.1.13" +version = "0.1.14" description = "Make Anthropic Model Context Protocol (MCP) tools compatible with LangChain and LangGraph agents." authors = [ { name = "Vadym Barda", email = "19161700+vbarda@users.noreply.github.com" },