overture-maps
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-mapsFind cafes within 500 meters of 139.760, 35.680 in the places theme"
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
Overture Mapsの6テーマを検索・分析する、Pythonライブラリ・CLI・読み取り専用MCPサーバーです。公式Overture製品ではなく、独立した実装です。
Python 3.12以上、uv、DuckDBを使用し、MCP接続には任意依存の公式MCP Python SDKを使います。住所から座標を得る処理はgeo-jp-mcp等へ任せ、座標・検索範囲・地物IDを渡して組み合わせます。
Pythonライブラリ・CLI(0.3.0)
通常のインストールにはMCP SDKを含みません。MCPサーバーを使う場合だけ[mcp]を追加します。PyPIには未公開のため、取得したこのリポジトリからインストールしてください。
uv add C:/workspace/overture-maps-mcp # 他のPythonプロジェクトの依存へ追加
uv tool install C:/workspace/overture-maps-mcp # CLIとしてインストール
overture-maps --help
overture-maps search --theme places --type place --bounds 139.760 35.680 139.762 35.682 --limit 2from overture_maps_mcp import Client, Bounds
client = Client()
result = client.search(
"places",
"place",
bounds=Bounds(west=139.760, south=35.680, east=139.762, north=35.682),
limit=2,
)
print(result.data)
print(client.storage_dir)ライブラリ・CLI・MCPは同じ9操作、型付き入力検証とResponseを使います。結果・出典を含むJSON、全操作の引数、JSONファイル・stdin、エラー、保存先と互換性の契約はライブラリ・CLIガイドを参照してください。
リポジトリから依存を専用保存先へ集めてCLIを使う場合は./manage.ps1 cli search --theme places --type place --bounds 139.760 35.680 139.762 35.682 --limit 2。Windows以外はuv run --isolated --no-project --no-cache --python 3.12 python -B manage.py cli search ...。
Related MCP server: geolibre-mcp
インストール・起動
git clone https://github.com/koizumikento/overture-maps-mcp.git
cd overture-maps-mcp
.\manage.ps1 run初回は依存をインストールします。Windows以外ではuv run --isolated --no-project --no-cache --python 3.12 python -B manage.py run。管理用Pythonは一時環境で動かし、MCP本体の実行環境を後から削除できるようにしています。
stdioが既定です。ローカルMCPクライアントからの設定例:
{
"mcpServers": {
"overture-maps": {
"command": "uv",
"args": ["run", "--isolated", "--no-project", "--no-cache", "--python", "3.12", "python", "-B", "C:/workspace/overture-maps-mcp/manage.py", "run"]
}
}
}Streamable HTTPは.\manage.ps1 run -Transport streamable-http、接続先はhttp://127.0.0.1:8000/mcpです。-Portでポートを変更できます。ローカルホストへbindし、認証や公開配信は本実装に含みません。公開時の条件はSDKの実行ドキュメントを参照。
PCの保存容量と削除
管理コマンド経由の起動では、Python依存・uvキャッシュ・DuckDB拡張・Python bytecodeをリポジトリ内の.runtimeへ集約します。地理データの永続DBやディスクキャッシュは作りません。起動時に現在の保存容量をstderrへ表示します。
開発テストの合成Parquet fixtureも.runtime/pytest/tmpへ置き、同じcleanで削除できます。
.\manage.ps1 storage # 保存先・内訳・旧保存先・対象外の共有拡張のサイズを表示
.\manage.ps1 clean # MCPを止めてから、専用環境・キャッシュ・拡張を削除cleanはソース・docs・Gitを保持し、.runtimeと旧版のリポジトリ内.venv・.cache・dist・既知のテストキャッシュ・bytecodeを削除します。稼働中のMCPがあれば拒否し、所有マーカーがない保存先や想定外のファイル、外部へのリンクも拒否します。再度runすれば依存・拡張を再取得できます。サイズはbytes / MiBとファイル数で表示し、物理占有量とは異なる場合があります。
MCP設定の削除だけではファイルは消えません。設定を外してMCPを停止した後にcleanを実行してください。削除している環境から管理コマンド自身を実行しないため、直接uv run python manage.py cleanは使わず、上記のPowerShell wrapperかuv run --isolated --no-project --no-cache --python 3.12 python -B manage.py cleanを使います。
uv本体・共有Python本体・以前に作られたユーザーホームの.duckdb/extensionsは削除対象外です。共有拡張は容量表示で別に示し、今後の本MCPはそこへ新規保存しません。管理用の.runtime.lock(1 byte)はリポジトリに残します。通常の利用での保存量は依存や拡張の版により変わり、固定のディスク容量上限は設定していません。
Tools
Tool | 用途 |
| 最新・利用可能リリース、6テーマとタイプ、上限の確認 |
| 選択データの列・型の確認 |
| 矩形・半径・ポリゴンと属性条件で検索、全属性/選択属性、ページング、GeoJSON |
| UUIDの詳細取得。範囲を省略すると現在のGERSで解決 |
| 検索と同条件で全件数・複数属性別集計・数値統計・面積・道路長・距離 |
| 最大半径内の近傍検索。距離とIDによる順序・ページング |
| 2テーマ/タイプの交差・包含・接触・重複・距離条件。ペア/全件数/左地物別件数 |
| 2リリースを同じ条件で比較、追加・削除・変更・不変の件数と詳細 |
| 位置・テーマ不明のUUIDをGERSで解決。現存・削除・未収録を区別 |
6テーマ: addresses, base, buildings, divisions, places, transportation。タイプの組み合わせはcatalogが返します。地図描画・住所文字列のgeocoding・経路探索は担当しません。これらを必要とするクライアントは別のMCPと組み合わせてください。
使い方:
overture_catalogでreleaseとtheme/typeを取得する。必要なら
overture_schemaでフィルタ・集計列を確認する。同じreleaseを指定してsearch/get_feature/summarizeを呼ぶ。
{
"theme": "places", "feature_type": "place",
"bounds": {"west": 139.74, "south": 35.67, "east": 139.78, "north": 35.70},
"category": "cafe", "limit": 20,
"release": "2026-09-23.1"
}この版は説明例です。公開データは最大60日保持のため、実利用時はcatalogが返す版を使います。Placesの分類は現行taxonomy.primary、名前は大文字小文字を区別しない文字列包含で検索します。存在しない列のフィルタは無視せずエラーを返します。
0.2.0では属性を既定で全列返し、fieldsで選択できます。filtersは型付きの20条件、構造体・配列内の属性も扱います。半径・近傍・Polygon/MultiPolygon、検索と同条件の数値/空間集計、空間結合と版比較の具体例と計測の意味は検索・分析ガイドを参照してください。
結果・上限
結果は
release,theme,feature_type,scope,source,license,attribution_url,data,next_cursor,warningsを持つ構造化データです。WGS84の矩形範囲は東西・南北1度以内、概算2500km²以内。日付変更線をまたぐ範囲は分割します。
1ページ最大50件。次ページではrelease・範囲・フィルタ・geometry設定を維持します。
bboxで候補を絞り、geometryとの交差・距離条件で地物を選びます。件数はレコード数。面積・線の長さは別の指標で、WGS84楕円体のm² / mです。
集計の上位50グループを返し、
other_countで省略分を示します。検索ページの件数を全件数として扱いません。geometryは検索では既定で省略。詳細取得で確認できます。dataは最大400KB、超過時は件数・範囲・geometry設定の変更を促すエラーになります。
DuckDBの実行は1回30秒、メモリ512MB、同時2本に制限。巨大な全世界検索・任意SQL・任意URL/パスはtoolへ公開しません。
初回のDuckDB spatial / httpfs拡張取得と公開データ問い合わせにはネットワークが必要です。処理はローカルで実行し、AWSの認証情報は不要です。
半径は最大25000m、polygonは最大2000座標。空間結合・版比較は各データセット最大5000候補で、超過時は範囲や条件を絞るエラーを返します。
点以外の距離は局所投影による近似、円の面積・長さのクリップは128辺の近似です。GERSレジストリは現在版のみ、履歴版・非GERSのID取得にはboundsが必要です。
公式STACのファイル収録範囲で問い合わせ先を絞り、メタデータを10分キャッシュします。初回は各タイプのファイル一覧を確認する時間がかかります。STAC取得失敗・上限超過は成功や空結果として扱いません。
利用条件・データ品質
コードはMIT。データの権利は別で、Overtureの出典・ライセンス一覧が正本です。PlacesにはCDLA-Permissive-2.0、Apache-2.0、CC0などが混在し、Base・Buildings・Divisions・TransportationはODbL。住所は出典ごとに異なります。返却したsource・sourcesと利用条件を保持してください。
件数は当該リリース・検索範囲のレコード数です。施設の現実の網羅率、現在営業中であること、座標の正確性を保証しません。AddressesはAlpha。Base・building_partのIDにはGERS安定性保証がありません。IDが同じであることとリリース間の完全追跡は別です。
開発・検証
.\manage.ps1 setup -Dev
$env:UV_PROJECT_ENVIRONMENT = "$PWD/.runtime/venv"
$env:UV_CACHE_DIR = "$PWD/.runtime/uv-cache"
$env:PYTHONPYCACHEPREFIX = "$PWD/.runtime/pycache"
$env:OVERTURE_MAPS_MCP_STORAGE_DIR = "$PWD/.runtime"
uv run python -c "import duckdb; from overture_maps_mcp.storage import Storage; duckdb.connect(config={'extension_directory': str(Storage.default().extension_directory())}).execute('INSTALL spatial')"
uv run ruff check .
uv run ruff format --check .
uv run ty check .
uv run pytest
uv buildローカルの合成Parquet fixtureによるSQL・geometry・ページング・集計検証とMCP接続試験を既定にします。公開データの問い合わせや実クライアント接続の結果はvalidationで別に記録します。
公開データを実際に読む接続確認はuv run python scripts/verify_managed.py(管理コマンド経由のstdio・Places検索・稼働中削除の拒否)、uv run python scripts/verify_live.py(stdio・6テーマ)、uv run python scripts/verify_http.py(loopback HTTP・catalog)。既定のpytestには含まれません。
uv run python scripts/verify_complete.pyは全15タイプの公式列を全属性取得・条件付き件数・詳細取得と照合し、新しい空間検索・計測・結合・ID解決・版比較も公開データで確認します。地理データをディスクに保存しません。地域網羅率の調査とは別の機能検証です。
設計・受入条件: requirements。参考: PlaceRoot、Overture Maps MCP Server、Soapbox MCP。これらの機能分割を参考にし、コードは複製していません。
Available Tools
9 toolsoverture_catalogBRead-onlyIdempotent
Discover all six themes/types and available releases. Pin a release for later calls.
Use before searching; does not query geographic features or resolve an address.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| scope | No | |
| theme | No | |
| source | Yes | |
| license | Yes | |
| release | Yes | |
| warnings | No | |
| next_cursor | No | |
| feature_type | No | |
| attribution_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and idempotentHint=true, meaning the tool should not modify state. The description says 'Pin a release for later calls,' which implies a state-changing write operation. This directly contradicts the readOnly annotation.
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?
Two sentences, front-loaded with the primary purpose and followed by usage constraints. Every sentence carries useful information without redundancy.
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?
An output schema exists, so return values need not be explained. However, the description claims the tool can 'pin a release' despite having zero input parameters, leaving the pinning mechanism completely unexplained and making the described capability seem impossible to invoke.
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 tool takes zero parameters and schema description coverage is 100%, so the baseline is 4. The description adds no parameter semantics, but none are needed.
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 states a specific verb and resource: 'Discover all six themes/types and available releases.' It also distinguishes itself from search and resolve siblings by saying it 'does not query geographic features or resolve an address.' However, it does not differentiate from other catalog-adjacent siblings like overture_schema or overture_compare_releases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance ('Use before searching') and a when-not boundary ('does not query geographic features or resolve an address'). It does not, however, name the alternative tools to use for those excluded tasks, which would be required for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
overture_compare_releasesARead-onlyIdempotent
Compare two available release snapshots by ID in the same area and filters.
Returns exact added/removed/modified/unchanged counts and paginated changes, including
before/after properties and schema changes. Compares all properties regardless of
fields selection, plus topological geometry equality. <=5000 records per snapshot.
Added/removed can mean crossing scope/filters; not global creation/deletion. IDs in
Addresses/Base/building_part lack GERS stability. Use catalog for available releases.
| Name | Required | Description | Default |
|---|---|---|---|
| after | Yes | ||
| limit | No | ||
| theme | Yes | ||
| before | Yes | ||
| bounds | Yes | ||
| cursor | No | ||
| fields | No | ||
| status | No | all | |
| filters | No | ||
| feature_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| scope | No | |
| theme | No | |
| source | Yes | |
| license | Yes | |
| release | Yes | |
| warnings | No | |
| next_cursor | No | |
| feature_type | No | |
| attribution_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantial context beyond them: return payload shape (counts plus paginated changes with before/after properties and schema changes), a size cap (<=5000 records per snapshot), and important semantic caveats about added/removed meaning scope-crossing rather than global creation/deletion, plus the ID-stability warning for Addresses/Base/building_part.
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?
Front-loads the core comparison purpose in the first sentence, then packs operational caveats into compact clauses. Dense but nearly every sentence carries non-obvious information; minor redundancy around naming the catalog sibling is acceptable.
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 a 10-parameter tool with a nested Bounds/AttributeFilter schema and an existing output schema, the description covers the critical gaps: scope constraints, result semantics, size limits, and ID reliability. It could do more to explain theme/status/cursor parameters, but for a read-only comparison tool it is largely complete.
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 description clarifies that before/after are snapshot IDs, that filtering happens on the same area/filters, and that fields selection does not limit which properties are compared. With schema description coverage at 0% for the 10 top-level params, however, enums (theme, status) and cursor/limit semantics remain undocumented in both places, leaving a real gap.
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?
States a precise verb ('Compare') and resource ('two available release snapshots by ID') with scoping qualifiers (same area, same filters). This is clearly distinguishable from sibling tools like overture_catalog, which it explicitly names as the place to find releases.
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?
Provides clear context (need two release IDs from the same theme/area) and routes the agent to overture_catalog for available releases. It also clarifies the semantic meaning of 'added/removed'. It stops short of an explicit when-to-use-this-vs-alternatives statement, but the routing hint gives usable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
overture_get_featureARead-onlyIdempotent
Get a UUID feature from search with its known bounding area and pinned release.
With bounds, lookup is pinned to that area/release. Without bounds, uses the current GERS registry and its verified shard, and requires the matching theme/type/current release. Non-GERS types and historical releases need bounds. Empty scoped results do not establish global nonexistence. fields chooses properties; default is all.
| Name | Required | Description | Default |
|---|---|---|---|
| theme | Yes | ||
| bounds | No | ||
| fields | No | ||
| release | No | ||
| identifier | Yes | ||
| feature_type | Yes | ||
| include_geometry | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| scope | No | |
| theme | No | |
| source | Yes | |
| license | Yes | |
| release | Yes | |
| warnings | No | |
| next_cursor | No | |
| feature_type | No | |
| attribution_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/openWorld annotations, the description discloses genuinely useful behavior: lookup pinning semantics with and without bounds, and the non-obvious caveat that empty scoped results do not establish global nonexistence. It adds context the annotations cannot express, only missing return/pagination behavior (which the output schema covers).
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 purpose is stated up front and each following sentence adds a distinct rule (bounds behavior, requirement conditions, empty-result caveat, fields). It is dense but every sentence earns its place; phrasing is slightly cryptic in the opening clause.
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 an output schema present, return-value explanation is unnecessary, and the annotations cover the safety profile. The description supplies the bounds/pinning and empty-result semantics an agent needs to call it correctly; only a few parameter details (identifier, include_geometry) are missing.
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 carry the burden. It explains bounds, release, fields ('chooses properties; default is all'), and references theme/type, but leaves identifier and include_geometry unexplained, so it only partially compensates for the coverage gap.
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 states a specific verb+resource: 'Get a UUID feature from search' — retrieve a single feature by its identifier. It is understandable on its own and implicitly distinct from list-oriented siblings like overture_search, but it never names an alternative or explicitly contrasts, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives real conditional guidance: with bounds the lookup is pinned to an area/release; without bounds it uses the GERS registry and requires matching theme/type/current release, and non-GERS/historical releases need bounds. That is clear when-to-use context, though it stops short of naming sibling tools to prefer or avoid.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
overture_nearestARead-onlyIdempotent
Find the nearest intersecting features within a maximum radius; distance in meters.
Searches points, lines and polygons; polygon containing center has zero distance. Stable order is distance then ID. Point distances are geodesic; line/polygon edges use a local azimuthal-equidistant projection. Empty means none within the radius.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| theme | Yes | ||
| center | Yes | ||
| cursor | No | ||
| fields | No | ||
| filters | No | ||
| release | No | ||
| radius_m | Yes | ||
| feature_type | Yes | ||
| include_geometry | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| scope | No | |
| theme | No | |
| source | Yes | |
| license | Yes | |
| release | Yes | |
| warnings | No | |
| next_cursor | No | |
| feature_type | No | |
| attribution_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds genuinely useful behavior beyond the annotations (which only cover read-only/idempotent safety): stable ordering by distance then ID, zero distance for a containing polygon, geodesic point distances vs azimuthal-equidistant projection for line/polygon edges, and the meaning of an empty result. It stops short of covering pagination/cursor behavior or the limit interplay.
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?
Front-loads the purpose in the first clause, then layers the behavioral notes; every sentence adds information and there is no filler. Minor deduction for the multi-line indented formatting, which is slightly awkward for a short 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?
An output schema exists, so return-value explanation is rightly omitted, but for a 10-parameter tool with 0% schema coverage the description is too thin: it never explains the required theme/feature_type selection or the cursor/filters/limit mechanics. An agent could call it, but not confidently or efficiently.
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% across 10 parameters, so the description carries the full burden, yet it only clarifies radius_m ('distance in meters') and gestures at center. Theme, feature_type, limit, cursor, fields, filters, release and include_geometry get no explanation in either place, leaving most of the parameter surface undocumented.
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?
States a specific verb ('Find the nearest intersecting features') plus the resource and the scoping constraint (within a maximum radius, distance in meters). The proximity/nearest framing clearly sets it apart from sibling lookup tools like overture_search or overture_get_feature without needing to name them.
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 is only implied: the radius-based nearest search makes the intended scenario inferable, and the note that an empty result means nothing was within the radius helps interpret outcomes. However, it never states when to prefer this over overture_search or overture_spatial_join, nor any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
overture_resolve_idARead-onlyIdempotent
Resolve a UUID without knowing its theme or position using the current GERS registry.
Returns live feature and verified file, removed ID metadata, or not_in_registry.
Registry is unversioned and excludes Addresses/Base/building_part. For those IDs or
historical releases use overture_get_feature with known bounds. Never infer global
nonexistence from not_in_registry. Default returns all properties and geometry.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | ||
| identifier | Yes | ||
| include_geometry | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| scope | No | |
| theme | No | |
| source | Yes | |
| license | Yes | |
| release | Yes | |
| warnings | No | |
| next_cursor | No | |
| feature_type | No | |
| attribution_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, non-destructive, open world), and the description adds substantial non-obvious behavior: the registry is unversioned, excludes certain themes, and returns one of three states (live feature/verified file, removed metadata, not_in_registry). This is meaningful context the annotations cannot convey.
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?
Front-loads the core purpose, then layers return states, exclusions, alternatives, and a caveat. Dense but each sentence carries distinct information; minor verbosity in the multi-clause return-state sentence.
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?
An output schema exists, so return values need not be enumerated, yet the description still maps the three outcome states usefully. It covers registry scope, alternatives, and interpretation caveats; the only residual gap is parameter-level detail for fields.
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% across three parameters, so the description must compensate. It does clarify the default (all properties and geometry), which maps to include_geometry and fields, but never explains the semantics of the fields list itself or identifier format. Partial compensation only.
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?
States a specific verb (resolve) plus resource (a UUID/ID) and names the mechanism (current GERS registry) and the key differentiator: resolution without knowing theme or position. It is immediately distinguishable from overture_get_feature, which it explicitly references.
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?
Explicitly routes the agent: use overture_get_feature with known bounds for excluded IDs (Addresses/Base/building_part) or historical releases. It also warns never to infer global nonexistence from a not_in_registry result, which is exactly the kind of when-not-to-conclude guidance agents need.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
overture_schemaARead-onlyIdempotent
Inspect dataset columns for a theme/type before filtering or grouping.
Use with a pair from overture_catalog; reads Parquet metadata, not feature rows.
| Name | Required | Description | Default |
|---|---|---|---|
| theme | Yes | ||
| release | No | ||
| feature_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| scope | No | |
| theme | No | |
| source | Yes | |
| license | Yes | |
| release | Yes | |
| warnings | No | |
| next_cursor | No | |
| feature_type | No | |
| attribution_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds genuinely useful context beyond them: it reads Parquet metadata rather than feature rows, signalling a cheap metadata call rather than a data fetch.
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?
Two short sentences, front-loaded with the purpose and then the pairing hint. Very little waste, though the trailing whitespace/newline formatting is a minor blemish.
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?
An output schema exists so return values need not be described. The key behavioral fact (metadata, not rows) is stated, and usage context is given; only the undocumented release parameter limits completeness.
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 carry the load. Its 'theme/type' phrasing maps to the two required parameters (theme, feature_type), but the optional release parameter is never mentioned, leaving one of three params undocumented.
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?
States a specific verb+resource: inspect dataset columns for a theme/feature_type. It distinguishes itself from data-reading siblings by scoping to column metadata prior to filtering or grouping. It doesn't explicitly name which sibling it contrasts with, but the scope is clear.
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?
Gives a clear when-to-use: before filtering or grouping, and directs the agent to pair it with overture_catalog. No explicit when-not or alternative is named, so it falls just short of the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
overture_searchARead-onlyIdempotent
Search intersecting features in a bounded WGS84 area across any of the six themes.
Name is literal case-insensitive substring; category is exact taxonomy.primary (places).
Confidence is places-only. Invalid filters produce errors rather than being ignored.
Pass next_cursor unchanged with the same explicit release/filters for the next page.
Choose bounds, center/radius_m, or GeoJSON Polygon/MultiPolygon (holes supported).
All properties are available; fields selects paths. filters combines up to 20 typed
AND conditions, including nested/list paths (sources[].dataset). No user SQL.
Distance order needs center; include_metrics returns whole-feature m² / line meters.
geojson returns a paginated FeatureCollection; retain the response provenance.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| limit | No | ||
| theme | Yes | ||
| bounds | No | ||
| center | No | ||
| cursor | No | ||
| fields | No | ||
| filters | No | ||
| polygon | No | ||
| release | No | ||
| sort_by | No | id | |
| category | No | ||
| radius_m | No | ||
| feature_type | Yes | ||
| feature_class | No | ||
| output_format | No | features | |
| min_confidence | No | ||
| include_metrics | No | ||
| include_geometry | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| scope | No | |
| theme | No | |
| source | Yes | |
| license | Yes | |
| release | Yes | |
| warnings | No | |
| next_cursor | No | |
| feature_type | No | |
| attribution_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/open-world/non-destructive, and the description adds real behavior on top: invalid filters raise errors instead of being silently ignored, confidence is places-only, no user SQL is accepted, distance ordering requires a center, include_metrics returns whole-feature m² / line meters, and geojson returns a paginated FeatureCollection whose provenance should be retained.
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?
Tight, front-loaded, and every line carries information with no filler. The terse fragment style (several dropped subjects) slightly reduces readability, but nothing is wasted.
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?
An output schema exists so return values needn't be spelled out, and pagination/error/metrics behavior is covered. However, for a 19-parameter tool with 0% schema description coverage, the required feature_type and the theme/feature_class vocabularies are never explained, leaving an agent guessing at valid inputs for mandatory fields.
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?
At 0% schema coverage the description carries the burden and handles the hard parameters well: name as literal case-insensitive substring, category as exact taxonomy.primary, cursor/release pagination coupling, the three geometry input modes, the filters grammar (up to 20 typed AND conditions, nested/list paths like sources[].dataset), sort_by='distance' needing center, and include_metrics units. It does not explain required feature_type or theme/feature_class values, which keeps it from a 5.
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?
Clear verb+resource+scope: 'Search intersecting features in a bounded WGS84 area across any of the six themes.' Specific enough that an agent can tell it apart from retrieval-by-id or nearest-search siblings by the bounded-area framing, though no sibling is named explicitly.
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?
Gives operational rules (pass next_cursor unchanged with the same release/filters; distance order needs center; choose bounds, center/radius_m, or polygon; invalid filters error rather than being ignored), which implies when and how to use it. But it never says when to prefer a sibling like overture_nearest or overture_spatial_join, so alternative selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
overture_spatial_joinARead-onlyIdempotent
Relate features across themes/types in one release and bounded area.
Relation is left-to-right: places within division_area, or areas containing places.
Both datasets are scoped to bounds; <=5000 candidates each or fail without partial
analysis. pairs paginates pairs with properties/provenance; count returns total pairs;
group_left returns every left ID with match count, including zero. within_distance
needs distance_m and uses a local projected minimum geometry distance in meters.
| Name | Required | Description | Default |
|---|---|---|---|
| left | Yes | ||
| mode | No | pairs | |
| limit | No | ||
| right | Yes | ||
| bounds | Yes | ||
| cursor | No | ||
| release | No | ||
| relation | No | intersects | |
| distance_m | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| scope | No | |
| theme | No | |
| source | Yes | |
| license | Yes | |
| release | Yes | |
| warnings | No | |
| next_cursor | No | |
| feature_type | No | |
| attribution_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/non-destructive annotations, the description discloses a hard candidate cap ('<=5000 candidates each or fail without partial analysis'), pagination behavior, that group_left includes zero-match left IDs, and that within_distance uses a local projected minimum geometry distance in meters. These are non-obvious operational traits that materially affect calling 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 core concept is front-loaded in the first sentence, and the following sentences each add distinct semantics (direction, candidate limit, mode outputs, distance units). It is dense but nearly every clause earns its place, with only minor terseness in the pagination sentence.
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 an output schema present, return-value detail is optional, yet the description helpfully characterizes what pairs/count/group_left produce. Combined with the candidate-cap and distance-metric disclosures, an agent has enough to invoke correctly, though per-parameter specifics remain thin.
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 carries the burden, and it does explain relation direction, the mode semantics, and distance_m units. However, left/right Dataset structure (theme, feature_type, fields, filters), bounds, limit, cursor, and release are left to the schema, so compensation is only partial.
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 states a specific verb and resource: 'Relate features across themes/types in one release and bounded area,' which distinguishes it as a spatial-join tool from siblings like overture_nearest or overture_search. It is clear but does not explicitly name a sibling alternative, so it stops short of a 5.
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 is implied through the relation and mode explanations (e.g., 'places within division_area, or areas containing places') and the note that 'within_distance needs distance_m,' but there is no explicit when-to-use guidance or exclusion against alternatives such as overture_nearest for proximity work. Guidance exists but is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
overture_summarizeARead-onlyIdempotent
Count all dataset features intersecting a bounded area, optionally group by a column.
Accepts exactly the same area/attribute conditions as search. Group by up to 3 scalar
property paths; top 50 groups with other_count. Aggregate sum/avg/min/max/count/
count_distinct of properties or @area_m2/@length_m/@distance_m (needs center).
Geometry metrics default to clipped scope; circles use a 128-segment clip polygon.
Counts and property aggregates are over whole intersecting records, not prorated.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| theme | Yes | ||
| bounds | No | ||
| center | No | ||
| filters | No | ||
| polygon | No | ||
| release | No | ||
| category | No | ||
| group_by | No | ||
| radius_m | No | ||
| aggregations | No | ||
| feature_type | Yes | ||
| clip_geometry | No | ||
| feature_class | No | ||
| min_confidence | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| scope | No | |
| theme | No | |
| source | Yes | |
| license | Yes | |
| release | Yes | |
| warnings | No | |
| next_cursor | No | |
| feature_type | No | |
| attribution_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety bar is low, and the description adds genuinely non-obvious behavior: group results are truncated to the top 50 with an other_count bucket, counts/aggregates are over whole intersecting records rather than prorated, and circles are clipped with a 128-segment polygon. These are exactly the traits an agent cannot infer from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Six short sentences, front-loaded with the core purpose before the eligibility rules and aggregation details. Dense but every sentence carries information; the phrasing is terse to the point of clipped, which slightly hurts readability but not economy.
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?
An output schema exists, so return values need no prose, and the description covers grouping/aggregation behavior well. However, for a 15-parameter tool with zero schema descriptions, the omission of most scalar filters (theme, feature_type, release, category, min_confidence on top of the two required ones) leaves an agent guessing at key inputs.
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% across 15 parameters, so the description carries real burden and does explain group_by (up to 3 scalar property paths), aggregations (the op set plus special @area_m2/@length_m/@distance_m fields requiring center), and clip_geometry's default scope. It says nothing about theme, feature_type, name, release, category, feature_class, min_confidence, or radius_m units/limits, so the compensation is only partial.
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 opening sentence gives a specific verb and resource: counting dataset features intersecting a bounded area, with optional grouping. It implicitly separates itself from overture_search (which returns records, not counts), though it never names the sibling outright. Clear enough that an agent knows this is an aggregation tool.
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?
"Accepts exactly the same area/attribute conditions as search" establishes a relationship to a sibling and implies this is the counting/aggregating counterpart, but it never states when to pick this over overture_search, overture_nearest, or overture_spatial_join. Usage is implied rather than directed.
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.
9 tool updates
v0.3.0- First observed
overture_catalog - First observed
overture_compare_releases - First observed
overture_get_feature - First observed
overture_nearest - First observed
overture_resolve_id - First observed
overture_schema - First observed
overture_search - First observed
overture_spatial_join - First observed
overture_summarize
TDQS
Scored across 9 tools
Most tools have clearly distinct purposes (catalog vs schema vs summarize vs spatial_join vs compare_releases). However, overture_get_feature and overture_resolve_id both retrieve a feature by UUID, and overture_search vs overture_nearest both find intersecting features, so a couple of boundaries rely on descriptions rather than being inherently separate.
All tools share a consistent overture_ snake_case prefix with predictable verb/verb_noun forms (search, get_feature, summarize, spatial_join, compare_releases, resolve_id). Minor deviation: catalog and schema are noun-style rather than action verbs, but the overall pattern is readable and uniform.
Nine tools is well-scoped for a rich geospatial dataset, with each tool covering a distinct capability (discovery, schema, search, nearest, retrieval, aggregation, joins, release diffing). No redundant or filler tools.
The surface covers the full read-only query lifecycle: theme/release discovery, schema inspection, spatial and attribute search, distance search, feature retrieval, aggregation, cross-theme joins, release comparison, and ID resolution. No obvious gaps remain for a read-only dataset domain.
Maintenance
Related MCP Connectors
Generate and run high performance queries on open and private spatial data at-scale in the cloud
OpenStreetMap queries, maps/styles, search, routing, terrain, analysis, pipelines, and rendering.
Geocode, reverse geocode, and run Overpass spatial queries on OpenStreetMap data.
Geocode, reverse geocode, and run Overpass spatial queries on OpenStreetMap data.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables natural language and geospatial queries on PostGIS databases, with 32 tools for spatial analysis, geometry operations, and database management.5MIT
- AlicenseNot gradedqualityDmaintenanceProvides geospatial data intelligence tools for inspecting, querying, and converting geospatial data using DuckDB Spatial.1MIT
- FlicenseBqualityCmaintenanceProvides read-only query tools over OpenStreetMap data in PostGIS, enabling natural language queries for features, categories, and spatial analysis.7-

geolens-mcpofficial
AlicenseAqualityAmaintenanceRead-only access to a self-hosted GeoLens geospatial catalog: dataset search, schemas, GeoJSON features, saved maps, and sandboxed read-only SQL over PostGIS.6266Apache 2.0