Daedalmap Geographic Data

Created By
3 hours ago
Overview
<main>
Docs / For Agents

Geographic data for
agents and MCP clients.

Remote MCP server and hosted API for deterministic geography-aware queries. Free discovery. Free and paid execution lanes. Live pack catalog.

<h2>What you get</h2>
<p>
  <span id="agentsPackCountBody">Live packs</span> across disasters, FX
  rates, and global indicators. All packs share a common location model
  and query contract.
</p>
<ul class="detail-list">
  <li><strong>Free:</strong> currency, volcanoes, hurricanes, floods, tornadoes, UN SDG, World Factbook, WorldPop</li>
  <li><strong>Paid via x402 on Base USDC:</strong> earthquakes, tsunamis</li>
</ul>
<p><a class="docs-next-link" href="/docs/packs">Browse all packs</a></p>

<h2>Connect your agent</h2>
<p>
  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.
</p>
<ul class="detail-list">
  <li>Remote MCP client: <code>https://app.daedalmap.com/mcp</code></li>
  <li>Plain HTTP: <code>/api/v1/catalog</code>, <code>/api/v1/packs/{pack_id}</code>, <code>/api/v1/query/dataset</code></li>
  <li>Pack-specific registry entry: narrow facades at <code>/mcp/currency</code>, <code>/mcp/earthquakes</code>, etc.</li>
</ul>

<h2>MCP quickstart</h2>
<p>
  If you already have an MCP-capable client, point it at
  <code>https://app.daedalmap.com/mcp</code>, list tools, then call one
  narrow tool. If you just want the fastest first result, skip to
  <a class="docs-next-link" href="/docs/agent-examples">Agent Examples</a>
  and follow the plain HTTP flow first.
</p>
<div class="code-block">
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"
  }'
</div>
<ul class="detail-list">
  <li><code>get_catalog</code> &mdash; list every published pack</li>
  <li><code>get_pack</code> &mdash; full pack schema: metric inventory with stats, query rules, and a paste-ready example body. <strong>Call this before any query.</strong></li>
  <li><code>query_dataset</code> &mdash; generic structured query against any pack (matches <code>POST /api/v1/query/dataset</code>)</li>
  <li><code>get_earthquake_events</code>, <code>get_volcanic_activity</code>, <code>get_tsunami_events</code>, <code>get_fx_rates</code> &mdash; 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.</li>
</ul>

<h2>One question, every pack</h2>
<p>
  Every pack returns rows keyed on the same <code>loc_id</code>. Earthquakes
  in Japan, the population of Japan, and Japan's currency timeline all come
  back with <code>loc_id=JPN</code>. Cross-pack joins are a client-side zip
  on a single column. No country-name normalization. No fuzzy matching. No
  per-source dictionaries.
</p>
<div class="code-block">
# 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.
</div>
<p>
  This is the differentiator vs single-source MCP wrappers. One geographic
  key across every domain - disasters, demographics, economics, climate,
  currency.
</p>
<p><a class="docs-next-link" href="/docs/loc-id">Learn loc_id</a></p>

<h2>Client setup</h2>
<p>Expand your client below.</p>

<details class="docs-accordion">
  <summary>Claude Code</summary>
  <div class="docs-accordion-body">
    <div class="code-block">
claude mcp add --transport http daedalmap https://app.daedalmap.com/mcp

claude mcp list
    </div>
    <p>JSON config equivalent:</p>
    <div class="code-block">
{
  "mcpServers": {
    "daedalmap": {
      "type": "http",
      "url": "https://app.daedalmap.com/mcp"
    }
  }
}
    </div>
  </div>
</details>

<details class="docs-accordion">
  <summary>Codex</summary>
  <div class="docs-accordion-body">
    <div class="code-block">
codex mcp add daedalmap --url https://app.daedalmap.com/mcp

codex mcp list
    </div>
  </div>
</details>

<details class="docs-accordion">
  <summary>ChatGPT developer mode</summary>
  <div class="docs-accordion-body">
    <ul class="detail-list">
      <li>Enable developer mode in ChatGPT settings.</li>
      <li>Add a remote MCP connector.</li>
      <li>Use <code>https://app.daedalmap.com/mcp</code> as the server URL.</li>
    </ul>
  </div>
</details>

<details class="docs-accordion">
  <summary>Gemini SDK</summary>
  <div class="docs-accordion-body">
    <div class="code-block">
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],
)
    </div>
  </div>
