{"record":{"id":"65c9aacaf0df263e","repo":"tinyhumansai/openhuman","slug":"mcp-official-registry-get-qualified-name-returne","errorCode":null,"errorMessage":"MCP official registry GET {qualified_name} returned HTTP {status}: {}","messagePattern":"MCP official registry GET (.+?) returned HTTP (.+?): (.+?)","errorType":"http","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/openhuman/mcp/registry/registries/mcp_official.rs","lineNumber":211,"sourceCode":"        // latest version.\n        let client = http_client()?;\n        let url = format!(\n            \"{}/v0/servers/{}/versions\",\n            base_url(config),\n            urlencoding_encode(qualified_name)\n        );\n        tracing::debug!(\"[mcp-official] get fetching {url}\");\n        let req = apply_auth(\n            config,\n            client.get(&url).header(\"Accept\", \"application/json\"),\n        );\n\n        let resp = req.send().await.context(\"MCP official get failed\")?;\n        let status = resp.status();\n        let body = resp.text().await.context(\"MCP official read failed\")?;\n\n        if !status.is_success() {\n            anyhow::bail!(\n                \"MCP official registry GET {qualified_name} returned HTTP {status}: {}\",\n                &body[..body.len().min(200)]\n            );\n        }\n\n        // The versions endpoint returns the same envelope array as the\n        // list endpoint. Extract the raw JSON for the first (latest)\n        // server object and cache it so subsequent calls skip the HTTP\n        // round-trip.\n        let raw: Value = serde_json::from_str(&body)\n            .with_context(|| format!(\"Failed to re-parse MCP official versions: {body}\"))?;\n        let server_value = raw\n            .pointer(\"/servers/0/server\")\n            .ok_or_else(|| anyhow::anyhow!(\"no versions found for {qualified_name}\"))?;\n        let server_json = server_value.to_string();\n        let _ = store::set_cached(config, &cache_key, &server_json);\n\n        let server: OfficialServer = serde_json::from_value(server_value.clone())","sourceCodeStart":193,"sourceCodeEnd":229,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/mcp/registry/registries/mcp_official.rs#L193-L229","documentation":"Fetching a specific server's versions from the official MCP registry (registry.mcpservers.org / npm-backed `get {qualified_name}`) returned a non-2xx; the message includes the qualified name, status and first 200 chars of the body. This is the per-server detail lookup used when resolving/installing one registry entry.","triggerScenarios":"`mcp_registry` get-by-qualified-name for a package that does not exist (404), registry auth token invalid/absent where required (401/403), registry outage (5xx), or network egress blocked from the environment.","commonSituations":"Typo'd qualified name (`@scope/server` casing or scope mistakes); package unpublished/renamed on npm; corporate firewall blocking registry.mcpservers.org; stale auth token for authenticated registry access.","solutions":["Verify the qualified name exists on the registry (search it via the registry UI/API first).","If 401/403, refresh or remove the registry auth token in config.","For 5xx/timeout, retry later or check the registry's status page.","Ensure the host can reach the registry domain (proxy/egress rules)."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"match registry_get(qualified_name).await {\n    Err(e) if e.to_string().contains(\"HTTP 404\") => Err(e), // name typo: do not retry\n    Err(e) => { backoff().await; registry_get(qualified_name).await } // transient: retry once\n    ok => ok,\n}","preventionTips":["Verify qualified names via search before installing by name.","Handle 401/403 by refreshing the registry auth token rather than retrying blindly.","Cache per-server version metadata so repeated installs skip the GET."],"tags":["mcp","registry","http","official-registry"],"backgroundTag":"http-error-response","analyzedSha":"749120085864ce16e0f273c7b86fac7740b39c5b","analyzedAt":"2026-08-17T21:21:45.363Z","schemaVersion":2},"datasetVersion":"2026-08-21T18:17:14.833Z"}