mcpField
S
swiss-road-mobility-mcp

swiss-road-mobility-mcp

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

swiss-road-mobility-mcp について

swiss-road-mobility-mcpは、スイスのシェアモビリティ、EV充電、道路交通、Park & Rail、公共交通のデータをまとめ、移動検索や計画に役立ちます。場所ごとの概要に加え、自動車、駐車、公共交通を組み合わせた経路を作成できます。

主な機能

  1. 01近くのシェア車両を検索
  2. 02充電器とリアルタイム空き状況の確認
  3. 03事故・工事・渋滞の照会
  4. 04SBB Park & Rail施設の検索
  5. 05自動車と公共交通の経路計画
  6. 06住所のジオコーディングと道路分類

活用シーン

  1. 01チューリッヒHB付近のシェア自転車を検索
  2. 02ベルン付近のEV充電器を検索
  3. 03A1の交通事故情報を確認
  4. 04Dietikonからベルンへの車と列車の経路を計画

MCP 対応

スイスのシェアモビリティ、充電施設、交通情報、交通量計測所、Park & Rail、住所、道路データのツールをMCPクライアントに公開します。stdioとHTTP/SSEに対応し、DATEX II交通ツールには無料のAPIキーが必要です。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"malkreide-swiss-road-mobility": {
"command": "uvx",
"args": [
"swiss-road-mobility-mcp"
]
}
}
}
起動コマンドuvx swiss-road-mobility-mcp

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

パッケージ
pypiswiss-road-mobility-mcp0.6.1

ツール

15

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
paramsanyはい

詳細

🇨🇭 スイス公共データ MCP ポートフォリオの一部です

🚗 スイス道路・モビリティ MCP サーバー

Version License: MIT Python 3.11+ MCP CI

スイスの道路モビリティ向け MCP サーバー — 共有車両、EV 充電、交通情報、Park & Rail、マルチモーダルな旅行計画に対応します

🇩🇪 ドイツ語版


デモ

デモ:Claude が Zürich HB で road_mobility_snapshot を使用


概要

swiss-road-mobility-mcp は、スイスの道路・モビリティデータソースへの AI ネイティブなアクセスを提供します。

ソースデータAPI認証
sharedmobility.ch自転車、電動キックボード、自動車(GBFS)REST/JSONなし
ich-tanke-strom.chEV 充電ステーションGeoJSONなし
opentransportdata.swiss交通イベント、交通量計測ステーションDATEX II / SOAP+XML無料のキー
data.sbb.chPark & Rail 施設REST/JSON (Opendatasoft)なし
transport.opendata.ch公共交通機関の接続情報REST/JSONなし
geo.admin.ch住所のジオコーディング、道路分類REST/JSONなし

Swiss Transport MCP が鉄道の GA パスなら、このサーバーは道路向けの高速道路ステッカー、Park & Rail カード、シェアリングサブスクリプションに相当します。これらを組み合わせれば、スイスのモビリティをマルチモーダルに把握できます。

デモの基本クエリ: 「車で Dietikon にいます。Bern まで行きたいです。どこに駐車できますか?どの列車に乗ればよいですか?」


機能

  • 6 つのデータソースにまたがる 15 個のツール(フェーズ 1~4)
  • road_mobility_snapshot — 任意の場所のモビリティ概要を集約
  • road_multimodal_plan — 自動車、Park & Rail、公共交通機関を組み合わせたプランを作成
  • 15 個のツールのうち 12 個は API キー不要
  • stdio(Claude Desktop)と SSE(クラウド)のデュアルトランスポート
  • すべてのエンドポイントでレート制限とキャッシュを適用

前提条件

  • Python 3.11+
  • uv(推奨)または pip

インストール

# Clone the repository
git clone https://github.com/malkreide/swiss-road-mobility-mcp.git
cd swiss-road-mobility-mcp

# Install
pip install -e .
# or with uv:
uv pip install -e .

