From efbe9e228f44a1eaf7bfbfb10156e7267f47950b Mon Sep 17 00:00:00 2001 From: jnjpng Date: Fri, 25 Jul 2025 13:07:05 -0700 Subject: [PATCH] fix: catch and log mcp tool list exceptions Co-authored-by: Jin Peng --- letta/services/mcp_manager.py | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/letta/services/mcp_manager.py b/letta/services/mcp_manager.py index 02d37a85..e0361822 100644 --- a/letta/services/mcp_manager.py +++ b/letta/services/mcp_manager.py @@ -48,20 +48,21 @@ class MCPManager: @enforce_types async def list_mcp_server_tools(self, mcp_server_name: str, actor: PydanticUser) -> List[MCPTool]: """Get a list of all tools for a specific MCP server.""" - mcp_server_id = await self.get_mcp_server_id_by_name(mcp_server_name, actor=actor) - mcp_config = await self.get_mcp_server_by_id_async(mcp_server_id, actor=actor) - server_config = mcp_config.to_config() + try: + mcp_server_id = await self.get_mcp_server_id_by_name(mcp_server_name, actor=actor) + mcp_config = await self.get_mcp_server_by_id_async(mcp_server_id, actor=actor) + server_config = mcp_config.to_config() + mcp_client = await self.get_mcp_client(server_config, actor) + await mcp_client.connect_to_server() - mcp_client = await self.get_mcp_client(server_config, actor) - await mcp_client.connect_to_server() - - # list tools - tools = await mcp_client.list_tools() - - # TODO: change to pydantic tools - await mcp_client.cleanup() - - return tools + # list tools + tools = await mcp_client.list_tools() + return tools + except Exception as e: + logger.error(f"Error listing tools for MCP server {mcp_server_name}: {e}") + return [] + finally: + await mcp_client.cleanup() @enforce_types async def execute_mcp_server_tool(