mcpField
G
geo-explorer-mcp

geo-explorer-mcp

ローカル
github.com/arnienemeth地図・旅行03 週間前に更新

geo-explorer-mcp について

geo-explorer-mcpは、AIアシスタント向けに国や地域の地理データを構造化して提供するMCPサーバーです。地図や比較表、地理学習コンテンツに使える事実、境界、統計を返します。

主な機能

  1. 01首都、人口、面積などの国情報
  2. 02ADM0〜ADM2の境界データ取得
  3. 03地域の人口、面積、首都の検索
  4. 04境界データと統計データの結合
  5. 05多言語・表記揺れに対応した国名検索

活用シーン

  1. 01地域人口で色分けしたインタラクティブマップ
  2. 02行政区間の人口と面積の比較
  3. 03首都、言語、隣接国の確認
  4. 04境界データと地域統計の照合

MCP 対応

MCPサーバーとして、国情報、行政境界、地域統計を取得するツールをクライアントに公開します。境界データにはGeoJSON URL、出典、ライセンス、データ品質の注記が含まれます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"arnienemeth-geo-explorer": {
"command": "uvx",
"args": [
"geo-explorer-mcp"
],
"env": {
"RESTCOUNTRIES_API_KEY": "<RESTCOUNTRIES_API_KEY>",
"GEO_EXPLORER_CONTACT": "<GEO_EXPLORER_CONTACT>"
}
}
}
}
起動コマンドuvx geo-explorer-mcp
設定が必要な環境変数
RESTCOUNTRIES_API_KEYシークレットFree API key from https://restcountries.com/sign-up, used for country facts.
GEO_EXPLORER_CONTACTA contact URL or email placed in the User-Agent sent to Wikidata. Wikimedia rejects requests without one.

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypigeo-explorer-mcp0.1.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

geo-explorer-mcp

mcprush に掲載されています:https://mcprush.com/arnienemeth/geo-explorer-mcp

国の基本情報、行政区画、地域統計を構造化データとして提供する MCP サーバーです。AI アシスタントは情報をただ読み上げるのではなく、インタラクティブな地理コンテンツを作成できます。

このサーバーは、意図的に文章ではなくデータを返します。人口、ポリゴン、座標を渡し、それらをクリック可能な地図、比較表、またはスロバキア語、ドイツ語、ハンガリー語のレッスンとしてどう見せるかはモデルが決めます。このサーバーには翻訳機能がなく、その必要もありません。

人口に応じて色分けされたスロバキアの地域と、各地域の州都および統計情報

ツール

ツール引数戻り値
get_country_profilecountry座標付きの州都、人口、面積、地域、通貨、言語(英語名および現地名)、隣接国、国旗、Wikipedia のリンク
get_map_datacountry、level = ADM0 | ADM1 | ADM2地域名と、ブラウザーから取得可能な GeoJSON URL、さらにデータソース、ライセンス、データの基準年、品質に関する警告
get_region_detailscountry地域ごとの人口、面積、州都(人口と座標を含む)、現地名、下位区分の種類、Wikidata と Wikipedia のリンク

country には、ほとんどあらゆる言語の名称を指定できます。例:Slovakia、Slovensko、Magyarország、Magyarorszag(ダイアクリティカルマークなし)、Deutschland、Ungarn。

境界データと統計データを返す 2 つのツールは、結合できるように設計されています。 get_region_details は地域ごとに match_key を返し、join_hint で get_map_data の地域名をどのように正規化すれば一致するかをモデルに伝えます。

クイックスタート

git clone https://github.com/arnienemeth/geo-explorer-mcp
cd geo-explorer-mcp
uv sync

.env.example を .env にコピーし、内容を入力します。

RESTCOUNTRIES_API_KEY=rc_live_...          # free: https://restcountries.com/sign-up
GEO_EXPLORER_CONTACT=https://github.com/you/your-repo

GEO_EXPLORER_CONTACT は、Wikidata に送信する User-Agent に設定されます。Wikimedia は連絡先 URL またはメールアドレスを必須としており、それ以外の場合は 403 を返します。

PyPI に公開された後は、リポジトリをクローンせずにインストールすることもできます。

uvx geo-explorer-mcp

MCP Inspector で試すには、次のようにします。

uv run fastmcp dev inspector server.py
Claude Desktop

claude_desktop_config.json(Windows の場合は %APPDATA%\Claude\claude_desktop_config.json)に次の内容を追加し、パスを調整します。

{
  "mcpServers": {
    "geo-explorer": {
      "command": "C:\\path\\to\\geo-explorer-mcp\\.venv\\Scripts\\python.exe",
      "args": ["C:\\path\\to\\geo-explorer-mcp\\server.py"]
    }
  }
}

プロジェクト独自の .venv インタープリターを指定すると、Claude はテストしたものとまったく同じ環境で実行され、同期を保つための別環境も必要ありません。その後、Claude Desktop を完全に再起動してください。設定が読み込まれるのは起動時のみです。

次のように尋ねてみてください。

ドイツ語で、人口に応じて色分けしたスロバキアの地域のインタラクティブな地図を表示してください。

デモページ

demo/index.html は、サーバーと同じ 2 つのデータソースをブラウザー上で結合し、4 か国のいずれかを表示します。人口、面積、人口密度による色分け、州都のマーカー、並べ替え可能な表、地域ごとの Wikipedia と Wikidata のリンクに対応しています。国をパラメーターで指定できる 1 つのページです。サーバーが汎用的だからです。

http 経由で配信する必要があります。ファイルとして開くと、file:// ページのオリジンは null となり、ブラウザーがクロスオリジンのデータ取得をブロックします。

cd demo
python -m http.server 8000
地域統計データとの結合数
スロバキア8 krajе8
ドイツ16 Bundesländer16
イギリス4 つの構成国4
アメリカ合衆国56 の州および準州55

アメリカ合衆国で一致しない 1 地域はバージン諸島です。Wikidata に ISO 3166-2 の項目がありません。一致するデータがない地域は削除されず、灰色で表示されます。

ディレクトリ構成

server.py                      entry point kept at the root (a shim)
src/geo_explorer_mcp/server.py the implementation
demo/index.html                the browser demo
server.json                    MCP registry metadata

ルートにある server.py はサーバーオブジェクトを再エクスポートします。そのため、パッケージを公開可能な状態に保ちながら、Claude Desktop の設定、fastmcp dev inspector server.py、プローブスクリプトはすべて引き続き動作します。

テスト

uv run python probe2.py        # all three tools, plus the boundary/statistics join
uv run python probe_names.py   # country-name resolution across languages and spellings

probe2.py はデモ対象の 4 か国すべてで実行され、以前に問題があった 2 点を検証します。geojson_url が解決済みの Git LFS メディア URL であることと、境界データの地域の少なくとも 90% が統計データと結合されることです。現地名による照合が導入される前、ドイツの一致率は 50% でした。

フィールドノート

実際のデバッグに時間がかかった問題を記録し、皆さんが同じ時間を費やさずに済むようにしました。

REST Countries v3.1 は廃止されています。 オンラインのチュートリアルのほぼすべてが、今もこれを使っています。v5 はホストが異なり、ベアラートークンが必要で、すべてのフィールド名が変更されています(area → area.kilometers、cca3 → codes.alpha_3、また capitals は文字列ではなくオブジェクトの配列になっています)。

geoBoundaries の GeoJSON は Git LFS に保存されており、ブラウザーに配信できるのは media.githubusercontent.com だけです。

  • raw.githubusercontent.com/... はジオメトリではなく、131 バイトの LFS ポインターファイルを返します。
  • API が公開する github.com/.../raw/... URL は、空の access-control-allow-origin を伴って 302 リダイレクトします。ブラウザーはリダイレクトの各段階で CORS を適用するため、最終レスポンスが access-control-allow-origin: * を送信していても、この URL を取得するページでは TypeError: Failed to fetch が発生します。

どちらの間違いでも、エラーが表示されないまま地図が空白になります。get_map_data はリダイレクトを解決し、実際に機能する URL を返します。

curl で確認しても、ブラウザーの動作を確認したことにはなりません。 curl -L は問題なくリダイレクトをたどり、最終レスポンスの許可ヘッダーを報告しました。CORS はまったく無視されます。クロスオリジンの取得は、Origin ヘッダーを付けてテストするか、ブラウザーでテストしてください。

Wikidata の面積プロパティには、異なる単位が混在しています。 P2046 の値は平方キロメートル、ヘクタール、または平方メートルで入力されており、生の数値だけではどの単位か判断できません。そのまま読み取ると、Békéscsaba の面積は 193,930,000 km² になってしまいますが、実際は 193.9 km² で、m² 単位で記録されています。Wikidata が SI 基本単位に変換する正規化済みの値(p:P2046/psn:P2046)を使用してください。

