finds.dev← search

// the find

marc-shade/world-intel-mcp

★ 657 · Python · MIT · updated Sep 2026

120-tool MCP server for real-time global intelligence: markets, SEC filings, conflict, military, cyber, climate, news, and 30+ domains. AI situation briefs that cite their sources, user-defined geofences with escalation scoring, cited daily digests, live SSE dashboard. MIT, no paid API keys.

A Python MCP server exposing 132 tools over mostly keyless public sources: markets, FRED, USGS, ACLED, OFAC, NOAA, aviation and military flight data, and 119 RSS feeds. It is for developers wiring an agent into open-source intelligence or building their own situational-awareness workflow, and it is MIT licensed.

The fetch layer is the best part: one async Fetcher with retries, per-source rate limits, a circuit breaker that trips for five minutes after three consecutive failures, and get_stale() fallback, so one dead upstream degrades one domain instead of the whole brief. The AOI geofences are done carefully. Membership is exact for each shape, corridor distance is measured to the route, the antimeridian is handled by querying both sides, and anything that couldn't be scoped goes into data_gaps instead of disappearing. Every item in a brief carries an [n] pointing into a sources list, and the Ollama brief falls back to a mechanically cited version when no model is running, so the output can be checked. The README cites about 900 tests that mock HTTP with respx, with live smoke tests kept separate and off by default.

132 tools is a lot of schema for a model to choose from on every turn, and the project already disagrees with itself on the count (132 in the README, 120 in the repo description). A smaller set of composed tools would probably get used better. The static reference data is thin by the README's own admission: 70 bases, 40 ports and 24 pipelines is a sample, so a quiet infrastructure result tells you little. The sources are free public endpoints, mostly unauthenticated, that change without notice, and the README describes no check for a parser that suddenly returns zero rows, so a quiet day and a broken feed look the same. The semantic search examples depend on an optional Qdrant container and FastEmbed, so they won't work out of the box.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →