osm-mcp
Provides read-only query tools for OpenStreetMap data imported into a PostGIS database, enabling searches by name, tags, bounding box, and proximity, as well as schema discovery and category counts.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@osm-mcpfind all schools in Tokyo"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
osm-mcp
An MCP (Model Context Protocol) server that exposes read-only query tools over
osm2pgsql-imported OpenStreetMap data in PostGIS (planet_osm_* tables).
Quick start
uv sync --extra dev # creates .venv + uv.lock
cp .env.example .env # then set OSM_MCP_DSN
docker compose up -d # optional: demo PostGIS with seed data on localhost:55432.env.example documents the settings:
OSM_MCP_DSN— required libpq connection string. Use a read-only DB role (see the comment in.env.examplefor the recommendedGRANTs).OSM_MCP_SRID— SRID of thewaygeometry column (default3857).OSM_MCP_STATEMENT_TIMEOUT_MS— per-query statement timeout (default5000).OSM_MCP_MAX_ROWS— row cap applied to result sets (default200).
Related MCP server: mcp-db-server
Running the server
uv run osm-mcpRuns over stdio by default (how local MCP clients launch it).
HTTP streaming transport
Set OSM_MCP_TRANSPORT=streamable-http (alias http) to serve over HTTP
instead of stdio; sse is also supported. Host/port come from OSM_MCP_HOST
/ OSM_MCP_PORT (default 127.0.0.1:8000); the endpoint path is /mcp.
OSM_MCP_TRANSPORT=http OSM_MCP_HOST=127.0.0.1 OSM_MCP_PORT=8000 \
OSM_MCP_DSN=postgresql://osm_readonly:secret@localhost:5432/osm \
uv run osm-mcp
# -> serves on http://127.0.0.1:8000/mcpAn HTTP-capable MCP client then connects with:
{ "mcpServers": { "osm": { "type": "http", "url": "http://127.0.0.1:8000/mcp" } } }Unlike stdio, the HTTP/SSE transports print a startup line to stderr showing the URL. (stdio stays silent — its stdout is the protocol channel.)
MCP client config (stdio)
{
"mcpServers": {
"osm": {
"command": "osm-mcp",
"env": {
"OSM_MCP_DSN": "postgresql://osm_readonly:secret@localhost:5432/osm"
}
}
}
}Tools
Tool | Purpose |
| List available |
| Top values (with counts) of key OSM tags, to discover filters. |
| Search features by name (ILIKE) and/or tag filters, optional bbox. |
| Features within N meters of a lat/lon, ordered by distance (points + POI polygons; excludes admin/boundary polygons). |
| Features inside a bbox or a named/osm_id polygon. |
| Counts of features per tag value, optionally scoped to an area. |
| Escape hatch: run a single read-only |
Full reference — parameters, return shapes, and worked examples for every tool: docs/TOOLS.md.
Performance notes
list_categories and area-less count_by_category do full-table scans over
unindexed tag columns; prefer scoping them with an area/table, or use them
only on modest-size datasets.
Coordinates, SRID, and read-only access
Public tool coordinates (lat/lon in arguments and results) are always WGS84 (
EPSG:4326). The DB geometry column (way) is stored inOSM_MCP_SRID(default3857) and reprojected at the query boundary.Distance calculations (
find_nearby) use PostGISgeography, sodistance_mis a true geodesic distance in meters.Read-only access is enforced at two layers: the DB role used for
OSM_MCP_DSNshould itself be read-only, and every query additionally runs inside aREAD ONLYtransaction.run_sqlis further restricted to a singleSELECT/WITHstatement.
Testing
uv run pytest # unit + integration
uv run pytest -m "not integration" # unit only, no DB required
uv run pytest tests/unit/test_config.py::test_defaults_applied -v # single testIntegration tests need a live PostGIS (docker compose up -d); they skip
automatically if the DB at OSM_MCP_TEST_DSN (defaults to
postgresql://osm:osm@localhost:55432/osm) is unreachable.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityFmaintenanceEnables natural language and geospatial queries on PostGIS databases, with 32 tools for spatial analysis, geometry operations, and database management.Last updated4MIT
- Flicense-qualityDmaintenanceEnables querying PostgreSQL and MySQL databases using natural language, with RESTful endpoints for listing tables, describing schemas, and executing read-only queries.Last updated1
- Alicense-qualityDmaintenanceEnables secure, read-only PostgreSQL database interaction through natural language, with automatic database discovery and connection management.Last updated2MIT
- AlicenseAqualityBmaintenanceEnables natural language querying of PostgreSQL databases under read-only mode, returning results as structured XML.Last updated1MIT
Related MCP Connectors
Geocode, reverse geocode, and run Overpass spatial queries on OpenStreetMap data.
Geocode, reverse geocode, and run Overpass spatial queries on OpenStreetMap data.
Query PostgreSQL databases in plain English — LLM-generated, safety-validated SQL.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/a-tsitanov/osm_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server