ISO 3166-2 には異なる行政レベルが混在しています。 ハンガリーでは 43 の下位区分が返されます。内訳は 19 の県、ブダペスト、そして 23 の県と同等の権限を持つ都市です。これらの都市は県内にあるため、面積や人口を合算してはならず、境界形状の数はエントリー数よりずっと少なくなります。get_region_details は subdivision_types を返し、data_quality_notes を通じて警告します。

国名の照合では大文字と小文字は区別されませんが、ダイアクリティカルマークは区別されます。 Magyarország は解決されますが、Magyarorszag は解決されません。翻訳名(Ungarn、Hongrie)は意図的に名前の集約対象から除外されています。サーバーでは、名前の集約、翻訳エンドポイント、ローカルで構築したダイアクリティカルマークを折りたたんだインデックスの順に試す、3 段階のフォールバックで両方に対処しています。

小さな国で機能する Wikidata クエリでも、大きな国ではタイムアウトすることがあります。 ?i wdt:P17 ?country で下位区分を解決すると、Wikidata はその国のすべての項目を検索します。スロバキアでは問題ありませんが、米国では HTTP 504 になります。代わりに ISO 3166-2 の接頭辞でフィルターすると(FILTER(STRSTARTS(?iso, "US-")))、同じ 56 件の行を 0.9 秒で返します。コードは <alpha-2>-<subdivision> として定義されているため、接頭辞がそのまま国のフィルターになるからです。

同じ地域でも、出典によって名前が異なります。 geoBoundaries では Bayern、Sachsen、Thüringen ですが、Wikidata の英語ラベルは Bavaria、Saxony、Thuringia です。英語ラベルだけで照合したところ、ドイツの 16 州のうち 8 州しか結合できませんでした、各地域名のすべてのバリエーション(現地語名を含む)からキーを構築すると、16 州すべてを結合できます。これが、get_region_details が複数形の match_keys を返す理由です。

バウンディングボックスでは、日付変更線をまたぐ形状を正しく表せません。 アラスカのアリューシャン列島は 180° を越えて延びているため、バウンディングボックスは -179.15 .. 179.78 となり、359 度の幅になります。これに対して fitBounds を適用すると、エラーが出ないまま全地球までズームアウトし、本土は小さな染みにしか見えなくなります。ロシア、フィジー、ニュージーランドにも同じ落とし穴があります。デモでは幅が 180° を超えるボックスを拒否し、固定ビューにフォールバックします。

hidden 属性は、作成者が指定した display ルールがあると効きません。 ブラウザーのデフォルトスタイルシートを通じて動作しますが、これは最も優先度が低いため、display:grid が設定された要素は hidden を設定しても表示されたままになります。症状としては、読み込みが完了した地図を覆ったまま、読み込みオーバーレイが消えません。[hidden]{display:none !important} を指定して防いでください。 一部の上流地域名が破損しています。 geoBoundaries のスロバキアの ADM2 名は、途中で切れており、誤った文字に置き換えられています(Prešov → Predov、Dolný Kubín → Dolne Kub)。ジオメトリは正常です。get_map_data はこれを検出し、モデルが破損した名前を事実として提示しないように data_quality_note を返します。

1 行にまとめられる SPARQL クエリ内では、# コメントを使わないでください。**SPARQL では # は行末までをコメントアウトするため、クエリをまとめるとクエリ全体がコメントになります。症状:HTTP 400。

データソース

ソース用途ライセンス
REST Countries v5国の基本情報無料枠、API キーが必要
geoBoundaries行政区域の境界CC BY 4.0 / ODbL。国によって異なります。ツールはリクエストごとに実際のライセンスを返します
Wikidata地域統計、首都、リンクCC0 1.0

geoBoundaries は各国のデータソースを集約しているため、境界データのライセンスは国によって異なります。スロバキアのデータは OpenStreetMap 由来のため ODbL であり、CC BY にはない継承(シェアアライク)の義務があります。get_map_data は、取得したデータに適用されるライセンスを返します。ハードコードした文字列ではなく、その値を使用してください。

ロードマップ

  • PyPI に公開し、uvx geo-explorer-mcp でサーバーをインストールできるようにする
  • Wikidata との結合によって、破損した ADM2 名を修復する
  • 国別の統計を並べて比較する compare_countries
  • 境界のメタデータをメモリではなくディスクにキャッシュする

ライセンス

MIT — LICENSE を参照してください。このサーバーが返すデータには、それぞれ独自のライセンスが適用されます。上の表を参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。