mcpField
N
norway-location-transport-mcp

norway-location-transport-mcp

リモート
github.com/trondbjoroy地図・旅行09 週間前に更新
リポジトリ

norway-location-transport-mcp について

EnturとKartverket / GeonorgeのAPIを使い、ノルウェーの交通や地理情報を扱うエージェント向けMCPサーバーです。住所検索、経路計画、リアルタイム交通情報、地形照会を一つのサービスで提供します。

主な機能

  1. 01住所・地名の検索と検証
  2. 02経路計画と停留所検索
  3. 03リアルタイムの発車・車両・運行状況
  4. 04シェア車両と駐車ステーションの検索
  5. 05標高・標高プロファイル・座標変換
  6. 06行政区と地籍情報の照会

活用シーン

  1. 01ノルウェー国内の公共交通経路を計画
  2. 02発車時刻や運行遅延を確認
  3. 03ハイキング経路の標高変化を調査
  4. 04座標から行政区や近隣住所を特定

MCP 対応

MCPクライアントにEnturの交通データとKartverket / Geonorgeの地理データを扱うツールを提供します。stdioとStreamable HTTPに対応します。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://norway-location-transport-mcp.met-mcp-worker.workers.dev/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

パッケージ
npmnorway-location-transport-mcp0.1.0

ツール

21
パラメーター型必須説明
querystringいいえ自由入力の住所(例:'Karl Johans gate 1, Oslo')。`*` ワイルドカードに対応しています。
numberintegerいいえ番地(nummer)
streetstringいいえ通り名(adressenavn)。`*` ワイルドカードに対応しています。
max_resultsintegerいいえ返す一致項目の最大数
postal_codestringいいえ郵便番号(postnummer、例:'0155')
municipality_numberstringいいえ4 桁の自治体コード(kommunenummer、例:オスロは '0301')

詳細

norway-location-transport-mcp

無料の Entur API と Kartverket / Geonorge API を通じて、AI エージェントがノルウェーの公共交通機関および地理空間データに構造化された形でアクセスできるようにする MCP サーバーです。

2つのデータソースは相互に補完します。経路検索にはジオコーディングが必要で、高度を調べるには住所の解決が必要です。また、行政区の検索では座標を場所と結び付けます。このサーバーは、「ここからベルゲンへはどう行けばよいですか?」「このハイキングコースの高度はどうなっていますか?」「この住所はどの kommune にありますか?」「近くに電動キックボードはありますか?」といった、実用的な地域に関する質問に答えます。

どちらのデータソースも無料で、追加料金のプランや API キーはありません。Entur では、識別情報を含む ET-Client-Name ヘッダーのみが必要です(下記参照)。Kartverket では何も必要ありません。

ツール

場所と地理データ(Kartverket)
  • search_address(query?, street?, number?, postal_code?, municipality_number?, max_results) — 自由入力テキストまたはフィールドを使って公式住所を検索します。* ワイルドカードに対応しています。座標と地籍番号を返します。
  • find_addresses_near(latitude, longitude, radius_m, max_results) — 指定した地点から一定の半径内にあるすべての住所を、距離とともに返します。
  • validate_address(address) — 自由入力された住所を検証して正規化します(あいまい検索)。valid、正規化された一致結果、候補を返します。
  • search_place_names(query, max_results) — 公式地名を検索します。地物の種類(Fjell、Innsjø、…)、自治体、県、座標を返します。* に対応しています。
  • find_place_names_near(latitude, longitude, radius_m, max_results) — 指定した地点に近い、名称のある地物を距離とともに返します。
  • get_elevation(latitude, longitude) — 全国標高モデル(DTM)から地形の標高を取得します。
  • get_elevation_profile(path, samples) — 経路に沿って標高をサンプリングします。標高プロファイルに加え、総距離、累積上昇量、累積下降量を返します。
  • transform_coordinates(x, y, from_epsg, to_epsg) — 測地系間で変換します(例:WGS84 4326 → UTM33 25833)。
  • lookup_admin_unit(latitude?, longitude?, address?) — 座標または住所が属する kommune と fylke を、公式コードとともに返します。
  • lookup_property(address?, latitude?, longitude?, max_results) — オープン住所レジスターを通じて地籍(matrikkel)識別子(kommune / gnr / bnr / fnr)を取得します。
公共交通機関(Entur)
  • resolve_stop_place(query, max_results) — 場所または住所を Entur Stop Place ID に解決します。
  • find_stops_near(latitude, longitude, radius_m, max_results) — 座標を逆ジオコーディングし、最寄りの停留所を検索します。
  • plan_trip(from_place?/from_latitude/from_longitude, to_place?/to_latitude/to_longitude, date_time?, arrive_by?, transport_modes?, walk_speed?, num_trip_patterns) — 2地点間の経路を検索します。交通手段と歩行速度で絞り込めます。区間、交通手段、所要時間、リアルタイム時刻を含む経路パターンを返します。
  • get_departures(stop_place_id, count) — 停留所からの次の出発便を、リアルタイムの遅延、運休、乗り場情報とともに返します。
  • get_realtime_status(stop_place_id? | line_id?) — リアルタイム運行状況を返します。停留所の場合は定時・遅延・運休の便数、路線の場合は運行中の車両数と遅延状況を示します。
  • get_stop_accessibility(stop_place_id) — 各乗降場の車椅子対応状況と概要を返します。(下記のアクセシビリティに関する注記を参照してください。)
  • list_quays(stop_place_id) — 停留所のすべての乗降場(プラットフォーム)を、コードと座標とともに返します。
  • get_fare_zones(stop_place_id) — 停留所が属する運賃(料金)ゾーンを返します。
  • find_shared_vehicles(latitude, longitude, range_m, form_factors?, count) — すべての事業者を対象に、自由に利用できるシェア車両(自転車、電動キックボード、自動車、モペッド)を検索します。
  • find_docking_stations(latitude, longitude, range_m, count) — 利用可能な車両数と空きドック数を含む、ドッキングステーションを検索します。
  • get_vehicle_positions(codespace_id?, line_id?, max_results) — 方位、速度、遅延を含む車両のリアルタイム位置を返します。

