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:
- core/nominatim.py — Async HTTP client with rate limiting and LRU cache
- core/geocoder.py — Async manager with validation and typed dataclass results
- models/responses.py — Pydantic v2 response models (
extra="forbid",to_text()) - constants.py — All configuration, messages, and metadata
- 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)
| File | Size | Uploaded | |
|---|---|---|---|
| chuk_mcp_geocoder-0.1.0.tar.gz | 147.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|