または uvx を使う場合(永続的なインストールは不要):

uvx swiss-road-mobility-mcp

クイックスタート

# stdio (for Claude Desktop)
swiss-road-mobility-mcp
# or:
python -m swiss_road_mobility_mcp.server

# Streamable HTTP (for cloud / Render.com) — serves MCP 2026-07-28 at /mcp
# and keeps the legacy SSE routes alongside.
MCP_TRANSPORT=http MCP_PORT=8001 swiss-road-mobility-mcp

Claude Desktop ですぐに試せます:

「Zurich HB のモビリティ関連情報をすべて表示して。」 「Bern Bahnhof の近くでシェア自転車を探して。」 「Lucerne の近くで EV を充電できる場所はどこ?」

→ 利用者別のユースケース →


設定

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json(macOS)または %APPDATA%\Claude\claude_desktop_config.json(Windows)を編集します。

{
  "mcpServers": {
    "swiss-road-mobility": {
      "command": "uvx",
      "args": ["swiss-road-mobility-mcp"],
      "env": {
        "OPENTRANSPORTDATA_API_KEY": "<your-token>"
      }
    }
  }
}

または python を使います:

{
  "mcpServers": {
    "swiss-road-mobility": {
      "command": "python",
      "args": ["-m", "swiss_road_mobility_mcp.server"],
      "env": {
        "OPENTRANSPORTDATA_API_KEY": "<your-token>"
      }
    }
  }
}

シェアモビリティ、EV 充電、Park & Rail、マルチモーダルプランナーは、OPENTRANSPORTDATA_API_KEY がなくても動作します。このキーが必要なのは DATEX II 交通情報ツールのみです。

設定ファイルの場所:

  • macOS:~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows:%APPDATA%\Claude\claude_desktop_config.json
クラウドへのデプロイ(ブラウザーアクセス用 SSE)

ブラウザーの claude.ai 経由で使用する場合(例:ローカルソフトウェアを使えない管理対象ワークステーション):

Render.com(推奨):

  1. リポジトリを GitHub にプッシュするか、フォークします
  2. render.com で「New Web Service」を選択し、GitHub リポジトリを接続します
  3. 起動コマンドを設定します:MCP_TRANSPORT=http MCP_PORT=8001 swiss-road-mobility-mcp
  4. claude.ai の「Settings」->「MCP Servers」で、https://your-app.onrender.com/mcp を追加します — または、SSE トランスポートを使用するクライアントには .../sse を指定します。http は両方を提供します。
SSE のセキュリティ(SEC-009)

公開 SSE エンドポイントには誰でもアクセスできます。エンドポイント(および上流 API の利用枠)を保護するには、ホストで次の環境変数を設定してください。

変数効果
MCP_AUTH_TOKEN設定すると、すべての SSE リクエストで Authorization: Bearer <token> の送信が必要になります。未設定の場合は認証されません(起動時にサーバーが警告をログに記録します)。公開環境にデプロイする場合は、強く推奨します。
MCP_RATE_LIMITクライアント IP ごとのウィンドウ内の最大リクエスト数(デフォルトは 60、0 で無効)。
MCP_RATE_WINDOWウィンドウの長さ(秒、デフォルトは 60)。
ALLOWED_ORIGINSブラウザークライアント用の、カンマ区切りの CORS オリジン。デフォルトは空で、クロスオリジンアクセスはできません。 * はすべてのオリジンを許可し、警告としてログに記録されます。stdio や、ブラウザー以外のクライアントには影響しません。

ローカルの stdio トランスポートでは、これらの設定は不要です。ユーザーの信頼されたコンテキストで実行されます。