</details>

<details class="docs-accordion">
  <summary>Mistral SDK</summary>
  <div class="docs-accordion-body">
    <p>
      If your Mistral runtime supports a remote MCP client, point it at
      <code>https://app.daedalmap.com/mcp</code>. Otherwise use the hosted HTTP API
      at <code>/api/v1/</code> directly.
    </p>
  </div>
</details>

<details class="docs-accordion">
  <summary>Local and open-weight runtimes</summary>
  <div class="docs-accordion-body">
    <p>
      If your agent framework supports remote MCP, use
      <code>https://app.daedalmap.com/mcp</code>. Otherwise call
      <code>/api/v1/catalog</code>, <code>/api/v1/packs/{pack_id}</code>, and
      <code>/api/v1/query/dataset</code> directly.
    </p>
  </div>
</details>

<h2>First flow</h2>
<ol class="detail-list">
  <li>Call <code>GET /api/v1/catalog</code> &mdash; see all live packs at a glance.</li>
  <li>Call <code>GET /api/v1/packs/{pack_id}</code> for each pack you plan to use. This is the workhorse endpoint. It returns the complete metric inventory with per-metric statistics, a <code>quick_start</code> block with step-by-step rules and a paste-ready query body, temporal and geographic coverage, and the list of countries missing from each metric. Read <code>quick_start.important_rules</code> before writing any query.</li>
  <li>Copy <code>quick_start.first_query_template</code> and modify <code>region_ids</code>, <code>time</code>, and <code>metrics</code> to match your question.</li>
  <li>Call <code>POST /api/v1/query/dataset</code>. Free packs return rows directly. Paid packs return a <code>402</code> challenge with the exact price; retry with payment.</li>
  <li>For questions that cross two packs, run step 4 once per pack and join rows on <code>loc_id</code> client-side.</li>
</ol>
<p>
  The metric stats block (<code>min</code>, <code>median</code>, <code>max</code>)
  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.
</p>
<p><a class="docs-next-link" href="/docs/agent-examples">Copyable request shapes for every pack</a></p>

<h2>Canonical first, live second</h2>
<p>
  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.
</p>
<ul class="detail-list">
  <li><strong>Preferred:</strong> <code>get_earthquake_events</code> and <code>/api/v1/query/dataset</code> against the <code>earthquakes</code> pack.</li>
  <li><strong>Routing hint:</strong> use <code>get_pack</code> as the source of truth for <code>canonical_available_through</code>, <code>preferred_tool</code>, and any <code>live_fallback_tool</code> guidance.</li>
  <li><strong>Fallback only:</strong> 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.</li>
  <li><strong>Explore mode:</strong> the human Explore chat should stay on DaedalMap canonical data and should not silently switch to an upstream live wrapper.</li>
</ul>
<p>
  This keeps cross-pack joins, <code>loc_id</code> alignment, enriched fields,
  and published artifact behavior stable by default.
</p>

<h2>Pricing</h2>
<p>
  Base price is <code>$0.01</code> for up to 100 rows, then <code>$0.0001</code>
  per additional row. The <code>402</code> challenge shows the exact amount before
  any charge. Requests above the pack row limit are rejected rather than charged.
</p>
</main>

<footer class="site-footer">
  <span>DaedalMap</span>
  <div class="site-footer-links">
    <a href="/">Home</a>
    <a href="/about">About</a>
    <a href="/explore">Explore</a>
    <a href="/research">Research</a>
    <a href="/ops">Ops</a>
    <a href="/docs/for-agents">Agents</a>
    <a href="/feeds">Feeds</a>
    <a href="/packs">Packs</a>
    <a href="/docs">Docs</a>
    <a href="https://www.daedalmap.com/account">Account</a>
    <a href="/docs/faq">FAQ</a>
    <a href="https://app.daedalmap.com" target="_blank" rel="noreferrer" data-secure-app-link>App</a>
    <a href="https://github.com/xyver/daedal-map" target="_blank" rel="noreferrer">GitHub</a>
    <a href="/privacy">Privacy</a>
  </div>
</footer>

Server Config

{
  "mcpServers": {
    "daedalmap": {
      "url": "https://app.daedalmap.com/mcp?registry=mcpso"
    }
  }
}
Project Info
Created At
3 hours ago
Updated At
2 hours ago
Author Name
-
Star
-
Language
-
License
-
Category

Recommend Servers

View All