OSM Edit MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| API_KEY | No | Security API key for remote deployment and API access authentication. | |
| LOG_LEVEL | No | Logging verbosity level (e.g., INFO, DEBUG, WARNING, ERROR). | INFO |
| OSM_USE_DEV_API | No | Use the OpenStreetMap development API (true) or production API (false). | true |
| OSM_DEV_CLIENT_ID | No | OAuth 2 Client ID for the OpenStreetMap development server, required for write operations. | |
| OSM_DEV_CLIENT_SECRET | No | OAuth 2 Client Secret for the OpenStreetMap development server, required for write operations. | |
| RATE_LIMIT_PER_MINUTE | No | API rate limiting configuration defining how many requests per minute are allowed. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_osm_nodeA | Get an OSM node by ID. Args: node_id: The ID of the node to retrieve Returns: Dictionary containing node data including coordinates and tags |
| get_osm_wayA | Get an OSM way by ID. Args: way_id: The ID of the way to retrieve Returns: Dictionary containing way data including nodes and tags |
| get_osm_relationA | Get an OSM relation by ID. Args: relation_id: The ID of the relation to retrieve Returns: Dictionary containing relation data including members and tags |
| get_osm_elements_in_areaA | Get OSM elements within a bounding box. Args: bbox: Bounding box as "min_lon,min_lat,max_lon,max_lat" Returns: Dictionary containing all elements in the area |
| get_changesetB | Get information about a changeset. Args: changeset_id: The ID of the changeset to retrieve Returns: Dictionary containing changeset information |
| get_server_infoA | Get information about the OSM Edit MCP server. Returns: Dictionary containing server configuration and status |
| check_authenticationA | Check authentication status and get current user information. Returns: Dictionary containing authentication status and user info |
| find_nearby_amenitiesA | Find nearby amenities around a location using Overpass API. Args: lat: Latitude coordinate lon: Longitude coordinate radius_meters: Search radius in meters (default: 1000) amenity_type: Type of amenity to search for (restaurant, cafe, hospital, etc.) Returns: Dictionary containing nearby amenities with their details |
| validate_coordinatesB | Validate coordinates and provide information about the location. Args: lat: Latitude coordinate lon: Longitude coordinate Returns: Dictionary containing validation results and location information |
| get_place_infoB | Get information about a place by name using OSM Nominatim. Args: place_name: Name of the place to search for Returns: Dictionary containing place information and coordinates |
| search_osm_elementsA | Search for OSM elements using Overpass API with a text query. Args: query: Search query (e.g., "coffee shop", "hospital", "park") element_type: Type of element to search for (node, way, relation, or all) Returns: Dictionary containing search results |
| parse_natural_language_osm_requestA | Parse a natural language request into structured OSM data. Args: request: Natural language request for OSM operations Returns: Dictionary containing parsed components of the request |
| validate_osm_dataA | Validate OSM data for quality assurance before uploading. Args: data: Dictionary containing OSM data to validate (tags, coordinates, etc.) Returns: Dictionary containing validation results and suggestions |
| get_changeset_historyB | Get changeset history for analysis and tracking. Args: user_id: Optional user ID to filter changesets limit: Maximum number of changesets to return Returns: Dictionary containing changeset history |
| export_osm_dataA | Export OSM data from a bounding box in various formats. Args: bbox: Bounding box as "min_lon,min_lat,max_lon,max_lat" format: Export format (json, xml, geojson) include_metadata: Whether to include metadata like changeset info Returns: Dictionary containing exported data |
| get_osm_statisticsA | Get statistics and analytics for OSM data in a bounding box. Args: bbox: Bounding box as "min_lon,min_lat,max_lon,max_lat" Returns: Dictionary containing comprehensive statistics |
| smart_geocodeB | Enhanced geocoding with address parsing and multiple search strategies. Args: address_or_description: Full address or location description Returns: Dictionary containing geocoding results with multiple candidates |
| analyze_gpx_trackB | Inspect a GPX file and list its independently selectable track segments. |
| create_track_selectionC | Select one continuous subsection of an analyzed GPX without copying it. |
| match_track_selectionB | Map-match a selected GPX subsection using the configured local Valhalla. |
| suggest_track_road_candidatesB | Suggest nearby OSM highway ways without selecting or modifying any way. |
| preview_track_road_editB | Build a non-writing GeoJSON and element diff preview for a road edit. |
| apply_osm_editB | Apply a reviewed proposal after a separate client-host confirmation. |
| apply_track_road_editC | Apply an exact dev-API digest after separate host confirmation. |
| get_edit_capabilitiesC | Describe the active safety profile and optional local services. |
| inspect_map_contextC | Return stable OSM IDs, versions, tags and GeoJSON for a small bbox. |
| list_edit_proposalsA | List local proposal metadata without exposing raw GPX coordinates. |
| verify_osm_editA | Re-fetch every element recorded in an applied proposal receipt. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| review_gpx_road_edit | Prepare a non-writing GPX-to-OSM road-edit proposal for explicit human review. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 28 tools
Several tools overlap in their query surface: get_osm_elements_in_area, export_osm_data, and get_osm_statistics all operate on a bbox, while get_place_info, smart_geocode, and search_osm_elements cover adjacent geocoding/search tasks. The descriptions help separate them, but an agent could easily pick the wrong one.
All tool names are lowercase snake_case and follow a clear verb_noun pattern (get_osm_node, create_track_selection, apply_osm_edit, verify_osm_edit). The longer names like parse_natural_language_osm_request are verbose but still fit the same convention.
With 28 tools, the surface is heavy for an editing server and exceeds the 25-tool threshold. Many read/search/geocode helpers could be consolidated, and the GPX workflow adds a second large sub-domain on top of the core OSM editing flow.
The set covers a full edit workflow: discover, validate, propose, apply, and verify, along with GPX track analysis and export. It lacks explicit element-level create/update/delete and changeset management tools, but those seem intentionally funneled through apply_osm_edit.