Skip to main content
Glama
trondbjoroy

norway-location-transport-mcp

by trondbjoroy

norway-location-transport-mcp

AIエージェントにノルウェーの公共交通および地理空間データへの構造化アクセスを提供するMCPサーバーです。無料のEnturおよびKartverket / Geonorge APIを利用します。

2つのデータソースは相互補完的です。旅程計画にはジオコーディングが必要であり、標高には住所解決が必要であり、行政区域の検索は座標を場所に結び付けます。1つのサーバーで、実用的なローカルな質問に答えます。「ここからベルゲンまでの行き方は?」「このハイキングの標高は?」「この住所はどの自治体にある?」「近くに電動スクーターはある?」

どちらのデータソースも無料で、有料プランや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?) — 座標または住所がどの自治体・県に該当するかを公式コード付きで返します。

  • lookup_property(address?, latitude?, longitude?, max_results) — 公開住所レジスタを介した地番(matrikkel)識別子(kommune / gnr / bnr / fnr)。

公共交通(Entur)

  • resolve_stop_place(query, max_results) — 場所または住所をEnturの停留所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) — 地点間の旅程を計画します。交通手段と徒歩速度でフィルタリング。区間、交通手段、所要時間、リアルタイム時刻を含む旅程パターンを返します。

  • 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) — 停留所が属する運賃(tariff)ゾーン。

  • 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.tssrc/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の利用規約では、すべてのリクエストにcompany-app形式の自己識別用ET-Client-Nameヘッダーを含める必要があります。このサーバーはすべての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

その後、例えば次のように尋ねます:「オスロSからベルゲンまでの旅程を計画して、ガルフピッゲンの標高を教えて。」

リモート版(Cloudflare Workers)

worker/にはリモートデプロイがあります。同じ21のツールをMCP Streamable HTTPで提供するため、claude.aiコネクタとしてサーバーを追加できます。ローカルサーバーとツール定義を共有します(src/tools.tszをパラメータとして受け取るため、ローカルのMCP SDK v1 / zod 3とワーカーの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クライアント名をワーカー変数として設定:

cd worker
npx wrangler secret put ET_CLIENT_NAME

デプロイ後、server.jsonremotesエントリをworkers.dev URLで追加します。

呼び出し例

オスロ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を介して同じサーバーを構築します。

  • 各ツールは、LLMが直接読む説明付きのZod入力スキーマを宣言します。ツールを呼び出すために外部ドキュメントは不要です。

  • 結果は、エージェントが必要とするものに切り詰められたJSONテキストであり、生のアップストリームペイロードではありません。

  • console.logでstdoutに書き込まないでください。stdioプロトコルを破損します。stderrにログを出力してください。

ライセンス

MIT © Trond Bjørøy。データは© KartverketおよびEntur、NLODの下にあります。

-
license - not tested
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Entur MCP — Norway public transport, nationwide, all modes (developer.entur.org)

  • Real-world data for agents: air quality, geocoding, quakes, holidays, web search

  • US weather, alerts, earthquakes and elevation for AI agents, from NWS/NOAA and USGS. No API keys.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/trondbjoroy/norway-location-transport-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server