Chuk MCP Geocoder MCP Server

1

Add it to Claude Code

Run this in a terminal.

Run in terminal
claude mcp add chuk-mcp-geocoder -- uvx chuk-mcp-geocoder
README.md

Geocoding & Place Discovery MCP Server via Nominatim/OpenStreetMap.

chuk-mcp-geocoder

Geocoding & Place Discovery MCP Server via Nominatim/OpenStreetMap.

Provides forward/reverse geocoding, bounding box extraction, nearby places discovery, batch geocoding, route waypoints, and administrative boundary lookup — designed to work alongside other MCP geospatial servers (DEM, STAC, etc.).

This is a demonstration project provided as-is for learning and testing purposes.

Tools

Tool Description
geocode Place name to coordinates (lat, lon, bbox, address)
reverse_geocode Coordinates to place name and address
bbox_from_place Place name to [west, south, east, north] bbox for DEM/STAC tools
nearby_places Find places near a coordinate at multiple scales
admin_boundaries Administrative hierarchy (country, state, county, city, suburb)
batch_geocode Geocode multiple place names in one call
route_waypoints Geocode waypoints in order and compute route distances
distance_matrix Compute haversine distance matrix between multiple points
geocoder_status Server status and cache statistics
geocoder_capabilities Full capabilities listing with LLM guidance

Installation

Using uvx (Recommended - No Installation Required!)

The easiest way to use the server is with uvx, which runs it without installing:

uvx chuk-mcp-geocoder

This automatically downloads and runs the latest version. Perfect for Claude Desktop!

Using uv (Recommended for Development)

# Install from PyPI
uv pip install chuk-mcp-geocoder

# Or clone and install from source
git clone <repository-url>
cd chuk-mcp-geocoder
uv sync --dev

Using pip (Traditional)

pip install chuk-mcp-geocoder

Usage

With Claude Desktop

Option 1: Use the Public Server (Easiest)

Connect to the hosted public server at geocoder.chukai.io:

MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "geocoder": {
      "url": "https://geocoder.chukai.io/mcp"
    }
  }
}
Option 2: Streamable HTTP URL (Local)

Run the server locally and connect via HTTP:

{
  "mcpServers": {
    "geocoder": {
      "url": "http://localhost:8010/mcp"
    }
  }
}

Then start the server:

uvx chuk-mcp-geocoder http
Option 3: Run Locally with uvx
{
  "mcpServers": {
    "geocoder": {
      "command": "uvx",
      "args": ["chuk-mcp-geocoder"]
    }
  }
}
Option 4: Run Locally with pip
{
  "mcpServers": {
    "geocoder": {
      "command": "chuk-mcp-geocoder"
    }
  }
}

Standalone

Run the server directly:

# With uvx (recommended - always latest version)
uvx chuk-mcp-geocoder

# With uvx in HTTP mode
uvx chuk-mcp-geocoder http

# Or if installed locally
chuk-mcp-geocoder
chuk-mcp-geocoder http

Or with uv/Python:

# STDIO mode (default, for MCP clients)
uv run chuk-mcp-geocoder
# or: python -m chuk_mcp_geocoder.server

# HTTP mode (for web access and streamable HTTP)
uv run chuk-mcp-geocoder http
# or: python -m chuk_mcp_geocoder.server http

# HTTP mode with custom host/port
uv run chuk-mcp-geocoder http --host 0.0.0.0 --port 9000

STDIO mode is for MCP clients like Claude Desktop and mcp-cli. HTTP mode runs a web server on http://localhost:8010 for HTTP-based MCP clients.

Usage with MCP CLI

uv run mcp-cli --server geocoder,dem,stac

Then ask:

"Get the elevation profile for Mersea Island"

The LLM will use bbox_from_place or geocode to resolve the location, then pass coordinates to the DEM server.

Configuration

Environment Variable Description Default
NOMINATIM_EMAIL Contact email for Nominatim API (none)
NOMINATIM_BASE_URL Custom Nominatim instance URL https://nominatim.openstreetmap.org
MCP_STDIO Force stdio transport mode (auto-detect)

Development

Setup

# Clone the repository
git clone <repository-url>
cd chuk-mcp-geocoder

# Install with uv (recommended)
uv sync --dev

# Or with pip
pip install -e ".[dev]"

Running Tests

make test              # Run tests
make test-cov          # Run tests with coverage
make coverage-report   # Show coverage report

Code Quality

make lint      # Run linters
make format    # Auto-format code
make typecheck # Run type checking
make security  # Run security checks
make check     # Run all checks

Building

make build           # Build package
make publish-test    # Upload to TestPyPI for testing
make publish-manual  # Manually upload to PyPI (requires PYPI_TOKEN)
make publish         # Create tag and trigger GitHub Actions release

Architecture

Follow

Tools (10)

geocodePlace name to coordinates (lat, lon, bbox, address)
reverse_geocodeCoordinates to place name and address
bbox_from_placePlace name to [west, south, east, north] bbox for DEM/STAC tools
nearby_placesFind places near a coordinate at multiple scales
admin_boundariesAdministrative hierarchy (country, state, county, city, suburb)
batch_geocodeGeocode multiple place names in one call
route_waypointsGeocode waypoints in order and compute route distances
distance_matrixCompute haversine distance matrix between multiple points
geocoder_statusServer status and cache statistics
geocoder_capabilitiesFull capabilities listing with LLM guidance

Environment Variables

NOMINATIM_EMAILContact email for Nominatim API
NOMINATIM_BASE_URLCustom Nominatim instance URL
MCP_STDIOForce stdio transport mode

Configuration

claude_desktop_config.json
{"mcpServers": {"geocoder": {"command": "uvx", "args": ["chuk-mcp-geocoder"]}}}

Try it

What are the coordinates for the Eiffel Tower?
Find the administrative boundaries for Tokyo, Japan.
Get the bounding box for Mersea Island to use with my DEM server.
Find places near 51.5074, -0.1278.
Geocode these locations: London, Paris, and Berlin.

Frequently Asked Questions

What are the key features of Chuk MCP Geocoder?

Forward and reverse geocoding using OpenStreetMap data. Bounding box extraction for geospatial analysis. Administrative boundary hierarchy lookup. Batch geocoding and route waypoint processing. Distance matrix calculation between multiple points.

What can I use Chuk MCP Geocoder for?

Resolving place names to coordinates for mapping applications. Preparing spatial data for DEM or STAC geospatial servers. Automating location-based data lookups in LLM workflows. Calculating distances between multiple geographic waypoints.

How do I install Chuk MCP Geocoder?

Install Chuk MCP Geocoder by running: uvx chuk-mcp-geocoder

What MCP clients work with Chuk MCP Geocoder?

Chuk MCP Geocoder works with any MCP-compatible client including Claude Desktop, Claude Code, Cursor, and other editors with MCP support.

Turn this server into reusable context

Keep Chuk MCP Geocoder docs, env vars, and workflow notes in Conare so your agent carries them across sessions.

Need the old visual installer? Open Conare IDE.
Open Conare