Skip to main content

chuk-mcp-geocoder

Geocoding & Place Discovery MCP Server via Nominatim/OpenStreetMap.

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

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)
geocoder_status Server status and cache statistics
geocoder_capabilities Full capabilities listing with LLM guidance

Quick Start

# Install
uv sync

# Run tests
uv run pytest

# Run server (stdio mode for MCP CLI)
uv run chuk-mcp-geocoder stdio

# Run server (HTTP mode)
uv run chuk-mcp-geocoder http --port 8010

Usage with MCP CLI

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

Then ask:

"Get the elevation profile for the Strood causeway connecting Mersea Island to the mainland"

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)

Architecture

Follows the same 5-layer pattern as chuk-mcp-dem:

  1. core/nominatim.py — Async HTTP client with rate limiting and LRU cache
  2. core/geocoder.py — Async manager with validation and typed dataclass results
  3. models/responses.py — Pydantic v2 response models (extra="forbid", to_text())
  4. constants.py — All configuration, messages, and metadata
  5. tools/*/api.py — MCP tool registration with @mcp.tool() decorators

Data Source

All geocoding data comes from OpenStreetMap via the Nominatim API.

  • Data license: ODbL 1.0
  • API rate limit: 1 request/second (public API)
  • Results are cached in-memory (1 hour TTL)

License

Apache-2.0

Metadata

Release files for chuk-mcp-geocoder 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for chuk-mcp-geocoder 0.1.0
File Size Uploaded
chuk_mcp_geocoder-0.1.0.tar.gz 147.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for chuk-mcp-geocoder 0.1.0
File Interpreter ABI Platform
chuk_mcp_geocoder-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 177.1 kB

Release files / chuk_mcp_geocoder-0.1.0.tar.gz

Download URL chuk_mcp_geocoder-0.1.0.tar.gz
Size 147.2 kB
Tags Source
SHA-256 checksum
How to use checksums
92c062c280f93c07e8c912bc820406f4b6aa1c3c9032b463dd1afc4878b22516
BLAKE2b-256 checksum
How to use checksums
c35c0ed7e754975b914d91c555f575c1ecaf60c7fbd084561a98c7584b43066d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.2

Release files / chuk_mcp_geocoder-0.1.0-py3-none-any.whl

Download URL chuk_mcp_geocoder-0.1.0-py3-none-any.whl
Size 29.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4171cae033f1b3829ba934b5c1cefa106e57adb23794ca5d6608ab7980bae0cf
BLAKE2b-256 checksum
How to use checksums
8c11e699a3b70c172be9df844ff9c2014a05c07ea12c45b398cc9b12a5e97e5e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.2

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page