uaemcp
v0.2.2
Published
Open Emirates Intelligence — a standalone MCP server for official UAE open data. Source-cited tools, PII redaction, SSRF-guarded fetches, stdio + HTTP transports.
Maintainers
Readme
uaemcp — Open Emirates Intelligence
A standalone MCP server that gives any MCP client (Claude Desktop, Cursor, Claude Code) source-cited access to official UAE open data — with direct-contact PII redacted, every server-side fetch SSRF-guarded, and both stdio and HTTP transports. Zero external services.
This TypeScript build is at feature parity with the hosted Python server at uaemcp.zad.tools — the same 11 tools, MCP resources, and prompts.
Run it (no install)
npx uaemcp # stdio MCP server (for an MCP client)
npx uaemcp http # Streamable-HTTP server at /mcpAdd to Claude Desktop
Self-host with npx (claude_desktop_config.json):
{
"mcpServers": {
"uae-intelligence": {
"command": "npx",
"args": ["-y", "uaemcp"]
}
}
}Or skip hosting entirely and use the public instance over HTTP:
{
"mcpServers": {
"uae-intelligence": {
"type": "http",
"url": "https://uaemcp.zad.tools/mcp"
}
}
}Tools
| Tool | Kind | Description |
|------|------|-------------|
| uae_sources_list | read | List every registered official source (32) |
| uae_source_get | read | Full metadata for one source |
| uae_source_health | read | Live, timeout-bounded health probe |
| uae_source_datasets | read | Discover datasets inside a portal (CKAN/ODS/ArcGIS) |
| uae_source_records | read | Live, redacted, cited records (per dataset) |
| uae_search | read | Federated bilingual search across the catalog |
| uae_source_geo | read | Spatially-filtered records as GeoJSON (maps) |
| uae_source_aggregate | read | group_by + count/sum/avg/min/max |
| uae_market_snapshot | read | Counts by emirate / area / product |
| uae_dashboard_summary | read | Concurrent, cached health across all sources |
| uae_source_add_metadata | write | Add a metadata source (token required) |
Every data-returning tool returns { ok, data, error, meta } with source_id,
license, citation, fetched_at, and a data_quality block. Also exposes MCP
resources (uae://sources, uae://source/{id}, …/datasets) and reusable
prompts (profile_sector, compare_emirates, discover_datasets). Records
export as json · csv · geojson · xlsx.
Live record sources: MOIAT (industrial licenses) and Ajman (OpenDataSoft,
211 datasets). Others are catalogued honestly — key-gated official APIs (Dubai
Pulse/DLD, Abu Dhabi) are flagged requires_api_key; nothing is ever faked.
Examples
Once connected, just ask your MCP client — it picks the right tool:
- "List UAE industrial factories licensed in Abu Dhabi." →
uae_source_records - "Find official UAE datasets about real estate." →
uae_search - "Map licensed factories within 60 km of Abu Dhabi." →
uae_source_geo - "Break down industrial licenses by emirate." →
uae_source_aggregate - "Which official UAE open-data sources can you access?" →
uae_sources_list
The HTTP transport (npx uaemcp http) also serves /health, /ready, and
/metrics (Prometheus) next to /mcp.
Interactive API docs (hosted): https://uaemcp.zad.tools/docs · full API reference
Data & safety
- 32 official sources, typed by what they actually return — live record
connectors (MOIAT
http_json, Ajmanodswith 211 datasets), key-gated official APIs, and discovery-only metadata portals. Data is never fabricated. - PII redaction — phone/email fields redacted by name and value pattern.
- SSRF guard — every fetch rejects private, loopback, link-local, and cloud-metadata addresses.
- Writes gated — reads are open; mutating tools need
UAEMCP_WRITE_TOKEN(writes disabled entirely when unset).
Configuration (env)
| Variable | Default | Purpose |
|----------|---------|---------|
| UAEMCP_WRITE_TOKEN | (unset) | Enable + gate write tools |
| UAEMCP_HTTP_TIMEOUT | 8 | Per-request timeout (s) |
| UAEMCP_HEALTH_TIMEOUT | 5 | Per-source health timeout (s) |
| UAEMCP_CACHE_TTL | 300 | Response/health cache TTL (s) |
| UAEMCP_ALLOWED_HOSTS | (unset) | Allow-list for HTTP transport behind a proxy |
License
MIT. Data served is open government data — verify each source's terms before redistribution.
