# OpenStreetMap MCP

> OpenStreetMap MCP lets your AI client interact with the world's largest open geographic database. You can query raw map data, create new points of interest, manage complex boundaries, and track historical changes for any location. It gives you full control over geospatial elements—reading everything from nodes to relations directly through natural conversation.

## Overview
- **Category:** data-management
- **Price:** Free
- **Tags:** geospatial, map-data, cartography, gis, location-services, open-data

## Description

This MCP connects your AI agent directly to the OpenStreetMap API, letting it handle geographic data like a specialized GIS analyst would. Instead of manually exporting map layers or navigating complex web forms, your agent acts as an intermediary, allowing you to ask questions and make changes using plain language.

For example, you can request all points of interest within a specific bounding box for analysis, or audit the history of a particular road segment over time. Need to contribute to open-source mapping? You can automate creating new map notes, updating existing boundaries, and even managing entire groups of edits by opening and closing changesets—all without leaving your current chat window. Vinkius makes this connection simple; you just connect your preferred AI client once and gain access to the full range of these powerful geospatial tools.

It's about treating map data like a conversation: getting information, making adjustments, or tracking who changed what, immediately.

## Tools

### close_changeset
Marks a collection of edits as complete within the OpenStreetMap system.

### close_note
Closes a specific map note, removing it from public view.

### comment_note
Adds an additional comment to an already existing map note.

### create_changeset
Starts a new, isolated group of edits so you can track your work before submission.

### create_element
Adds a brand-new geographic element, such as a point (node), road segment (way), or complex boundary (relation).

### create_note
Writes and publishes a new descriptive map note for a location.

### delete_element
Removes an existing node, way, or relation from the map data.

### delete_message
Deletes a specific message record.

### download_changeset
Downloads the full details of an approved changeset in a specialized format for offline use.

### get_auth_user_details
Retrieves basic information about the user who connected their account.

### get_changeset
Reads and displays all details for a specific changeset ID.

### get_element_history
Retrieves the full audit trail, showing every recorded change to an element by date and user.

### get_element
Reads all current data for a single geographic element using its unique ID.

### get_elements
Retrieves multiple nodes, ways, or relations at once based on provided IDs.

### get_gpx_data
Downloads the raw coordinate data for a specified GPS trace.

### get_gpx_metadata
Reads descriptive information (like timestamps or device used) attached to a GPS trace.

### get_inbox
Retrieves all unread and read messages intended for the authenticated user.

### get_map_data
Fetches nodes, ways, or relations that fall within a specific set of geographical coordinates (bounding box).

### get_message
Reads the full content and status of one private message from another user.

### get_note
Displays the full text and details of a specific map note by its ID.

### get_outbox
Retrieves all messages that the user has sent but are awaiting delivery confirmation.

### get_permissions
Checks what specific actions the connected account is authorized to perform.

### get_user_preferences
Reads settings and personal preferences configured for the authenticated user's account.

### get_user
Retrieves detailed profile information for a specific, named user on the map platform.

### list_notes
Lists all existing map notes that are contained within defined geographic coordinates.

### list_user_gpx
Retrieves a list of GPS traces uploaded or associated with the authenticated user's account.

### query_changesets
Searches and filters changesets based on criteria like time range, user, or geographic area.

### search_notes
Finds map notes by searching through their content keywords.

### send_message
Sends a private message to another specific user within the network.

### update_changeset
Modifies descriptive tags or metadata for an open, ongoing changeset.

### update_element
Changes existing data (like names or attributes) on a node, way, or relation that already exists.

### update_message_status
Marks a message as read or unread to update the sender's status.

### upload_gpx
Uploads an entirely new GPS trace file (GPX format) for permanent storage and analysis.

## Prompt Examples

**Prompt:** 
```
Get map data for the bounding box -0.15, 51.50, -0.10, 51.52 (Central London).
```

