{"record":{"id":"abb9f4de84522d27","repo":"Kuberwastaken/claurst","slug":"mcp-server-has-no-command-configured","errorCode":null,"errorMessage":"MCP server '{}' has no command configured","messagePattern":"MCP server '(.+?)' has no command configured","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src-rust/crates/mcp/src/rmcp_backend.rs","lineNumber":120,"sourceCode":"    }\n}\n\npub struct RmcpClientBackend {\n    snapshot: McpClientSnapshot,\n    peer: rmcp::Peer<RoleClient>,\n    #[allow(dead_code)]\n    running: Mutex<RunningService<RoleClient, RmcpNotificationClient>>,\n    notifications_rx: Arc<Mutex<mpsc::UnboundedReceiver<Value>>>,\n}\n\nimpl RmcpClientBackend {\n    pub async fn connect_stdio(\n        config: &claurst_core::config::McpServerConfig,\n    ) -> anyhow::Result<Self> {\n        let command = config\n            .command\n            .clone()\n            .ok_or_else(|| anyhow::anyhow!(\"MCP server '{}' has no command configured\", config.name))?;\n\n        let transport = TokioChildProcess::new(Command::new(&command).configure(|cmd| {\n            cmd.args(&config.args);\n            cmd.envs(&config.env);\n        }))\n        .map_err(|e| anyhow::anyhow!(\"failed to spawn rmcp stdio child for '{}': {}\", config.name, e))?;\n\n        let client_info = build_client_info(rmcp_model::ProtocolVersion::default());\n        Self::connect_with_transport(config, transport, client_info, \"stdio\").await\n    }\n\n    pub async fn connect_http(\n        config: &claurst_core::config::McpServerConfig,\n        auth_token: Option<String>,\n        protocol_version: rmcp_model::ProtocolVersion,\n    ) -> anyhow::Result<Self> {\n        let endpoint = config\n            .url","sourceCodeStart":102,"sourceCodeEnd":138,"githubUrl":"https://github.com/Kuberwastaken/claurst/blob/b0637c97ec34144387cbf2f74f65df6d16a6cef1/src-rust/crates/mcp/src/rmcp_backend.rs#L102-L138","documentation":"connect_stdio was asked to start an MCP server config whose `command` field is None — a stdio server entry in settings that has no executable configured (typically a URL-only entry wrongly routed to the stdio path, or a hand-edited config). The transport cannot spawn a process without a command.","triggerScenarios":"Thrown at src-rust/crates/mcp/src/rmcp_backend.rs:120 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Add a `command` field to the MCP server entry in settings, or switch the entry to an http/url type","Validate the MCP server config shape before attempting to connect"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"b0637c97ec34144387cbf2f74f65df6d16a6cef1","analyzedAt":"2026-09-10T00:24:58.650Z","contentChangedAt":"2026-09-10T00:24:58.650Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}