GEOPOLITICS INTELLIGENCE MCP — geo.mcp.brunosan.de

193 Countries.
One geo_burst.
Every Agent.

BrunoSan Geopolitics tracks 500+ sources across 193 countries daily — computing deterministic signal scores, alliance stress indices, and a Global Risk Index from 0 to 10. No editorial judgment. Pure mathematics. MCP-native.

geo.mcp.brunosan.de/mcp
Countries
Tracked
Signal
Clusters
High
Signals
Briefs
Generated
Global
Risk Index
The Score
geo_burst
Deterministic Signal Intensity Score

geo_burst = burst_score × avg_geopolitical_relevance

burst_score = today's article count ÷ 7-day average for this country+event combination.
A geo_burst of 2.0 = twice the normal signal volume — computed fresh every 24h from real articles, not from editorial judgment.

No Bloomberg Terminal has this. No Reuters API computes this. It can only be grown — day by day, country by country, event by event.

SCORE 1 burst_score

article_count ÷ avg_7day. Tag 1 = 1.0. Tag 7+ = echtes Signal vs. Baseline.

SCORE 2 signal_velocity

Reporting countries ÷ total active countries. Misst Ausbreitungsgeschwindigkeit eines Signals weltweit.

SCORE 3 alliance_stress

Std-Abweichung der Sentiments der Bündnismitglieder. 1.0 = maximale interne Divergenz (z.B. USA pos / Türkei neg).

10 Tools

From daily brief
to world snapshot.

Every tool is read-only, deterministic, and EU-hosted. No hallucination — when data is unavailable, the tool says so.

TOOL 01 geo_daily_brief()

Full daily intelligence brief. Everything the pipeline extracted from 4,000+ articles — country alerts, cross-country signals, alliance stress, source URLs.

# Get today's complete brief geo_daily_brief(api_key="your-key") # → summary, country_alerts[], # cross_country_alerts[], alliance_alerts[]

Unique: Every alert includes geo_burst, risk_level, trend, key_actors, and verified source_urls — not editorial opinion.

Ask your agent → "What are the 3 hottest geopolitical signals right now?" → "Give me today's full intelligence brief including alliance alerts." → "Which countries have escalating signals in today's brief?"
TOOL 02 geo_risk_index()

Global Risk Index 0–10. NOMINAL → ELEVATED → GUARDED → SEVERE → CRITICAL. Computed from tension × stress × high_signal_count. Fully deterministic formula.

# formula: score = (tension×6.0 + stress×1.5 + normalized_high×2.5) × 10 # → risk_score, risk_label, high_alerts[]

Unique: A sovereign wealth fund can build an automated risk-off trigger on this score. No LLM judgment in the loop.

Ask your agent → "What is the current Global Risk Index and what's driving it?" → "Is the global risk level elevated or critical today?" → "Show me the formula breakdown for today's risk score."
TOOL 03 geo_top_signals(n)

Top-N clusters by geo_burst for today. Filter by cluster_type (country/cross_country/alliance) or event_type. The fastest way to find what's moving.

geo_top_signals(n=10, event_type="military_action", api_key="your-key") # → ranked by geo_burst, with velocity

Unique: Not "most tweeted" or "most read" — highest signal intensity vs. 7-day baseline. Manipulation-resistant by design.

Ask your agent → "What are the top 5 military_action signals by geo_burst today?" → "Which signals have the highest velocity — spreading across most countries?" → "Show me the top 10 geopolitical clusters right now."
TOOL 04 geo_country_score(iso3)

Full power profile for any country. geo_scores, World Bank macro data, alliance memberships, top active clusters — all in one call.

geo_country_score(iso3="IRN", api_key="your-key") # → power_score, signal_velocity, # alliance_stress, world_bank{}

Unique: GDP + military spend + population + geo_burst + alliance membership in one deterministic object.

Ask your agent → "Give me the full power profile and geo_scores for Iran." → "What is Germany's alliance stress and signal_velocity today?" → "Show me China's World Bank macro data and top clusters."
TOOL 05 geo_alliance_stress()

Internal divergence monitor for all 26 alliances — NATO, EU, BRICS, SCO, G7, G20, OPEC+, AUKUS, QUAD and more. When Turkey sends different signals than the US inside NATO, this catches it.

geo_alliance_stress( min_stress=0.5, api_key="your-key") # → sorted by alliance_stress_score desc

Unique: Standard-deviation of member sentiments. No Bloomberg terminal computes this. Pure mathematics from raw articles.

Ask your agent → "Which alliances are showing the highest internal divergence today?" → "Is NATO under stress — are any members sending conflicting signals?" → "Show all alliances with stress score above 0.5."
TOOL 06 geo_cross_country(iso3_a, iso3_b)

Bilateral signal between any two countries. USA–China, Russia–Ukraine, Israel–Iran — get 7-day cluster history for any pair, sorted by geo_burst.

geo_cross_country( iso3_a="USA", iso3_b="CHN", days=7, api_key="your-key") # → all bilateral clusters last 7 days

Unique: Cluster key is always alphabetically sorted (CHN+USA), making it fully deterministic and queryable over time.

Ask your agent → "What bilateral signals exist between the USA and China this week?" → "Show me all Russia–Ukraine cluster history for the last 7 days." → "What cross-country events involve Israel and Iran?"
TOOL 07 geo_world_snapshot()

