Upstream
by toolweather · remote · no sign-in to list tools · v0.2.0 · published by GitHub user toolweather
Is this AI/dev API down? Is this model deprecated, what replaces it? Live status for ~40 APIs.
5 tools: 1 change things and 4 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things1Claude Code: ask: see these tools
- Only reads4Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http upstream https://upstream.toolweather.workers.dev/mcpFindings
Matches of fixed checks, with the text they matched.
The input schema at properties.id.description names a tool "get_model" that this server does not list.
What this check looks forMatched text
inputSchema.properties.id.description: "Deprecated alias of model, only for the get_model tool name. Same 1–120 character API id. Igno..."
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
5 tools
Changes things 1Claude Code: ask
check_model_deprecationCheck whether one LLM model id is active, deprecated, or retired, plus its shutdown date and replacement, from that provider's deprecation page (OpenAI, Anthropic, Google, and othe…1 finding
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The input schema at properties.id.description names a tool "get_model" that this server does not list.
What this check looks forMatched text
inputSchema.properties.id.description: "Deprecated alias of model, only for the get_model tool name. Same 1–120 character API id. Igno..."
Description, as the server wrote it Check whether one LLM model id is active, deprecated, or retired, plus its shutdown date and replacement, from that provider's deprecation page (OpenAI, Anthropic, Google, and other tracked LLM vendors). Use before hard-coding or calling a model, or when a call fails with model-not-found. Not for API uptime (check_api_status) and not for a retirement feed (list_recent_api_changes with kind model_retirement, or get_digest). Returns summary, verdict (active|deprecated|retired|unknown), recommended_action (keep_using|plan_migration|switch_now|verify_with_provider), replacement, shutdown_date, evidence, and freshness; pages are re-read every few hours. An unlisted id is verdict unknown, not an error; longer than 120 characters returns 400 bad_model_id. Example: {"model":"gpt-4-0613"}. Free within the daily quota, then $0.003 via x402. Alias: get_model (param id).
Annotations the server declares
- title: Is this model deprecated?
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
Only reads 4Claude Code: allow
check_api_statusCheck whether one AI or developer API provider (OpenAI, Anthropic, Gemini, Mistral, Groq, GitHub, Stripe, Cloudflare, Vercel, Supabase, Twilio, ~40 total) is up, degraded, or down …No findings
Why it is in this group
- The name "check_api_status" says "status": a word for reading.
Description, as the server wrote it Check whether one AI or developer API provider (OpenAI, Anthropic, Gemini, Mistral, Groq, GitHub, Stripe, Cloudflare, Vercel, Supabase, Twilio, ~40 total) is up, degraded, or down right now. Use before calling that provider, or right after 5xx/429/timeouts, to choose retry, wait, or a fallback. Not for a model id (check_model_deprecation), the filtered change feed (list_recent_api_changes), or the daily rollup (get_digest). Returns summary, verdict (up|degraded|partially down|down|unknown), recommended_action, incidents, affected_components, checked_at, and freshness; status is rechecked about every 5 minutes. An unknown provider id returns 404 unknown_provider. Example: {"provider":"openai"}. Free within the daily quota, then $0.003 via x402. Alias: get_status.
Annotations the server declares
- title: Is this API down?
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_digestRead one published daily breaking-changes digest: AI/dev API status flips, model deprecations and retirements, pricing-page edits, and breaking MCP server changes.No findings
Why it is in this group
- The name "get_digest" says "get": a word for reading.
Description, as the server wrote it Read one published daily breaking-changes digest: AI/dev API status flips, model deprecations and retirements, pricing-page edits, and breaking MCP server changes. Use for a once-a-day catch-up. For a filtered on-demand API feed with no MCP section, use list_recent_api_changes; for live up/down, check_api_status; for one model id, check_model_deprecation. Always free (no quota, no x402). Published once at 12:00 UTC as a frozen window since the previous issue (usually ~24h); not updated later. Omit date for the latest; a missing YYYY-MM-DD returns 404 {error:no_issue}. One issue per date, no paging. Returns {date, title, summary, window_start, window_end, published_at, markdown, data, url, sponsor:null}. data holds counts, status, open_now, model_changes, shutting_down_30d, pricing, deprecation_page_edits, and mcp (breaking, non_breaking, down, back, auth_broken, auth_fixed). markdown caps model rows, breaking MCP rows, and each MCP event kind at 30, 30, and 20; data is the full window.
Annotations the server declares
- title: Daily digest
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
list_providersList every AI and developer API provider Upstream tracks (~40) with id, name, category, current state, checked_at, and status page.No findings
Why it is in this group
- The name "list_providers" says "list": a word for reading.
Description, as the server wrote it List every AI and developer API provider Upstream tracks (~40) with id, name, category, current state, checked_at, and status page. Use to pick a provider id for check_api_status, or for one all-providers health pass. Not for one provider's incidents (check_api_status) and not for what changed (list_recent_api_changes or get_digest). No parameters. Always free; does not spend the daily quota. State is refreshed about every 5 minutes. Returns {count, providers:[{id, name, category, state, checked_at, status_page}]}; state is operational, degraded, partial_outage, major_outage, maintenance, or unknown.
Annotations the server declares
- title: List providers
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
list_recent_api_changesList the on-demand feed of recent AI and developer API changes (status flips, deprecation-page edits, model retirements, pricing-page edits).No findings
Why it is in this group
- The name "list_recent_api_changes" says "list": a word for reading.
Description, as the server wrote it List the on-demand feed of recent AI and developer API changes (status flips, deprecation-page edits, model retirements, pricing-page edits). Use for a chosen window, one provider, or one kind, when explaining sudden breakage. Not for live up/down (check_api_status) and not for the once-a-day digest, which also covers MCP server breakage (get_digest). Returns summary, count, freshness, and changes[] with provider, kind, title, detail, source, and at, newest first. Status rows arrive within about 5 minutes; doc-page rows every few hours. A limit above 500 is clamped to 500; an unknown provider returns an empty list, not an error. Example: {"provider":"anthropic","kind":"model_retirement"}. Free within the daily quota, then $0.01 via x402. Alias: get_changes.
Annotations the server declares
- title: Recent API changes
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 0.2.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http upstream https://upstream.toolweather.workers.dev/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__upstream__check_api_status",
"mcp__upstream__list_recent_api_changes",
"mcp__upstream__list_providers",
"mcp__upstream__get_digest"
],
"ask": [
"mcp__upstream__check_model_deprecation"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as upstream. Review it before you use it.
