OSM Edit MCP Server
# OSM Edit MCP
[](https://lobehub.com/mcp/pk-osm-edit-mcp)
[](https://pypi.org/project/osm-edit-mcp/)
[](https://github.com/skywinder/osm-edit-mcp/actions/workflows/ci.yml)
[](https://pypi.org/project/osm-edit-mcp/)
[](LICENSE)
Find places in OpenStreetMap, preview POI nodes and four-sided polygons, and review road edits from your local GPX surveys
through an MCP-compatible assistant.
**Alpha, review-first:** nothing is edited automatically. Road changes need an
authenticated OSM account, an exact preview and one final MCP-host confirmation.
The safe profile also supports [reviewed POI node creation](docs/reviewed-node-creation.md)
with duplicate inspection and exact coordinate/tag readback. False matches can
be resolved with evidence in `review_node_create_duplicates`; its new proposal
revision still requires that final confirmation before upload.
For a POI with known boundaries, [reviewed four-sided polygons](docs/reviewed-poi-polygons.md)
create a closed OSM way with tags on the area and can explicitly replace an
isolated POI node in the same upload.
## Fastest start
You need **Python 3.10+**, [uv](https://docs.astral.sh/uv/), and an MCP client
that supports local stdio servers. No repository clone, Docker, API key or
Valhalla installation is needed for place search.
Add this server to your client's MCP configuration (merge it with any existing
servers), then reconnect:
```json
{
"mcpServers": {
"osm-edit": {
"command": "uvx",
"args": ["osm-edit-mcp"],
"env": {
"OSM_TOOL_PROFILE": "discovery"
}
}
}
}
```
The client downloads the [released package](https://pypi.org/project/osm-edit-mcp/)
on first launch and starts it for you. This profile exposes **only three
read-only place-search tools** and needs no OAuth. Searches use public OSM
services and send the search area/query to them.
Try asking your assistant:
> Find museums and parks within 1 km of Matenadaran in Yerevan. Show OSM links.
Clients with a configuration form: command **`uvx`**, argument
**`osm-edit-mcp`**, environment **`OSM_TOOL_PROFILE=discovery`**.
If the client cannot find `uvx`, use its absolute path. See
[client setup](docs/MCP_CLIENT_SETUP.md) or [Hermes setup](docs/HERMES_SETUP.md).
You can also start the server from a terminal:
```bash
uvx osm-edit-mcp
```
It waits for an MCP client; it is **not an interactive terminal app or website**.
The bare command uses the default full profile, unlike the discovery-only
configuration above.
## GPX and editing: what else needs setup?
Keep the same command and args; replace the server's `env` above with:
```json
{
"OSM_TOOL_PROFILE": "full",
"OSM_USE_DEV_API": "true",
"OSM_WRITE_PROFILE": "safe",
"OSM_REQUIRE_HOST_CONFIRMATION": "true"
}
```
Reconnect, then call `get_edit_capabilities` to check the selected API and
authentication status. This enables GPX tools and the review-first workflow on
the **development sandbox**; it does not log you in or authorize an edit.
**To make edits:** register a development OSM OAuth app and authenticate it with
the source checkout's `oauth_auth.py --dev` helper, following the
[authentication guide](docs/MCP_CLIENT_SETUP.md#editing-authentication).
Keep credentials in a private file, not in this JSON or chat. Once the guide's
private file contains the profile/API settings, replace `env` with only
`OSM_EDIT_MCP_ENV_FILE` pointing to that file; do not leave conflicting settings
in both places. Preview the proposal, review it, and confirm its exact digest.
Real-map edits need a **separate production app/configuration**, development
acceptance first, and an MCP host that supports confirmation (elicitation).
| What you want to do | What to configure, and why |
| --- | --- |
| Inspect a GPX and preview a selected section | No OAuth. Set `OSM_TRACK_IMPORT_DIR` to your private GPX folder, or supply inline GPX XML. |
| Find candidate roads | Uses the selected editing API. The dev sandbox is **not a copy of the real map**. |
| Preview a road-edit diff | Set up OSM OAuth: the proposal is bound to your account and API target even before any write. |
| Apply an edit | After an explicit publish request, call `apply_osm_edit` immediately. Its MCP elicitation is the single final digest confirmation; do not add another chat question. |
| Optionally match a track to a routing graph | Run local Valhalla with regional routing tiles. Skip this if you do not need matching; nothing installs it automatically. |
A selected-track preview is **not** an OSM edit proposal. Start with the
[working GPX example](docs/README.md#try-a-local-preview-without-oauth-or-valhalla).
Before editing, follow the [OAuth and production guide](docs/MCP_CLIENT_SETUP.md#editing-authentication).
Never treat one GPS trace as ground truth.
## Detailed guides
[Full guide and examples](docs/README.md) ·
[Nearby search](docs/NEARBY_SEARCH.md) ·
[Optional Valhalla](docs/VALHALLA.md) ·
[Troubleshooting](docs/MCP_TROUBLESHOOTING.md) ·
[Changelog](CHANGELOG.md)
## Contributing and license
[Contributing](CONTRIBUTING.md) · [Security](SECURITY.md) · [MIT license](LICENSE).
OSM edits must also follow community guidelines and source-licensing requirements.
TDQS
Scored across 36 tools
There is meaningful overlap among bbox/area retrieval tools (get_osm_elements_in_area, inspect_map_context, search_osm_elements, export_osm_data, get_osm_statistics) and among place-search/geocode tools (search_nearby_places, find_nearby_amenities, smart_geocode, resolve_location, get_place_info). Several descriptions explicitly label compatibility aliases or preferred alternatives, which helps, but selection boundaries remain fuzzy in multiple places.
Nearly all tools use snake_case and start with a verb (get_osm_node, preview_node_create, apply_osm_edit, verify_osm_edit). Minor deviations such as smart_geocode and inconsistent compound ordering (preview_poi_polygon_create vs preview_node_create) keep it from perfect consistency.
At 36 tools, the surface is heavy for the domain and includes several compatibility aliases and overlapping search/geocode helpers. The complex edit-safety workflow justifies some breadth, but the total exceeds a well-scoped range and makes the set harder to navigate.
The server covers broad read/search/validation operations and several edit preview/apply flows, including node tag edits, node creation, polygon creation, and track-road edits. However, editing coverage is uneven: relation editing, general way/relation tag updates, deletion, and explicit changeset lifecycle operations are missing or unclear, creating dead ends for common OSM edits.