Deutsche Bahn MCP Server について
Deutsche Bahn MCP Serverは、MCPクライアントからDeutsche BahnとドイツのモビリティAPIに接続し、鉄道運行や駅の情報を提供します。交通検索や移動計画に利用でき、ローカルまたはGoogle Cloud Runにデプロイできます。README記載のホスト済みインスタンスは停止しています。
主な機能
- 01駅名・位置による駅検索
- 02時刻表と運行障害の確認
- 03駅の駐車場と空き予測
- 04バリアフリー設備とサービスセンター
- 05MCPツール、プロンプト、参照リソース
活用シーン
- 01近くの駅や主要な鉄道ハブの検索
- 02時刻表と現在の運行障害の確認
- 03駅の駐車場と空き予測の確認
- 04バリアフリー移動の計画と駅設備の確認
MCP 対応
MCPツール、プロンプト、リソースを通じて、Deutsche Bahnとドイツのモビリティ情報を公開します。クライアントは駅、時刻表、運行障害、駐車場、バリアフリー情報を照会できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Deutsche Bahn MCP サーバー
Deutsche Bahn(DB)およびドイツのモビリティ API に統一的にアクセスできる、包括的な Model Context Protocol(MCP)サーバーです。Python、FastAPI、FastMCP で構築されており、Claude Desktop やその他の MCP クライアントとシームレスに連携できます。
このサーバーは、ローカル環境とクラウド環境の両方にデプロイできます。MCP クライアントに URL を追加して接続できる稼働中の MCP サーバーは、こちらです:[SERVER DECOMISSIONED - HOST YOUR OWN DEPLOYMENT AS DESCRIBED]。
🚀 機能
- 🚄 充実した鉄道データ:駅、時刻表、リアルタイムの運行障害、駐車場
- 🤖 MCP プロトコル:ツール、プロンプト、リソースを完全にサポート
- 🛡️ 本番環境対応:セキュリティヘッダー、レート制限、入力検証
- 🏗️ モジュール型アーキテクチャ:整理され、保守しやすいコードベース構成
- ☁️ クラウドネイティブ:Google Cloud Run へのデプロイを想定して設計
- 📚 充実したドキュメント:包括的なガイドとリファレンス資料
📋 クイックスタート(開発者向け。ユーザー向けの手順は以下を参照)
前提条件
- Python 3.11+
- Deutsche Bahn API の認証情報(こちらから取得)
- Google Cloud アカウント(デプロイ用)
ローカル開発
-
クローンしてセットアップします:
git clone <repository-url> cd deutsche-bahn-mcp-server python3 -m venv .venv source .venv/bin/activate # On Windows: .venv\Scripts\activate pip install -r requirements.txt -
環境を設定します:
cp .env.example .env次に、新しい
.envファイルを編集して、DB API の認証情報を設定します。各変数の詳細については、「Configuration」セクションを参照してください。 -
サーバーを実行します:
python main.py # Server available at http://localhost:8080
🎯 稼働中のサーバーの使用ガイド
[SERVER DECOMISSIONED - HOST YOUR OWN DEPLOYMENT AS DESCRIBED]
🖥️ Claude Desktop のセットアップ
手順 1:設定ファイルの場所を確認します
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\\Claude\\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
手順 2:設定を編集します ファイルを開き、Deutsche Bahn サーバーを追加します:
{
"mcpServers": {
"deutschebahn": {
"command": "npx",
"args": [
"-y", "mcp-remote",
"https://[SERVER DECOMISSIONED - Use your URL]/mcp",
"--transport", "http-only"
]
}
}
}
手順 3:Claude Desktop を再起動します
- Claude Desktop を完全に終了します
- アプリケーションを再度開きます
- MCP セクションに「Deutsche Bahn MCP Server」が表示されます
手順 4:接続をテストします Claude に次のように尋ねます:「ベルリンにはどのような鉄道駅がありますか?」
🌐 Claude.ai のウェブ版での使用
手順 1:会話を開始します claude.ai にアクセスして、新しい会話を開始します。
手順 2:MCP サーバーを追加します "Search and Tools > Add connectors > Manage connectors" をクリックします "Add custom connector" を選択します 名前を入力します。例:"Deutsche Bahn MCP Server" 次のリモート MCP サーバー URL を入力します:[SERVER DECOMISSIONED - HOST YOUR OWN DEPLOYMENT AS DESCRIBED]
手順 3:すぐにテストします 次のように尋ねてみてください:「フランクフルト付近の鉄道駅を探して、フランクフルト中央駅で現在遅延が発生しているか確認してください。」
📱 試してみるクイック例
接続したら、次のような実用的な例を試してみてください:
🔍 駅の検索
- 「ミュンヘンの鉄道駅をすべて探して」
- 「座標 52.5200, 13.4050 から 5km 以内にある駅を教えて」
🚄 リアルタイム情報
- 「現在、ベルリン中央駅で遅延は発生していますか?」
- 「今日の午後 3 時のハンブルク中央駅の出発時刻表を見せて」
♿ バリアフリーの移動計画
- 「ミュンヘンからハンブルクまで、バリアフリーで移動できますか?」
- 「ケルン中央駅では、どのようなアクセシビリティサービスを利用できますか?」
🅿️ 駐車場情報
- 「明日の午前 10 時にフランクフルト中央駅で利用できる駐車場を教えて」
- 「デュッセルドルフ中央駅付近の駐車場を探して」
🗺️ 旅行計画
- 「ベルリンからドレスデンまで、バリアフリーの移動を計画するのを手伝って」
- 「バイエルン州の主要な鉄道ハブを教えて」
🔧 接続のトラブルシューティング
Claude Desktop の問題:
問題:MCP セクションにサーバーが表示されない
- 設定ファイルの JSON 構文を確認します(JSON バリデーターを使用してください)
- Claude Desktop が完全に再起動されていることを確認します
- ファイルが正しい場所に保存されていることを確認します
問題:接続がタイムアウトする
- インターネット接続を確認します
- ターミナルで
curl https://[SERVER DECOMISSIONED - HOST YOUR OWN DEPLOYMENT AS DESCRIBED]/mcp/pingを試します - curl が失敗する場合は、ネットワーク制限が原因の可能性があります
問題:「Command not found」エラー
- Node.js と npm がインストールされていることを確認します
npm install -g mcp-remoteの実行を試します
Claude.ai Web の問題:
問題:「Cannot connect to MCP server」
- Web 版では、明示的な MCP サーバーのサポートが必要な場合があります
- Claude に手順を追って接続をサポートするよう依頼してみてください
- 代替方法:駅情報を尋ねるなど、特定のツール呼び出しを使用します
一般的な問題:
サーバーのステータス確認:
# Test if server is responding
curl https://[SERVER DECOMISSIONED - HOST YOUR OWN DEPLOYMENT AS DESCRIBED]/health
# Test MCP endpoint
curl https://[SERVER DECOMISSIONED - HOST YOUR OWN DEPLOYMENT AS DESCRIBED]/mcp/ping
レート制限:
- サーバーは 1 分あたり 60 件、1 時間あたり 1000 件のリクエストを許可します
- 上限を超えた場合は、しばらく待ってから再試行します
- 広範な検索ではなく、具体的なクエリの使用を検討してください
🛠️ 利用可能な機能
🔧 ツール(13 種類)
駅データ
get_station_by_name(name, limit=10)- 名前で駅を検索し、フォールバックフィルタリングを適用しますget_stations_by_position(lat, lon, radius=2.0)- スマートな地域フィルタリングを使用して近くの駅を検索します
時刻表と運行障害
get_planned_timetable(eva_number, date, hour)- 予定されている出発・到着時刻get_recent_timetable_changes(eva_number)- リアルタイム更新(直近 2 分間)get_full_timetable_changes(eva_number)- 判明している今後の運行障害すべて
駐車場情報
get_parking_by_station(stop_place_id)- 駅周辺の駐車施設search_parking_facilities(station_name)- 実際の API を使用して駅名で駐車施設を検索しますget_parking_prognoses(facility_id, datetime)- 利用可能状況の予測
アクセシビリティサービス
find_facilities(station_number, type, state)- エレベーター、エスカレーターの状況get_facilities_by_station(station_number)- 施設の全体概要get_szentralen_by_location(lat, lon)- 地域フィルタリングを使用したモビリティサービスセンターsearch_szentralen(limit, offset)- ページネーションに対応したサービスセンター検索
💬 インタラクティブプロンプト(7 種類)
accessibility_check- 駅間のバリアフリー移動を確認しますparking_prognosis- 駅の駐車場の利用可能状況を予測しますrecent_timetable_changes- リアルタイムの遅延と運行障害planned_timetable_window- 指定した時間帯の列車時刻表station_services- 駅情報と設備の全体像nearby_stations- 地理座標の近くにある鉄道駅を検索しますcurrent_disruptions- 運行障害の包括的な概要
📚 参照リソース(5 種類)
file://reference/station-categories- ドイツの鉄道駅分類ガイドfile://reference/train-types- ドイツの列車種別(ICE、IC、RE など)の完全ガイドfile://stations/major-hubs- ドイツの主要な鉄道駅の一覧file://services/accessibility-guide- アクセシビリティ機能の包括的なガイドfile://status/current-disruptions- システム全体の運行障害の概要
🏗️ アーキテクチャ
├── main.py # FastAPI application entry point
├── server_instance.py # Shared MCP server instance
├── mcp_server.py # Server setup and module registration
├── utils.py # Shared utilities and validation
├── config.py # Configuration and secret management
├── models.py # Pydantic data models
├── rate_limiter.py # Security: rate limiting
├── tools/ # MCP Tools
│ ├── station_tools.py # Station search and lookup
│ ├── timetable_tools.py # Timetables and disruptions
│ ├── parking_tools.py # Parking facilities
│ └── facility_tools.py # Accessibility services
├── resources/ # MCP Resources
│ └── travel_resources.py # Travel guides and references
└── prompts/ # MCP Prompts
└── travel_prompts.py # Interactive travel assistance
🎯 スマートな地理的フィルタリング
このサーバーは、API の効率と結果の関連性を最大化するため、インテリジェントな地域フィルタリングを実装しています。
座標から地域へのマッピング
- 州の検出:座標をドイツの州(Bayern、Hessen など)に対応付けます
- 境界地域の処理:境界付近の場所では隣接する州も含めます
- 都市ベースのフィルタリング:対象を絞った検索のため、該当する州内の主要都市を使用します
駅の検索機能の強化
- 地域による事前フィルタリング:
get_stations_by_position()はランダムに 1000 件を取得するのではなく、関連する連邦州から駅を取得します - フォールバック機能:
get_station_by_name()は API の searchstring を使用し、クライアント側のフォールバックも備えています - 距離の計算:実際の座標を使用して、正確なハバーサイン距離を計算します
S-Zentralen の地域フィルタリング
- 都市の照合:座標で特定した地域内の都市を基準に S-Zentralen をフィルタリングします
- 州と都市のマッピング:連邦州と主要都市の包括的なマッピング
- 関連性の高い結果:ドイツ全土のセンターではなく、地域のサービスセンターを返します
🔒 セキュリティ機能
- レート制限:クライアントごとに 1 分あたり 60 リクエスト、1 時間あたり 1000 リクエスト
- 入力の検証:包括的なサニタイズと検証
- セキュリティヘッダー:XSS、CSRF、コンテンツタイプを保護
- エラーのサニタイズ:機密情報を開示しません
- HTTPS のみ:安全なトランスポート層
- CORS 保護:制御されたクロスオリジンアクセス
🚀 デプロイ
Google Cloud Run(推奨)
以下の手順で、Deutsche Bahn MCP Server の独自インスタンスをデプロイできます。
前提条件
- Google Cloud CLI がインストールされ、設定されていること
- developers.deutschebahn.com から Deutsche Bahn API の認証情報を取得していること
基本的なデプロイ(Cloud Run のデフォルト URL)
-
シークレットを設定します:
# Create secrets for your DB API credentials echo "your_db_api_key" | gcloud secrets create DB_API_KEY --data-file=- echo "your_db_api_secret" | gcloud secrets create DB_API_SECRET --data-file=- -
サービスをデプロイします:
# Clone the repository git clone https://github.com/your-repo/deutsche-bahn-mcp-server cd deutsche-bahn-mcp-server # Deploy to Cloud Run gcloud run deploy deutschebahn-mcp-server \\ --source . \\ --region europe-west3 \\ --allow-unauthenticated \\ --port 8080 -
シークレットへのアクセス権限を付与します:
# Get your service account email from the deployment output gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \\ --member="serviceAccount:[email protected]" \\ --role="roles/secretmanager.secretAccessor" -
MCP サーバーを使用します: サーバーは、指定された Cloud Run の URL で利用できます。例:
https://deutschebahn-mcp-server-123456789.region.run.app/mcp
カスタムドメインでのデプロイ(本番環境)
カスタムドメインとセキュリティ強化を利用して本番環境で使用する場合:
-
上記の基本的なデプロイ手順 1~3 に従います
-
カスタムドメインとロードバランサーを設定します(Google Cloud Load Balancer のドキュメントを参照)
-
カスタムドメインを指定して再デプロイします:
gcloud run deploy deutschebahn-mcp-server \\ --source . \\ --region europe-west3 \\ --allow-unauthenticated \\ --port 8080 \\ --set-env-vars CUSTOM_DOMAIN=your-domain.com
Docker(ローカル開発)
# Build the image
docker build -t deutschebahn-mcp-server .
# Run locally with your API credentials
docker run -p 8080:8080 \\
-e DB_API_KEY=your_db_api_key \\
-e DB_API_SECRET=your_db_api_secret \\
deutschebahn-mcp-server
# Server available at http://localhost:8080/mcp
セキュリティに関する考慮事項
- デフォルトのデプロイ:Cloud Run に組み込まれた HTTPS を使用し、生成された URL からのアクセスを許可します
- カスタムドメイン:指定したドメインからのアクセスのみを許可し、Cloud Run の URL への直接アクセスをブロックします
- API 認証情報:必ず Google Secret Manager に保存し、環境変数やコードには保存しないでください
- レート制限:保護機能を内蔵しています(クライアントごとに 1 分あたり 60 リクエスト、1 時間あたり 1000 リクエスト)
デプロイ時のトラブルシューティング
Secret Manager のアクセスに関する問題:
# Verify secrets exist
gcloud secrets list
# Check service account permissions
gcloud projects get-iam-policy YOUR_PROJECT_ID \\
--flatten="bindings[].members" \\
--filter="bindings.members:*gserviceaccount.com"
接続に関する問題:
# Test your deployed service
curl https://your-service-url/health
# Check logs
gcloud run logs read --service=deutschebahn-mcp-server --region=your-region
📖 使用例
地理情報を活用した駅のスマート検索
# Ask Claude: "Find train stations near Munich city center"
# Uses: get_stations_by_position(48.1351, 11.5820)
# → Smart regional filtering returns relevant Bavarian stations
駅の検索機能の強化
# Ask Claude: "Find train stations in Frankfurt"
# Uses: get_station_by_name("Frankfurt")
# → API searchstring parameter with intelligent fallback
地域のサービスセンター
# Ask Claude: "Find mobility service centers near Berlin"
# Uses: get_szentralen_by_location(52.5200, 13.4050)
# → Returns Berlin/Brandenburg S-Zentralen using city filtering
リアルタイムの運行障害
# Ask Claude: "Are there any delays at Berlin Hauptbahnhof?"
# Uses: recent_timetable_changes prompt
正確な駐車場検索
# Ask Claude: "Find parking at Frankfurt Hauptbahnhof"
# Uses: search_parking_facilities("Frankfurt Hauptbahnhof")
# → Uses real API stationName parameter for accurate results
🧪 開発
テストの実行
# Install development dependencies
pip install -r requirements-dev.txt
# Run tests
pytest tests/
# Run with coverage
pytest --cov=. tests/
コード品質
# Format code
black .
# Lint code
flake8 .
# Type checking
mypy .
MCP Inspector を使用したローカルテスト
# Install MCP Inspector
npm install -g @modelcontextprotocol/inspector
# Inspect local server
mcp-inspector http://localhost:8080/mcp
🤝 貢献
コミュニティからの貢献を歓迎します。詳しくは、CONTRIBUTING.md のガイドをご覧ください。
貢献者向けクイックスタート
- リポジトリをフォークします
- フィーチャーブランチを作成します:
git checkout -b feature-name - テストを追加しながら変更を加えます
- 開発ガイドラインに従います
- プルリクエストを送信します
クレジット表記のお願い
この成果物、コード、またはアイデアをご自身のプロジェクトで使用する場合は、適切なクレジット表記をお願いします:
Based on Deutsche Bahn MCP Server by Paul von Berg
https://github.com/PaulvonBerg/db-mcp-server
ありがとうございます!
⚙️ 設定
サーバーは環境変数で設定します。ローカル開発では、.env.example テンプレートをコピーして、ルートディレクトリに .env ファイルを作成します。クラウドへのデプロイでは、これらの値を Google Secret Manager またはサービス上で直接設定します。
混乱を避けるため、各認証情報の設定先については .env.example ファイル内のコメントを参照してください。
環境変数
| 変数 | 説明 | ソース/備考 |
|---|---|---|
DB_API_KEY | Deutsche Bahn API の クライアント ID | 必須。.env(ローカル)または DB_API_KEY シークレット(クラウド)に設定します。 |
DB_API_SECRET | Deutsche Bahn API の キー(シークレット) | 必須。.env(ローカル)または DB_API_SECRET シークレット(クラウド)に設定します。 |
GCP_PROJECT_ID | Google Cloud プロジェクト ID | クラウドへのデプロイに必要です。未設定の場合は自動検出されます。 |
CUSTOM_DOMAIN | デプロイしたサービスのカスタムドメイン | 任意です。クラウドへのデプロイ時のセキュリティを強化します。 |
CLOUD_RUN_URL | Cloud Run サービスのバックエンド URL | 任意です。Cloud Run では自動検出されます。必要な場合のみ上書きしてください。 |
LOG_LEVEL | ログレベル(DEBUG、INFO、WARNING、ERROR) | 任意です。デフォルトは INFO です。 |
PORT | サーバーがリッスンするポート | 任意です。デフォルトは 8080 です。 |
📚 API リファレンス
使用する Deutsche Bahn API
- StaDa API v2:駅の基本データ
- Timetables API v1:時刻表および運行障害のデータ
- Parking Information API v2:DB Bahnpark の施設
- FaSta API v2:施設の状態(エレベーター、エスカレーター)
🐛 トラブルシューティング
よくある問題
API 認証エラー
- DB API の認証情報が正しいことを確認してください
- API キーの権限とクォータを確認してください
接続の問題
- サーバーが正しいポートで実行されていることを確認してください
- ファイアウォールの設定で接続が許可されていることを確認してください
- Cloud Run サービスの権限を確認してください
MCP クライアントの接続
- MCP クライアントの設定構文を確認してください
- サーバー URL にアクセスできることを確認してください
- 適切なトランスポートモード(http-only)が設定されていることを確認してください
デバッグ
デバッグログを有効にします:
export LOG_LEVEL=DEBUG
python main.py
📄 ライセンス
このプロジェクトは Creative Commons Attribution 4.0 International License(CC BY 4.0) のライセンスに基づいています。詳細は LICENSE ファイルを参照してください。
表示要件
このソフトウェアまたはデータを使用する際は、以下に適切なクレジットを表示してください:
- 基盤となる API および鉄道データについては Deutsche Bahn AG(CC BY 4.0)
- この MCP サーバーの実装への 貢献者
Deutsche Bahn API の利用条件
このソフトウェアは、異なるライセンス条件のもとで Deutsche Bahn の公開 API にアクセスします。
- ほとんどの API:CC BY 4.0(駅データ、時刻表、アクセシビリティサービス)
- Parking API:「Datenlizenz Deutschland – Namensnennung – Version 2.0」(dl-de/by-2-0)
重要:駐車場情報のデータには追加の制限があります。
- コンテンツの変更は許可されていません
- 技術的な形式の変更は許可されています
- 指定のクレジット表記が必要です:「Parking Information Daten der DB BahnPark – API über den DB API Marketplace」
ユーザーは developers.deutschebahn.com に記載された Deutsche Bahn の API 利用規約を遵守する必要があります。
注記:このソフトウェアは Deutsche Bahn AG とは公式に関係していません。
⚠️ サービスに関する免責事項
[SERVER DECOMISSIONED - HOST YOUR OWN DEPLOYMENT AS DESCRIBED] のライブサーバーをご利用の方へ:
このサービスは、独立してホストされているコミュニティ提供のサービスです。以下の点にご注意ください。
- 稼働時間の保証はありません - 予告なくサービスを利用できなくなる場合があります
- レート制限が適用されます - クライアントあたり毎分60リクエスト、毎時1000リクエスト
- データの正確性 - 情報はDeutsche BahnのAPIからそのまま提供されます
- 責任は負いません - 情報提供のみを目的とし、ご自身の責任でご利用ください
- サービスの監視 - 運用上の目的で利用状況が記録される場合があります
- 利用規約の遵守 - ユーザーはDeutsche Bahn APIの利用規約を遵守する必要があります
本番環境での利用には、上記のデプロイ手順に従って独自のインスタンスをホストすることをご検討ください。
ホスティングプロバイダー:このサービスは独立した開発者によって提供されており、Deutsche Bahn AGとは提携していません
🙏 謝辞
- 公開APIを提供しているDeutsche Bahn
- Model Context Protocolを提供しているAnthropic
- Python向けMCP実装を提供しているFastMCPライブラリ
ライブサーバー:[SERVER DECOMISSIONED - HOST YOUR OWN DEPLOYMENT AS DESCRIBED]
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。