chuk-mcp-geocoder
Provides forward and reverse geocoding, bounding box extraction, nearby place discovery, and administrative boundary lookup using OpenStreetMap data via the Nominatim API. It also supports batch geocoding, route waypoint processing, and distance matrix calculations.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@chuk-mcp-geocoderfind the coordinates and address for the Empire State Building"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 |
| Place name to coordinates (lat, lon, bbox, address) |
| Coordinates to place name and address |
| Place name to |
| Find places near a coordinate at multiple scales |
| Administrative hierarchy (country, state, county, city, suburb) |
| Geocode multiple place names in one call |
| Geocode waypoints in order and compute route distances |
| Compute haversine distance matrix between multiple points |
| Server status and cache statistics |
| Full capabilities listing with LLM guidance |
Related MCP server: geocoding-mcp
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-geocoderThis 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 --devUsing pip (Traditional)
pip install chuk-mcp-geocoderUsage
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 httpOption 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 httpOr 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 9000STDIO 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,stacThen 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 |
| Contact email for Nominatim API | (none) |
| Custom Nominatim instance URL |
|
| 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 reportCode Quality
make lint # Run linters
make format # Auto-format code
make typecheck # Run type checking
make security # Run security checks
make check # Run all checksBuilding
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 releaseArchitecture
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
Public Server
A public instance is hosted at geocoder.chukai.io for easy access:
URL:
https://geocoder.chukai.io/mcpProtocol: MCP over HTTPS (Streamable HTTP)
Free to use: No API key required
Always up-to-date: Running the latest version
Simply add it to your Claude Desktop config:
{
"mcpServers": {
"geocoder": {
"url": "https://geocoder.chukai.io/mcp"
}
}
}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
Available Tools
10 toolsadmin_boundariesA
Get administrative boundary hierarchy for a location.
Returns the full admin hierarchy from country down to neighbourhood
for the given coordinates.
Args:
lat: Latitude (-90 to 90)
lon: Longitude (-180 to 180)
output_mode: "json" (default) or "text"
Returns:
Administrative boundaries from largest to smallest
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lon | Yes | ||
| output_mode | No | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must bear full burden. It discloses that the tool returns hierarchy from largest to smallest, but lacks info on errors, rate limits, or idempotency. Safe behavior implied but not explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured with sections (Args, Returns) and front-loaded purpose. Redundant 'Args' section but overall concise and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description adequately explains return value as admin hierarchy from largest to smallest. However, exact JSON structure or hierarchy levels not detailed, which could be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has no descriptions (0% coverage), but description explains lat/lon as coordinates and output_mode as 'json' or 'text'. Adds context beyond schema types, though ranges are already in schema (min/max not shown here but typical).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns administrative boundary hierarchy for a location, from country to neighbourhood. It distinguishes from sibling tools like reverse_geocode by focusing on hierarchy rather than address.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like geocode or reverse_geocode. Usage is implied from the description but no when-not-to or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_geocodeA
Geocode multiple place names in one call.
Each query is processed sequentially to respect Nominatim rate limits.
Individual failures don't abort the batch.
Args:
queries: JSON array of place names (e.g. '["Boulder, CO", "Denver, CO"]')
limit: Maximum results per query (default 1)
output_mode: "json" (default) or "text"
Returns:
Per-query results with coordinates, or error for failed queries
CRITICAL — LLM retry guidance:
If any query in the batch fails, re-run only the failed queries
with simplified names using the single geocode tool. Nominatim
works best with simple place names — remove landmarks, qualifiers,
and descriptive words before retrying.
| Name | Required | Description | Default |
|---|---|---|---|
| queries | Yes | ||
| limit | No | ||
| output_mode | No | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses sequential processing, rate limit respect, individual failures not aborting batch, and detailed retry guidance, making behavior fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with sections (Args, Returns, retry guidance), but slightly verbose; each part earns its place, though could be more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a batch tool: explains all parameters, behavior, return format (coordinates or error per query), and retry guidance. No output schema needed given this detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but description adds significant meaning: 'queries' is a JSON array with example, 'limit' is max results per query, 'output_mode' defaults to 'json' with 'text' option, all beyond what schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it geocodes multiple place names in one call, distinguishing it from sibling tools like 'geocode' (single) and 'reverse_geocode'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It describes sequential processing to respect rate limits and gives retry guidance for failed queries, but does not explicitly state when to use this tool versus others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bbox_from_placeA
Get a bounding box for a place, suitable for DEM/STAC tools.
Returns bbox as [west, south, east, north] in EPSG:4326, compatible
with dem_fetch, stac_search, dem_slope, and other geospatial tools.
Args:
query: Place name to get bbox for (e.g. "Palm Jumeirah, Dubai")
padding: Fractional padding to expand bbox (0.1 = 10% on each side, default 0.0)
output_mode: "json" (default) or "text"
Returns:
Bounding box [west, south, east, north], center point, and approximate area
CRITICAL — LLM retry workflow when no results are found:
If the query returns no results, you MUST retry automatically — do
NOT ask the user. Simplify the query progressively:
1. Remove specific landmarks/features, keep the broader place.
"Strood Causeway, Mersea Island" → "Mersea Island"
2. Drop region/country qualifiers if still no results.
"Mersea Island, Essex, UK" → "Mersea Island"
3. Try alternative or official names for the place.
4. If using a broader place, consider adding padding to cover the
area of interest (e.g. padding=0.1 for 10% expansion).
Always retry at least twice before reporting failure.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| padding | No | ||
| output_mode | No | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description fully discloses behavioral traits: it explains the retry mechanism, the return format (bbox, center, area), and implies it is a read-only operation. It also provides fallback strategies, making the tool's behavior transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections for usage, parameters, and a critical retry workflow. It is thorough but not overly verbose; every sentence adds value. Slightly lengthy, but the detail is justified for an AI agent's correct usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains the return value (bbox, center, area). It mentions compatibility with sibling tools (dem_fetch, stac_search) and provides a complete retry strategy. All necessary context for successful invocation is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While schema coverage is 0%, the description adds comprehensive meaning to each parameter: query (with example), padding (fractional expansion, default 0.0), and output_mode (json or text). It clarifies their roles beyond the schema's minimal type definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get a bounding box for a place, suitable for DEM/STAC tools.' It specifies the exact output format and lists compatible tools, distinguishing it from sibling tools like geocode or reverse_geocode.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance, including a detailed retry workflow for when no results are found. It instructs the agent to progressively simplify the query and retry at least twice before reporting failure, which is critical for reliable agent behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
distance_matrixA
Compute haversine distance matrix between multiple points.
Pure computation — no API calls needed. Accepts points as either
[lat, lon] pairs or {"name": ..., "lat": ..., "lon": ...} objects.
Args:
points: JSON array of points. Each point is either:
- [lat, lon] pair (auto-named "Point 1", "Point 2", ...)
- {"name": "Label", "lat": 40.0, "lon": -105.0}
output_mode: "json" (default) or "text"
Returns:
NxN distance matrix in metres between all point pairs
| Name | Required | Description | Default |
|---|---|---|---|
| points | Yes | ||
| output_mode | No | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries full burden. It discloses input formats and return type, but omits limitations such as maximum number of points or error handling for invalid coordinates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Structured with purpose, args, and returns sections. Every sentence adds value, though the Args section could be more terse. Overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers input, output (NxN matrix in metres), and behavior (pure computation). Lacks constraints like maximum points, but sufficient for a simple calculation tool without output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description compensates thoroughly: explains points as JSON array with two alternative formats and clarifies output_mode default. This adds critical meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it computes a haversine distance matrix between points, specifying 'Pure computation — no API calls needed.' It distinguishes itself from sibling tools like geocode and route_waypoints by focusing on straight-line distances.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions 'no API calls needed' implying offline use, but lacks explicit guidance on when to use versus siblings like route_waypoints for along-route distances. No conditions or exclusion criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
geocodeA
Forward geocode a place name to coordinates.
Searches the OpenStreetMap/Nominatim database for places matching
the query and returns coordinates, bounding boxes, and address details.
Args:
query: Place name or address to search for (e.g. "Boulder, Colorado")
limit: Maximum results (1-50, default 5)
countrycodes: Comma-separated ISO 3166-1 country codes to filter (e.g. "us,gb")
language: Preferred response language (e.g. "en", "de", "fr")
output_mode: "json" (default) or "text"
Returns:
List of matching places with coordinates, bbox, and address details
CRITICAL — LLM retry workflow when no results are found:
Nominatim works best with simple, well-known place names. Specific
or compound names (e.g. "Strood Causeway, Mersea Island, UK") often
return nothing.
If the query returns no results, you MUST retry automatically — do
NOT ask the user. Follow this cascade:
1. Remove qualifiers and landmarks — keep only the core place name.
"Strood Causeway, Mersea Island, UK" → "Mersea Island, UK"
"Portland Harbor, Maine" → "Portland, Maine"
2. Simplify further — drop region/country qualifiers.
"Mersea Island, UK" → "Mersea Island"
"Portland, Maine" → "Portland"
3. Use countrycodes to narrow broad queries (e.g. countrycodes="gb").
4. If the place is near a well-known location, geocode that instead
and report the approximate area.
5. Try alternative or official names — "The Strood" instead of
"Strood Causeway", etc.
Always retry at least twice with progressively simpler terms before
telling the user the location could not be found.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| limit | No | ||
| countrycodes | No | ||
| language | No | ||
| output_mode | No | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description carries full burden. It discloses Nominatim's behavior, the retry workflow, and typical query difficulties. However, it omits basic safety info like read-only nature or rate limits, which is acceptable given no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a docstring format and a separate CRITICAL section. While lengthy, the retry instructions are valuable and earned. Could be slightly trimmed, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains return value (list with coordinates, bbox, address). It covers edge cases with the retry workflow, making it complete for a geocoding tool with complex failure modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must explain parameters. It documents all 5 parameters with examples, ranges, and defaults, adding context beyond the bare schema types. For instance, 'query' gets an example, 'limit' gets range 1-50, 'countrycodes' gets ISO 3166-1 explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it performs forward geocoding of place names to coordinates, explicitly naming the Nominatim database. It distinguishes from siblings like reverse_geocode and batch_geocode, which are on the same server.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides detailed retry workflow instructions for when no results are found, including specific simplification steps. While it doesn't explicitly compare to alternatives, the retry logic gives clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
geocoder_capabilitiesA
Get full server capabilities.
Returns the complete list of tools, Nominatim API details,
and LLM-friendly usage guidance.
Args:
output_mode: "json" (default) or "text"
Returns:
Full server capabilities including tool lists and guidance
| Name | Required | Description | Default |
|---|---|---|---|
| output_mode | No | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry full behavioral disclosure. It states this is an info retrieval operation, but does not clarify whether it is read-only, requires authentication, or has any side effects. The description is minimal on non-functional aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with no wasted words. It uses clear reStructuredText-style Args/Returns sections, front-loads the main verb ('Get'), and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (1 parameter, no nested objects) and no output schema, the description adequately covers purpose, parameters, and return content. It mentions 'including tool lists and guidance,' which is sufficient for a capabilities endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage and only defines output_mode as a string with default 'json'. The description adds that it accepts 'json' or 'text', providing more granularity beyond the schema. This compensates well for the lack of schema comments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get full server capabilities' and specifies what it returns: tool lists, Nominatim API details, and usage guidance. This distinguishes it from sibling tools that perform geocoding or other specific operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this versus alternatives, but the purpose is self-evident for retrieving server capabilities. There is no guidance on when not to use it or comparisons with siblings, leaving some ambiguity for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
geocoder_statusB
Get geocoder server status.
Returns server version, Nominatim URL, cache stats, and tool count.
Args:
output_mode: "json" (default) or "text"
Returns:
Server status information
| Name | Required | Description | Default |
|---|---|---|---|
| output_mode | No | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and description does not disclose behavioral traits like idempotency, rate limits, or authentication requirements; only lists return values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is short and front-loaded with key info; includes Args/Returns in a docstring style that is efficient but slightly verbose for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple status tool with one parameter and no output schema, description adequately outlines return values but could explain output format differences between 'json' and 'text'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description adds meaning by specifying the parameter 'output_mode' with possible values and default; compensates for lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Get geocoder server status' and lists specific return items, showing purpose well but lacks differentiation from sibling like 'geocoder_capabilities'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as 'geocoder_capabilities' or other status-related tools; missing context for when-not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nearby_placesA
Find places near a coordinate.
Discovers nearby places at different scales (buildings, streets,
suburbs, cities) using reverse geocoding at multiple zoom levels.
Args:
lat: Latitude (-90 to 90)
lon: Longitude (-180 to 180)
limit: Maximum number of results (default 10)
categories: Comma-separated OSM categories to filter (e.g. "natural,tourism")
output_mode: "json" (default) or "text"
Returns:
List of nearby places with distances, sorted by proximity
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lon | Yes | ||
| limit | No | ||
| categories | No | ||
| output_mode | No | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavior. It mentions reverse geocoding at multiple zoom levels and returns sorted list, but lacks details on error handling, rate limits, or whether it modifies data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with Args and Returns sections, front-loaded purpose. Slightly verbose with docstring formatting but no wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description outlines return structure. With 5 parameters and no annotations, it covers basic usage but could include more detail on response format or edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds meaning to all 5 parameters (e.g., lat/lon as coordinates, limit default, categories format, output_mode options), compensating for the lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it finds places near a coordinate using reverse geocoding at multiple zoom levels, distinguishing it from sibling tools like reverse_geocode and geocode.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives (e.g., reverse_geocode). Does not mention limitations or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reverse_geocodeA
Reverse geocode coordinates to a place name and address.
Looks up the nearest place for the given coordinates and returns
the display name, structured address, and bounding box.
Args:
lat: Latitude (-90 to 90)
lon: Longitude (-180 to 180)
zoom: Detail level 0-18 (18=building, 10=city, 3=country, default 18)
language: Preferred response language (e.g. "en", "de", "fr")
output_mode: "json" (default) or "text"
Returns:
Place name, address components, and bounding box
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lon | Yes | ||
| zoom | No | ||
| language | No | ||
| output_mode | No | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavior. It mentions 'nearest place' and provides parameter ranges (lat, lon, zoom) but lacks details on rate limits, authentication, error handling, or response format beyond basic components.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with a clear summary followed by parameter and return descriptions. Slightly verbose due to docstring format (Args/Returns) but information is organized and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, so description must explain returns. It briefly mentions 'Place name, address components, and bounding box' but lacks examples, error cases, or details on address structure. Adequate for basic use but incomplete for complex scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% but the description adds meaningful explanations for each parameter: lat/lon ranges, zoom levels, language examples, output_mode options. This compensates well beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool reverses geocode coordinates to a place name and address, specifying inputs (lat, lon) and outputs (display name, structured address, bounding box). Distinguishes from siblings like geocode (forward) and batch_geocode.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage through parameter descriptions (zoom levels for detail, language for localization) but no explicit guidance on when to use this vs siblings like nearby_places or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
route_waypointsA
Geocode waypoints in order and compute route distances.
Resolves each waypoint to coordinates, then computes haversine
distances between consecutive points.
Args:
waypoints: JSON array of place names in route order
(e.g. '["Boulder, CO", "Denver, CO", "Aspen, CO"]')
output_mode: "json" (default) or "text"
Returns:
Resolved waypoints, leg distances, total distance, and bounding box
CRITICAL — LLM retry guidance:
If a waypoint fails to resolve, simplify its name and retry the
entire route. Remove landmarks, qualifiers, and descriptive words.
Use the single geocode tool to test problematic names first.
| Name | Required | Description | Default |
|---|---|---|---|
| waypoints | Yes | ||
| output_mode | No | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully covers behavior: it resolves coordinates using geocoding, computes haversine distances, and returns specific results. The CRITICAL section adds valuable retry logic (simplify names, test with single geocode). However, it omits authentication needs, rate limits, or output size constraints, though these are less critical for a read-only geocoding tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a brief purpose sentence, then details, then crucial retry guidance. It is front-loaded and every part adds value. The retry section is somewhat lengthy but justified for agent reliability. Slightly verbose but appropriate for guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains returns as 'Resolved waypoints, leg distances, total distance, and bounding box' but lacks precise format specification. It also misses error handling beyond retry guidance (e.g., invalid JSON input). The description is functional but could be more explicit about output structure for an agent to parse correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description provides detailed Args: waypoints is a JSON array with example, output_mode explains 'json' default and 'text' alternative. This adds significant meaning beyond the raw schema (which only has type string). Minor improvement: could specify accepted values for output_mode more explicitly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Geocode waypoints in order and compute route distances', specifying the verb (geocode, compute) and resource (waypoints, route distances). It distinguishes from siblings like geocode (single point) and distance_matrix (all pairs) by focusing on consecutive waypoints in order.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus siblings like geocode, batch_geocode, or distance_matrix. It does include retry guidance but fails to mention scenarios where alternative tools would be more appropriate, leaving the agent without decision-making context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose: forward geocoding, reverse geocoding, batch, admin boundaries, bounding box, distance matrix, route waypoints, nearby places, and server info tools. No overlap or ambiguity.
All tool names follow a consistent snake_case pattern and are descriptive of their function. The naming is uniform and predictable, aiding agent selection.
With 10 tools, the server is well-scoped for a geocoding service. Each tool serves a specific need without being excessive or insufficient.
The tool set covers the full lifecycle of geocoding operations: forward/reverse, batch, administrative boundaries, distance calculations, route planning, and status/info. No obvious gaps for its domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Nominatim MCP — wraps OpenStreetMap Nominatim geocoding API (free, no auth)
MCP server for Japan geodata: cadastral lot numbers (chiban) and reverse geocoding, for AI agents.
Geospatial MCP server for earthquake, tsunami, volcano, disaster, and FX data queries.
Geocode, reverse geocode, and run Overpass spatial queries on OpenStreetMap data.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceFree geospatial MCP server for AI agents, providing geocoding, reverse geocoding, POI search, and route planning using OpenStreetMap data via Nominatim, Overpass, and OSRM.1GPL 3.0
- AlicenseNot gradedqualityDmaintenanceAn MCP server for forward geocoding via the Nominatim API (OpenStreetMap) with no API key required.21MIT
- FlicenseNot gradedqualityAmaintenanceAn MCP server providing geocoding, routing, isochrones, and POI-by-proximity search through self-hosted OpenStreetMap backends.
- AlicenseNot gradedqualityBmaintenanceMCP server for geocoding, reverse geocoding, place/POI search, and distance calculation using OpenStreetMap Nominatim, with no API key required.821MIT
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/IBM/chuk-mcp-geocoder'
If you have feedback or need assistance with the MCP directory API, please join our Discord server