What you get
Live packs across disasters, FX rates, and global indicators. All packs share a common location model and query contract.
- Free: currency, volcanoes, hurricanes, floods, tornadoes, UN SDG, World Factbook, WorldPop
- Paid via x402 on Base USDC: earthquakes, tsunamis
Connect your agent
New here: use plain HTTP for the very first successful result, or use MCP if your client already supports remote MCP servers. Both paths hit the same hosted backend.
- Remote MCP client:
https://app.daedalmap.com/mcp - Plain HTTP:
/api/v1/catalog,/api/v1/packs/{pack_id},/api/v1/query/dataset - Pack-specific registry entry: narrow facades at
/mcp/currency,/mcp/earthquakes, etc.
MCP quickstart
If you already have an MCP-capable client, point it at
https://app.daedalmap.com/mcp, list tools, then call one
narrow tool. If you just want the fastest first result, skip to
Agent Examples
and follow the plain HTTP flow first.
curl https://app.daedalmap.com/mcp
curl -X POST https://app.daedalmap.com/mcp \
-H "Content-Type: application/json" \
-H "MCP-Protocol-Version: 2025-06-18" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list"
}'
get_catalog— list every published packget_pack— full pack schema: metric inventory with stats, query rules, and a paste-ready example body. Call this before any query.query_dataset— generic structured query against any pack (matchesPOST /api/v1/query/dataset)get_earthquake_events,get_volcanic_activity,get_tsunami_events,get_fx_rates— narrow per-pack tools with sensible defaults. Use when the question is a simple event or rate fetch for a named region and time window.
One question, every pack
Every pack returns rows keyed on the same loc_id. Earthquakes
in Japan, the population of Japan, and Japan's currency timeline all come
back with loc_id=JPN. Cross-pack joins are a client-side zip
on a single column. No country-name normalization. No fuzzy matching. No
per-source dictionaries.
# 1. Earthquake counts for Japan, last 25 years
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{"source_id":"earthquakes_events",
"metrics":["event_count"],
"filters":{"region_ids":["JPN"],
"time":{"start":"2000-01-01","end":"2025-12-31"}}}'
# 2. Poverty headcount ratio for Japan, same window
curl -X POST https://app.daedalmap.com/api/v1/query/dataset \
-H "Content-Type: application/json" \
-d '{"source_id":"01",
"metrics":["ind_1_2_1"],
"filters":{"region_ids":["JPN"],
"time":{"start":2000,"end":2025}}}'
# Both responses key on loc_id=JPN. Join in five lines.
This is the differentiator vs single-source MCP wrappers. One geographic key across every domain - disasters, demographics, economics, climate, currency.
Client setup
Expand your client below.
Claude Code
claude mcp add --transport http daedalmap https://app.daedalmap.com/mcp
claude mcp list
JSON config equivalent:
{
"mcpServers": {
"daedalmap": {
"type": "http",
"url": "https://app.daedalmap.com/mcp"
}
}
}
Codex
codex mcp add daedalmap --url https://app.daedalmap.com/mcp
codex mcp list
ChatGPT developer mode
- Enable developer mode in ChatGPT settings.
- Add a remote MCP connector.
- Use
https://app.daedalmap.com/mcpas the server URL.
Gemini SDK
from google import genai
client = genai.Client()
mcp_server = {
"type": "mcp_server",
"name": "daedalmap",
"url": "https://app.daedalmap.com/mcp",
}
interaction = client.interactions.create(
model="gemini-2.5-flash",
input="List the published DaedalMap packs and suggest one first query.",
tools=[mcp_server],
)
Mistral SDK
If your Mistral runtime supports a remote MCP client, point it at
https://app.daedalmap.com/mcp. Otherwise use the hosted HTTP API
at /api/v1/ directly.
Local and open-weight runtimes
If your agent framework supports remote MCP, use
https://app.daedalmap.com/mcp. Otherwise call
/api/v1/catalog, /api/v1/packs/{pack_id}, and
/api/v1/query/dataset directly.
First flow
- Call
GET /api/v1/catalog— see all live packs at a glance. - Call
GET /api/v1/packs/{pack_id}for each pack you plan to use. This is the workhorse endpoint. It returns the complete metric inventory with per-metric statistics, aquick_startblock with step-by-step rules and a paste-ready query body, temporal and geographic coverage, and the list of countries missing from each metric. Readquick_start.important_rulesbefore writing any query. - Copy
quick_start.first_query_templateand modifyregion_ids,time, andmetricsto match your question. - Call
POST /api/v1/query/dataset. Free packs return rows directly. Paid packs return a402challenge with the exact price; retry with payment. - For questions that cross two packs, run step 4 once per pack and join rows on
loc_idclient-side.
The metric stats block (min, median, max)
in the pack response is a diagnostic tool, not just a description. If a max value
looks like a year or an implausible number, that signals a data quality edge case
worth checking before building on that metric.
Copyable request shapes for every pack
Canonical first, live second
Agent callers should prefer DaedalMap's hosted canonical pack tools first. For earthquakes and tsunamis, that means using the published pack lanes and their processed event history before considering any upstream wrapper.
- Preferred:
get_earthquake_eventsand/api/v1/query/datasetagainst theearthquakespack. - Routing hint: use
get_packas the source of truth forcanonical_available_through,preferred_tool, and anylive_fallback_toolguidance. - Fallback only: live wrapper tools for preliminary upstream data when the caller explicitly asks for live/preliminary updates or needs a window not yet present in the canonical hosted lane.
- Explore mode: the human Explore chat should stay on DaedalMap canonical data and should not silently switch to an upstream live wrapper.
This keeps cross-pack joins, loc_id alignment, enriched fields,
and published artifact behavior stable by default.
Pricing
Base price is $0.01 for up to 100 rows, then $0.0001
per additional row. The 402 challenge shows the exact amount before
any charge. Requests above the pack row limit are rejected rather than charged.