**Response:** 
```
I've retrieved the map data for that area. It contains 142 nodes and 24 ways. Would you like me to list the primary road names or points of interest found?
```

**Prompt:** 
```
Show me the history of way ID 4225123.
```

**Response:** 
```
Inspecting history for Way 4225123... This element has 4 versions. It was originally created in 2015 and last updated by user 'MapMaster' in 2023 to add a 'bicycle_lane' tag.
```

**Prompt:** 
```
Find the 5 most recent closed changesets by user 'JohnDoe'.
```

**Response:** 
```
Searching for changesets... I found 5 recent closed changesets for 'JohnDoe'. The most recent one (ID: 1452390) involved updates to building footprints in Berlin. Would you like to download the details of any specific changeset?
```

## Capabilities

### Retrieve raw map data
Fetch all nodes, ways, and relations within specified geographic areas for deep analysis.

### Edit map elements
Add or modify points of interest (nodes), roads (ways), or complex boundaries (relations) directly via chat.

### Manage edits and changesets
Group related changes, open new work sessions, and officially close completed map updates.

### Track data history
Review the full version timeline for any specific element to see who changed it and when.

### Communicate about locations
Send private messages or add descriptive notes attached to map features.

## Use Cases

### Auditing neighborhood infrastructure changes
A city planner needs to verify if all new bike lanes were tagged correctly. They use get_element and then get_element_history for a specific 'way' ID, instantly confirming that the required 'bicycle_lane' tag was added by the correct user at the right time.

### Building a custom location dashboard
A developer needs to feed fresh data into an application. They use get_gpx_data and then list_user_gpx to pull coordinates from multiple sources, ensuring their service always runs on the latest map information.

### Contributing structured open-source edits
An amateur cartographer finds a missing public fountain. Instead of leaving just a comment, they use create_note to add context, then create_element to define the node, and finally update_changeset to tag it properly.

### Coordinating field research teams
A survey team leader needs to check if the ground crew has finished marking a zone. They use list_notes to see all notes within the area, and then can send_message to individual workers for status updates.

## Benefits

- Stop manually exporting raw data. The get_map_data tool lets you query nodes, ways, or relations within any bounding box using a simple chat command.
- Don't just add points; manage the full lifecycle of map edits. Use create_changeset and close_changeset to group your work and submit it cleanly.
- Need accountability? get_element_history tracks every single change made to an element, showing who did it and exactly when.
- Go beyond simple querying by sending messages or creating notes. You can use send_message to coordinate with collaborators or create_note to annotate a specific location's context.
- It handles complex data formats natively. Uploading GPS traces via upload_gpx means you never have to worry about manual file transfer again.

## How It Works

The bottom line is you use your AI client to talk to the API, which then performs the complex map operations.

1. Subscribe to this MCP and provide your OpenStreetMap OAuth Token.
2. Connect your AI client (like Claude, Cursor, etc.) through the Vinkius platform.
3. Start by giving a natural language command, such as 'Get all nodes between X and Y coordinates,' or 'Create a new way for this path.'

## Frequently Asked Questions

**How do I query map data using OpenStreetMap MCP?**
You use get_map_data by specifying a bounding box (the coordinates) and what type of element you want to read. The system returns nodes, ways, or relations found within that exact area.

**Can I track changes on OpenStreetMap MCP?**
Yes, use get_element_history with an element ID. This tool retrieves the complete version timeline, showing every user who modified it and when they did it.

**What is 'changeset' in OpenStreetMap MCP?**
A changeset groups multiple edits together (like adding five points of interest). You use create_changeset to start the group, make your edits, and then close_changeset when you are done.

**Do I need a specific API key for OpenStreetMap MCP?**
Yes. When setting up this MCP on Vinkius, you must enter your unique OpenStreetMap OAuth Token to authorize the agent to write data.

**How do I add new points of interest using OpenStreetMap MCP?**
You use create_element and specify that you want to build a 'node' (a point). You provide the coordinates and any necessary tags, and the system handles the creation.