Tickers to keep, e.g. ["AAPL","GC=F","BTC"]. Case-insensitive; matches equity/commodity/crypto/gulf quotes, sector ETFs, and ETF-flow tickers. Omit for the full snapshot.
asset_classarray
Restrict the response to one or more asset classes. Omit for all.
limitnumber
Cap each per-class quote list (stocks/commodities/crypto/gulf/sectors/ETF flows) to at most this many items (default 30, pass 0 for no cap).
summaryboolean
Return counts + 3-item samples instead of full lists. Useful when you only need shape/size or want to budget context before drilling in.
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
get_conflict_events
Active armed conflict events (UCDP, Iran), unrest events with geo-coordinates, and country risk scores.
Parameters (5)
countrystring
Filter to one country — matches the country name on conflict/unrest events and the ISO 3166-1 alpha-2 region code on risk scores (case-insensitive).
min_fatalitiesnumber
Drop events below this fatality count (UCDP deathsBest / unrest fatalities).
limitnumber
Cap each event list to at most this many items (default 30, pass 0 for no cap).
summaryboolean
Return counts + 3-item samples instead of full lists. Useful when you only need shape/size or want to budget context before drilling in.
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
get_aviation_status
Airport delays, NOTAM airspace closures, and tracked military aircraft.
Parameters (6)
disrupted_onlyboolean
Drop airports with severity "normal" — keep only airports actually experiencing delays/closures. The bootstrap lists every monitored airport, so most rows are non-events without this.
countrystring
Filter to one country by name (case-insensitive substring, e.g. "united states").
iatastring
Filter to a single airport by IATA code (e.g. "JFK").
limitnumber
Cap the alert list to at most this many items (default 30, pass 0 for no cap).
summaryboolean
Return counts + 3-item samples instead of full lists. Useful when you only need shape/size or want to budget context before drilling in.
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
Filter top news stories to one category (e.g. "conflict", "economy"; fallback is "general").
countrystring
Filter top stories and travel advisories to one ISO 3166-1 alpha-2 country code (case-insensitive).
alerts_onlyboolean
Keep only top stories flagged as alerts.
limitnumber
Cap each list (top stories, signals, advisories) to at most this many items (default 30, pass 0 for no cap).
summaryboolean
Return counts + 3-item samples instead of full lists. Useful when you only need shape/size or want to budget context before drilling in.
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
get_natural_disasters
Recent earthquakes (USGS), active wildfires (NASA FIRMS), and natural hazard events.
Parameters (6)
datasetarray
Restrict to one or more hazard datasets (earthquakes / wildfires / other natural events). Omit for all.
min_magnitudenumber
Drop earthquakes and natural events below this magnitude.
active_onlyboolean
Keep only natural events that are still active (not closed).
limitnumber
Cap each hazard list to at most this many items (default 30, pass 0 for no cap).
summaryboolean
Return counts + 3-item samples instead of full lists. Useful when you only need shape/size or want to budget context before drilling in.
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
get_military_posture
Theater posture assessment and military risk scores.
Parameters (5)
theaterstring
Filter to one theater by id (case-insensitive substring, e.g. "iran", "taiwan", "baltic", "korea").
posture_levelstring
Filter to a single posture level.
limitnumber
Cap the theaters list to at most this many items (default 30, pass 0 for no cap).
summaryboolean
Return counts + 3-item samples instead of full lists. Useful when you only need shape/size or want to budget context before drilling in.
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
get_cyber_threats
Active cyber threat intelligence: malware IOCs (URLhaus, Feodotracker), CISA known exploited vulnerabilities, and active
Parameters (6)
threat_typestring
Filter to one threat type (case-insensitive substring, e.g. "malware", "vulnerability", "c2").
min_severitystring
Drop threats below this severity level.
countrystring
Filter to one ISO 3166-1 alpha-2 country code (many threats have no country and are dropped by this filter).
limitnumber
Cap the threat list to at most this many items (default 30, pass 0 for no cap).
summaryboolean
Return counts + 3-item samples instead of full lists. Useful when you only need shape/size or want to budget context before drilling in.
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
get_economic_data
Macro economic indicators: Fed Funds rate (FRED), economic calendar events, fuel prices, ECB FX rates, EU yield curve, e
Parameters (5)
datasetarray
Restrict the response to one or more sub-datasets. Omit for the full economic bundle.
countrystring
Filter the country-keyed datasets (fuel-prices, BIS DSR/property, economic calendar) to one ISO 3166-1 alpha-2 code.
limitnumber
Cap each list dataset (calendar, spending, earnings) to at most this many items (default 30, pass 0 for no cap).
summaryboolean
Return counts + 3-item samples instead of full lists. Useful when you only need shape/size or want to budget context before drilling in.
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
get_country_macro
Per-country macroeconomic indicators from IMF WEO (~210 countries, monthly cadence).
Parameters (4)
countriesarray
ISO 3166-1 alpha-2 country codes to keep across all four IMF datasets (e.g. ["US","DE","CN"]). Omit for all ~210 countries.
limitinteger
Cap each IMF dataset country map to at most this many entries when no countries filter is supplied (default 30, pass 0 for no cap).
summaryboolean
Return counts + 3-item samples instead of full lists. Useful when you only need shape/size or want to budget context before drilling in.
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
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.
Parameters (4)
countriesarray
Eurostat geo codes to keep — ISO 3166-1 alpha-2, but "EL" for Greece, plus aggregates "EA20" and "EU27_2020". Omit for all.
limitinteger
Cap the country map to at most this many entries when no countries filter is supplied (default 30, pass 0 for no cap).
summaryboolean
Return counts + 3-item samples instead of full lists. Useful when you only need shape/size or want to budget context before drilling in.
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
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 ag
Parameters (4)
countriesarray
Eurostat geo codes to keep — ISO 3166-1 alpha-2, but "EL" for Greece, plus aggregates "EA20" and "EU27_2020". Omit for all.
limitinteger
Cap the country map to at most this many entries when no countries filter is supplied (default 30, pass 0 for no cap).
summaryboolean
Return counts + 3-item samples instead of full lists. Useful when you only need shape/size or want to budget context before drilling in.
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
get_eu_industrial_production
Eurostat monthly industrial production index (sts_inpr_m, NACE B-D industry excl.
Parameters (4)
countriesarray
Eurostat geo codes to keep — ISO 3166-1 alpha-2, but "EL" for Greece, plus aggregates "EA20" and "EU27_2020". Omit for all.
limitinteger
Cap the country map to at most this many entries when no countries filter is supplied (default 30, pass 0 for no cap).
summaryboolean
Return counts + 3-item samples instead of full lists. Useful when you only need shape/size or want to budget context before drilling in.
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
get_prediction_markets
Active Polymarket event contracts with current probabilities.
Parameters (6)
categorystring
Restrict to one market category bucket. Omit for all three.
querystring
Keep only markets whose title contains this text (case-insensitive).
sourcestring
Filter to one prediction-market source.
limitnumber
Cap each category bucket to at most this many markets (default 30, pass 0 for no cap).
summaryboolean
Return counts + 3-item samples instead of full lists. Useful when you only need shape/size or want to budget context before drilling in.
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
get_sanctions_data
OFAC SDN sanctioned entities list and sanctions pressure scores by country.
Parameters (6)
countrystring
Filter sanctioned entities and pressure scores to one ISO 3166-1 alpha-2 country code.
entity_typestring
Filter to one entity type (case-insensitive substring, e.g. "vessel", "aircraft", "person", "entity").
querystring
Keep only sanctioned entities whose name contains this text (case-insensitive).
limitnumber
Cap the entity list and recent pressure entries to at most this many items (default 30, pass 0 for no cap).
summaryboolean
Return counts + 3-item samples instead of full lists. Useful when you only need shape/size or want to budget context before drilling in.
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
get_displacement_data
Refugee and IDP counts by country (UNHCR annual data).
Parameters (4)
countriesarray
ISO 3166-1 alpha-3 country codes to keep (e.g. ["SYR","UKR","AFG"]). Matches both per-country totals and origin/asylum flows. Omit for all.
limitnumber
Cap the per-country and top-flow lists to at most this many items (default 30, pass 0 for no cap).
summaryboolean
Return counts + 3-item samples instead of full lists. Useful when you only need shape/size or want to budget context before drilling in.
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
get_health_signals
Active disease outbreaks (WHO/ECDC etc.) and global air-quality station readings (OpenAQ/WAQI PM2.5).
Parameters (7)
signal_typearray
Restrict to disease outbreaks, air-quality stations, or both. Omit for both.
countrystring
Filter outbreaks and air-quality stations to one ISO 3166-1 alpha-2 country code.
diseasestring
Keep only outbreaks whose disease name contains this text (case-insensitive).
min_aqinumber
Drop air-quality stations below this AQI value.
limitnumber
Cap the outbreak and station lists to at most this many items (default 30, pass 0 for no cap).
summaryboolean
Return counts + 3-item samples instead of full lists. Useful when you only need shape/size or want to budget context before drilling in.
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
get_energy_intelligence
Energy supply, prices, storage, disruptions, and policy: EIA petroleum stocks, electricity prices (Ember), gas storage (
Parameters (5)
datasetarray
Restrict the response to one or more energy sub-datasets. Omit for the full bundle.
countrystring
Filter the country-keyed datasets (Ember electricity mix, gas storage, fuel shortages, energy disruptions, fossil-share) to one ISO 3166-1 alpha-2 code.
limitnumber
Cap each list-bearing energy slice (crisis-policies, electricity regions, gas-storage countries, World Bank renewable history/regions) to at most this many items (default 30, pass 0 for no cap).
summaryboolean
Return counts + 3-item samples instead of full lists. Useful when you only need shape/size or want to budget context before drilling in.
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
Restrict the response to one or more sub-datasets (dry-bulk shipping stress / customs revenue / COMTRADE flows). Omit for all.
commoditystring
Filter COMTRADE flows to one commodity — matches the HS code exactly or the commodity description by substring (e.g. "2709" or "crude").
limitnumber
Cap each list dataset (carriers, months, flows) to at most this many items (default 30, pass 0 for no cap).
summaryboolean
Return counts + 3-item samples instead of full lists. Useful when you only need shape/size or want to budget context before drilling in.
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
get_tariff_trends
Global trade and pricing indicators: US tariff trends (HTS-coded), BigMac index, FAO Food Price Index, and per-country n
Parameters (5)
datasetarray
Restrict the response to one or more sub-datasets. Omit for the full bundle.
countrystring
Filter the per-country datasets to one ISO 3166-1 alpha-2 country code (e.g. "US"). It is translated to alpha-3 internally for the national-debt dataset; passing an alpha-3 code directly also works.
limitnumber
Cap each list dataset (tariff datapoints, BigMac countries, debt entries) to at most this many items (default 30, pass 0 for no cap).
summaryboolean
Return counts + 3-item samples instead of full lists. Useful when you only need shape/size or want to budget context before drilling in.
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
get_chokepoint_status
Live maritime chokepoint status: per-chokepoint vessel transit counts (10-min cadence), rolling transit summaries, per-p
Parameters (5)
chokepointstring
Filter to one chokepoint — matches by case-insensitive substring across the differing identifiers used by each dataset (e.g. "hormuz" matches "hormuz_strait", "Strait of Hormuz").
datasetarray
Restrict the response to one or more sub-datasets. Omit for the full bundle.
limitnumber
Cap the chokepoint-baselines list and the _countries ISO2 index to at most this many items (default 30, pass 0 for no cap). Keyed-object maps (transit-summaries, chokepoint_transits, ref, chokepoint-flows) are intentionally not capped — use the `chokepoint` filter instead.
summaryboolean
Return counts + 3-item samples instead of full lists. Useful when you only need shape/size or want to budget context before drilling in.
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
get_positive_events
Positive geopolitical events: diplomatic agreements, humanitarian aid, development milestones, and peace initiatives wor
Parameters (4)
categorystring
Filter to one positive-event category.
limitnumber
Cap the event list to at most this many items (default 30, pass 0 for no cap).
summaryboolean
Return counts + 3-item samples instead of full lists. Useful when you only need shape/size or want to budget context before drilling in.
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
get_radiation_data
Radiation observation levels from global monitoring stations.
Parameters (5)
countrystring
Filter to one country by name (case-insensitive substring).
anomalous_onlyboolean
Drop observations with severity "normal" — keep only elevated/spike readings.
limitnumber
Cap the observation list to at most this many items (default 30, pass 0 for no cap).
summaryboolean
Return counts + 3-item samples instead of full lists. Useful when you only need shape/size or want to budget context before drilling in.
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
get_research_signals
Tech and research event signals: emerging technology events bootstrap data from curated research feeds.
Parameters (5)
typestring
Filter to one tech-event type.
sourcestring
Filter to one source feed (e.g. "techmeme", "dev.events", "curated").
limitnumber
Cap the event list to at most this many items (default 30, pass 0 for no cap).
summaryboolean
Return counts + 3-item samples instead of full lists. Useful when you only need shape/size or want to budget context before drilling in.
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
get_forecast_predictions
AI-generated geopolitical and economic forecasts from WorldMonitor's predictive models.
Parameters (5)
domainstring
Filter to one forecast domain (exact, case-insensitive — e.g. "shipping", "energy", "macro").
regionstring
Filter to one region/theater (case-insensitive substring).
limitnumber
Cap the forecast list to at most this many items (default 30, pass 0 for no cap).
summaryboolean
Return counts + 3-item samples instead of full lists. Useful when you only need shape/size or want to budget context before drilling in.
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
get_social_velocity
Reddit geopolitical social velocity: top posts from worldnews, geopolitics, and related subreddits with engagement score
Parameters (4)
subredditstring
Filter to one subreddit (e.g. "worldnews", "geopolitics").
limitnumber
Cap the post list to at most this many items (default 30, pass 0 for no cap).
summaryboolean
Return counts + 3-item samples instead of full lists. Useful when you only need shape/size or want to budget context before drilling in.
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
get_world_brief
AI-generated world intelligence brief.
Parameters (2)
geo_contextstring
Optional focus context (e.g. "Middle East tensions", "US-China trade war")
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
get_country_brief
AI-generated per-country intelligence brief.
Parameters (3)
country_codestringrequired
ISO 3166-1 alpha-2 country code, e.g. "US", "DE", "CN", "IR"
frameworkstring
Optional analytical framework instructions to shape the analysis lens (e.g. Ray Dalio debt cycle, PMESII-PT)
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
get_country_risk
Structured risk intelligence for a specific country: Composite Instability Index (CII) score 0-100, component breakdown
Parameters (2)
country_codestringrequired
ISO 3166-1 alpha-2 country code, e.g. "RU", "IR", "CN", "UA"
jmespathstring
Optional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
Real-time global intelligence dashboard — AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface.
Local AI — run everything with Ollama, no API keys required
6 site variants from a single codebase (world, tech, finance, commodity, happy, energy)
Native desktop app (Tauri 2) for macOS, Windows, and Linux
25 languages with native-language feeds and RTL support
For the full feature list, architecture, data sources, and algorithms, see the documentation.
Support Status
All site variants and desktop binaries are built from a single codebase and ship from the same release process. The table below clarifies maintenance status so you know which surfaces are safe to depend on.
Public deployments built from this repo, actively maintained
Desktop binaries (Windows / macOS Apple Silicon / macOS Intel / Linux AppImage)
Stable
One Tauri binary that switches variants in-app; current CI release targets are full and tech
Issues filed against any of the above are triaged from the same backlog — see the issues board for currently-open work.
Quick Start
bash
git clone https://github.com/koala73/worldmonitor.git
cd worldmonitor
npm install
npm run dev
Open localhost:3000 (override the port with DEV_PORT in .env.local). The app runs with no environment variables.
Feature-specific data sources may require credentials. See .env.example for the full list.
For variant-specific development:
bash
npm run dev:tech # tech.worldmonitor.app
npm run dev:finance # finance.worldmonitor.app
npm run dev:commodity # commodity.worldmonitor.app
npm run dev:happy # happy.worldmonitor.app
npm run dev:energy # energy.worldmonitor.app
See the self-hosting guide for deployment options (Vercel, Docker, static).
npx worldmonitor tools # run ad-hoc — list every MCP tool (no key needed)
npm install -g worldmonitor # or install the `worldmonitor` (alias `wm`) command
worldmonitor risk IR --api-key wm_xxx
Flight data provided graciously by Wingbits, the most advanced ADS-B flight data solution.
Data Sources
WorldMonitor aggregates 65+ external providers and APIs across geopolitics, finance, energy, climate, aviation, cyber, military, infrastructure, and news intelligence — surfaced through 500+ curated feeds and tracked by a freshness monitor covering 35 source groups. See the full data sources catalog for providers, feed tiers, and collection methods.
npm run typecheck # Type checking
npm run build:full # Production build
License
AGPL-3.0-only for the source code. Commercial use is permitted under the AGPL when you comply with its copyleft and source-availability terms.
Use Case
Allowed?
Personal / research / educational
Yes, under AGPL-3.0-only
Self-hosted instance
Yes, under AGPL-3.0-only
Fork and modify
Yes, share source under AGPL-3.0-only when required
Commercial use / SaaS
Yes, under AGPL-3.0-only when you comply with AGPL obligations
Private-source proprietary use or official branding rights
Separate commercial or trademark permission needed
See LICENSE for the full code license and docs/license.mdx for a plain-language summary. Commercial licensing is available as an alternative option for teams that need non-AGPL terms.
Copyright (C) 2024-2026 Elie Habib. All rights reserved.