tinyhumansai/openhuman · error
Smithery GET {qualified_name} returned HTTP {status}: {}
Error message
Smithery GET {qualified_name} returned HTTP {status}: {} What it means
Raised when fetching a single MCP server's detail — get(config, qualified_name) with the name URL-encoded — and Smithery answers non-2xx. The dominant real case is 404: the qualified name (e.g. io.github.example/server) no longer exists upstream because the package was renamed, removed, or its version qualifier went away. Auth, rate-limit, and outage statuses surface here exactly as they do in search; a successful result is cached under 'smithery:detail:<qualified_name>'.
Source
Thrown at src/openhuman/mcp/registry/registries/smithery.rs:129
tracing::debug!("[smithery] get fetching qualified_name={qualified_name}");
let client = http_client()?;
let url = format!(
"{SMITHERY_BASE}/servers/{}",
urlencoding_encode(qualified_name)
);
let req = apply_auth(
config,
client.get(&url).header("Accept", "application/json"),
);
let resp = req.send().await.context("Smithery get request failed")?;
let status = resp.status();
let body = resp.text().await.context("Smithery get read failed")?;
if !status.is_success() {
anyhow::bail!(
"Smithery GET {qualified_name} returned HTTP {status}: {}",
&body[..body.len().min(200)]
);
}
let mut detail: SmitheryServerDetail = serde_json::from_str(&body)
.with_context(|| format!("Failed to parse Smithery detail: {body}"))?;
detail.source = SOURCE_SMITHERY.to_string();
let _ = store::set_cached(config, &cache_key, &body);
tracing::debug!(
"[smithery] get ok qualified_name={qualified_name} connections={}",
detail.connections.len()
);
Ok(detail)
}
}View on GitHub (pinned to 7491200858)
Solutions
- If 404: re-run a catalog search for the server's short name and use the qualified name it returns now — the old one is gone upstream.
- If the server vanished upstream, uninstall the stale local entry (store::delete_server) so UI lists stop referencing it.
- For 401/403/429/5xx, apply the same fixes as for search errors: credentials, backoff, proxy allowlisting.
- If a renamed package is served from cache, note the detail cache key format (smithery:detail:<qualified_name>) when investigating staleness.
Example fix
// before
let detail = registry.get(config, &qualified_name).await?;
// after — on 404, re-resolve the current qualified name via search, then retry
let detail = match registry.get(config, &qualified_name).await {
Ok(d) => d,
Err(e) if e.to_string().contains("HTTP 404") => {
let results = registry.search(config, &short_name, 1, 20).await?;
let fresh = results.servers.iter()
.find(|s| s.qualified_name.contains(&short_name))
.ok_or_else(|| anyhow::anyhow!("'{qualified_name}' no longer exists in the Smithery catalog"))?;
registry.get(config, &fresh.qualified_name).await?
}
Err(e) => return Err(e),
}; Defensive patterns
Strategy: validation
Validate before calling
// Resolve the current qualified name from a fresh search before the detail GET
let results = registry.search(config, &short_name, 1, 20).await?;
let listed = results.servers.iter().map(|s| s.qualified_name.clone()).collect::<Vec<_>>();
if !listed.contains(&qualified_name) {
anyhow::bail!("stale qualified name {qualified_name}; catalog now lists {listed:?}");
} Try / catch
Match err.to_string() for `HTTP 404` and treat it as 'package removed/renamed' — offer a re-search or uninstall instead of a generic failure. Other statuses follow the search-error triage: auth vs transient vs network.
Prevention
- Store the short name alongside the qualified name so a re-search is always possible.
- Refresh catalog metadata before reinstall/update flows.
- Treat cached details older than the cache TTL as suspect after upstream renames.
When it happens
Trigger: Calling SmitheryRegistry::get with a qualified_name captured from stale metadata — a previously cached detail, a saved install record, or a hardcoded name — after the upstream package was deleted or renamed; also 401/403/429/5xx under the same conditions as the search endpoint.
Common situations: Reinstalling or updating a server whose upstream repo was renamed; saved install records referencing a version-pinned qualified name after the publisher cut a new release; registry outages; corporate proxies.
Related errors
- Smithery returned HTTP {status}: {}
- MCP official registry GET {qualified_name} returned HTTP {st
- MCP official registry returned HTTP {status}: {}
- MCP server '{}' not found
- MCP events GET {} — {}
AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17).
Data as JSON: /api/errors/d9607448a02d58bd.
Report an issue: GitHub.