ツール定義は src/kartverket.ts と src/entur.ts にあり、src/tools.ts で統合されています。stdio と HTTP の両エントリーポイントから共有されます。

セットアップ

npm install
npm run build
npm test

npm test は stdio 経由でサーバーを起動し、稼働中の API に対してすべてのツールを呼び出します。

実行方法

stdio 経由(ほとんどの MCP クライアント向け):

node dist/index.js

Streamable HTTP 経由(HTTP ベースのクライアント向け):

node dist/http.js
# listens on http://localhost:3000/mcp  (override with PORT)

Entur のクライアント名要件

Entur の利用規約では、すべてのリクエストに識別用の ET-Client-Name ヘッダーを付ける必要があります。形式は company-app のようになります。このサーバーは、すべての Entur リクエストにこのヘッダーを付けます。ET_CLIENT_NAME 環境変数で任意の値を設定できます:

ET_CLIENT_NAME="acme-travelbot" node dist/index.js

未設定の場合は、パッケージのデフォルト値が使用されます。Kartverket ではヘッダーもキーも必要ありません。

Claude Code での使用

claude mcp add norway -- node C:\Users\trond\norway-location-transport-mcp\dist\index.js

たとえば、「Oslo S から Bergen までの移動を計画して、Galdhøpiggen の標高を教えてください」と尋ねてみましょう。

リモート版(Cloudflare Workers)

worker/ にはリモートデプロイ用の構成が含まれています。MCP Streamable HTTP 経由で同じ 21 個のツールを提供するため、サーバーを claude.ai コネクターとして追加できます。ツール定義はローカルサーバーと共有されています(src/tools.ts は z をパラメーターとして受け取るため、ローカルの MCP SDK v1/zod 3 と worker の SDK v2/zod 4 の両方で動作します)。

cd worker
npm install
npm run dev     # local test at http://127.0.0.1:8787/mcp
node test-http.mjs

デプロイします(Cloudflare アカウントと wrangler login が必要です):

cd worker
npm run deploy

Entur のクライアント名を worker の変数として設定します:

cd worker
npx wrangler secret put ET_CLIENT_NAME

デプロイ後、workers.dev の URL を指定した remotes エントリーを server.json に追加します。

呼び出し例

Oslo S からの次の出発便を取得します:

{ "name": "get_departures", "arguments": { "stop_place_id": "NSR:StopPlace:59872", "count": 5 } }

歩行速度を指定して、バス/トラムのみを使う移動を計画します:

{ "name": "plan_trip", "arguments": {
  "from_place": "NSR:StopPlace:59872",
  "to_latitude": 59.95, "to_longitude": 10.78,
  "transport_modes": ["bus", "tram"], "walk_speed": 1.4
} }

短い経路の標高プロファイル:

{ "name": "get_elevation_profile", "arguments": {
  "path": [{ "latitude": 61.636, "longitude": 8.312 }, { "latitude": 61.64, "longitude": 8.32 }],
  "samples": 20
} }

WGS84 座標を UTM33 に変換します:

{ "name": "transform_coordinates", "arguments": { "x": 10.7461, "y": 59.9127, "from_epsg": 4326, "to_epsg": 25833 } }

注意事項と制限

  • 座標は、すべて WGS84 の緯度/経度です。数値が一致するよう、Kartverket の API には EPSG 4326 を指定して問い合わせます。ノルウェーでは EUREF89(4258)との差は 1 メートルを大きく下回ります。
  • アクセシビリティ:Entur の無料の JourneyPlanner では、乗降場ごとに車椅子での利用可否を確認できます。エレベーターや点字ブロックなどの詳細な設備情報は、認証が必要な Entur の Stop Register API でのみ確認できるため、ここでは利用できません。このツールはその旨を伝えます。
  • いずれかのデータソースによるレート制限は、エージェントに再試行を促す明確なエラーとして返されます。
  • 出典表示:Kartverket/Geonorge および Entur のデータは NLOD に基づいています。データを表示する際は、出典を明記してください。

仕組み

  • src/index.ts は stdio 経由で MCP(stdin/stdout 上の JSON-RPC)を処理します。src/http.ts はセッション管理を行いながら、Streamable HTTP 経由で MCP を処理します。どちらも src/server.ts を通じて同じサーバーを構築します。
  • 各ツールは Zod 入力スキーマを宣言し、LLM が直接読み取る説明を記載しています。ツールを呼び出すための外部ドキュメントは必要ありません。
  • 結果は、上流 API の生のペイロードではなく、エージェントに必要な情報に絞った JSON テキストです。
  • console.log で stdout に書き込まないでください。stdio プロトコルが壊れます。ログは stderr に出力してください。

ライセンス

MIT © Trond Bjørøy。データ © Kartverket および Entur、NLOD に基づきます。

コメント

MCP は初めてですか?

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

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