{"record":{"id":"700573ec9191dae3","repo":"Hmbown/CodeWhale","slug":"one-or-more-mcp-servers-failed-validation","errorCode":null,"errorMessage":"one or more MCP servers failed validation","messagePattern":"one or more MCP servers failed validation","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/tui/src/lib.rs","lineNumber":8768,"sourceCode":"            println!(\"Disabled MCP server '{name}'\");\n            Ok(())\n        }\n        McpCommand::Validate => {\n            let mut pool = McpPool::from_config_path_with_workspace_and_plugins(\n                &config_path,\n                workspace,\n                std::sync::Arc::new(plugins.clone()),\n            )?;\n            let errors = pool.connect_all().await;\n            if errors.is_empty() {\n                println!(\"MCP config is valid. All enabled servers connected.\");\n                return Ok(());\n            }\n            eprintln!(\"MCP validation failed:\");\n            for (name, err) in errors {\n                eprintln!(\"  - {name}: {err:#}\");\n            }\n            bail!(\"one or more MCP servers failed validation\");\n        }\n        McpCommand::AddSelf { name, workspace } => {\n            let exe_path = std::env::current_exe()\n                .map_err(|e| anyhow!(\"Cannot resolve current binary path: {e}\"))?;\n            let exe_str = exe_path.to_string_lossy().to_string();\n\n            let mut args = vec![\"serve\".to_string(), \"--mcp\".to_string()];\n            if let Some(ref ws) = workspace {\n                args.push(\"--workspace\".to_string());\n                args.push(ws.clone());\n            }\n\n            let mut cfg = load_mcp_config(&config_path)?;\n            if cfg.servers.contains_key(&name) {\n                bail!(\n                    \"MCP server '{name}' already exists in {}. Use `codewhale mcp remove {name}` first, or choose a different --name.\",\n                    config_path.display()\n                );","sourceCodeStart":8750,"sourceCodeEnd":8786,"githubUrl":"https://github.com/Hmbown/CodeWhale/blob/0c42157ee52f9d55af2b506d71b46249910f77d3/crates/tui/src/lib.rs#L8750-L8786","documentation":"`mcp validate` connects to every enabled server via pool.connect_all(); if any connection errors, it prints one `- name: error` line per failing server to stderr and then bails with this aggregate message. The real diagnostic is the per-server lines printed just above, not the bail line itself.","triggerScenarios":"Any enabled server whose command cannot spawn (bad binary path, missing node/npx), whose SSE url is unreachable, whose env or bearer token is wrong, or whose handshake exceeds the connect timeout.","commonSituations":"node/npx not on PATH in CI; upstream MCP package renamed or version-pinned wrong; expired OAuth/bearer tokens; firewall blocking the SSE endpoint; slow cold-start servers.","solutions":["Read the `- name: err` lines above the bail; fix or remove each named server","For command servers, run the command manually to see the startup error","Disable servers you do not currently need, then re-validate","Re-run the OAuth flow / refresh tokens when auth failed"],"exampleFix":"# before\ncodewhale mcp validate\n# MCP validation failed:\n#   - fs: spawn npx ENOENT\n# one or more MCP servers failed validation\n\n# after\ncommand -v npx || npm i -g npx\ncodewhale mcp validate","handlingStrategy":"validation","validationCode":"# pre-flight each enabled server before `mcp validate`\ncommand -v node >/dev/null && command -v npx >/dev/null || echo 'node/npx missing for command servers'\nfor url in $(enabled_sse_urls); do curl -fsS --max-time 5 \"$url\" >/dev/null || echo \"$url unreachable\"; done","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep MCP server commands pinned to versions you have tested","Refresh OAuth/bearer tokens before validation windows expire","Disable servers you are not using so validate covers only live dependencies"],"tags":["mcp","connection","health-check","validation"],"backgroundTag":"mcp-server-connection-failed","analyzedSha":"0c42157ee52f9d55af2b506d71b46249910f77d3","analyzedAt":"2026-08-20T21:50:45.477Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}