diff --git a/src/kimi_cli/app.py b/src/kimi_cli/app.py index 3316f9b14..5dfe294a5 100644 --- a/src/kimi_cli/app.py +++ b/src/kimi_cli/app.py @@ -95,8 +95,9 @@ async def create( AgentSpecError(KimiCLIException, ValueError): When the agent specification is invalid. InvalidToolError(KimiCLIException, ValueError): When any tool cannot be loaded. MCPConfigError(KimiCLIException, ValueError): When any MCP configuration is invalid. - MCPRuntimeError(KimiCLIException, RuntimeError): When any MCP server cannot be - connected. + + Note: + Failed MCP connections are logged as warnings and do not prevent CLI creation. """ config = config if isinstance(config, Config) else load_config(config) if max_steps_per_turn is not None: diff --git a/src/kimi_cli/soul/agent.py b/src/kimi_cli/soul/agent.py index 2236070da..a2526b353 100644 --- a/src/kimi_cli/soul/agent.py +++ b/src/kimi_cli/soul/agent.py @@ -199,7 +199,9 @@ async def load_agent( AgentSpecError(KimiCLIException, ValueError): When the agent specification is invalid. InvalidToolError(KimiCLIException, ValueError): When any tool cannot be loaded. MCPConfigError(KimiCLIException, ValueError): When any MCP configuration is invalid. - MCPRuntimeError(KimiCLIException, RuntimeError): When any MCP server cannot be connected. + + Note: + Failed MCP connections are logged as warnings and do not prevent loading. """ logger.info("Loading agent: {agent_file}", agent_file=agent_file) agent_spec = load_agent_spec(agent_file) diff --git a/src/kimi_cli/soul/toolset.py b/src/kimi_cli/soul/toolset.py index 22db785d1..6a09549c3 100644 --- a/src/kimi_cli/soul/toolset.py +++ b/src/kimi_cli/soul/toolset.py @@ -28,7 +28,7 @@ from kosong.utils.typing import JsonType from loguru import logger -from kimi_cli.exception import InvalidToolError, MCPRuntimeError +from kimi_cli.exception import InvalidToolError from kimi_cli.tools import SkipThisTool from kimi_cli.tools.utils import ToolRejectedError from kimi_cli.wire.types import ( @@ -206,9 +206,7 @@ async def load_mcp_tools( """ Load MCP tools from specified MCP configs. - Raises: - MCPRuntimeError(KimiCLIException, RuntimeError): When any MCP server cannot be - connected. + Failed connections are logged as warnings and do not prevent CLI startup. """ import fastmcp from fastmcp.mcp_config import MCPConfig, RemoteMCPServer @@ -298,9 +296,12 @@ async def _connect(): continue if failed_servers: + logger.warning( + "Some MCP servers failed to connect: {failed_servers}", + failed_servers=list(failed_servers.keys()), + ) _toast_mcp("mcp connection failed") - raise MCPRuntimeError(f"Failed to connect MCP servers: {failed_servers}") - if unauthorized_servers: + elif unauthorized_servers: _toast_mcp("mcp authorization needed") else: _toast_mcp("mcp servers connected")