Metro MCP
🚇 Metro MCP
米国交通システム(DCメトロ&NYC地下鉄)向けModel Context Protocolサーバー
複数の米国交通システムをサポートする統合リモートModel Context Protocol(MCP)サーバーです。現在、ワシントンDCメトロ(WMATA)とニューヨーク市地下鉄(MTA)をサポートしています。Claude Desktop、Cursor、Codex、およびStreamable HTTP MCPサーバーをサポートする任意のクライアントとのシームレスな統合を目的として構築されています。
クイックリンク: クイックスタート • できること • Transit Board • デプロイ • クライアント統合
できること
Claude DesktopまたはMCP互換クライアントで、DCメトロまたはNYC地下鉄について自然言語で質問できます。
🚆 リアルタイム交通情報
ワシントンDC:
「Dupont Circleの次のRed Lineの電車はいつ来ますか?」
「利用可能なバス路線は何ですか?」
「Dupont Circleの近くのバス停を探してください」
「今、30Nバスはどこにいますか?」
「停留所1001195の次のバスはいつ来ますか?」
「メトロシステムで現在運行中のすべての電車を表示してください」
「今、Blue Lineに遅延はありますか?」
「Union Stationのエレベーターはすべて稼働していますか?」
ニューヨーク市:
「Times Squareの次の1番線の電車はいつ来ますか?」
「A/C線に遅延はありますか?」
「Grand Centralに到着する電車は何ですか?」
「Aトレインとは何ですか、どこへ行きますか?」
「Times Squareから徒歩で行ける近くの駅はどこですか?」
「Times Squareのホーム間の徒歩移動時間はどのくらいですか?」
🗺️ 駅情報とナビゲーション
ワシントンDC:
「Smithsonianメトロ駅はどこですか?」
「Green Lineのすべての駅を表示してください」
ニューヨーク市:
「Union Square駅はどこですか?」
「NYC地下鉄の全496駅を表示してください」
「Times Squareに接続する駅はどれですか?」
「急行と各駅停車の違いを説明してください」
♿ アクセシビリティ
ワシントンDC(エレベーター停止):
「ここからNational Airportまでの間にエレベーターの停止はありますか?」
「現在、エレベーターが稼働しているDCメトロの駅はどこですか?」
🔔 サービス監視
両都市:
「今、NYCで交通遅延はありますか?」
「DCメトロのOrange Lineは正常に運行していますか?」
「DCメトロとNYC地下鉄のサービス品質を比較してください」
📊 システム情報
ワシントンDC:
座標付きの全メトロ駅の完全なリスト
6つのメトロ線(Red、Blue、Orange、Silver、Green、Yellow)すべてに関する情報
ニューヨーク市:
完全なカバレッジ: 座標付きのNYC地下鉄全496駅
乗り換え情報: 接続駅間の徒歩時間(乗り換えのある87駅)
路線説明: 全29路線の詳細な運行パターン(急行と各駅停車、運行時間)
プラットフォームの明確さ: 方向別プラットフォームの説明(例:「127N」= Times Squareの北行き)
Related MCP server: marta-mcp
クイックスタート
公開サーバーの利用
最も早い開始方法は、ホストされているインスタンスを使用することです。
MCPクライアントを開く
このURLを追加:
https://metro-mcp.anuragd.me/mcp「接続」をクリックし、GitHubで認証する
DCメトロまたはNYC地下鉄について質問を始める
自分でデプロイする
独自のインスタンスを実行したいですか? デプロイセクションを参照してください。
デプロイ
前提条件
WMATA APIキー(必須)
Cloudflareアカウント(無料枠で動作)
パッケージ管理用のBun
WranglerとWorkerd Vitestプール用のNode.js(Bunは唯一のパッケージマネージャーおよびロックファイル所有者のまま)
GitHub OAuthアプリ(認証用)
環境設定
bun.lockが記録するものを正確にインストールします。
bun install --frozen-lockfileローカル開発では、コールバックが正確にhttp://localhost:8787/callbackである専用のGitHub OAuthアプリを作成します。次に、正規の.dev.vars.exampleテンプレートをコピーし、すべてのreplace-with-...プレースホルダーを置き換えて、Wranglerを起動します。
cp .dev.vars.example .dev.vars
bun run devテンプレートのhttp://localhost:8787オリジン、localhostホスト/オリジン許可リスト、コールバック、およびENVIRONMENT=developmentの値を一緒に保持します。Wranglerのデフォルトのローカルモードでは、設定されたOAUTH_KVバインディングは.wranglerの下のローカル非本番ストレージを使用します。デプロイされた本番またはプレビューの名前空間を読み書きしません。通常のローカル開発では--remoteを追加しないでください。
デプロイされた各環境に対して1つのOAuth Provider名前空間を作成し、そのIDを対応するOAUTH_KVバインディングに配置します。
bunx wrangler kv namespace create OAUTH_KV
bunx wrangler kv namespace create OAUTH_KV_preview本番とプレビューでは、異なるGitHub OAuthアプリも使用する必要があります。各コールバックを${MCP_PUBLIC_ORIGIN}/callbackとして設定します。本番アプリまたはOAuth KVをプレビューに再利用しないでください。各環境は以下を設定します。
MCP_PUBLIC_ORIGIN、MCP_ALLOWED_HOSTNAMES、およびMCP_ALLOWED_ORIGIN_HOSTNAMESOAUTH_REDIRECT_URIと環境の公開GitHubGITHUB_CLIENT_IDENVIRONMENT(production、preview、またはdevelopment)OAUTH_KV(環境専用の名前空間を指す)
本番シークレットを対話的に設定します。MCP_REQUEST_STATE_KEYは、署名付きMRTR状態にのみ使用される安定した環境固有の32バイト以上のキーです。JWT_SECRETは、レガシー/mcpオーディエンスブリッジのために一時的に残ります。
bunx wrangler secret put MCP_REQUEST_STATE_KEY
bunx wrangler secret put GITHUB_CLIENT_SECRET
bunx wrangler secret put WMATA_API_KEY
bunx wrangler secret put JWT_SECRETプレビュー用に同じ4つのシークレット名を独立して設定します。名前付きWrangler環境は本番シークレットを継承しません。
bunx wrangler secret put MCP_REQUEST_STATE_KEY --env preview
bunx wrangler secret put GITHUB_CLIENT_SECRET --env preview
bunx wrangler secret put WMATA_API_KEY --env preview
bunx wrangler secret put JWT_SECRET --env previewWranglerにはnodejs_compatとglobal_fetch_strictly_publicの両方を含める必要があります。承認されたデプロイの前に両方の形状を検証します。
bunx wrangler deploy --dry-run --outdir /tmp/metro-mcp-production
bunx wrangler deploy --dry-run --env preview --outdir /tmp/metro-mcp-previewMCPクライアント統合
Claude
Claude Codeで正規のStreamable HTTPエンドポイントを使用します。
claude mcp add --transport http metro-mcp https://metro-mcp.anuragd.me/mcp次に/mcpを開き、metro-mcpを選択して、GitHubログインと同意を完了します。Claude.ai/Desktopユーザーは、プランとワークスペースポリシーで許可されている場合、同じURLをリモートカスタムコネクタとして追加できます。
Codex
codex mcp add metro-mcp --url https://metro-mcp.anuragd.me/mcp
codex mcp login metro-mcp --scopes transit:readチェックインされたmcp-config.jsonは、同等の汎用リモートHTTP構成を示しています。アクセストークンとリフレッシュトークンはクライアントの資格情報ストアに残ります。プロジェクト構成に貼り付けないでください。
トランスポート互換性
MCP
2026-07-28リクエストはステートレスであり、initializeを必要としません。通常のツール、リソース、プロンプトは、MCP 2025ステートレスクライアントでも引き続き利用できます。
POST /sseおよびOPTIONS /sseは、認証前に正規の/mcpに書き換えられるURLエイリアスです。レガシーHTTP+SSEは削除されました。
/sseまたは/mcpでのGETおよびDELETE、セッションメッセージURL、および/sse/は405を返します。OAuthオーディエンスとディスカバリは常に
https://metro-mcp.anuragd.me/mcpを使用します。/sseはOAuthリソースになることはありません。
OAuthエンドポイント
Workers OAuth Providerは、PKCEを備えたOAuth 2.1を実装しています。
ディスカバリ:
/.well-known/oauth-authorization-server登録: 最初にCIMD、一時的なDynamic Client Registrationフォールバックとして
/register認可:
/authorize(GitHub OAuth統合)トークン:
/token(PKCE検証付き認可コード交換)コールバック:
/callback(GitHub OAuthコールバック)
クライアントには明示的なtransit:read同意画面が表示されます。許可は正規の/mcpリソースにバインドされます。アクセストークンは最大60分、リフレッシュトークンは最大30日間有効で、使用時にローテーションされます。ベアラートークンはAuthorizationヘッダーでのみ受け入れられます。DCRフォールバックは2027-06-30に廃止されます。
バージョン5.0では、オーディエンスのないトークン、/sseにバインドされたトークン、および古いDCRストアに登録されたクライアントの再認証が必要です。/mcpにバインドされた既存の互換性のあるレガシーJWTは、埋め込まれた有効期限と2026-11-30T00:00:00Zのいずれか早い方で動作を停止します。
サポートされている都市
サーバーは現在、次の交通システムをサポートしています。
都市 | システム | リアルタイムデータ | サービスアラート | エレベーター状況 |
ワシントンDC | WMATA(メトロ) | ✅ | ✅ | ✅ |
ニューヨーク市 | MTA(地下鉄) | ✅ | ✅ | ❌ |
利用可能なMCPツール
サーバーはMCPプロトコルを通じて次のツールを公開します。
ツール | 説明 | サポートされる都市 |
| 駅のリアルタイムの列車到着予測を取得します | DC、NYC |
| 名前またはコードで駅を検索します | DC、NYC |
| 特定の路線のすべての駅を取得します | DC、NYC |
| 現在のサービス中断と勧告を確認します | DC、NYC |
| 座標付きのすべての駅の完全なリストを取得します | DC、NYC |
| 近くの駅間の乗り換え接続と徒歩時間を取得します | NYCのみ |
| 詳細な路線情報(急行/各駅停車、運行パターン、時間)を取得します | NYCのみ |
| エレベーターとエスカレーターの停止を見つけます | DCのみ |
| リアルタイムのバス到着予測を取得します(7桁の停留所ID) | DCのみ |
| 利用可能なすべてのバス路線のリストを取得します | DCのみ |
| 場所でバス停を検索するか、すべての停留所を取得します | DCのみ |
| すべてのバスの現在位置を取得します(オプションで路線でフィルタリング) | DCのみ |
| システム上のすべての列車の現在位置を取得します | DCのみ |
合計: 13のMCPツール(11のコア+2つの新しいNYC固有ツール)
MCPアプリ: Transit Board
上記の13のツールはすべて、自己完結型のTransit Board MCPアプリを参照しています。Apps対応ホストは、各結果を専用の到着、サービス、駅/ネットワーク、路線、または車両ビューとしてレンダリングできます。Appsをサポートしないホストは、同じcontentテキストフォールバックとstructuredContentコントラクトを受け取ります。この拡張機能はツールを追加したり、交通機関の呼び出しを変更したりしません。
コンパイルされたアプリはpublic/apps/transit-board.htmlにコミットされています。この公開アセットにはアプリケーションコードのみが含まれています。交通結果、ID、トークン、シークレット、構成値は埋め込まれていません。サンドボックス化されたビューは、ブラウザのネットワークリクエストを直接行わず、ブラウザストレージを使用せず、ブラウザの権限を要求しません。更新は唯一のサーバーインタラクションであり、ホストを介して元の許可されたツールに元の引数で送信されます。
決定論的なローカルApps受け入れスイートをビルドして実行します。
bun run build:apps
bun run test:apps正確なホスト境界、13すべてのビューマッピング、Chromiumカバレッジ、Appsレンダリングとフォールバッククライアント受け入れの違いについては、docs/mcp-apps-verification.mdを参照してください。このリリースでは、CodexはフォールバッククライアントとしてMCPディスカバリと通常のツール結果を検証します。CodexでのインラインAppsレンダリングは主張されていません。
技術詳細
MCPプロトコル
バージョン: MCP
2026-07-28、通常のMCP 2025ステートレス互換性を備えるトランスポート: リクエストごとに新しいSDK v2サーバーを使用するステートレスStreamable HTTP。JSONおよびリクエストスコープのSSEレスポンスをサポート。プロトコルセッション、再開可能性、サーバープッシュはアドバタイズされない。
認証: Cloudflare Workers OAuth Providerが、ディスカバリ、CIMD/DCR検証、PKCE、RFC 9207発行者識別子、RFC 8707リソースバインディング、RFC 9728保護リソースメタデータ、リフレッシュローテーション、失効、Providerトークンストレージを管理する。
ツール結果の形状: すべてのツールは、後方互換性のためにレガシーな
content[0].text(シリアライズされたJSON)と並んで、structuredContent(outputSchemaに一致する型付きオブジェクト)を出力する。ツールアノテーション: すべてのツールは
readOnlyHint、idempotentHint、openWorldHintを宣言し、クライアントが安全なアクションのアフォーダンスをレンダリングできるようにする。公開される機能:
tools— 13のトランジットクエリツール(DC + NYC)resources— 3つのtransit://URIテンプレート(stations、routes、incidents)prompts— 3つの定型テンプレート(service-briefing、commute-planner、accessibility-check)MRTR入力 — 最新クライアントは曖昧な駅に対して
input_requiredを受け取る。MCP 2025クライアントは正確な駅IDを含む決定的な再試行ガイダンスを受け取る。進捗通知: クライアントが
params._meta.progressToken経由でオプトインした場合、get_all_stationsに対して発行される。
トランジットAPI
WMATA(DCメトロ):
サーバーは公式のWMATA REST APIとインターフェースする。詳細はWMATAの開発者ドキュメントを参照:
駅予測: リアルタイムの列車到着情報
駅情報: 駅名、コード、位置
インシデント: 運行障害と注意報
エレベーター/エスカレーターの停止: アクセシビリティ情報
MTA(NYC地下鉄):
サーバーはMTAのGTFS-Realtimeフィードを使用する。公開APIエンドポイント(APIキー不要):
リアルタイムフィード: 30秒間隔で更新されるProtocol Buffers形式
8つの個別フィード: すべての地下鉄路線(1-7、A/C/E、B/D/F/Mなど)をカバー
NYCT拡張: 列車ID、軌道割り当て、方向情報
サービスアラート: GTFS-Realtimeアラートエンティティに埋め込まれる
ホスティング
プラットフォーム: Cloudflare Workers
静的アセット:
public/はCloudflare Workers Static Assetsを通じてデプロイされ、env.ASSETSとしてバインドされる。WorkerはAPI/OAuth/MCPルートを先に処理し、ランディングページ、ドキュメント、画像、アイコンのリクエストをアセットバインディングに委任する。ストレージ:
環境固有のCloudflare KV
OAUTH_KV— OAuth Providerのグラント、トークン、登録情報アクティブなプロトコルセッションストレージなし。旧
MetroMcpAgentエクスポートと元のv1マイグレーションは、ロールバックのためだけに非アクティブのまま残されている。
ランタイム: グローバルエッジデプロイを備えたV8アイソレート
ソース構造
コードベースは、関心事の明確な分離を備えた多都市トランジットサポート向けに構成されている:
src/
├── index.ts # Outer route normalization and Provider composition
├── public-handler.ts # /info, OAuth UI, and static assets
├── route-normalizer.ts # Exact /mcp admission and /sse URL alias
├── oauth/ # Provider configuration, GitHub consent, legacy bridge
├── mcp/ # Stateless server factory, tools, resources, and prompts
├── mcp-agent.ts # Inactive 4.x rollback class only
└── transit/ # WMATA and MTA clients with request cancellation主要なアーキテクチャ上の決定:
トランジット抽象化: 共通の
TransitAPIClientインターフェースにより、新しい都市(BART、MBTAなど)の追加が容易になる都市ルーティング: 単一のサーバーがMCPツール呼び出しの
cityパラメータを通じてすべての都市を処理する正規化されたレスポンス: すべてのトランジットクライアントは標準化された
TransitStation、TransitPrediction、TransitIncident型を返す拡張性: 新しい都市の追加は抽象クライアントクラスの実装のみで済む
検証とロールバック
bun run testで完全なローカルスイートを実行する。認証済みコンフォーマンスランナーは、プロセス環境内のオペレーター取得による短期間のProviderアクセストークンを必要とする。トークンを保存したり、コマンド引数に含めたりすることはない:
export MCP_CONFORMANCE_TARGET_URL=https://metro-mcp-preview.anuragd.me/mcp
export MCP_CONFORMANCE_ALLOW_REMOTE=1
read -rsp 'Short-lived MCP token: ' MCP_CONFORMANCE_TOKEN && export MCP_CONFORMANCE_TOKEN
./scripts/run-conformance.sh
unset MCP_CONFORMANCE_TOKENコアプロトコル受理記録についてはdocs/mcp-2026-verification.mdを、Transit Boardブラウザ境界についてはdocs/mcp-apps-verification.mdを参照。
ロールバックは以前のWorkerバージョンとその以前のバインディングを復元する。安定化期間中は、元のMetroMcpAgent Durable Object名前空間を削除したり、削除マイグレーションを追加したりしないこと。プロトコルセッション状態は使い捨て可能だが、クラスと元のv1マイグレーションを保持することでロールバックが可能になる。
Transit Boardのロールバックは、Appsメタデータ/リソース、ブラウザソース、ビルド依存関係を削除し、トランジットプロバイダー、OAuth、ルーティング、バインディング、バージョンは変更しない。
コントリビューション
コントリビューションを歓迎します!以下のことが可能です:
GitHub Issuesでバグを報告したり機能をリクエストしたりする
改善を含むプルリクエストを送信する
MCP実装に関するフィードバックを共有する
ライセンス
MITライセンス — 詳細はLICENSEファイルを参照。
ワシントンDCメトロコミュニティへの❤️を込めて作られました
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceMCP server that provides tools for querying live transit data (stops, departures, routes, vehicles, alerts) from any WP GTFS Pro site, enabling AI assistants to answer rider questions.14GPL 2.0
- AlicenseAqualityAmaintenanceMCP server for Atlanta MARTA real-time transit data, enabling queries about train arrivals and bus positions via natural language.4MIT
- AlicenseNot gradedqualityBmaintenanceMCP server for Japanese public transit journey planning with interactive map UI, enabling station search, route planning, and departure lookups via natural language.MIT
- FlicenseNot gradedqualityCmaintenanceAn MCP server that provides real-time Hong Kong public transport ETA information.
Related MCP Connectors
SEPTA MCP — Philadelphia SEPTA real-time transit (www3.septa.org/api, keyless)
Amtrak MCP — live Amtrak train tracking via the community Amtraker API
MBTA MCP — Boston real-time transit via the MBTA v3 API (api-v3.mbta.com)
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/Aarekaz/metro-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server