diff --git a/src/kimi_cli/soul/toolset.py b/src/kimi_cli/soul/toolset.py index 718bcde65..51a800cd7 100644 --- a/src/kimi_cli/soul/toolset.py +++ b/src/kimi_cli/soul/toolset.py @@ -269,10 +269,17 @@ async def load_mcp_tools( connected. """ import fastmcp + from fastmcp.client.logging import LogMessage from fastmcp.mcp_config import MCPConfig, RemoteMCPServer from kimi_cli.ui.shell.prompt import toast + async def _mcp_log_handler(message: LogMessage) -> None: + """Route MCP server log notifications to loguru instead of rich stderr.""" + data = message.data + msg = data.get("message") or data.get("msg") or str(data) + logger.debug("MCP server log: {msg}", msg=msg) + async def _check_oauth_tokens(server_url: str) -> bool: """Check if OAuth tokens exist for the server.""" try: @@ -372,7 +379,10 @@ async def _connect(): if isinstance(server_config, RemoteMCPServer) and server_config.auth == "oauth": oauth_servers[server_name] = server_config.url - client = fastmcp.Client(MCPConfig(mcpServers={server_name: server_config})) + client = fastmcp.Client( + MCPConfig(mcpServers={server_name: server_config}), + log_handler=_mcp_log_handler, + ) self._mcp_servers[server_name] = MCPServerInfo( status="pending", client=client, tools=[] )