オブザーバビリティ(OBS-003 / OBS-006)
変数効果
MCP_LOG_LEVELログレベル:DEBUG / INFO(デフォルト) / WARNING / ERROR。
MCP_LOG_FORMAT構造化ログには text(デフォルト)または json を指定します。すべてのログは stderr に出力されます。
MCP_TRACING_ENABLEDtrue を指定すると、OpenTelemetry トレーシングが有効になります(デフォルトでは無効)。
OTEL_EXPORTER_OTLP_ENDPOINTOTLP コレクターの URL。この変数を設定すると、トレーシングも有効になります。SDK は標準の OTEL_* 変数を使用します。

トレーシングにはオプションの追加パッケージが必要です:pip install 'swiss-road-mobility-mcp[tracing]'。 有効にすると、すべての上流 API 呼び出しが自動的にトレースされ(httpx の計装)、SSE リクエストには W3C トレースコンテキストの伝播に対応したサーバースパンが設定されます。


利用可能なツール

シェアモビリティと EV 充電(API キー不要)
ツール説明キャッシュ
road_find_sharing近隣のシェアモビリティ(自転車、電動スクーター、自動車)60s
road_search_sharing名前でシェアリングステーションを検索5min
road_sharing_providersスイス国内のすべてのシェアリング事業者1h
road_find_charger近隣の EV 充電ステーション5min
road_charger_status充電ステーションのリアルタイム空き状況1min
road_check_statusサーバーと API のヘルスチェック-
交通(無料の API キーが必要)
ツール説明キャッシュ
road_traffic_situationsASTRA/VMZ-CH による事故、道路工事、渋滞2min
road_traffic_counters位置周辺の観測所における車両数/時 + km/h1min
road_counter_sites近隣の観測所一覧24h
パーク&レール + マルチモーダル(API キー不要)
ツール説明キャッシュ
road_park_rail近隣の SBB Park+Rail 施設を検索5min
road_mobility_snapshot指定場所の総合的なモビリティ概要-
road_multimodal_plan自動車 -> パーク&レール -> 公共交通機関 -> 目的地の経路を計画-
地理情報と住所 — フェーズ 4(API キー不要)
ツール説明キャッシュ
road_geocode_addressスイスの住所 -> GPS(公式建物住所登録簿)-
road_reverse_geocodeGPS -> EGID/EGAID を含む公式住所(GWR)-
road_classify_roadswissTLM3D による道路分類-
使用例
クエリツール
「Zurich HB の近くでシェア自転車を探して」road_find_sharing
「Bern の近くで EV を充電できる場所は?」road_find_charger
「A1 で交通事故は発生している?」road_traffic_situations
「Winterthur 駅の近くに駐車できる場所は?」road_park_rail
「自動車と電車で Dietikon から Bern までの移動を計画して」road_multimodal_plan

交通ツール用 API キー

  1. 登録します:https://api-manager.opentransportdata.swiss
  2. 新しいアプリケーションを作成し、「Strassenverkehr」API を購読します
  3. トークンをコピーします
export OPENTRANSPORTDATA_API_KEY=<your-token>

キーがない場合、交通ツールは正確な登録リンクを含む説明的なエラーメッセージを返します。クラッシュすることはありません。


アーキテクチャ

swiss_road_mobility_mcp/
├── server.py             # FastMCP server, 15 tools
├── api_infrastructure.py # Rate limiter, cache, HTTP client, geo utilities
├── shared_mobility.py    # sharedmobility.ch
├── ev_charging.py        # ich-tanke-strom.ch
├── traffic_situations.py # DATEX II traffic alerts (SOAP/XML)
├── traffic_counters.py   # DATEX II counting stations (SOAP/XML)
├── park_rail.py          # SBB Open Data Park & Rail
├── multimodal.py         # Snapshot + trip planner (cross-source)
└── geo_admin.py          # geo.admin.ch geocoding + road classification
データソースの特性
ソースプロトコル対象範囲認証
sharedmobility.chREST/JSON (GBFS)スイスのすべてのシェアリング事業者なし
ich-tanke-strom.chGeoJSONすべての公共EV充電器なし
opentransportdata.swissDATEX II / SOAP+XMLASTRAの交通データ無料キー
data.sbb.chREST/JSON (Opendatasoft)SBBのパーク&レールなし
transport.opendata.chREST/JSON公共交通機関の時刻表なし
geo.admin.chREST/JSON公式の住所、道路なし

