{"record":{"id":"f1941c677e831f0f","repo":"Kuberwastaken/claurst","slug":"mcp-server-has-no-url-configured","errorCode":null,"errorMessage":"MCP server '{}' has no URL configured","messagePattern":"MCP server '(.+?)' has no URL configured","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src-rust/crates/mcp/src/rmcp_backend.rs","lineNumber":140,"sourceCode":"        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\n            .clone()\n            .ok_or_else(|| anyhow::anyhow!(\"MCP server '{}' has no URL configured\", config.name))?;\n\n        let mut transport_config = StreamableHttpClientTransportConfig::with_uri(endpoint);\n        if let Some(token) = auth_token {\n            transport_config = transport_config.auth_header(token);\n        }\n\n        let transport = StreamableHttpClientTransport::from_config(transport_config);\n        let client_info = build_client_info(protocol_version);\n        Self::connect_with_transport(config, transport, client_info, \"http\").await\n    }\n\n    pub async fn connect_legacy_sse(\n        config: &claurst_core::config::McpServerConfig,\n        auth_token: Option<String>,\n    ) -> anyhow::Result<Self> {\n        // Legacy SSE servers still expose the real POST endpoint via\n        // `event: endpoint`; keep a thin compatibility shim here and hand the\n        // session and capability flow back to rmcp once connected.","sourceCodeStart":122,"sourceCodeEnd":158,"githubUrl":"https://github.com/Kuberwastaken/claurst/blob/b0637c97ec34144387cbf2f74f65df6d16a6cef1/src-rust/crates/mcp/src/rmcp_backend.rs#L122-L158","documentation":"connect_http was given an MCP server config with no `url` field — the entry was routed to the HTTP transport but carries no endpoint URL (hand-edited settings or a stdio-only entry missing its url). Without a URL no streamable-http/SSE connection can be made.","triggerScenarios":"Thrown at src-rust/crates/mcp/src/rmcp_backend.rs:140 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Add a `url` field to the server entry in settings","Use the stdio transport type for command-based MCP servers"],"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"}