{"record":{"id":"60987a7f7ff5c06f","repo":"Kuberwastaken/claurst","slug":"unknown-mcp-server","errorCode":null,"errorMessage":"Unknown MCP server: {}","messagePattern":"Unknown MCP server: (.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src-rust/crates/mcp/src/connection_manager.rs","lineNumber":146,"sourceCode":"                    )\r\n                }\r\n            }\r\n        } else {\r\n            None\r\n        };\r\n        McpClient::connect(config, auth_token).await\r\n    }\r\n\r\n    // -----------------------------------------------------------------------\r\n    // Connect / disconnect / restart\r\n    // -----------------------------------------------------------------------\r\n\r\n    /// Connect to a single server by name, marking status along the way.\r\n    pub async fn connect(&self, name: &str) -> anyhow::Result<()> {\r\n        let entry = self\r\n            .state\r\n            .get(name)\r\n            .ok_or_else(|| anyhow::anyhow!(\"Unknown MCP server: {}\", name))?;\r\n        let state_arc = entry.value().clone();\r\n        drop(entry); // release dashmap read-guard\r\n\r\n        {\r\n            let mut st = state_arc.lock().await;\r\n            st.status = McpServerStatus::Connecting;\r\n        }\r\n\r\n        let config = {\r\n            let st = state_arc.lock().await;\r\n            expand_server_config(&st.config)\r\n        };\r\n\r\n        debug!(server = %name, transport = %config.server_type, command = ?config.command, url = ?config.url, \"Connecting to MCP server\");\r\n\r\n        match Self::connect_expanded_config(name, &config).await {\r\n            Ok(client) => {\r\n                let tool_count = client.tools.len();\r","sourceCodeStart":128,"sourceCodeEnd":164,"githubUrl":"https://github.com/Kuberwastaken/claurst/blob/b0637c97ec34144387cbf2f74f65df6d16a6cef1/src-rust/crates/mcp/src/connection_manager.rs#L128-L164","documentation":"ConnectionManager::connect looks up the named server in its state map; if the name isn't registered, it returns this error without touching any connection state. Only servers present in the manager's configuration can be connected. It propagates to connect_all and restart.","triggerScenarios":"Calling connect(name) (or restart(name)) with a name that has no entry in the MCP server configuration map — typo'd name, server removed from config, or connect before config is loaded.","commonSituations":"Settings.json MCP server renamed while the UI holds a stale reference; case mismatch in server name; calling connect before add/register; calling restart on a server that failed to register at startup.","solutions":["Use a name exactly matching an entry in the MCP servers config (check spelling/case).","Reload MCP server configuration before connecting.","List available server names via the manager's state before calling connect/restart."],"exampleFix":"// before\nmanager.connect(\"github\").await?; // typo: config has 'GitHub'\n// after\nif !manager.is_configured(\"GitHub\") {\n    eprintln!(\"server 'GitHub' not in config; available: {:?}\", manager.server_names());\n    return Ok(());\n}\nmanager.connect(\"GitHub\").await?;","handlingStrategy":"validation","validationCode":"fn assert_configured(manager: &ConnectionManager, name: &str) -> anyhow::Result<()> {\n    anyhow::ensure!(\n        manager.server_names().contains(&name.to_string()),\n        \"MCP server '{}' is not configured\", name\n    );\n    Ok(())\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Derive server names for connect/restart from the config, never hardcode.","Reload config before connecting after settings changes.","Compare names case-sensitively."],"tags":["mcp","configuration","lookup"],"backgroundTag":"entity-not-found","analyzedSha":"b0637c97ec34144387cbf2f74f65df6d16a6cef1","analyzedAt":"2026-09-10T00:24:58.650Z","contentChangedAt":"2026-09-10T00:24:58.650Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}