詳細なドキュメント: docs/ARCHITECTURE.md(MCPプリミティブ、 ツールの名前空間、ユースケースカタログ、フェーズロードマップ)・ docs/SECURITY.md(認証情報モデル、送信先許可リスト、認証、 MCP適合性表)・docs/OPERATIONS.md(リソース制限、再起動ポリシー、ヘルス状態)。


プロジェクト構成

swiss-road-mobility-mcp/
├── src/swiss_road_mobility_mcp/
│   ├── __init__.py              # Package
│   ├── server.py                # FastMCP server, 15 tools
│   ├── api_infrastructure.py    # Rate limiter, cache, HTTP client
│   ├── shared_mobility.py       # Shared vehicles
│   ├── ev_charging.py           # EV charging stations
│   ├── traffic_situations.py    # Traffic events
│   ├── traffic_counters.py      # Vehicle counting
│   ├── park_rail.py             # Park & Rail
│   ├── multimodal.py            # Snapshot + trip planning
│   └── geo_admin.py             # Geocoding + roads
├── tests/
│   ├── test_integration.py      # Live API tests
│   └── test_phase3.py           # Park & Rail + multimodal tests
├── .github/workflows/ci.yml     # GitHub Actions (Python 3.11/3.12/3.13)
├── pyproject.toml
├── CHANGELOG.md
├── CONTRIBUTING.md               # Contribution guide (English)
├── CONTRIBUTING.de.md            # Contribution guide (German)
├── SECURITY.md                   # Security policy (English)
├── SECURITY.de.md                # Security policy (German)
├── LICENSE
├── README.md                    # This file (English)
└── README.de.md                 # German version

既知の制限事項

  • シェアードモビリティ: sharedmobility.ch APIでは厳密な半径フィルタリングが行われません。指定された半径をわずかに超える車両が表示される場合があります
  • EV充電: 駅名の命名規則は事業者によって異なります。詳細な名前が表示されない駅もあります
  • 交通情報(DATEX II): 無料のAPIキーが必要です。キーがない場合、交通情報ツールは分かりやすいエラーメッセージを返します
  • パーク&レール: SBBはエンドポイントの名前を変更することがあります。サーバーにはフォールバックチェーンが含まれています
  • マルチモーダルプランナー: 応答時間は、問い合わせたソースのうち最も遅いものによって決まります

MCPプロトコルのバージョン

このサーバーは2つのプロトコル時代に対応しています。接続上でクライアントが最初に送信するリクエストによって、適用される時代が決まります。後から別の時代を指定しても拒否されます。

時代リビジョン接続するクライアント
initialize ハンドシェイク2024-11-05 … 2025-11-25現在のクライアントが使用するものです。サーバーは要求されたリビジョンで応答します。要求がそれより新しい場合は、上限の 2025-11-25 で応答します。
リクエストごとのエンベロープ2026-07-282026-07-28 の _meta エンベロープを含むリクエストによって、モダン接続が開始されます。

時代はリクエストだけでなく、トランスポートによっても決まります。 この節の以前のバージョンには「同じエンドポイントで」と記載されていましたが、これは見過ごされていた誤りでした。モダンな単一交換方式の配信は StreamableHTTPSessionManager の背後にあり、Streamable HTTPアプリからのみアクセスできます。提供されていたトランスポートはSSEでしたが、SSEにはセッションが必要であり、モダンなリクエストは仕様上セッションレスです。

MCP_TRANSPORTエンドポイントハンドシェイク時代2026-07-28
stdio(デフォルト)–はいはい
http/mcp、および併設される /sse + /messages/はいはい
sse(レガシー)/sse + /messages/はいいいえ

