cached_at (ISO timestamp) and stale: boolean in their JSON payload so you can reason about freshness.
The curl examples below all assume you’ve exported your API key:
-H "X-WorldMonitor-Key: $WM_KEY" with -H "Authorization: Bearer $TOKEN" in each example.
Discovering tools
Before diving into the per-tool reference, two affordances make discovery cheaper than reading this page top-to-bottom. If you are starting from a REST route instead of a tool name, use the API coverage table; per-tool API endpoints lines mean exact_apiPaths declarations, while none directly means the tool returns data without claiming an equivalent REST route.
MCP coverage is intentionally curated. Some OpenAPI operations are REST-only because they mutate state, pass through LLM cost, fetch paid/high-cardinality upstreams on cache miss, or need manual cache-key mapping. The API coverage section names the enforced categories and links the current follow-up trackers.
describe_tool — full uncompressed definition on demand
Since v1.5.0, tools/list returns each tool’s description truncated to the first sentence (≤120 UTF-8 bytes). That keeps the per-session input-token cost low when the LLM only needs to scan names — and the same tools/list entry now ships an outputSchema (v1.6.0) so the model can author a JMESPath projection on the first call. When the compressed description is ambiguous, call describe_tool for the long form:
tools/list entry, with the full uncompressed description and the full inputSchema.properties text:
describe_tool is exempt from the Pro daily quota (per-minute rate limit still applies). The exemption is intentional — counting metadata lookups against the 50/day cap would discourage exploration, defeating the compression. Two common workflows:
- Compressed entry is ambiguous about behaviour or argument semantics. Call
describe_toolto see the full long-form description plus every property’s full description. - First-time JMESPath authoring against an unfamiliar response. Call
describe_toolto read theoutputSchema(see next section) without paying a quota slot for a realtools/call.
describe_tool returns two soft-error envelopes inside the normal content[0].text:
{ "error": "missing_tool_name", "hint": "Pass tool_name as a non-empty string matching a tool from tools/list." }—tool_namewas omitted, empty, or non-string.{ "error": "unknown_tool", "requested": "<the bad name>", "available": [...sorted list of all tool names...] }—tool_namedidn’t match. Theavailablearray lets the LLM self-correct in one extra call.
describe_tool (parameters, response shape, quota posture) is at describe_tool under Meta.
outputSchema — typed parsing without a sample call
As of v1.6.0, every tool’s tools/list entry declares a spec-defined MCP 2025-06-18 Tool.outputSchema. The schema describes the shape of the JSON that lives inside result.content[0].text for that tool — letting clients author projections, validate responses, or generate types without ever issuing a real tools/call.
Schemas are emitted unconditionally on every tools/list, regardless of the negotiated protocolVersion. Clients on the older 2025-03-26 floor still receive them and (per spec) are expected to ignore unknown fields rather than fail.
Worked example — the outputSchema for get_country_risk:
data shape in the standard freshness envelope:
additionalPropertiesis left implicit (= true) on every schema, so producer-side forward-compatible additions don’t suddenly fail validation.- Per-array
items.propertieslists known fields but does NOT enumerate every observed key — the schema is a hint surface for JMESPath authoring, not a bytecode-level contract. - Schemas describe the success-path payload only. The two catalog-class soft envelopes (
_budget_exceeded,_jmespath_error) are NOT in the per-tool schema — they replace the payload entirely and have their own shapes. See the MCP Error Catalog for both envelopes.
- Every tool accepts
jmespath(string), an optional server-side projection applied after per-tool filters andsummary. - Every cache tool also accepts
summary(boolean), which returns counts plus 3-item samples instead of full lists. - The per-tool tables below list only tool-specific arguments declared by the registry; the universal injected arguments are intentionally documented once here.
Markets & economy
get_market_data
Real-time equity quotes, commodity prices (including gold futures GC=F), crypto prices, forex FX rates (USD/EUR, USD/JPY etc.), sector performance, ETF flows, and Gulf market quotes from WorldMonitor’s curated bootstrap cache.
Parameters (tool-specific):
- API endpoints:
GET /api/market/v1/get-fear-greed-index,GET /api/market/v1/get-sector-summary,GET /api/market/v1/list-commodity-quotes,GET /api/market/v1/list-crypto-quotes,GET /api/market/v1/list-etf-flows,GET /api/market/v1/list-gulf-quotes,GET /api/market/v1/list-market-quotes - Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 30 min before
stale: trueis flagged (set by the seeder cron’s expected interval).
get_economic_data
Macro economic indicators: Fed Funds rate (FRED), economic calendar events, fuel prices, ECB FX rates, EU yield curve, earnings calendar, COT positioning, energy storage data, BIS household debt service ratio (DSR, quarterly, leading indicator of household financial stress across ~40 advanced economies), and BIS residential + commercial property price indices (real, quarterly).
Parameters (tool-specific):
- API endpoints:
GET /api/economic/v1/get-ecb-fx-rates,GET /api/economic/v1/get-economic-calendar,GET /api/economic/v1/get-eu-yield-curve,GET /api/economic/v1/list-fuel-prices,GET /api/market/v1/get-cot-positioning,GET /api/market/v1/list-earnings-calendar - Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 1 d before
stale: trueis flagged (set by the seeder cron’s expected interval).
get_procurement_opportunities
Search active global public-procurement opportunities through the canonical Pro-gated tender API. The tool never reads Upstash directly. It returns a compact projection of the canonical records: official notice URL, source, title, buyer, timing, money, categories, sectors, participationMode, and compact automationFit; it deliberately omits descriptions, eligibility requirements, and submission URLs.
Parameters (tool-specific):
- API endpoint:
GET /api/economic/v1/list-global-tenders - Kind: bounded canonical-route proxy — Pro entitlement remains enforced by the downstream route; no bootstrap or direct-cache exposure.
- Output budget: 10 compact records by default, at most 25. The result retains
nextCursor,total,appliedFilters,countryCoverage,availability, snapshot time, and per-source health summaries. An emptynextCursormeans there are no further pages.
min_automation_score is never implied. automationFit is keyword relevance evidence only, never a legal determination of whether an agent or vendor may bid. participationMode: "unknown" means exactly that — no participation mode was established upstream.
get_company_intelligence
Per-company corporate intelligence from SEC EDGAR and market data (#5695). Company identity resolves through the SEC’s own ticker/name registry to a CIK — by exact ticker, or by a case-insensitive exact SEC title that maps to a single CIK (no prefix guessing). An unresolved enrichment response has sources: [] and an empty company.cik; an unresolved signals response has signals: [] and an empty cik. In either view, unavailable: false means not-found, while unavailable: true means the registry or required source could not answer. The deprecated REST domain field remains an empty compatibility stub because no SEC field can confirm domain ownership; the MCP tool does not expose it. Four views multiplex the four backing REST routes.
Parameters (tool-specific):
- API endpoints:
GET /api/intelligence/v1/get-company-enrichment,GET /api/intelligence/v1/list-company-signals,GET /api/intelligence/v1/search-sec-filings,GET /api/intelligence/v1/list-material-events - Kind: canonical-route proxy —
enrichmentfans out to SEC submissions, Finnhub profile + earnings surprises, and news mentions;signalsuses timestamped SEC filings + news (not fiscal period ends). Each upstream is independently cached.filings-searchproxies EDGAR full-text search;material-eventsreads the seeded market-wide 8-K stream (30-minute cadence). - Freshness: every view’s payload carries its own timestamp (
enrichedAtMs,discoveredAtMs,fetchedAtMs);material-events.fetchedAtMsis the seed time of the stream snapshot.
get_country_macro
Per-country macroeconomic indicators from IMF WEO (~210 countries, monthly cadence). Bundles fiscal/external balance (inflation, current account, gov revenue/expenditure/primary balance, CPI), growth & per-capita (real GDP growth, GDP/capita USD & PPP, savings & investment rates, savings-investment gap), labor & demographics (unemployment, population), and external trade (current account USD, import/export volume % changes). Latest available year per series. Use for country-level economic screening, peer benchmarking, and stagflation/imbalance flags. NOTE: export/import LEVELS in USD (exportsUsd, importsUsd, tradeBalanceUsd) are returned as null — WEO retracted broad coverage for BX/BM indicators in 2026-04; use currentAccountUsd or volume changes (import/exportVolumePctChg) instead.
Parameters (tool-specific):
- API endpoints: none directly — reads from a bootstrap-aggregate cache key (no 1:1 REST endpoint).
- Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 70 d before
stale: trueis flagged (set by the seeder cron’s expected interval).
get_eu_housing_cycle
Eurostat annual house price index (prc_hpi_a, base 2015=100) for all 27 EU members plus EA20 and EU27_2020 aggregates. Each country entry includes the latest value, prior value, date, unit, and a 10-year sparkline series. Complements BIS WS_SPP with broader EU coverage for the Housing cycle tile.
Parameters (tool-specific):
- API endpoints: none directly — reads from a bootstrap-aggregate cache key (no 1:1 REST endpoint).
- Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 50 d before
stale: trueis flagged (set by the seeder cron’s expected interval).
get_eu_quarterly_gov_debt
Eurostat quarterly general government gross debt (gov_10q_ggdebt, %GDP) for all 27 EU members plus EA20 and EU27_2020 aggregates. Each country entry includes latest value, prior value, quarter label, and an 8-quarter sparkline series. Provides fresher debt-trajectory signal than annual IMF GGXWDG_NGDP for EU panels.
Parameters (tool-specific):
- API endpoints: none directly — reads from a bootstrap-aggregate cache key (no 1:1 REST endpoint).
- Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 14 d before
stale: trueis flagged (set by the seeder cron’s expected interval).
get_eu_industrial_production
Eurostat monthly industrial production index (sts_inpr_m, NACE B-D industry excl. construction, SCA, base 2021=100) for all 27 EU members plus EA20 and EU27_2020 aggregates. Each country entry includes latest value, prior value, month label, and a 12-month sparkline series. Leading indicator of real-economy activity used by the “Real economy pulse” sparkline.
Parameters (tool-specific):
- API endpoints: none directly — reads from a bootstrap-aggregate cache key (no 1:1 REST endpoint).
- Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 5 d before
stale: trueis flagged (set by the seeder cron’s expected interval).
get_tariff_trends
Global trade and pricing indicators: US tariff trends (HTS-coded), BigMac index, FAO Food Price Index, and per-country national debt levels.
Parameters (tool-specific):
- API endpoints:
GET /api/economic/v1/get-fao-food-price-index,GET /api/economic/v1/get-national-debt,GET /api/economic/v1/list-bigmac-prices - Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 9 h before
stale: trueis flagged (set by the seeder cron’s expected interval).
get_consumer_prices
Per-country consumer-prices intelligence: 30-day overview, category-level inflation, retailer spread (essentials basket), top movers, and source freshness. Requires country_code (currently only ‘ae’ is seeded).
Parameters:
- API endpoints:
GET /api/consumer-prices/v1/get-consumer-price-freshness,GET /api/consumer-prices/v1/get-consumer-price-overview,GET /api/consumer-prices/v1/list-consumer-price-categories,GET /api/consumer-prices/v1/list-consumer-price-movers,GET /api/consumer-prices/v1/list-retailer-price-spreads - Kind: hybrid — reads cache keys directly (sub-second) but requires an input parameter to select the slice.
- Freshness budget: up to 25 h per slice (24 h cron + 1 h grace) before
stale: trueis flagged.
get_commodity_geo
Global mining sites with coordinates, operator, mineral type, and production status. Covers 71 major mines spanning gold, silver, copper, lithium, uranium, coal, and other minerals worldwide.
Parameters:
- API endpoints: none — this tool reads no cache and makes no HTTP fetch.
- Kind: static registry — filters the bundled
MINING_SITES_RAWconstant (in-memory, ships with the MCP server’s edge bundle). Sub-millisecond, no upstream call. The dataset updates only when the MCP server is redeployed with a refreshed registry.
get_prediction_markets
Prediction markets: geopolitical/elections, tagged tech (AI/crypto/science), finance/economics or untagged fallback. Contracts include current probabilities. Kalshi currently supplies no classifier tags, so source=kalshi with category=tech returns no records and other non-geopolitical Kalshi records fall back to finance.
Parameters (tool-specific):
- API endpoints:
GET /api/prediction/v1/list-prediction-markets - Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 1.5 h before
stale: trueis flagged (set by the seeder cron’s expected interval).
Energy
get_energy_intelligence
Energy supply, prices, storage, disruptions, and policy: EIA petroleum stocks, electricity prices (Ember), gas storage (GIE), fuel shortages, fossil & renewable shares, active energy disruptions, government crisis policies.
Parameters (tool-specific):
- API endpoints:
GET /api/economic/v1/get-energy-crisis-policies,GET /api/supply-chain/v1/get-fuel-shortage-detail,GET /api/supply-chain/v1/list-energy-disruptions,GET /api/supply-chain/v1/list-fuel-shortages - Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 3 d before
stale: trueis flagged (set by the seeder cron’s expected interval).
Geopolitical & security
get_conflict_events
Active armed conflict events (UCDP, Iran), unrest events with geo-coordinates, and country risk scores. Covers ongoing conflicts, protests, and instability indices worldwide.
Parameters (tool-specific):
- API endpoints:
GET /api/conflict/v1/list-iran-events,GET /api/conflict/v1/list-ucdp-events,GET /api/unrest/v1/list-unrest-events - Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 30 min before
stale: trueis flagged (set by the seeder cron’s expected interval).
get_country_risk
Structured risk intelligence for a specific country: Composite Instability Index (CII) score 0-100, component breakdown (unrest/conflict/security/news), travel advisory level, and OFAC sanctions exposure. Fast Redis read — no LLM. Use for quantitative risk screening or to answer “how risky is X right now?”
Parameters:
- API endpoints:
GET /api/intelligence/v1/get-country-risk - Kind: live RPC — proxies a fetch to the WorldMonitor API on each call. Edge-runtime timeout: 8.0s.
get_country_brief
AI-generated per-country intelligence brief. Produces an LLM-analyzed geopolitical and economic assessment for the given country. Supports analytical frameworks for structured lenses.
Parameters:
- API endpoints:
GET /api/intelligence/v1/get-country-intel-brief - Kind: live RPC — proxies a fetch to the WorldMonitor API on each call. Worst-case total budget ~24s (2s context-digest fetch + 22s brief generation, sequential).
- Sources: returns a bounded
sourcesarray with original article links from the digest items used to ground the country context. URLs are copied from feed data, not generated by the LLM.
get_news_intelligence
AI-classified geopolitical threat news summaries, GDELT intelligence signals, cross-source signals, and security advisories from WorldMonitor’s intelligence layer.
Parameters (tool-specific):
- API endpoints:
GET /api/intelligence/v1/list-cross-source-signals,GET /api/intelligence/v1/search-gdelt-documents - Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 30 min before
stale: trueis flagged (set by the seeder cron’s expected interval).
classify_event
Classify a supplied news headline or short text into a threat category and severity via the enum-validated WorldMonitor event classifier. The classifier is temperature-0, 24h-cached per title, and only ever returns values from the fixed category/level enums — never free-form LLM output. classification is null when no enum-valid result could be produced.
Parameters (tool-specific):
- API endpoint:
GET /api/intelligence/v1/classify-event - Kind: bounded canonical-route proxy over an LLM classifier. This op was previously parity-excluded as
llm-passthrough; the 24h per-title cache absorbs repeats and the classifier is capped at 50 output tokens. - Quota: standard — every call consumes the MCP daily reservation for OAuth (Pro) and dashboard-key contexts (50/UTC day). Environment API-key (
wm_…) callers are not subject to that daily reservation; they remain bounded by the 60 requests/minute/key limiter, as with every other MCP tool.
extract_entities
Deterministic named-entity extraction shared with the dashboard: registry entities (companies, indices, commodities, crypto, sectors, countries — alias and keyword matched) plus pattern entities (CVE IDs, APT/FIN threat-group designators, tracked world leaders). No LLM is involved.
Parameters (tool-specific):
- API endpoint:
GET /api/news/v1/list-feed-digest(headlines mode only; text mode performs no fetch). - Kind: deterministic local compute over the shared extraction cores. In headlines mode, entities aggregate to
mentionCount/avgConfidence; in text mode each match reportsmatchType,matchedText, andconfidence. - Quota: standard — every call consumes the MCP daily reservation.
get_news_clusters
Current topic clusters computed over the live headline digest with the same Jaccard clustering (0.5 title-token similarity) the dashboard uses, so agents see the same story groupings as the UI. Each cluster reports its primary headline, member count, distinctSourceCount (the corroboration signal min_sources filters on), source names, top keywords (stop-word and generic-term filtered), aggregated threat level/category, and time span. Server-side primary selection is recency-based because digest items carry no per-source tier.
Parameters (tool-specific):
- API endpoint:
GET /api/news/v1/list-feed-digest - Kind: deterministic local compute — clustering runs per call over the ~150-200 digest headlines (CDN/Redis-cached upstream, 15-min cadence).
- Quota: standard — every call consumes the MCP daily reservation.
get_keyword_spikes
Trending keyword, CVE, and APT/FIN threat-group spikes versus baseline, using the same term-candidacy and spike-decision math as the dashboard’s trending-keywords engine (minimum recent count, strict baseline multiplier, source-diversity gate). The tool queries the recent window and its pre-window baseline as separate cohorts, each capped at 800 stories, so a busy recent window cannot consume the baseline sample. baseline_hours reports the exact sampled pre-window duration, and sample_truncated: true means either cohort reached its cap. When no pre-window stories are available, the tool returns no spikes with an explicit baseline unavailable note and does not cache the result. Results are cached for 10 minutes per (window_hours, min_count) combination.
Parameters (tool-specific):
- API endpoint: none — reads the story accumulator and story-track keys from Redis directly; no HTTP endpoint is proxied.
- Kind: deterministic local compute with a 10-minute Redis result cache.
noteis present when the accumulator is unavailable/empty or the story store was only partially readable — a partial read is never cached, so a transient Redis fault cannot serve wrong spikes for the rest of the TTL. - Quota: standard — every call consumes the MCP daily reservation.
get_cyber_threats
Active cyber threat intelligence: malware IOCs (URLhaus, Feodotracker), CISA known exploited vulnerabilities, and active command-and-control infrastructure.
Parameters (tool-specific):
- API endpoints: none directly — reads from a bootstrap-aggregate cache key (no 1:1 REST endpoint).
- Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 4 h before
stale: trueis flagged (set by the seeder cron’s expected interval).
get_sanctions_data
OFAC SDN sanctioned entities list and sanctions pressure scores by country. Useful for compliance screening and geopolitical pressure analysis.
Parameters (tool-specific):
- API endpoints:
GET /api/sanctions/v1/list-sanctions-pressure,GET /api/sanctions/v1/lookup-sanction-entity - Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 1 d before
stale: trueis flagged (set by the seeder cron’s expected interval).
get_social_velocity
Reddit geopolitical social velocity: top posts from worldnews, geopolitics, and related subreddits with engagement scores and trend signals.
Parameters (tool-specific):
- API endpoints:
GET /api/intelligence/v1/get-social-velocity - Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 30 min before
stale: trueis flagged (set by the seeder cron’s expected interval).
get_temporal_anomalies
Temporal anomaly watch: current event counts vs day-of-week and seasonal baselines, scored by z-score severity. News velocity, satellite fire detections, and other tracked streams are compared against 90-day Welford baselines keyed by weekday and month. Each anomaly carries the observed count, expected baseline count, z-score, multiplier, and a severity band (medium ≥ 1.5σ, high ≥ 2σ, critical ≥ 3σ). An empty anomaly list with fresh data means activity is within normal bounds — that is itself signal.
Parameters (tool-specific):
- API endpoints: none (MCP-only; the REST baseline endpoints are write-through and excluded from parity).
- Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 45 min before
stale: trueis flagged (the producer refreshes hourly and is kept warm by the infra seeder).
get_test_site_seismicity
Nuclear test-site seismic monitor: USGS earthquakes near known test sites scored for proliferation concern. Watches seismic events within 100 km of the monitored nuclear test sites (Punggye-ri, Lop Nur, Novaya Zemlya, the Nevada National Security Site, Semipalatinsk, and other historical sites) and scores each event 0–100 from magnitude, proximity, and depth. Concern bands: low, moderate, elevated, critical. Includes a per-site rollup with event count, max concern, and max magnitude.
Parameters (tool-specific):
- API endpoints: none (MCP-only; the underlying earthquake list is covered by
get_natural_disasters). - Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 30 min before
stale: trueis flagged (set by the seeder cron’s expected interval).
get_signal_convergence
Geographic signal convergence: one-degree grid cells where protests, military flights, naval movements, and earthquakes co-occur inside a 24-hour window. Alerts carry coordinates, contributing domains, a reverse-geocoded location name, and a breadth/volume score. Pass lat/lon/radius_km together to narrow to one area.
Parameters (tool-specific):
- API endpoints: none (MCP-only derived analysis).
- Kind: derived analysis — shared dashboard engine over Redis seed caches.
- Freshness budget: per-feed (flights 30 min, unrest 120 min, earthquakes 30 min, fleet 720 min);
stale: truewhen any feed exceeds its budget.
get_focal_points
Focal-point detection: entities where news coverage and live map signals converge, ranked by multi-signal score. News story clusters are entity-matched against the curated registry, cross-referenced with cross-source escalation signals, and scored with the same engine the dashboard runs. Includes an application-authored ai_context block; source headlines remain separate in focal-point evidence. Also includes mapping-coverage counters.
Parameters (tool-specific):
- API endpoints: none (MCP-only derived analysis).
- Kind: derived analysis — shared dashboard engine over Redis seed caches.
- Freshness budget: up to 30 min per contributing feed before
stale: true.
simulate_infrastructure_cascade
Infrastructure cascade simulation: breadth-first failure propagation across the seeded submarine-cable table plus the curated pipeline, port, and chokepoint registries. Call with no source_id for the catalog of simulatable node ids grouped by type; chained capacity math multiplies along paths so distant impacts shrink realistically.
Parameters (tool-specific):
- API endpoints: none (MCP-only derived analysis).
- Kind: derived analysis — dependency graph built per request from the seeded cable table.
- Freshness budget: up to 25200 min (~17.5 days) for the weekly cable table before
stale: true.
get_military_surge
Military surge watch: per-theater aircraft postures (fighters, tankers, AWACS, reconnaissance, transports, bombers, drones), foreign-presence detections, and the flights seeder’s own surge alerts reported as a separate seeded_surges block (it uses different baselines than the snapshot engine — the two are never silently merged).
Parameters (tool-specific):
- API endpoints: none (MCP-only derived analysis; posture aggregates are also served by
get_military_posture). - Kind: derived analysis — shared dashboard engine over Redis seed caches.
- Freshness budget: flights 30 min, theater posture 60 min before
stale: true.
get_population_exposure
Population exposure: estimated people within the impact radius of active earthquakes, wildfires, and conflict events, using the dashboard’s country-density approximation (nearest priority-country centroid × event-type radius disc). Coarse screening numbers — there is no city-level population dataset behind them.
Parameters (tool-specific):
- API endpoints:
GET /api/displacement/v1/get-population-exposure - Kind: derived analysis — shared exposure core; events mode reads Redis seed caches.
- Freshness budget: per-feed (earthquakes 30 min, wildfires 360 min, conflicts 1440 min); point and countries modes are computed,
cached_at: null.
get_alert_digest
Cross-domain alert digest: every threshold trip across seven domains (country instability, military surges, cable health, ongoing outages, temporal anomalies, thermal escalation, shipping stress) using each producer’s own severity vocabulary — no invented thresholds. Quiet domains and unavailable caches are listed separately so silence is never mistaken for calm.
Parameters (tool-specific):
- API endpoints: none (MCP-only derived analysis).
- Kind: derived analysis — shared digest core over seven Redis seed caches.
- Freshness budget: per-feed (30-360 min);
stale: truewhen any contributing feed exceeds its budget.
get_hotspot_escalation
Hotspot escalation scores: the 29 curated intelligence hotspots ranked on the documented 1-5 composite scale. News pressure, country instability, geographic signal convergence, and nearby military activity are normalized to 0-100 components, weighted 35/25/25/15, and blended 30/70 with each hotspot’s curated static baseline — the same math the dashboard map publishes.
Parameters (tool-specific):
- API endpoints: none (MCP-only derived analysis).
- Kind: derived analysis — shared dashboard engine over Redis seed caches.
- Freshness budget: up to 30 min for news/risk/flights, 120 min for unrest before
stale: true.
get_china_decision_signals
Returns the bounded six-domain China decision-signal snapshot used by the
country summary. Macro-financial, policy/enforcement, cross-Strait activity,
corporate disclosures, corridor conditions, and activity nowcast groups share
one stable order and the status vocabulary available, partial, stale, or
unavailable.
Every returned item retains canonical provenance, publisher type, source and
original reference, translation state, observation/effective/publication/
retrieval times, revision and supersession, confidence, corroboration, and
freshness claims. The tool returns the same bounded items as the public RPC; it
does not expose detailed bilateral trade rows or operator-only source health.
- Parameters: none, apart from the optional common
jmespathprojection. - API endpoint:
GET /api/intelligence/v1/get-china-decision-signals - Kind: canonical RPC over the Railway-composed cache.
- Refresh cadence: every 15 min; each group can degrade independently.
get_military_posture
Theater posture assessment and military risk scores. Reflects aggregated military positioning and escalation signals across global theaters.
Parameters (tool-specific):
- API endpoints:
GET /api/military/v1/get-theater-posture - Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 2 h before
stale: trueis flagged (set by the seeder cron’s expected interval).
get_chokepoint_status
Live maritime chokepoint status: per-chokepoint vessel transit counts (10-min cadence), rolling transit summaries, per-port activity, plus static reference data (chokepoint geometry, canonical 13-chokepoint registry) and flow aggregates. Covers Suez, Hormuz, Malacca, Bab-el-Mandeb, Panama, etc.
Parameters (tool-specific):
- API endpoints:
GET /api/intelligence/v1/get-country-port-activity,GET /api/supply-chain/v1/get-chokepoint-status - Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget (per slice):
stale: trueflags when ANY contributing slice exceeds its individual budget — 30 min for live transit summaries (relay), 36 h for PortWatch port activity, 12 h for chokepoint flows, 14 d for the PortWatch chokepoint reference, and up to ~400 d for the static chokepoint registry / geographic baselines. The bundle’scached_atreflects the oldest contributing seed;stale: truedoesn’t mean ALL the data is old.
get_positive_events
Positive geopolitical events: diplomatic agreements, humanitarian aid, development milestones, and peace initiatives worldwide.
Parameters (tool-specific):
- API endpoints:
GET /api/positive-events/v1/list-positive-geo-events - Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 1 h before
stale: trueis flagged (set by the seeder cron’s expected interval).
Historical intelligence
These three Pro-gated tools read the durable history store that the conflict, military, and energy seeders append to after each run. They share one record shape —id, domain, resource, country, category, title, summary, sourceUrl, occurredAt, ingestedAt, score — so a client can hold a single parser for all three.
The store begins at the day history capture was activated and deepens from there; there is no deep backfill. An empty result for an early window means that window is not covered yet, not that nothing happened. Every response also carries
upstreamUnavailable: when it is true, records is empty because the lookup failed, never because nothing matched.search_intel_history
Semantic search over the stored history, ranked by similarity to a free-text query. The route embeds your query with the same model the stored vectors were written under, so phrasing close to how an analyst would describe the event ranks best. Optional domain, country, and an occurredAt window narrow the candidate set before ranking. Each record carries a cosine-similarity score in [-1, 1]; higher is closer.
Parameters:
- API endpoint:
POST /api/intelligence/v1/search-intel-history - Kind: live RPC — embeds the query, then ranks the history store. Edge-runtime timeout: 12.0s.
- Cost note: every call spends one embeddings round-trip, so the route is rate-limited fail-closed. Prefer one well-phrased query over several near-duplicates.
get_intel_timeline
Reverse-chronological read of the stored history for one scope. Pure index read — no embedding and no ranking — so ordering is by occurredAt alone and every record’s score is 0.
At least one of domain or country is required. Those are the two indexed scopes on the store; an unscoped read has no index to serve it and is rejected with an argument error rather than run as a table scan. Supplying both narrows to their intersection.
Parameters:
- API endpoint:
GET /api/intelligence/v1/get-intel-timeline - Kind: live RPC — one store read, no embedding. Edge-runtime timeout: 8.0s.
get_similar_events
Historical precedents for a situation you describe. Same vector search as search_intel_history over a longer input: situation is a description of a developing situation rather than a search phrase, and a sentence or two of context ranks better than a keyword. The result set is deliberately small because it is read as a precedent list, not scrolled.
Leaving country unset is usually the right choice — a precedent elsewhere is still a precedent. Read an empty list as weak evidence that the situation is novel, not as proof of it: the store only holds what the three seeders have published since capture was activated.
Parameters:
- API endpoint:
POST /api/intelligence/v1/get-similar-events - Kind: live RPC — embeds the situation text, then ranks the history store. Edge-runtime timeout: 12.0s.
- Cost note: embeddings-backed like
search_intel_history, so the same fail-closed rate policy applies.
Movement & infrastructure
get_aviation_status
Airport delays, NOTAM airspace closures, and tracked military aircraft. Covers FAA delay data and active airspace restrictions.
Parameters (tool-specific):
- API endpoints: none directly — reads from a bootstrap-aggregate cache key (no 1:1 REST endpoint).
- Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 1.5 h before
stale: trueis flagged (set by the seeder cron’s expected interval).
get_airspace
Live ADS-B aircraft over a country. Returns civilian flights (OpenSky) and identified military aircraft with callsigns, positions, altitudes, and headings. Answers questions like “how many planes are over the UAE right now?” or “are there military aircraft over Taiwan?”
Parameters:
- API endpoints:
GET /api/aviation/v1/track-aircraft,GET /api/military/v1/list-military-flights - Kind: live RPC — proxies a fetch to the WorldMonitor API on each call. Edge-runtime timeout: 8.0s.
get_maritime_activity
Live vessel traffic and maritime disruptions for a country’s waters. Returns AIS density zones (ships-per-day, intensity score), dark ship events, and chokepoint congestion from AIS tracking.
Parameters:
- API endpoints:
GET /api/maritime/v1/get-vessel-snapshot - Kind: live RPC — proxies a fetch to the WorldMonitor API on each call. Edge-runtime timeout: 8.0s.
get_supply_chain_data
Dry bulk shipping stress index, customs revenue flows, and COMTRADE bilateral trade data. Tracks global supply chain pressure and trade disruptions.
Parameters (tool-specific):
- API endpoints:
GET /api/supply-chain/v1/get-shipping-stress,GET /api/trade/v1/get-customs-revenue - Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 2 d before
stale: trueis flagged (set by the seeder cron’s expected interval).
get_infrastructure_status
Internet infrastructure health: Cloudflare Radar outages and service status for major cloud providers and internet services.
Parameters (tool-specific):
- API endpoints:
GET /api/infrastructure/v1/list-internet-outages - Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 30 min before
stale: trueis flagged (set by the seeder cron’s expected interval).
search_flights
Search Google Flights for real-time flight options between two airports on a specific date. Returns available flights with prices, stops, airline, and segment details. Use IATA airport codes (e.g. “JFK”, “LHR”, “DXB”).
Parameters:
- API endpoints:
GET /api/aviation/v1/search-google-flights - Kind: live RPC — proxies a fetch to the WorldMonitor API on each call. Edge-runtime timeout: 25.0s.
search_flight_prices_by_date
Search Google Flights date-grid pricing across a date range. Returns cheapest prices for each departure date between two airports. Useful for finding the cheapest day to fly. Use IATA airport codes.
Parameters:
- API endpoints:
GET /api/aviation/v1/search-google-dates - Kind: live RPC — proxies a fetch to the WorldMonitor API on each call. Edge-runtime timeout: 25.0s.
Environment & science
get_climate_data
Climate intelligence: temperature/precipitation anomalies (vs 30-year WMO normals), climate-relevant disaster alerts (ReliefWeb/GDACS/FIRMS), atmospheric CO2 trend (NOAA Mauna Loa), air quality (OpenAQ/WAQI PM2.5 stations), Arctic sea ice extent and ocean heat indicators (NSIDC/NOAA), weather alerts, and climate news.
Parameters (tool-specific):
- API endpoints:
GET /api/climate/v1/get-co2-monitoring,GET /api/climate/v1/get-ocean-ice-data,GET /api/climate/v1/list-air-quality-data,GET /api/climate/v1/list-climate-anomalies,GET /api/climate/v1/list-climate-disasters,GET /api/climate/v1/list-climate-news - Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 2 d before
stale: trueis flagged (set by the seeder cron’s expected interval).
get_natural_disasters
Recent earthquakes (USGS), active wildfires (NASA FIRMS), and natural hazard events. Includes magnitude, location, and threat severity.
Parameters (tool-specific):
- API endpoints:
GET /api/natural/v1/list-natural-events,GET /api/seismology/v1/list-earthquakes,GET /api/wildfire/v1/list-fire-detections - Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 30 min before
stale: trueis flagged (set by the seeder cron’s expected interval).
get_radiation_data
Radiation observation levels from global monitoring stations. Flags anomalous readings that may indicate nuclear incidents.
Parameters (tool-specific):
- API endpoints:
GET /api/radiation/v1/list-radiation-observations - Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 30 min before
stale: trueis flagged (set by the seeder cron’s expected interval).
get_research_signals
Tech and research event signals: emerging technology events bootstrap data from curated research feeds.
Parameters (tool-specific):
- API endpoints:
GET /api/research/v1/list-tech-events - Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 8 h before
stale: trueis flagged (set by the seeder cron’s expected interval).
Health
get_health_signals
Active disease outbreaks (WHO/ECDC etc.) and global air-quality station readings (OpenAQ/WAQI PM2.5). For health-risk screening.
Parameters (tool-specific):
- API endpoints:
GET /api/health/v1/list-air-quality-alerts,GET /api/health/v1/list-disease-outbreaks - Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 2 d before
stale: trueis flagged (set by the seeder cron’s expected interval).
Humanitarian & displacement
get_displacement_data
Refugee and IDP counts by country (UNHCR annual data).
Parameters (tool-specific):
- API endpoints:
GET /api/displacement/v1/get-displacement-summary - Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 2.5 d before
stale: trueis flagged (set by the seeder cron’s expected interval).
AI intelligence (live LLM)
get_world_brief
AI-generated world intelligence brief. Fetches the latest geopolitical headlines along with their RSS article bodies and produces a grounded LLM-summarized brief. Supply an optional geo_context to focus on a region or topic.
Parameters:
- API endpoints:
GET /api/news/v1/list-feed-digest,POST /api/news/v1/summarize-article - Kind: live RPC — proxies a fetch to the WorldMonitor API on each call. Worst-case total budget ~24s (6s digest fetch + 18s LLM summarization, sequential).
- Sources: returns a bounded
sourcesarray with original article links from the feed digest items sent as grounding inputs. URLs are copied from feed data, not generated by the LLM.
analyze_situation
AI geopolitical situation analysis (DeductionPanel). Provide a query and optional geo-political context; returns an LLM-powered analytical deduction with confidence and supporting signals.
Parameters:
- API endpoints:
POST /api/intelligence/v1/deduct-situation - Kind: live RPC — proxies a fetch to the WorldMonitor API on each call. Edge-runtime timeout: 25.0s.
generate_forecasts
Generate live AI geopolitical and economic forecasts. Unlike get_forecast_predictions (pre-computed cache), this calls the forecasting model directly for fresh probability estimates. Note: slower than cache tools.
Parameters:
- API endpoints: no public OpenAPI row; runtime proxies
POST /api/forecast/v1/get-forecasts(the OpenAPI spec only declaresGETon that path, which is covered byget_forecast_predictions— this tool’s POST variant runs a fresh forecast). - Kind: live RPC — proxies a fetch to the WorldMonitor API on each call. Edge-runtime timeout: 25.0s.
get_forecast_predictions
AI-generated geopolitical and economic forecasts from WorldMonitor’s predictive models. Covers upcoming risk events and probability assessments.
Parameters (tool-specific):
- API endpoints:
GET /api/forecast/v1/get-forecasts - Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 1.5 h before
stale: trueis flagged (set by the seeder cron’s expected interval).
get_forecast_scorecard
Forecast resolution scorecard with calibration, Brier/log score, domain and generation-origin breakdowns, and pending/judged resolution counts.
Parameters (tool-specific): none
- API endpoints:
GET /api/forecast/v1/get-forecast-scorecard - Kind: cache read — sub-second response from Redis bootstrap cache.
- Freshness budget: up to 36 h before
stale: trueis flagged (daily resolver cadence with missed-cron tolerance).
Meta
describe_tool
Returns the full uncompressed definition of any other tool by name. Use when the compressed tools/list entry is ambiguous about behaviour or argument semantics — since v1.5.0, tools/list returns each tool’s description truncated to the first sentence (≤120 UTF-8 bytes); describe_tool returns the full long-form text plus the same inputSchema (every property’s full description).
Response shape: identical to a single
tools/list entry — { name, description, inputSchema, outputSchema, annotations } — with the full uncompressed description and the same inputSchema.properties (including injected summary for cache tools and jmespath for every tool).
Soft errors (HTTP 200, returned inside the normal content[0].text envelope — NOT JSON-RPC errors):
-
{ "error": "missing_tool_name", "hint": "Pass tool_name as a non-empty string matching a tool from tools/list." }—tool_namewas omitted, empty, or non-string. -
{ "error": "unknown_tool", "requested": "<the bad name>", "available": [...sorted list of all tool names...] }—tool_namedidn’t match any registered tool. Theavailablearray lets the LLM self-correct in one extra call. - API endpoints: none — server-local lookup, no upstream call.
- Kind: metadata lookup — sub-millisecond, no Redis, no LLM.
- Quota: EXEMPT from the Pro daily quota (50/day). Per-minute rate limit (60/min) still applies.