Complete machine-readable world state. All 155+ active countries with geo_scores for today. The foundation of the live map at brunosan.de/geopolitics/

geo_world_snapshot( min_articles=5, api_key="your-key") # → 155 countries, all 6 geo_scores

Unique: 193 countries × 6 deterministic scores × daily cadence. No other API provides this as a single machine-readable object.

Ask your agent → "Give me a complete world snapshot — all active countries with geo_scores." → "Which 10 countries have the highest geo_burst today?" → "Show me all countries with risk_level=critical right now."
TOOL 08 geo_cluster_search(query)

Search all clusters by keyword + optional event_type filter. Find all sanction clusters from the last 7 days, all military_action clusters for a specific region.

geo_cluster_search( query="Iran sanctions", event_type="sanction", days=7, api_key="your-key")

Unique: Searches cluster labels — the deterministic compound keys (e.g. IRN::sanction, USA+IRN::military_action).

Ask your agent → "Find all sanction clusters from the last 7 days." → "Search for Iran sanctions — what clusters exist?" → "Show me all military_action clusters in the Middle East."
TOOL 09 geo_country_history(iso3)

7-day trend for any country. Signal velocity trajectory, power shift index, all active clusters per day. Answers: "Has Iran activity increased this week?"

geo_country_history( iso3="UKR", days=7, api_key="your-key") # → score_history[], cluster_history[]

Unique: power_shift_index = (today − avg_7day) / avg_7day. Negative = declining attention. Positive = surging. Pure math.

Ask your agent → "Has Iran's signal activity increased or decreased this week?" → "Show me Ukraine's 7-day trend — power_shift_index trajectory." → "What has been North Korea's cluster history over the past week?"
TOOL 10 geo_event_type(event_type)

All clusters of a specific event type today. "Which countries have active military_action signals right now?" Sorted by geo_burst.

geo_event_type( event_type="military_action", api_key="your-key") # 16 event types: military_action, # sanction, coup, cyber_attack, ...

Unique: 16 event types, deterministically classified by Gemini 2.5 Flash at temp=0.0. Same article → same classification. Always.

Ask your agent → "Which countries have active coup signals right now?" → "Show all cyber_attack clusters today, sorted by geo_burst." → "What peace_negotiation events are active globally?"
What Only We Have

No other API
computes this.

These are not features. These are structural advantages that can only be grown — not bought.

🌍
193 Countries. Every Day.

Not a curated list of "important" countries. All 193 UN member states, tracked from their own national media sources. Local feeds, not just Western wire services.

487/532 feeds validated · 80.3% country coverage day 1
Alliance Stress — Internal Divergence

When Turkey sends positive signals about Russia while the US sends negative ones — inside NATO — the alliance_stress_score catches it. Standard deviation of member sentiments. Nowhere else.

26 alliances monitored · std_dev(sentiment per member)
🔗
Cross-Bloc Tension Score

Negative signals flowing between Western and Eastern blocs — measured daily as a ratio. When BRICS media publishes negative coverage of NATO countries at 3× normal rate, this detects it before any analyst does.

cross_bloc_tension = negative_cross / total_cross
📡
Signal Velocity — Geographic Spread

How many independent countries are reporting on this event? A signal reported by 40 countries simultaneously is categorically different from one reported by 3. We measure the difference.

velocity = reporting_countries / total_active_countries
💰
World Bank Macro — Per Country

GDP, military spend, FX reserves, inflation, unemployment — 14 World Bank indicators per country, refreshed daily and attached to every geo_score. Context for every signal.

14 WB indicators · FRED 6 global series · Alpha Vantage Forex
🧮
UUID-Stable Objects

Every country, alliance, cluster, and article has a deterministic UUID v5 ID. The same event generates the same cluster ID — forever. Queryable, auditable, reproducible months later.

det_uuid(namespace, key) · idempotent · INSERT OR REPLACE
Connect

Add to your agent
in 60 seconds.

One MCP endpoint. Works with Claude API, LangChain, AutoGPT, and any MCP-compatible framework.

Python — Anthropic Claude API
# Add BrunoSan Geopolitics to your Claude agent
response = client.messages.create(
    model="claude-opus-4-5",
    max_tokens=1024,
    mcp_servers=[
        {
            "type": "url",
            "url": "https://geo.mcp.brunosan.de/mcp",
            "name": "brunosan-geopolitics",
        }
    ],
    messages=[{
        "role": "user",
        "content": "What is the current Global Risk Index and which countries have the highest geo_burst today?"
    }]
)
Claude.ai — Settings → Connectors
# In Claude.ai: Settings → Connectors → Add MCP Server
URL: https://geo.mcp.brunosan.de/mcp
Name: BrunoSan Geopolitics

# Then in any conversation:
"Use geo_risk_index to get today's Global Risk Index"
"Use geo_top_signals to find the 10 highest geo_burst signals"
"Use geo_alliance_stress to check NATO internal divergence"
Access

Start free.
Scale when ready.

Free Trial
Free · 24h

No commitment

  • All 10 tools
  • 30 calls/min
  • Today's brief
  • Historical data
  • Priority support
Get Trial Key
Full Platform
€150/mo

All 8 verticals

  • All verticals incl. Geo
  • Cross-domain signals
  • 90-day history
  • Priority support
  • Custom alerts
Get Access

Not political advice. EU-hosted. GDPR-compliant. DoWell UG Hamburg.