From 99ed499f139db609086fb1982a85ae58fd245c3c Mon Sep 17 00:00:00 2001 From: yihuang Date: Mon, 21 Apr 2025 10:36:29 +0800 Subject: [PATCH] fix: proxy mcp server should tolerate METHOD_NOT_FOUND --- src/fastmcp/server/proxy.py | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/src/fastmcp/server/proxy.py b/src/fastmcp/server/proxy.py index e4c31e5c2..99708b654 100644 --- a/src/fastmcp/server/proxy.py +++ b/src/fastmcp/server/proxy.py @@ -10,7 +10,9 @@ from mcp.types import ( ImageContent, TextContent, TextResourceContents, + METHOD_NOT_FOUND, ) +from mcp.shared.exceptions import McpError from pydantic.networks import AnyUrl from fastmcp.client import Client @@ -173,7 +175,12 @@ class FastMCPProxy(FastMCP): tools = await super().get_tools() async with self.client: - for tool in await self.client.list_tools(): + try: + client_tools =await self.client.list_tools() + except McpError as e: + if e.error.code == METHOD_NOT_FOUND: + client_tools = [] + for tool in client_tools: tool_proxy = await ProxyTool.from_client(self.client, tool) tools[tool_proxy.name] = tool_proxy @@ -183,7 +190,12 @@ class FastMCPProxy(FastMCP): resources = await super().get_resources() async with self.client: - for resource in await self.client.list_resources(): + try: + client_resources = await self.client.list_resources() + except McpError as e: + if e.error.code == METHOD_NOT_FOUND: + client_resources = [] + for resource in client_resources: resource_proxy = await ProxyResource.from_client(self.client, resource) resources[str(resource_proxy.uri)] = resource_proxy @@ -193,7 +205,12 @@ class FastMCPProxy(FastMCP): templates = await super().get_resource_templates() async with self.client: - for template in await self.client.list_resource_templates(): + try: + client_templates = await self.client.list_resource_templates() + except McpError as e: + if e.error.code == METHOD_NOT_FOUND: + client_templates = [] + for template in client_templates: template_proxy = await ProxyTemplate.from_client(self.client, template) templates[template_proxy.uri_template] = template_proxy @@ -203,7 +220,12 @@ class FastMCPProxy(FastMCP): prompts = await super().get_prompts() async with self.client: - for prompt in await self.client.list_prompts(): + try: + client_prompts = await self.client.list_prompts() + except McpError as e: + if e.error.code == METHOD_NOT_FOUND: + client_prompts = [] + for prompt in client_prompts: prompt_proxy = await ProxyPrompt.from_client(self.client, prompt) prompts[prompt_proxy.name] = prompt_proxy return prompts