Overture Maps MCP Server
Click on "Deploy 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., "@Overture Maps MCP ServerWhat is the land use composition in downtown Austin?"
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.
Overture Maps MCP Server
An open-source MCP server that exposes Overture Maps data as spatial analytics tools for AI agents.
What This Does
AI agents need geospatial intelligence. This server gives them direct access to Overture Maps data through clean, composable tool primitives.
Ask questions like:
"What percentage of buildings within 1km are residential vs commercial?"
"What's the land use composition — residential, industrial, or mixed-use?"
"How does cafe density compare between two potential retail locations?"
Related MCP server: @terranode-co/mcp-server
How It Fits in the Agent Stack
+---------------------------------------------------+
| AI Agent (Claude, Mistral, etc.) |
+-----------------+---------------------------------+
| Geocoding / | Overture Maps MCP |
| Routing / | ---------------------- |
| Display MCP | Place analytics |
| -------------- | Building composition |
| Geocoding | Admin boundary lookups |
| Routing | Transportation analysis |
| Directions | Land use classification |
| ETA | Category discovery |
| Map display | |
+-----------------+---------------------------------+Overture MCP handles spatial analytics that need direct data access. Geocoding/Routing/Display MCPs handle geocoding, routing, directions, and map display via APIs.
They're complementary — use them together for a complete geospatial agent.
Available Tools (V1)
Tool | Theme | What It Does |
| Places | Search Overture's place category taxonomy |
| Places | Find all places matching a category within a radius |
| Places | Find the single closest place of a given type |
| Places | Count places of a category in an area |
| Buildings | Count buildings in an area |
| Buildings | Get % breakdown of building types |
| Divisions | Find what country/region/city contains a point |
| Transportation | Count road segments by class in an area |
| Transportation | Find the closest road of a given class |
| Transportation | Get % breakdown of road surface types |
| Land Use | Determine land use designation at a point |
| Land Use | Get % breakdown of land use types in an area |
| Land Use | Find land use parcels of a specific subtype |
The server also supports a progressive disclosure mode (TOOL_MODE=progressive) that exposes 3 meta-tools instead of 13 individual tools — useful when running alongside many other MCPs where context overhead matters. See docs/TOOLS.md for details.
See docs/OPERATIONS.md for full parameter and response specifications.
Quick Start
Prerequisites
Python 3.10+
An MCP-compatible AI agent (Claude Desktop, Claude Code, etc.)
Install from Source
git clone https://github.com/your-username/overture-mcp-server.git
cd overture-mcp-server
pip install -e .Run Locally (stdio transport)
# stdio is default — no API key needed for local use
python -m overture_mcp.server
# or via the CLI entry point
overture-mcp-serverRun as Hosted Server (SSE transport)
export OVERTURE_API_KEY="your-api-key"
export TRANSPORT=sse
python -m overture_mcp.server
# Server starts on http://0.0.0.0:8000Connect from Claude Desktop
Local (stdio): Add to your Claude Desktop MCP config (claude_desktop_config.json):
{
"mcpServers": {
"overture-maps": {
"command": "python",
"args": ["-m", "overture_mcp.server"]
}
}
}Remote (SSE): Connect to a hosted instance:
{
"mcpServers": {
"overture-maps": {
"url": "http://localhost:8000/sse",
"headers": {
"Authorization": "Bearer your-api-key"
}
}
}
}Example Agent Interaction
User: "Compare cafe density near two potential retail locations in Amsterdam"
Agent:
1. Calls Geocoding MCP -> geocode("Leidseplein, Amsterdam") -> (52.3636, 4.8828)
2. Calls Geocoding MCP -> geocode("De Pijp, Amsterdam") -> (52.3509, 4.8936)
3. Calls Overture MCP -> get_place_categories({query: "cafe"})
4. Calls Overture MCP -> count_places_by_type_in_radius(
{lat: 52.3636, lng: 4.8828, radius_m: 500, category: "cafe"}) -> 12
5. Calls Overture MCP -> count_places_by_type_in_radius(
{lat: 52.3509, lng: 4.8936, radius_m: 500, category: "cafe"}) -> 7
6. Returns: "Leidseplein has 12 cafes within 500m vs 7 in De Pijp..."Architecture
Runtime: Python + FastMCP
Database: DuckDB (in-process) with Spatial extension
Data: Overture Maps GeoParquet on S3 (queried directly, no data copying)
Auth: Bearer token via
Authorizationheader (HTTP/SSE transports)Transports: stdio (local, default), SSE (hosted), Streamable HTTP (hosted)
Hosting: Railway, Docker, or any container platform
Tool modes: Direct (default, 13 tools) or progressive (3 meta-tools)
See ARCHITECTURE.md for full technical details and design decisions.
Data Source
This server queries Overture Maps data directly from S3.
Current release: 2026-01-21.0
Update frequency: Quarterly
License: Overture Maps data is available under ODbL and CDLA Permissive 2.0
Coverage: Global, with varying completeness by region
No AWS credentials needed — the Overture S3 bucket is publicly accessible
Environment Variables
Variable | Required | Default | Description |
| For SSE/HTTP | — | Bearer token for client auth |
| No |
|
|
| No |
|
|
| No |
| Overture release version |
| No |
| DuckDB concurrency limit |
| No |
| Safety cap on radius (meters) |
| No |
| Server port (SSE/HTTP only) |
| No |
| Server host (SSE/HTTP only) |
Documentation
ARCHITECTURE.md — Technical architecture and all design decisions
docs/TOOLS.md — MCP tool specifications
docs/OPERATIONS.md — Operation catalog with full specs
docs/DATA_MODEL.md — Overture schema reference
docs/DEPLOYMENT.md — Railway deployment guide
Contributing
Contributions welcome! Please read the architecture doc first to understand design decisions.
# Clone and set up dev environment
git clone https://github.com/your-username/overture-mcp-server.git
cd overture-mcp-server
pip install -e ".[dev]"
# Run tests (no S3 access needed)
pytest tests/ -m "not s3"
# Run full test suite
pytest tests/License
MIT
Available Tools
13 toolsbuilding_class_compositionC
Get the percentage breakdown of building types within a radius
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lng | Yes | ||
| radius_m | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full responsibility for disclosing behavior. It only mentions it returns a percentage breakdown, but does not note that it is a read-only operation, any edge cases, or potential limitations (e.g., reliance on building type tags). This is minimal behavioral disclosure.
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 a single concise sentence, easy to read and front-loaded with the key action. However, it is so brief that it sacrifices necessary detail, but as a summary it is appropriately sized.
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 existence of an output schema and three parameters, the description is incomplete. It does not specify radius units, return format, or any context about building types. The output schema mitigates the need to explain return values, but the description still lacks critical operational context.
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 input schema has 0% description coverage, and the tool description fails to compensate. It does not explain that lat/lng are coordinates, that radius_m is in meters, or any constraints. The phrase 'within a radius' is too vague to clarify the parameters.
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 a specific action: getting a percentage breakdown of building types within a radius. This distinguishes it from sibling tools like building_count_in_radius (count) and land_use_composition (land use, not building types).
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 is provided on when to use this tool versus alternatives. The description lacks any mention of use cases, exclusions, or comparisons with sibling tools such as count_places_by_type_in_radius or road_surface_composition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
building_count_in_radiusB
Count total buildings within a radius of a point
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lng | Yes | ||
| radius_m | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the basic counting operation and does not address edge cases (e.g., zero buildings), coordinate system, handling of radius boundaries, or the exact return format. The output schema is not shown in the description, so transparency is limited.
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 a single clear sentence that immediately states the action and scope. It contains no filler or redundant information, making it both concise and front-loaded with the core purpose.
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 spatial-count tool with three numeric parameters and an output schema, the description is adequate. It conveys the essential operation, and the parameter names (_m suffix) hint at units. While it could mention coordinate systems or edge cases, the tool's simplicity and presence of an output schema reduce the need for extensive documentation.
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, so the description must compensate. It clarifies that lat/lng define the point and radius_m defines the radius, which adds meaning beyond raw parameter names. However, it does not specify units (e.g., that radius_m is in meters) or valid ranges, leaving room for ambiguity.
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 uses a specific verb ('Count') and resource ('total buildings') with a clear scope ('within a radius of a point'). It differentiates from sibling tools like places_in_radius (returns places) and count_places_by_type_in_radius (counts by type), making the tool's purpose unambiguous.
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 alternatives. Sibling tools such as count_places_by_type_in_radius or building_class_composition offer related functionality, but the description does not mention them or any exclusions. Usage context is only implied by the name, not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
count_places_by_type_in_radiusA
Count how many places of a category exist within a radius
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lng | Yes | ||
| category | Yes | ||
| radius_m | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the transparency burden. It successfully conveys a read-only counting operation (via the verb 'Count'), but it does not disclose any other behavioral details such as exactness, performance, or error conditions. For a simple count tool, the description is adequate but not rich.
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 a single sentence of 12 words, directly stating the tool's function without waste. It is front-loaded and effectively communicates the core purpose.
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 tool has four required parameters, no annotations, and no parameter descriptions in the schema, the description is insufficient to fully contextualize usage. It omits important operational details like coordinate format, radius unit, and how categories are defined, especially when similar sibling tools exist that could lead to confusion.
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%, so the description must compensate for parameter meaning. It only mentions 'category' and 'radius' conceptually, but fails to clarify the lat/lng parameters, the units for radius_m, or the expected category vocabulary. This leaves half the parameters under-specified and the description adds little over the raw 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?
The description clearly states the tool counts places of a category within a radius, using the specific verb 'Count' and identifying the resource ('places') and the key attributes (category, radius). This distinguishes it from sibling tools like places_in_radius and nearest_place_of_type, which likely list or find single places.
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 tool versus alternatives such as places_in_radius or nearest_place_of_type. The intended use is implied by the word 'Count' (i.e., when a count is needed), but no exclusions or alternative recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_place_categoriesA
Search and browse the Overture Maps place category taxonomy
| Name | Required | Description | Default |
|---|---|---|---|
| query | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. 'Search and browse' indicates a read-only operation, but does not specify pagination, filtering behavior, or whether browsing all categories is possible via null query. It offers minimal but non-contradictory context.
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 a single, front-loaded sentence that states the exact purpose without any wasted words. It is concise and easy to parse.
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 simple tool with one optional parameter and an output schema, the description covers the core purpose, but lacks details on how to browse versus search, expected output structure (though output schema exists), and relationship to sibling tools. It is adequate but not comprehensive.
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% since the description does not explain the 'query' parameter. However, the parameter name and optional default are reasonably self-explanatory, and the verb 'search' implies query is a search term. The description partially compensates by suggesting browse behavior with null, but does not explicitly articulate parameter semantics.
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 identifies the tool's purpose with specific verbs ('Search and browse') and a specific resource ('Overture Maps place category taxonomy'). This distinguishes it from sibling tools that query places by radius, type, or boundaries.
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 implies usage for exploring the category taxonomy, but provides no explicit guidance on when to choose this tool over siblings or when not to use it. There are no alternatives or exclusions mentioned, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
land_use_at_pointC
Determine the land use designation at a specific point
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lng | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. The description only states the purpose, not any side effects, return format, limitations, coordinate system requirements, or error behavior. While 'Determine' implies a read-only operation, it does not explicitly disclose whether it is safe, what it returns, or how it handles invalid coordinates. This is minimal transparency.
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 a single sentence with no redundant words. It is front-loaded with the action and resource. While it is concise, it is so short that it borders on under-specification, though that is a completeness issue rather than a structural one. The structure itself is clean and readable.
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 output schema exists, the description need not explain return values, but it still lacks context to differentiate from the many sibling tools. It does not state what constitutes a 'land use designation' or how it relates to the other land use tools. With a low-complexity tool (2 params), the description could and should provide more context about point-based vs. area-based queries.
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 for its two parameters (lat, lng). The description adds no meaning beyond 'at a specific point', which only loosely implies coordinates. It does not mention the parameter names or clarify units, ranges, or coordinate order. Since the schema only provides type information, the description should compensate, but it does not.
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 uses a specific verb ('Determine') and resource ('land use designation') with a location qualifier ('at a specific point'). This clearly distinguishes it from siblings like land_use_composition, which likely describe area-wide patterns, and land_use_search, which implies querying by criteria. However, it does not explicitly name or exclude any sibling tools, so it falls short of a perfect score.
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?
There is no guidance on when to use this tool versus alternatives. The description does not mention that it is for point-based queries, nor does it suggest using land_use_composition for broader areas. No context is provided about prerequisites (e.g., needing valid lat/lng) or scenarios where this tool would be the best choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
land_use_compositionB
Get the percentage breakdown of land use types within a radius
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lng | Yes | ||
| radius_m | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for transparency. It states 'Get' (implying read-only) but does not disclose return value details, precision, units for radius, error behavior, or any side effects. This minimal information is insufficient for an agent to fully anticipate tool behavior.
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 a single, concise sentence with no wasted words. It is efficient but may be too terse given the lack of additional context, which slightly reduces its effectiveness.
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?
With no annotations, no schema descriptions, and an output schema present, the description should provide more context about return format, parameter units, and comparison to sibling tools. It currently lacks details about how the output is structured and what 'land use types' includes, making it incomplete for robust tool selection.
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 the description must clarify parameters. It partially connects 'radius_m' to 'within a radius', adding meaning that the radius parameter controls the area. However, it does not explicitly explain lat/lng or specify other parameter details, leaving room for ambiguity.
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 uses a specific verb ('Get') and resource ('percentage breakdown of land use types within a radius'), clearly distinguishing it from point-based tools like land_use_at_point and categorical tools like land_use_search. The 'within a radius' scope differentiates it from sibling aggregation tools.
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?
Usage context is implied by the description ('within a radius'), suggesting aggregate land-use analysis, but no explicit guidance is given on when to use this tool over alternatives like building_class_composition or places_in_radius. No exclusions or alternative references are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
land_use_searchC
Find land use parcels of a specific subtype within a radius
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lng | Yes | ||
| limit | No | ||
| subtype | Yes | ||
| radius_m | Yes | ||
| include_geometry | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It implies a read-only operation ('Find') but does not disclose return format, pagination, limit behavior, or whether include_geometry affects output. The description is too sparse to convey meaningful behavioral traits.
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 a single, clear, front-loaded sentence with no redundant wording. It is concise, though it may be too brief given the tool's parameter complexity, but the structure itself is 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?
Despite the tool having six parameters and an output schema, the description is too minimal. It does not explain the optional parameters, clarify the meaning of 'subtype', or provide usage context. The completeness is insufficient for an agent to invoke the tool correctly without additional information.
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%, so the description must compensate. It adds meaning to 'subtype' and 'radius' but ignores 'limit' and 'include_geometry', while 'lat' and 'lng' are only implied. The description provides only partial semantic coverage for the six parameters, leaving the agent to guess the purpose of the optional ones.
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 action ('Find'), the resource ('land use parcels'), and the scope ('of a specific subtype within a radius'). This distinguishes it from sibling tools like land_use_at_point (point query) and land_use_composition (aggregated statistics), though it does not explicitly name alternatives.
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 is provided on when to use this tool versus alternatives. The description lacks any mention of prerequisites, exclusions, or comparative context with sibling tools, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nearest_place_of_typeB
Find the single closest place of a given type to a point
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lng | Yes | ||
| category | Yes | ||
| max_radius_m | No | ||
| include_geometry | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavior disclosure, but it only states the core action. It does not mention behavior for edge cases (e.g., no place found), the default search radius, or how distance is measured, leaving significant uncertainty for a location-based search 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 a single 12-word sentence, which is concise and front-loaded, but it is under-specified for a tool with five parameters, making it too terse to be considered appropriately sized.
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 five parameters, the lack of schema descriptions, and no annotations, the one-sentence description is incomplete. It omits details about the optional parameters, search constraints, and fallback behavior, leaving the description inadequate for confident tool invocation.
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%, so the description must compensate, but it only loosely maps 'type' to category and 'point' to lat/lng. The optional parameters max_radius_m and include_geometry are unexplained, relying on their names alone, which is insufficient for a tool with no schema property descriptions.
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 action ('Find'), the resource ('place of a given type'), and the scope ('single closest to a point'), distinguishing it from sibling tools like places_in_radius which return multiple results.
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 implies a straightforward use case—finding the nearest place of a specified type to a coordinate—but does not explicitly discuss when to prefer it over alternatives or any exclusions. The sibling tool names provide some context, but the description itself doesn't reference them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nearest_road_of_classC
Find the single closest road segment of a given class to a point
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lng | Yes | ||
| road_class | Yes | ||
| max_radius_m | No | ||
| include_geometry | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the basic function and does not mention behavior such as what happens if no road is found, how max_radius_m affects results, whether multiple classes are accepted, or what the output structure looks like beyond the schema.
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 a single concise sentence with no wasted words. However, its brevity comes at the expense of necessary usage and parameter details. It is structured effectively for quick reading but lacks the completeness expected in a high-quality tool description.
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?
Despite an output schema existing, the complexity of 5 parameters and no annotations means the description should provide richer context. It fails to address parameter meanings, edge cases, or when to use this tool, making it incomplete for an agent to invoke with confidence.
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%, so the description must compensate. It only implicitly covers lat/lng and road_class, but completely omits explanations for max_radius_m and include_geometry. No parameter details, types, units, or example values are provided, leaving most parameters underspecified.
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 uses a specific verb 'Find' and clearly identifies the resource: 'single closest road segment of a given class to a point'. This distinguishes it from sibling tools like road_count_by_class and road_surface_composition, which serve different purposes.
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 is provided on when to use this tool versus alternatives, such as road_count_by_class or nearest_place_of_type. There are no exclusions, prerequisites, or context about when this tool is preferred, leaving the agent without usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
places_in_radiusB
Find all places matching a category within a radius of a point
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lng | Yes | ||
| limit | No | ||
| category | Yes | ||
| radius_m | Yes | ||
| include_geometry | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It only states the basic operation and does not mention return format, pagination, ordering, or how the radius is interpreted (e.g., meters). It also does not clarify whether the search is inclusive of boundary points or limited by default.
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 a single, front-loaded sentence that clearly conveys the tool's purpose with no filler. It is appropriately concise for a simple search 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?
Despite having an output schema, the description is insufficient for correct invocation with six parameters. It does not explain required parameter semantics (e.g., radius_m units, category vocabulary) nor optional parameters like limit and include_geometry. The agent must rely on external knowledge or defaults, making the description incomplete for a tool with this complexity.
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%, so the description must compensate. It mentions category and radius, adding some meaning to those parameters, but it does not explain the unit of radius_m, the allowed category values, or the optional limit and include_geometry parameters. The description provides minimal guidance beyond the parameter names.
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 action (find), the resource (places), and the criteria (matching a category within a radius of a point). It distinguishes itself from siblings like nearest_place_of_type and count_places_by_type_in_radius by indicating a list of all matches.
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 implies usage when you need all places in a radius, but it does not explicitly state when to use this tool versus alternatives like nearest_place_of_type or building_count_in_radius. No exclusions or alternative references are provided, leaving the agent to infer from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
point_in_admin_boundaryB
Determine what administrative boundaries contain a given point
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lng | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states that the tool determines containment but does not describe the output format, whether multiple boundary levels are returned, or any coordinate-system assumptions.
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 a single, clear, front-loaded sentence with no filler words. It efficiently conveys the core purpose.
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 two-parameter tool with an output schema, the description is adequate. It could be more complete with usage guidance or boundary-level details, but the presence of an output schema reduces the need to explain return values.
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%, so the description must compensate. It does link 'lat' and 'lng' to the notion of a 'point', but it adds little beyond the self-explanatory parameter names and basic schema types.
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 uses a specific verb ('Determine') and clearly identifies the resource ('administrative boundaries') and the input ('a given point'). This distinguishes the tool from sibling tools that handle places, roads, buildings, or land use.
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 offers no guidance on when to use this tool versus alternatives, nor does it mention any exclusions or prerequisites. It simply states what the tool does without contextualizing its use among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
road_count_by_classB
Count road segments by class within a radius of a point
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lng | Yes | ||
| radius_m | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as read-only status, return format, or edge cases (e.g., roads crossing the radius boundary). It simply states the counting action without detailing semantics, leaving the agent to infer safety and output behavior.
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 a single, focused sentence with no redundant words. It front-loads the core purpose, but its brevity comes at the cost of parameter clarity.
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?
The tool is simple and has an output schema available, so return-value details are unnecessary. However, the description leaves key details like radius units unspecified, and the lack of annotations means the agent has limited operational context.
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 input schema has zero description coverage for all three parameters, and the description does little to compensate. It implies that lat/lng define a point and radius_m defines the radius, but it does not specify units (e.g., meters) or coordinate format, which is insufficient for a tool with no schema descriptions.
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 uses a specific verb 'Count' and identifies a concrete resource 'road segments by class' with a clear scope 'within a radius of a point'. It clearly distinguishes from sibling count tools like building_count_in_radius and count_places_by_type_in_radius.
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 implies a use case (querying road class counts near a location) but provides no explicit guidance on when to prefer this tool over alternatives. It does not mention any alternative tools, exclusions, or prerequisites, so usage is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
road_surface_compositionA
Get the percentage breakdown of road surface types within a radius
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lng | Yes | ||
| radius_m | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. The verb 'Get' clearly implies a read-only operation. However, it does not disclose details such as how the radius is interpreted, what constitutes a 'surface type', or any edge cases (e.g., empty results). The presence of an output schema covers return structure, but not behavioral nuances.
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 a single, front-loaded sentence with no redundant information. It is concise and direct, covering the core purpose without wasting words.
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 tool's simplicity (3 obvious parameters) and the presence of an output schema, the one-line description provides adequate context. It clearly states the operation and output nature. The main gap is the lack of parameter explanation, but the names and schema types help compensate. Overall, it is complete enough for a straightforward query tool.
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%, so the description must compensate. It only references 'within a radius', giving some context for radius_m, but it does not explain lat/lng format or units. The names are self-descriptive (lat, lng, radius_m), but the lack of any explicit parameter guidance in the description leaves a gap for agents needing precise input semantics.
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 a specific verb ('Get') and resource ('percentage breakdown of road surface types') with a defined scope ('within a radius'). It distinguishes itself from sibling tools like road_count_by_class or building_class_composition by focusing on surface types and percentage composition.
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 implies usage by specifying 'within a radius' and the concept of composition, but it does not explicitly state when to use this tool over alternatives or mention any exclusions. The sibling list suggests related tools, but no direct comparison or guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
13 tool updates
v0.1.0- First observed
building_class_composition - First observed
building_count_in_radius - First observed
count_places_by_type_in_radius - First observed
get_place_categories - First observed
land_use_at_point - First observed
land_use_composition - First observed
land_use_search - First observed
nearest_place_of_type - First observed
nearest_road_of_class - First observed
places_in_radius - First observed
point_in_admin_boundary - First observed
road_count_by_class - First observed
road_surface_composition
TDQS
Scored across 13 tools
Each tool targets a distinct combination of data type and operation. Place queries separate count, nearest, and all-in-radius; building, road, and land use tools likewise have unique analytical purposes. No two tools overlap in function.
Snake_case is used throughout, and names are generally descriptive. However, some tools begin with verbs (get_, count_) while others use noun phrases (places_in_radius, building_class_composition), making the pattern not fully uniform. Within each data type, naming is predictable.
13 tools is well-scoped for a geospatial server covering places, buildings, roads, land use, and administrative boundaries. Each tool has a clear purpose and the count feels neither sparse nor excessive.
The set provides comprehensive read-only coverage of Overture Maps data themes: place category browsing and spatial queries, building aggregates, road analysis, land use queries, and boundary containment. All typical geospatial analytics are supported, with no obvious dead ends.
Maintenance
Related MCP Connectors
Geospatial AI MCP server — satellite imagery, embeddings, weather, GNS governance
MCP server for Japan geodata: cadastral lot numbers (chiban) and reverse geocoding, for AI agents.
MCP server for building and testing AI agents with multi-model experimentation and insights.
- earthOAuthcom.mireye
MCP server for Mireye Earth — federal-source-cited geospatial data for any MCP-aware agent.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA geospatial MCP server that provides tools for geocoding, routing, elevation profiles, and spatial analysis. It enables AI agents to process GIS file formats like GeoJSON and Shapefiles while performing complex coordinate transformations and distance calculations.4MIT
- AlicenseAqualityDmaintenanceMCP server for spatial queries via the Terranode Geospatial API, enabling AI agents to perform point-in-polygon lookups, nearest feature search, distance calculations, and spatial joins.635 npmMIT
- 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 gradedqualityAmaintenanceAn MCP server that connects AI agents to cloud-native geospatial data via STAC metadata and DuckDB with H3 spatial indexing, enabling zero-configuration SQL queries on terabyte-scale datasets over S3.23BSD 3-Clause