MCP_TRANSPORT=http では両方に対応します。SSEルートは /mcp に置き換えられるのではなく、併設されるため、サーバーに新しいリビジョンが追加されても既存のクライアントは影響を受けません。コンテナ(Dockerfile、docker-compose.yml、render.yaml)では http が提供されます。

どちらのリビジョンも tests/test_protocol_version.py で固定され、インストール済みSDKに対して検証されます。そのため、Dependabotによる mcp の更新でどちらかのリビジョンがひそかに変更されることはありません。このゲートではSDK定数しか読み取れないため、tests/test_spec_2026_07_28.py が並んで配置されており、実際の通信内容を検証します。組み立て済みのASGIアプリに対して実際の 2026-07-28 エンベロープを送り、対照確認として同じエンベロープをSSEにも送信します。

SDKの LATEST_PROTOCOL_VERSION はハンドシェイク時代ではなく、モダン時代の別名であることに注意してください。これだけを基準に固定すると、現在のクライアントが実際にネゴシエートする時代が変更されても検出できません。

更新ポリシー。 ゲートが失敗した場合、定数を確認せずに変更しないでください。2つのリビジョン間の仕様変更履歴を読み、サーバーが引き続き正常に動作することを確認してから、定数、この節、README.de.md、CHANGELOG.md をまとめて更新してください。


テスト

# All tests
pytest tests/ -v

# Quick check (without pytest)
python tests/test_phase3.py

安全性と制限事項

  • 読み取り専用: すべてのツールは HTTP GET リクエストのみを実行します。上流システムのデータが書き込み、変更、削除されることはありません。
  • 個人データなし: ツールの入力として渡される位置座標は、保存、記録されたり、直近の API リクエスト以外に転送されたりすることはありません。API のレスポンスに PII は含まれず、車両数、充電器の利用状況、交通イベント、地理情報メタデータのみが含まれます。
  • レート制限: 上流 API を保護するため、サーバーはクライアント側のレート制限(シェアドモビリティ:30 req/60s、EV 充電:10 req/60s)を適用します。DATEX II キーには、opentransportdata.swiss のフェアユース規約が適用されます。
  • キャッシュ: レスポンスはプロセス内にキャッシュされます(シェアリング:60s・EV:5 min・Park+Rail:5 min・交通:1~2 min)。リアルタイムデータはキャッシュの経過時間を反映しており、必ずしも現在の時刻のデータとは限りません。
  • 利用規約: データには、各上流ソースの利用規約(ToS)が適用されます。sharedmobility.ch、ich-tanke-strom.ch、opentransportdata.swiss、data.sbb.ch(CC BY)、geo.admin.ch(BGDI)。
  • 保証なし: このサーバーは独立したコミュニティプロジェクトであり、SBB、ASTRA、sharedmobility.ch、またはいずれかの API プロバイダーとは提携していません。利用可能かどうかは上流サービスに依存します。

変更履歴

CHANGELOG.md を参照してください。


コントリビューション

CONTRIBUTING.md を参照してください。


セキュリティ

セキュリティ対策と脆弱性の報告については、SECURITY.md を参照してください。


ライセンス

MIT ライセンス — LICENSE を参照してください。


作者

Hayal Oezkan · malkreide


クレジットと関連プロジェクト

インストール

uv の uvx で実行します。クローンや手動インストールは不要です。MCP クライアントの設定に追加してください(Claude Desktop、Cursor、Windsurf では mcpServers を使用し、VS Code では .vscode/mcp.json 内の最上位キー servers を使用します)。

{
  "mcpServers": {
    "swiss-road-mobility-mcp": {
      "command": "uvx",
      "args": [
        "swiss-road-mobility-mcp"
      ]
    }
  }
}

コメント

MCP は初めてですか?

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

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