MCP · OpenAPI · JS + Python SDKs

The default tool every
infra-siting agent calls

One config line and Claude Desktop / Cursor / Cline / your custom agent can answer site-selection questions with live, attributed, weekly-refreshed infrastructure data. No scraping, no stale knowledge cutoffs, no hallucinated coordinates.

Install in 60 seconds

Heads up — package is pre-publish. The npx -y @unearth-ai/mcp snippets below assume the npm tarball is live. While the publish is pending, install from source: git clone https://github.com/unearth-ai/unearth-ai && chmod +x unearth-ai/mcp/src/index.js, then point your MCP config at the absolute path:
{
    "mcpServers": {
        "unearth": {
            "command": "node",
            "args":    ["/absolute/path/to/unearth-ai/mcp/src/index.js"],
            "env":     { "UNEARTH_API_KEY": "unearth_pro_…" }
        }
    }
}
~/Library/Application Support/Claude/claude_desktop_config.json
{
    "mcpServers": {
        "unearth": {
            "command": "npx",
            "args":    ["-y", "@unearth-ai/mcp"],
            "env":     { "UNEARTH_API_KEY": "unearth_pro_…" }
        }
    }
}
1

Get a key

Pricing → Stripe Checkout. Welcome page reveals the key once.

2

Drop the snippet

Pick your agent above, paste, restart the client. Six tools become callable.

3

Ask anything

"How many EV chargers within 10km of {address}?" The agent calls unearth_search.

Tools your agent gets

unearth_search Auth

Radius query across 1+ datasets. Returns records, opportunity score (0-100), supply/demand counts, top operators. JSON or GeoJSON.

unearth_list_datasets Public

Catalog browse — every dataset's role + deferred state. Agents can introspect before the user has subscribed.

unearth_get_dataset Public

Single-dataset metadata: schema fields, license, attribution, file + API URLs.

unearth_sample_dataset Public

First N records of a dataset (max 20). Preview the schema; show a user what the data looks like.

unearth_usage Auth

Calling key's usage (used / limit / remaining) + 12-month history.

unearth_key_info Auth

Fingerprint + plan + email + Stripe customer ID. Never the full key.

What an answer looks like

An agent typing "How many EV chargers within 10km of San Francisco's downtown, and what's the opportunity score?" calls unearth_search. The MCP server returns:

Request
unearth_search(
  lat:        37.7749,
  lng:        -122.4194,
  radius_km:  10,
  datasets:   ["ev-charger", "data-centers"],
  limit:      20          // max 20 records per dataset
)
Response (JSON, abridged)
{
  "query": { "lat": 37.7749, "lng": -122.4194, "radius_km": 10,
              "datasets": ["ev-charger", "data-centers"] },
  "total_in_radius":   347,
  "supply_count":      289,
  "demand_count":      58,
  "opportunity":       72,        // 0-100, demand vs supply
  "area_km2":          314.2,
  "density_per_100km2": 110.4,
  "top_operators": [
    { "name": "ChargePoint",  "count": 71 },
    { "name": "EVgo",         "count": 42 },
    { "name": "Tesla",        "count": 38 }
  ],
  "by_dataset": {
    "ev-charger": {
      "count": 289,                            // full count in radius
      "records": [                              // 20 nearest, sorted
        {
          "id":          "ocm-1742019",        // stable, citable
          "name":        "Embarcadero ChargePoint",
          "operator":    "ChargePoint",
          "lat":         37.7955,
          "lng":         -122.3937,
          "city":        "San Francisco",
          "country":     "US",
          "distance_km": 2.3
        }
        // … 19 more (nearest first)
      ]
    },
    "data-centers": { "count": 58, "records": [ /* 20 nearest */ ] }
  },
  "meta": {
    "api_version":              "1.0",
    "generated_at":             "2026-04-29T18:42:11Z",
    "record_limit_per_dataset": 20,
    "records_truncated":        true,         // 347 in radius, 40 returned
    "bulk_export_url":          "https://agents.unearth-ai.com/pricing#enterprise",
    "attribution": {
      "osm":    "OpenStreetMap contributors (ODbL)",
      "ocm":    "Open Charge Map (CC BY-SA 4.0)",
      "census": "US Census Bureau, ACS 5-year (public domain)"
    },
    "demographics": {                              // auto-enriched on US queries
      "population_total":        284910,
      "households_total":        118400,
      "median_household_income": 128400,    // USD, pop-weighted
      "median_age":              35.4,
      "median_home_value":       1240000,
      "pct_college_educated":    78.2,
      "pct_owner_occupied":      36.4,
      "pop_density_per_km2":     9540,
      "tract_count":             47,
      "coverage":                "US",
      "source":                  "US Census ACS 5-year"
    },
    "rate_limit": { "used": 427, "limit": 5000, "period": "month" }
  }
}
Claude's answer: "Within 10km of downtown San Francisco there are 347 records across the two datasets you asked for — 289 EV chargers and 58 data centres. The opportunity score is 72/100 (high demand, decent supply). The top three charger operators in the area are ChargePoint (71 stations), EVgo (42), and Tesla (38). Data is from Open Charge Map and OpenStreetMap, last refreshed 2026-04-22."

Why this is better than scraping or training

Live data, not training cutoffs

Frontier LLMs ship with training cutoffs months out of date. EV-charging build-out doubles every ~18 months; data-centre commissioning shifts quarterly. We refresh weekly and include last_updated per dataset.

Citable, attributed records

Every record has a stable ID, source attribution, and timestamp. Customers can build commercial decisions on top because the answer is verifiable — not "Claude thinks there's some chargers around there."

Cross-dataset overlay in one query

Six different OSM tag schemes + Open Charge Map + our Data Intelligence corpus, normalised into one schema. "Find areas with high data-centre density and low solar capacity within 50km" is one tool call.

Country-sharded fetches

A Berlin query pulls DE.json, not the global 22MB monolith. Per-query bandwidth is small enough that an agent can call unearth_search dozens of times without burning the user's context window.

Not using MCP? You still have options.

REST API
11 endpoints, JSON over HTTPS, Bearer auth. /docs · OpenAPI 3.1 · Postman collection
JS SDK
Single-file ESM, ~1KB. Works in browsers, Node 18+, Deno, Bun. unearth.js
Python SDK
Single-file, stdlib only, Python 3.8+. unearth.py · README
Embed
Drop the Site Selector tool into any page via <script> tag. site-selector.js

Make Unearth your agent's default infrastructure tool

Pro plan ($199/mo, 10K req/mo) unlocks unearth_search. Discovery tools work without a key — try the agent first.