ioda-outages-mcp-server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ioda-outages-mcp-serverFind recent internet outages in Brazil over the last 6 hours."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Overview
Internet outage evidence from IODA, using its public v2 API. Resolve countries, regions, and autonomous systems; inspect recent detections and measurement coverage; then investigate events, alert transitions, and numeric signals. Runs over stdio or stateless Streamable HTTP without an API key.
Tools
Tool | Description |
| Resolve country, region, or ASN names and codes |
| Inspect recent detection evidence and coverage across three numeric sources |
| Retrieve overlapping outage events for an entity or globally |
| Fetch BGP, active IPv4 /24 probing, or Merit telescope numeric series |
| Retrieve detection and recovery transitions with source baselines |
Related MCP server: PeerGlass
Capability reference
ioda_search_entities tool
Required
entityType: country | region | asn; choosequery(up to 200 trimmed characters) orentityCode, or omit both to list the type. Country codes use two letters, regions use IODA numeric codes, and ASNs use decimal digits.Up to 100 records per page, default 20;
pagestarts at 0. Returns originalentities,pagination, andprovenance; a metadata match does not establish measurement coverage.
ioda_get_status tool
Required
entityTypeandentityCode;lookbackHoursis 1–24, default 6. Collects events, alerts, andbgp,ping-slash24, andmerit-ntsummaries within the returnedwindow.detectionisobserved,none_returned, orunknown; sourcecoverageis independentlyrecent,stale,no_data, orunknown. Native completed buckets count as recent within three native sampling intervals; this is a server policy, not an upstream SLA.componentsdisclose partial failures and standalone-tool recovery. Event/alert pages carry continuation metadata; raw samples come fromioda_get_signals. All-component failure fails the call.
ioda_find_outages tool
Required
fromanduntil; optionalentityType,entityCode, andsource: bgp | ping-slash24 | merit-nt | gtr. Omit entity filters for global scope; a code requires its type. Up to 100 events per page, default 20.Returns source
events,pagination, andprovenance. Scores retain their source meaning; starts may precede the window and an end clipped atuntildoes not establish recovery.includeAlertsdefaults to false;extendWindowSecondsis 0–1,209,600, default 1,209,600. Zero extension can miss long-running detections.
ioda_get_signals tool
Required entity pair,
from,until, andsource: bgp | ping-slash24 | merit-nt.maxPointsis 1–2,000, default 200: an upstream aggregation target, not a hard returned-sample cap.Returns every numeric subtype in
series, source-specificsemantics, andprovenance.from,until,step,nativeStep, and nulls preserve aligned bucket boundaries and missing observations; smaller targets lose temporal resolution.gtranducsd-ntare not supported numeric sources. Null is not zero connectivity, and coarse or future boundary buckets cannot certify current coverage.
ioda_get_alerts tool
Required
fromanduntil; optional entity/source filters matchioda_find_outages. Up to 100 transitions per page, default 20;extendWindowSecondsis 0–1,209,600, default 0.Returns
alerts,pagination, andprovenance, retaining sourcelevel,condition,value, andhistoryValuewhen reported. A missing transition does not establish health or rule out an event that began earlier.
Features
Built on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.
IODA-specific:
Keyless reads from a fixed HTTPS API origin; no local database or native helper.
Historical windows use integer Unix seconds UTC:
from < until <= now, at most 31 days. Split longer investigations into adjacent windows.Pagination is zero-based; follow
nextPagewith filters andlimitunchanged.more: "possible"signals possible continuation, not a known total; restart at page 0 after changing the limit.Shared request pacing allows one in-flight request and at least two seconds between starts, with a 45-second invocation deadline. Avoid concurrent investigations.
IODA describes macroscopic connectivity. Missing detections are not an all-clear; source scores are not universal severity, and observations cannot establish a shutdown cause or one office's connectivity.
Agent-friendly output:
Provenance — endpoint links, fetch times, and original Georgia Tech Research Corporation attribution accompany returned evidence;
appliedechoes effective inputs.Explicit uncertainty — null samples, missing fields, source coverage, and partial component failures stay distinct.
Complete response surfaces —
content[]andstructuredContentcarry the same data, including enrichment; records are never silently dropped to fit.Bounded responses — upstream bodies are capped at 2 MiB and the combined response at 96 KiB.
response_too_largegives recovery: reduce page limits and restart at 0, disableincludeAlerts, lowermaxPoints, or split windows. For status, shortenlookbackHoursor call the standalone tools.
Getting started
Add one of these configurations to your MCP client. IODA requires no API key.
{
"mcpServers": {
"ioda-outages-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/ioda-outages-mcp-server@latest"]
}
}
}Or with npx (Node.js v24+):
{
"mcpServers": {
"ioda-outages-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/ioda-outages-mcp-server@latest"]
}
}
}Or with Docker:
{
"mcpServers": {
"ioda-outages-mcp-server": {
"type": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/ioda-outages-mcp-server:latest"]
}
}
}For Streamable HTTP from a local checkout:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Endpoint: http://127.0.0.1:3010/mcpPrerequisites
Bun v1.4.0+ or Node.js v24+ for running the package; Bun for development.
Network access to
api.ioda.inetintel.cc.gatech.edu.
Installation
git clone https://github.com/cyanheads/ioda-outages-mcp-server.git
cd ioda-outages-mcp-server
bun install
cp .env.example .env
bun run rebuildConfiguration
There are no server-specific environment variables. Common framework settings:
Variable | Description | Default |
|
|
|
| HTTP bind address |
|
| HTTP port |
|
| MCP endpoint path |
|
| HTTP session posture |
|
|
|
|
| Minimum logging level |
|
| Enable OpenTelemetry |
|
See .env.example for framework overrides.
Running the server
bun run rebuild
bun run start:stdio
# Or:
bun run start:httpTo serve HTTP in Docker:
docker run --rm -p 127.0.0.1:3010:3010 -e MCP_TRANSPORT_TYPE=http ghcr.io/cyanheads/ioda-outages-mcp-server:latestProject structure
Path | Purpose |
| Server identity, tool registration, service lifecycle |
| Five read-only tools |
| Shared input normalization, rendering, response budgeting |
| Fixed-origin API client, schemas, pacing, status assessment |
| Contract, service, and formatting tests |
| Domain contracts, design decisions, API evidence |
| Generated directory inventory |
Development guide
See CLAUDE.md for project conventions and docs/design.md for the API contract.
Keep handlers small; framework catches thrown failures.
Validate external records without inventing absent fields.
Preserve all data on both client response surfaces and keep uncertainty visible.
Register definitions in the
createApp()arrays insrc/index.ts.
bun run devcheck
bun run testContributing
Issues are welcome, with the tool name, inputs, and expected behavior. Redact credentials and personal information.
License
Apache-2.0; see LICENSE. IODA data retains its Georgia Tech Research Corporation copyright and remains subject to the source's terms.
This server cannot be deployed
Maintenance
Related MCP Connectors
Read-only outage intelligence: live service status, report history, geography and spikes
IP geolocation, ASN and network data, plus VPN, proxy and Tor detection. ASN tools need no key.
Signed internet telemetry, read-only: DNS, TLS, WHOIS, reachability. Every record Ed25519-signed.
Interact with a global network measurement platform.Run network commands from any point in the world
Related MCP Servers
- AlicenseAqualityAmaintenanceThis server provides access to IBGE's public APIs, enabling AI assistants to query geographic, demographic, and statistical data from Brazil.232,314 npm12MIT
- AlicenseAqualityCmaintenanceProvides global internet resource intelligence by querying RIRs for IP and ASN data, routing visibility, and network health. It enables users to perform RPKI validation, BGP inspection, and historical allocation analysis through natural language or a REST API.421MIT
- AlicenseNot gradedqualityBmaintenanceEnables querying global disaster alerts from GDACS including earthquakes, tropical cyclones, floods, volcanoes, droughts, and wildfires. Supports listing events, getting details, and retrieving GeoJSON or RSS feeds.14 npmMIT
- AlicenseAqualityBmaintenanceThis server enables checking real-time service status and outage information from Downdetector for various services and regions.119 npm3MIT