GET https://worldmonitor.app/.
The one URL to remember
Link: header with rel values pointing at every machine-readable surface below. An agent that follows the links resolves the full picture without hardcoding a single path.
Discovery endpoints
The header-discoverable static assets (
.well-known/*, /openapi.yaml, /openapi.json, /plugin.json) serve Access-Control-Allow-Origin: * and are cached public, max-age=3600 — safe to memoize. /api/health uses the normal API CORS allowlist and is not cached (private, no-store) because it reflects real-time seed freshness; agents should hit it fresh whenever they need to gate on data availability.
Agent front doors
Beyond static discovery documents, several live endpoints exist specifically for agents. All of them are anonymous and quota-free./ask, /a2a, and /docs/mcp each enforce their documented 60/min/IP policy; /agent/auth and the markdown twins do not claim an endpoint-specific per-IP limit.
GET|POST /ask — natural-language routing (NLWeb)
An NLWeb-style front door: send a question, get back the MCP tools that answer it. Accepts query (max 2048 chars) as JSON body, form body, or ?query=; optional mode (default "list"), query_id, and streaming (also triggered by Accept: text/event-stream).
{ _meta, query_id, query, results[] } where each result carries {url, name, site, score, description, schema_object} pointing at the matching MCP tool. Streaming mode emits start → result → complete SSE frames. A query-less probe returns 200 with usage guidance rather than an error; when nothing matches, a single llms.txt pointer result is returned with score: 0. Rate limit: 60/min/IP (429 + Retry-After). Responses are no-store.
POST /a2a — A2A JSON-RPC concierge
An A2A protocol agent (card at /.well-known/agent-card.json, protocol 0.3.0, transport JSONRPC, no auth). Supports message/send with text parts (max 2048 chars); replies with an agent message containing a text part plus a data part {suggestedTools, howToCall, freshness?} — the freshness envelope attaches when the message asks about staleness or seed health. Streaming, push notifications, and task history are declared unsupported and return -32004; rate limiting surfaces as JSON-RPC -32029 with Retry-After (60/min/IP).
GET /agent/auth — authentication challenge
Always answers 401 with a WWW-Authenticate: Bearer realm="worldmonitor", resource_metadata="…" header and a JSON body linking the RFC 9728 resource metadata, the RFC 8414 authorization-server metadata, and the /auth.md skill. It exists because a scanner probing GET /mcp for the OAuth challenge can’t get one there (that verb is reserved for the SSE handshake) — probe this URL instead to bootstrap the OAuth flow.
/docs/mcp — documentation MCP server
A second, separate MCP server for the documentation itself (card at /.well-known/mcp/docs-server-card.json, protocol 2025-06-18, streamable HTTP, no auth). It serves search_world_monitor (docs knowledge-base search returning snippets and links) and query_docs_filesystem_world_monitor (read-only rg/ls/tree/cat/head over a virtualized docs + OpenAPI filesystem). POST bodies are capped at 256 KiB (413 beyond); rate limit 60/min/IP as JSON-RPC -32029. It is a conformance-fixing facade over the upstream docs provider: tools/call results carrying -32601/-32602 inside isError payloads are lifted into real top-level JSON-RPC errors.
Markdown twins — <any-page>.md
Every page on the site has an agent-readable markdown twin: append .md to the path (/pricing.md, /countries/tw.md, /home.md for the front page). Curated twins are static and cached public, max-age=3600 with Access-Control-Allow-Origin: *; everything else is rendered on demand by the twin service (HTML becomes heading-led markdown, JSON becomes a fenced block, output capped at 80 KB) with a Link: <sibling>; rel="canonical" header. GET/HEAD on .md twins bypasses the API bot gate, so plain curl works without a browser User-Agent.
Agent walkthroughs
Codegen a REST client for every service
One of the 36 — CompanyMonitoringService — is published as a contract only. Its
operations are not routed yet, so a generated client for them will not receive a
response. Every other service in the bundle is live.
Connect an MCP client to live data
/.well-known/oauth-protected-resource is also available, but its authorization_servers field is derived from the request Host header so each origin (apex, www, api) reports itself — same-origin metadata that satisfies strict MCP scanners. Use the MCP server card for the cross-origin auth-server URL the actual MCP endpoint expects.
Or skip the manual flow entirely — most clients (Claude Desktop, claude.ai, Cursor, MCP Inspector, Claude Code) accept the MCP URL directly and run discovery + OAuth automatically:
Server-side with a direct API key
If you don’t want OAuth, REST endpoints and the MCP endpoint accept a user API key or operator-issued enterprise key inX-WorldMonitor-Key:
Drop-in agent skills
/.well-known/agent-skills/index.json lists pre-packaged skills — each is a self-contained recipe an agent can ingest without reading the OpenAPI. Useful for narrow tasks where you’d rather hand the agent “fetch a country brief” than “read the OpenAPI specs and figure it out.” See the Agent Skills Catalog for a human-readable list of every recipe. The catalog spans country briefs, risk and resilience, chokepoints, markets, cyber, sanctions, aviation, military flights, maritime traffic, energy shocks, trade flows, unrest, webcams, climate hazards, health alerts, and forecasts.
Why this matters
The point isn’t novelty — RFCs 8414, 8288, 9727, 9728 are old. The point is that every WorldMonitor surface (REST, MCP, OAuth, skills, LLM briefings) is reachable from one root URL via well-known conventions, with no out-of-band setup. An agent can:- Discover the API without reading our docs.
- Authenticate without us telling it which OAuth flow we use.
- Pick the right transport (REST vs MCP) based on its own preferences.
- Stay current — when we ship a new service, the bundled
/openapi.yamland the api-catalog reflect it on the next deploy. No version pinning, no waiting on an SDK release cycle (though official SDKs exist when a maintained package fits better).
Related
- MCP Server — full client setup (Claude Desktop, Cursor, claude.ai, MCP Inspector, Claude Code)
- WebMCP — experimental tools discovered from the current browser page, not through the MCP server card
- Agent Skills Catalog — human-readable catalog of the public agent recipes
- API Reference — human-readable service catalog and MCP→REST tool mapping
- API versioning and deprecation — compatibility guarantees and retirement signals (static markdown)
- Authentication — browser, API key, and OAuth modes
- Quickstart — first call in under a minute
