Skip to main content
Glama
srivinod1

Overture Maps MCP Server

by srivinod1

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

get_place_categories

Places

Search Overture's place category taxonomy

places_in_radius

Places

Find all places matching a category within a radius

nearest_place_of_type

Places

Find the single closest place of a given type

count_places_by_type_in_radius

Places

Count places of a category in an area

building_count_in_radius

Buildings

Count buildings in an area

building_class_composition

Buildings

Get % breakdown of building types

point_in_admin_boundary

Divisions

Find what country/region/city contains a point

road_count_by_class

Transportation

Count road segments by class in an area

nearest_road_of_class

Transportation

Find the closest road of a given class

road_surface_composition

Transportation

Get % breakdown of road surface types

land_use_at_point

Land Use

Determine land use designation at a point

land_use_composition

Land Use

Get % breakdown of land use types in an area

land_use_search

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-server

Run 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:8000

Connect 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 Authorization header (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

OVERTURE_API_KEY

For SSE/HTTP

Bearer token for client auth

TRANSPORT

No

stdio

stdio, sse, or http

TOOL_MODE

No

direct

direct or progressive

OVERTURE_DATA_VERSION

No

2026-01-21.0

Overture release version

MAX_CONCURRENT_QUERIES

No

3

DuckDB concurrency limit

MAX_RADIUS_M

No

50000

Safety cap on radius (meters)

PORT

No

8000

Server port (SSE/HTTP only)

HOST

No

0.0.0.0

Server host (SSE/HTTP only)

Documentation

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 tools
building_class_compositionC

Get the percentage breakdown of building types within a radius

ParametersJSON Schema
NameRequiredDescriptionDefault
latYes
lngYes
radius_mYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
latYes
lngYes
radius_mYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
latYes
lngYes
categoryYes
radius_mYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
latYes
lngYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
latYes
lngYes
radius_mYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

nearest_place_of_typeB

Find the single closest place of a given type to a point

ParametersJSON Schema
NameRequiredDescriptionDefault
latYes
lngYes
categoryYes
max_radius_mNo
include_geometryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
latYes
lngYes
road_classYes
max_radius_mNo
include_geometryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
latYes
lngYes
limitNo
categoryYes
radius_mYes
include_geometryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
latYes
lngYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
latYes
lngYes
radius_mYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
latYes
lngYes
radius_mYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 13 tool updatesv0.1.0
    • First observedbuilding_class_composition
    • First observedbuilding_count_in_radius
    • First observedcount_places_by_type_in_radius
    • First observedget_place_categories
    • First observedland_use_at_point
    • First observedland_use_composition
    • First observedland_use_search
    • First observednearest_place_of_type
    • First observednearest_road_of_class
    • First observedplaces_in_radius
    • First observedpoint_in_admin_boundary
    • First observedroad_count_by_class
    • First observedroad_surface_composition

TDQS

A3.5/5.0

Scored across 13 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    A 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.
    4
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    MCP 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.
    6
    35 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Free geospatial MCP server for AI agents, providing geocoding, reverse geocoding, POI search, and route planning using OpenStreetMap data via Nominatim, Overpass, and OSRM.
    1
    GPL 3.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    An 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.
    23
    BSD 3-Clause