# PlaceRoot – keyless map tools for AI agents (places, geocode, routing)

> Source: <https://github.com/chuofringer/placeroot>
> Published: 2026-08-26 15:35:57+00:00

[Quick start](#quick-start)
·
[Tools](#what-it-can-do)
·
[Reference](https://github.com/chuofringer/placeroot/blob/main/docs/REFERENCE.md)
·
[Benchmarks](https://github.com/chuofringer/placeroot/blob/main/docs/benchmarks.md)
·
[Website](https://placeroot.dev)

**PlaceRoot grounds AI agents in open map data.** It's an MCP server that answers spatial questions — what's nearby, what's in this neighborhood, how do I get there — from [Overture Maps](https://overturemaps.org) open data. No API key, no signup, no vendor platform.

An independent project by [vibemapper](https://vibemapper.dev).

- 🎯
**Answers, not data dumps.** Every tool returns compact, ranked results sized for an agent's context window — never a raw GeoJSON dump. - 🗺️
**Real routing, zero keys.**`route`

and`isochrone`

walk an actual street graph built from Overture's transportation segments — not a straight-line guess — anywhere on Earth. - 🚶
**Reachability-filtered search.**`find_places(..., within={"minutes": 15, "mode": "walk"})`

keeps only results truly inside the street-graph walk/cycle/driveshed — not a radius that guesses at it, and not a second call to intersect a polygon yourself. - 🏙️
**Rich, filterable place data.** Category, brand, confidence, operating status, contactability — sourced from Overture's open dataset (contributed by Meta, Uber, TomTom, and others). - 📐
**Boundary-accurate.** Search inside a named place's real administrative polygon, not a guessed radius circle. - ⚡
**Zero setup.** Reads Overture's public data directly — no key, no database, nothing to install beyond the server itself.

Run it straight from PyPI or npm — no install step:

```
uvx placeroot             # stdio MCP server
uvx placeroot --http      # HTTP endpoint at http://127.0.0.1:8321/mcp
```

**Add to Claude Code**

```
claude mcp add placeroot -- uvx placeroot
```

**Add to Claude Desktop**

Add to your `claude_desktop_config.json`

:

```
{
  "mcpServers": {
    "placeroot": {
      "command": "uvx",
      "args": ["placeroot"]
    }
  }
}
```

**Add to Cursor / other MCP clients**

Same config as above wherever your client keeps its MCP server list. Prefer npm? Use `"command": "npx", "args": ["placeroot"]`

.

```
{
  "mcpServers": {
    "placeroot": {
      "command": "npx",
      "args": ["placeroot"]
    }
  }
}
```

Then ask your agent something spatial:

"What's around downtown Palo Alto?" · "Compare these two neighborhoods for a bike shop." · "Plan my errands: pharmacy, hardware store, post office."

**42 tools**, grouped into four families — every answer fits in a couple of thousand tokens:

| Family | Tools | Answers questions like |
|---|---|---|
🔍 Search & identify |
`find_places` , `find_near` , `geocode` , `reverse_geocode` , `place_details` , `search_categories` , `warmup_city` , … |
What cafés are near this point? Coffee near the Eiffel Tower? |
📊 Area analysis |
`summarize_area` , `compare_areas` , `neighborhood_verdict` , `summarize_buildings` , `land_use_at` , … |
What's in this neighborhood, should I live here, and how does it differ from that one? |
🚴 Routing |
`route` , `from_to` , `isochrone` , `optimize_route` , `places_along_route` , `distance_matrix` , `travel_time_matrix` |
How far to walk from A to B? What's reachable in 15 minutes? Best order for 6 stops? |
🗺️ Geometry & maps |
`render_map` , `simplify_geometry` |
Show me this result as an interactive map |

It also ships seven **workflow prompts** (site selection, neighborhood comparison, errand planning, should I live here, get to know my city, verify listing claims, plan area visit) and three attachable **resources** — and a `PLACEROOT_TOOLS`

setting to load only the tool profiles you need, cutting schema overhead by up to 95%.

📚 [Full tool catalog, prompts, resources & configuration → docs/REFERENCE.md](/chuofringer/placeroot/blob/main/docs/REFERENCE.md)

Note

Open data has honest limits: no live traffic, no opening hours, no ratings or photos — [what PlaceRoot deliberately doesn't do](/chuofringer/placeroot/blob/main/docs/REFERENCE.md#what-it-deliberately-does-not-do). For everything else about where things are and what's reachable from them, it answers without a key.

It's the only keyless MCP server doing real graph routing over global open map data — with every tool declaring proper [MCP annotations](/chuofringer/placeroot/blob/main/docs/REFERENCE.md#tool-annotations-and-listing-cache-hints) so clients know which calls are read-only before prompting you. Stable [GERS ids](https://docs.overturemaps.org/gers/) let agents hold onto places across turns; local caching makes repeat queries answer in milliseconds and keeps working offline; and the whole thing is [self-hostable end to end](/chuofringer/placeroot/blob/main/docs/MIRROR.md).

How it stacks up against Mapbox MCP and Google Maps MCP: [head-to-head benchmarks](/chuofringer/placeroot/blob/main/docs/benchmarks-vs.md) · [token-efficiency numbers](/chuofringer/placeroot/blob/main/docs/benchmarks.md).

Overture's places theme is derived from business listings, which makes it strong on businesses and thin on the places a family goes on a Saturday — playgrounds, neighbourhood parks, dog parks, beaches. Those features aren't missing from Overture, though; they're in a different theme. Overture's `base`

theme is a direct conflation of OpenStreetMap, and PlaceRoot already queries it for `land_use_at`

and `infrastructure_at`

. The places tools read it too, by default.

Nothing is downloaded, built, or hosted — it's one more live scan of the same public Overture release, and it roughly **2.5x** es playground coverage (1,552 vs 674 across New York City in release `2026-07-22.0`

, with 1,013 of them more than 150 m from any places-theme playground). Every places tool answers from both at once, with no other change: same tools, same response shape, same category filters.

The cost is a second dataset scan per places query (cached like everything else), and these rows carry no `confidence`

or `operating_status`

and are often unnamed — an unnamed playground comes back with `name: null`

rather than being dropped. If you'd rather have the latency than the coverage:

```
export PLACEROOT_RECREATION_LAYER=0
```

`data_version`

reports the layer whenever it's active. Full details, including why live Overpass queries and raw OSM Parquet were measured and rejected: [docs/RECREATION.md](/chuofringer/placeroot/blob/main/docs/RECREATION.md).

```
uv sync           # install dev dependencies
uv run pytest     # offline test suite
uv run ruff check .
```

See [CONTRIBUTING.md](/chuofringer/placeroot/blob/main/CONTRIBUTING.md) for dev setup, design rules, and how to propose a tool. Other docs: [CHANGELOG](/chuofringer/placeroot/blob/main/CHANGELOG.md) · [SECURITY](/chuofringer/placeroot/blob/main/SECURITY.md) · [publishing](/chuofringer/placeroot/blob/main/docs/PUBLISHING.md) · [website](/chuofringer/placeroot/blob/main/docs/WEBSITE.md) · [running a data mirror](/chuofringer/placeroot/blob/main/docs/MIRROR.md) · [the recreation layer](/chuofringer/placeroot/blob/main/docs/RECREATION.md)

`hello@placeroot.dev`

Developed by [vibemapper](https://vibemapper.dev).

PlaceRoot runs on your machine — no account, no API key, no sign-up. It has no telemetry and sends nothing to us; the only network traffic is your own queries going straight to Overture Maps' public data on AWS S3 (or a mirror you configure). Full details: [placeroot.dev/privacy.html](https://placeroot.dev/privacy.html).

The code is [MIT](/chuofringer/placeroot/blob/main/LICENSE). The data it queries is the Overture Maps public release, licensed per theme — places under CDLA-Permissive-2.0; the OSM-derived themes (divisions, transportation, base) under ODbL, which asks for attribution on anything user-facing you build from them:

© Overture Maps Foundation · © OpenStreetMap contributors (

[ODbL])

Per-theme obligations: [docs/DATA-LICENSE.md](/chuofringer/placeroot/blob/main/docs/DATA-LICENSE.md).

mcp-name: io.github.chuofringer/placeroot
