Skip to main content

Async MCP server aggregating Polymarket, GDELT, OpenSky, and Cloudflare Radar for macro and financial analysis

Project description

global-sentinel-mcp

An async MCP server unifying prediction markets, global news events, aviation state, and internet-infrastructure telemetry into one alternative-data layer for macro and financial analysis.

PyPI version Python 3.11+ MIT License CI Publish

Status: Beta — ready for production use; public API may still shift before 1.0.


Why this exists

Alternative data — prediction-market odds, real-time geopolitical event streams, live aviation transponder data, and internet-infrastructure telemetry — is increasingly central to macro and financial analysis. Each source has its own API shape, authentication model, and update cadence, making it tedious to wire them together for every new project.

global-sentinel-mcp closes that gap by wrapping four public data feeds behind a single Model Context Protocol (MCP) interface. An LLM agent can ask probability, event, aviation-state, and internet-telemetry questions in one place, without knowing the upstream API details. It also exposes a composite macro alert tool that fuses news events and outage annotations into one convergence signal with a human-readable explanation.

The server is fully async (httpx.AsyncClient with retry transport), returns typed Pydantic v2 models for every response and error, ships a TTL cache per source to stay within upstream rate limits, and installs in one command over stdio — no web server required.


Available Tools

Tool Data Source What it returns
get_prediction_odds Polymarket Ranked event odds (probability %, volume, end date) for a query
get_prediction_event_by_id Polymarket Odds for a specific event id or slug
lookup_aircraft_state OpenSky Network Latest ADS-B state for a tail number (N-Number) or ICAO24 hex
convert_nnumber — (offline) Pure-Python FAA N-Number ↔ ICAO24 conversion, no network needed
get_global_events GDELT 2.0 High-impact events for a country, ranked by Goldstein scale
check_network_anomalies Cloudflare Radar BGP hijacks + leaks and regional outage annotations
get_macro_alert GDELT + Cloudflare Composite convergence signal with explanation string

Quickstart

1. Install

uvx global-sentinel-mcp

Or install from PyPI:

pip install global-sentinel-mcp

2. Set environment variables (all optional — unset tools degrade gracefully)

# OpenSky — OAuth2 preferred (post-2025 migration), Basic Auth for legacy accounts.
export OPENSKY_CLIENT_ID="your_opensky_client_id"
export OPENSKY_CLIENT_SECRET="your_opensky_client_secret"
# Cloudflare Radar — required for BGP and outage tools.
export CLOUDFLARE_API_TOKEN="your_cf_token"
# Optional.
export LOG_LEVEL="INFO"

3. Run

global-sentinel-mcp

The server speaks MCP JSON-RPC over stdio.

Local development

git clone https://github.com/ykshah1309/global-sentinel-mcp
cd global-sentinel-mcp
uv sync --dev
uv run global-sentinel-mcp        # run the server
uv run pytest tests/ -v           # run the test suite
uv run ruff check src/ tests/     # lint
uv run mypy src/                  # type-check

Claude Desktop configuration

Add to claude_desktop_config.json (see claude_desktop_config.example.json):

{
  "mcpServers": {
    "global-sentinel": {
      "command": "uvx",
      "args": ["global-sentinel-mcp"],
      "env": {
        "OPENSKY_CLIENT_ID": "your_opensky_client_id",
        "OPENSKY_CLIENT_SECRET": "your_opensky_client_secret",
        "CLOUDFLARE_API_TOKEN": "your_cf_token"
      }
    }
  }
}

Cursor configuration

Add to .cursor/mcp.json:

{
  "mcpServers": {
    "global-sentinel": {
      "command": "uvx",
      "args": ["global-sentinel-mcp"],
      "env": {
        "OPENSKY_CLIENT_ID": "your_opensky_client_id",
        "OPENSKY_CLIENT_SECRET": "your_opensky_client_secret",
        "CLOUDFLARE_API_TOKEN": "your_cf_token"
      }
    }
  }
}

Environment Variables

Variable Required for Description
OPENSKY_CLIENT_ID aviation (OAuth2, preferred) OpenSky OAuth2 client id — register free
OPENSKY_CLIENT_SECRET aviation (OAuth2, preferred) OpenSky OAuth2 client secret
OPENSKY_USERNAME aviation (legacy) OpenSky Basic Auth username (pre-2025 accounts)
OPENSKY_PASSWORD aviation (legacy) OpenSky Basic Auth password
CLOUDFLARE_API_TOKEN BGP + outages Cloudflare API token with Radar read permissions
LOG_LEVEL Python log level (DEBUG / INFO / WARNING / ERROR). Default INFO.

Polymarket and GDELT tools require no authentication. Anonymous OpenSky is allowed but heavily rate-limited.


Data Sources

Polymarket (Gamma API)

Crowd-sourced prediction market data. Token prices reflect the crowd's estimated probability of future events. No API key required. Events expose outcomes and outcomePrices as JSON-encoded strings — the client parses the "Yes" leg and returns it as probability_pct. Docs

GDELT 2.0

The world's largest open-access global news event database, updated every 15 minutes. Events are coded with actors, event types, Goldstein conflict/cooperation scores, and geographic coordinates. Per publish cycle the server downloads and parses the 5 MB export zip exactly once, then answers all country queries from an in-memory DataFrame cache. Docs

OpenSky Network

Public ADS-B flight tracking from a global network of volunteer receivers. Returns real-time position, altitude, velocity, and on-ground status for any aircraft with a Mode S transponder. Post-2025 the service moved to OAuth2 client-credentials; this server handles token refresh automatically and falls back to Basic Auth (legacy) or anonymous if credentials are absent. Docs

Cloudflare Radar

Internet-infrastructure telemetry from Cloudflare's global network. Covers BGP routing anomalies (/bgp/hijacks/events, /bgp/leaks/events) and regional outage annotations (/annotations/outages, formerly "traffic anomalies", renamed by Cloudflare in 2024). Requires a free Cloudflare API token. Docs


Contributing

See CONTRIBUTING.md for setup instructions, branch naming conventions, testing requirements, and code style guidelines.


License

MIT — Copyright (c) 2026 ykshah1309

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

global_sentinel_mcp-0.1.0.tar.gz (25.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

global_sentinel_mcp-0.1.0-py3-none-any.whl (28.3 kB view details)

Uploaded Python 3

File details

Details for the file global_sentinel_mcp-0.1.0.tar.gz.

File metadata

  • Download URL: global_sentinel_mcp-0.1.0.tar.gz
  • Upload date:
  • Size: 25.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for global_sentinel_mcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 3892d424984a4fadbdfc575509ba286797d5e3706f88b4578862c973f2444bdc
MD5 fd4f3b8a999469c644013cb2ca1f7cc6
BLAKE2b-256 19cee3f3c281a0594799162afb4a9a536fa88a784ce6d409da93795daf4e3b21

See more details on using hashes here.

File details

Details for the file global_sentinel_mcp-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: global_sentinel_mcp-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 28.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for global_sentinel_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 933a5c34855855623b3a7b62f4a9112577ac89992503792ef6136d0656491f4f
MD5 8fa38f53b907aa3a39fbf7db905ddd05
BLAKE2b-256 a7483190d0219eb691045ee278da1d8bc6cbb637be29f930109b97c7dfb7ad05

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page