geocode-mcp
Geocoding MCP Server πΊοΈ
Turn place names and addresses into coordinates (and back) for Claude Desktop and any MCP-compatible client, powered by OpenStreetMap Nominatim. Forward & reverse geocoding, place/POI search, and distance between locations β all from natural language. No API key required.
npm package:
geocode-mcp Β· GitHub repo:danishashko/geocode-mcp.
π― What You Get
π Geocode β address/place/landmark β latitude & longitude
π Reverse geocode β coordinates β human-readable address
π Place search β find POIs/places by description
π Distance β straight-line distance between two named places
Geocoding is something LLMs can't reliably do on their own β this gives Claude real, current coordinates from OpenStreetMap. Every tool returns human-readable markdown by default, or structured JSON on request (response_format: "json"). Lightweight (Python standard library + mcp only), no API key.
π Quick Start
Add this to your Claude Desktop config and restart Claude:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"geocode": {
"command": "npx",
"args": ["-y", "geocode-mcp"],
"env": {
"GEOCODE_USER_AGENT": "your-app-name your@email.com"
}
}
}
}OpenStreetMap asks every client to send a descriptive User-Agent with contact info. Set GEOCODE_USER_AGENT to your own name/email (a default is provided so it works out of the box). On first launch the npx wrapper creates an isolated Python environment and installs the dependency (one-time, ~a minute). You need Python 3.10+ and Node.js 16+.
Prefer a global install?
npm install -g geocode-mcp{
"mcpServers": {
"geocode": {
"command": "geocode-mcp",
"env": { "GEOCODE_USER_AGENT": "your-app-name your@email.com" }
}
}
}π§ Available Tools
Tool | What it returns | Parameters |
| Ranked coordinate matches for an address/place/landmark |
|
| The address at a given latitude/longitude |
|
| Places/POIs matching a description, with coordinates |
|
| Straight-line distance between two named places |
|
Every tool also accepts response_format ("markdown", the default, or "json"). country_codes is an optional comma-separated ISO 3166-1 alpha-2 filter (e.g. us or us,ca).
π¬ Example Prompts
Once the server is connected, just ask Claude:
"What are the coordinates of the Eiffel Tower?"
"What's at latitude 40.7484, longitude -73.9857?"
"Find bookstores in Paris."
"How far is it from London to Edinburgh in miles?"
"Geocode '1600 Pennsylvania Avenue' β US only."
π Troubleshooting
"OpenStreetMap is rate-limiting requests" Nominatim's public server allows ~1 request/second. This server self-throttles, but if you still hit it, wait a moment.
"No locations found"
Try a more specific or differently-worded query, or add a country_codes filter to disambiguate.
"Command not found" / "Python not found"
Ensure Python 3.10+ and Node.js 16+ are installed and on your PATH. On macOS/Linux, try python3.
Tools not showing up in Claude
Confirm the config file is valid JSON (no trailing commas).
Fully quit and reopen Claude Desktop.
Using a different model or provider (LiteLLM, OpenRouter, NVIDIA NIM, a local model)
This server never talks to a model. Your client starts it as a local process and
speaks JSON-RPC over stdin/stdout, so changing ANTHROPIC_BASE_URL or swapping the
model behind your client has no effect on it. If tools stop firing after a switch
like that, check two things: the model has to support function calling, and a proxy
configured to drop unsupported parameters can silently strip your tool definitions,
which produces no error at all. Run /mcp in your client (or claude mcp list) to
confirm the server is connected before suspecting the server.
π οΈ Manual Installation (Alternative)
If you would rather run the Python file directly instead of via npx:
1. Download the server and install the dependency
pip install mcp(or pip3 on macOS/Linux)
2. Point Claude Desktop at it
{
"mcpServers": {
"geocode": {
"command": "python3",
"args": ["/absolute/path/to/geocode_mcp.py"],
"env": { "GEOCODE_USER_AGENT": "your-app-name your@email.com" }
}
}
}On Windows use "command": "python" and a path like "C:\\path\\to\\geocode_mcp.py".
3. Restart Claude Desktop.
π Privacy & Usage Policy
Uses OpenStreetMap's free Nominatim API β public, no key.
Requests go straight from your machine to OpenStreetMap. Nothing is stored or proxied.
Per the Nominatim Usage Policy, the server sends a descriptive
User-Agentand self-throttles to ~1 request/second. Please don't use it for bulk/heavy workloads against the public server.Data Β© OpenStreetMap contributors, available under the ODbL.
π Notes
distance_betweenreturns straight-line (great-circle) distance, not driving/route distance.Results are ranked by relevance/importance; use
country_codesto narrow ambiguous names (e.g. "Springfield").Reverse geocoding near water or remote areas may return no address.
π Changelog
See CHANGELOG.md for the full version history.
π Resources
βοΈ Legal Disclaimer
This tool uses the OpenStreetMap Nominatim API but is not affiliated with or endorsed by the OpenStreetMap Foundation. Geocoding data Β© OpenStreetMap contributors, licensed under the Open Database License. Use is subject to the Nominatim Usage Policy.
π€ Author
Daniel Shashko
GitHub: @danishashko
LinkedIn: daniel-shashko
npm: danielshashko
π License
MIT Β© Daniel Shashko
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/danishashko/geocode-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server