feat: geospatial datasets — 70 bases, 40 ports, 24 pipelines, 24 nuclear (+4 = 60 tools)

Static geospatial intelligence datasets with map visualization:
- 70 military bases from 9 operators (USA, RUS, CHN, GBR, FRA, NATO, etc.)
- 40 strategic ports (container, oil, LNG, naval, bulk)
- 24 oil/gas/hydrogen pipelines with capacity and status
- 24 nuclear facilities (power, enrichment, research, reprocessing)
- 4 new MCP tools: intel_military_bases, intel_strategic_ports,
  intel_pipelines, intel_nuclear_facilities
- New "Infrastructure" map layer with base/port/facility markers
- Pipeline summary table in drawer with click-to-detail
- All geospatial items have detail modals on click

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Marc Shade
2026-02-24 07:42:08 -05:00
co-authored by Claude Opus 4.6
parent a3dabb2c9f
commit 11fc331ba4
5 changed files with 720 additions and 4 deletions
+7
View File
@@ -44,6 +44,7 @@ from world_intel_mcp.sources import (
)
from world_intel_mcp.analysis.alerts import fetch_alert_digest, fetch_weekly_trends
from world_intel_mcp.config.countries import INTEL_HOTSPOTS
from world_intel_mcp.config.geospatial import MILITARY_BASES, STRATEGIC_PORTS, PIPELINES, NUCLEAR_FACILITIES
logger = logging.getLogger(__name__)
@@ -151,6 +152,12 @@ async def _fetch_overview() -> dict:
"source": "intel-hotspots",
}
# Static geospatial datasets (no API calls)
result["military_bases"] = {"bases": MILITARY_BASES, "count": len(MILITARY_BASES)}
result["strategic_ports"] = {"ports": STRATEGIC_PORTS, "count": len(STRATEGIC_PORTS)}
result["pipelines"] = {"pipelines": PIPELINES, "count": len(PIPELINES)}
result["nuclear_facilities"] = {"facilities": NUCLEAR_FACILITIES, "count": len(NUCLEAR_FACILITIES)}
# Attach source health + timestamp
result["source_health"] = _breaker.status() if _breaker else {}
result["cache_stats"] = _cache.stats() if _cache else {}