Geocoding

io.github.danishashkoPublished by GitHub account danishashkov1.0.2Updated Oct 24, 2026

Forward and reverse geocoding, place search, and distance via OpenStreetMap Nominatim. No key.

VerifiedSTDIODesktop onlyLocation & Lifestyle

Overview

AI-generated overview

Turns place names and addresses into coordinates and back, searches places, and measures straight-line distance using OpenStreetMap Nominatim.

What you can do
Provides four tools: geocode (address, place or landmark to ranked coordinates), reverse_geocode (latitude and longitude to an address), search_places (find points of interest by description), and distance_between (great-circle distance between two named places). Each tool returns human-readable markdown by default or structured JSON on request, and geocode and search_places accept an optional country filter.
When to use it
Useful when an assistant needs real coordinates or addresses rather than guesses, for example locating a landmark, identifying what is at a given latitude and longitude, finding nearby places, or estimating how far apart two cities are.
Requirements
Runs locally over stdio, typically started with npx from the npm package geocode-mcp. Needs Node.js 16+ and Python 3.10+ (the wrapper creates a Python environment on first launch). No API key. The environment variable GEOCODE_USER_AGENT should be set to a descriptive user agent with contact information. Network access to OpenStreetMap is required.
Before you install
Requests go directly from the local machine to OpenStreetMap's public Nominatim service; nothing is stored or proxied. The service is rate-limited to roughly one request per second and the documentation asks users not to run bulk or heavy workloads against it. The GEOCODE_USER_AGENT value is sent to OpenStreetMap, so avoid putting anything sensitive in it. distance_between returns straight-line distance, not driving or route distance.

Installation

In SourceWeft

  1. Open Geocoding in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

Geocoding MCP Server 🗺️

[npm version] [npm downloads] [Python] [License: MIT]

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.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
json
{  "mcpServers": {    "geocode": {      "command": "npx",      "args": ["-y", "geocode-mcp"],      "env": {        "GEOCODE_USER_AGENT": "your-app-name [email protected]"      }    }  }}

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?

bash
npm install -g geocode-mcp
json
{  "mcpServers": {    "geocode": {      "command": "geocode-mcp",      "env": { "GEOCODE_USER_AGENT": "your-app-name [email protected]" }    }  }}

🔧 Available Tools

ToolWhat it returnsParameters
geocodeRanked coordinate matches for an address/place/landmarkquery, limit, country_codes
reverse_geocodeThe address at a given latitude/longitudelatitude, longitude
search_placesPlaces/POIs matching a description, with coordinatesquery, limit, country_codes
distance_betweenStraight-line distance between two named placesorigin, destination, unit

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

  1. Confirm the config file is valid JSON (no trailing commas).
  2. 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

bash
pip install mcp

(or pip3 on macOS/Linux)

2. Point Claude Desktop at it

json
{  "mcpServers": {    "geocode": {      "command": "python3",      "args": ["/absolute/path/to/geocode_mcp.py"],      "env": { "GEOCODE_USER_AGENT": "your-app-name [email protected]" }    }  }}

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-Agent and 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_between returns straight-line (great-circle) distance, not driving/route distance.
  • Results are ranked by relevance/importance; use country_codes to 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

📄 License

MIT © Daniel Shashko

Source: README.md at commit 8b7d1e5

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v1.0.2LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts