koala73 / koala73/worldmonitor

feat(mcp): expose static geospatial reference registries (military bases, ports, AI datacenters, trade routes) as query tools

Open
#5,698 0 comments 0 reactions 0 assignees View on GitHub
agent-readiness area: API area: military feature
Dominant language
TypeScript
Stars
86.6k
Forks
13.1k
Avg merge
8h 4m
Merged PRs (30d)
825

Description

## Summary

We maintain rich curated geospatial reference registries, but only two are queryable by agents (`get_commodity_geo` for mines, `get_chokepoint_status` for the chokepoint registry). The rest render on the map and are invisible to the MCP/REST surface:

| Registry | Existing data |
|---|---|
| Military bases (120+ across operators) | `src/config/military-bases.ts`, `src/config/bases-expanded.ts` |
| Strategic ports | `src/config/ports.ts` |
| AI datacenter clusters | `src/config/ai-datacenters.ts` |
| Trade routes | `src/config/trade-routes.ts` |
| Airports | `src/config/airports.ts` |
| Irradiator / nuclear-relevant sites | `src/config/irradiators.ts` |
| Bypass corridors | `src/config/bypass-corridors.ts` |

Two registries to add/complete while in here:

- **Nuclear facilities** — power plants, enrichment, reprocessing sites (Zaporizhzhia, Natanz, Fordow, Yongbyon…). We have a nuclear map layer and `irradiators.ts`; consolidate/curate into one queryable registry.
- **Undersea cable routes** — landing points, owners, capacity. `src/services/cable-health.ts` scores 6 corridors; the underlying route/landing-point registry should be queryable too (curate if we only hold corridor geometry today).

Lower-priority registries — same tool, curate cheaply or explicitly wontfix each with a reason (do not silently drop):

- [ ] Spaceports / launch facilities
- [ ] Stock exchanges (tiered, with index tickers)
- [ ] GFCI financial centers
- [ ] Cloud provider regions

"Which Chinese-operated bases are within 500 km of Djibouti?" or "list AI datacenters above 100 MW in the Gulf" are exactly the queries agents ask and we already hold the answer.

## Proposed scope

1. One consolidated MCP tool (e.g. `get_reference_geo`) with a `registry` param + per-registry filters (operator, country, type, bbox/radius), rather than N thin tools — mirrors how `get_commodity_geo` works today.
2. Serve from the static configs (build-time bundle into the server, or a generated JSON artifact) — no seeder needed; freshness metadata marked as `static/curated` with a data-vintage field.
3. Cross-link entries to live layers where natural (e.g. base → current military flights nearby is future work, not this issue).

## Out of scope

- Pipelines and storage facilities — REST ops `list-pipelines` / `get-pipeline-detail` / `list-storage-facilities` already exist and their MCP exposure is tracked in #4525.
- Any new data collection; this exposes what `src/config/` already curates.

## Acceptance criteria

- [ ] Registries queryable via MCP with filters, schema, tests, docs, parity entries.
- [ ] Single source of truth: map layers and MCP serve the same config modules (no copied datasets).
- [ ] Data-vintage/curation caveat present in tool output and docs.

Contributor guide

Open the contributing guide

Research direction

Start by tracing the existing get_commodity_geo and get_chokepoint_status tools, then inspect the registry modules under src/config/ and the cable context in src/services/cable-health.ts. Define the consolidated registry and filter scope before implementing, including the unresolved lower-priority registries. Done means MCP queries, schema, tests, docs, parity entries, shared config sources, and data-vintage caveats meet the acceptance criteria.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
api, backend, data
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.