Skip to main content
Glama

🚇 Metro MCP

米国交通システム(DCメトロ&NYC地下鉄)向けModel Context Protocolサーバー

MCP Metro MCP Cloudflare Workers OAuth 2.1 License

複数の米国交通システムをサポートする統合リモート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

クイックスタート

公開サーバーの利用

最も早い開始方法は、ホストされているインスタンスを使用することです。

  1. MCPクライアントを開く

  2. このURLを追加: https://metro-mcp.anuragd.me/mcp

  3. 「接続」をクリックし、GitHubで認証する

  4. DCメトロまたはNYC地下鉄について質問を始める

自分でデプロイする

独自のインスタンスを実行したいですか? デプロイセクションを参照してください。


デプロイ

前提条件

環境設定

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_ORIGINMCP_ALLOWED_HOSTNAMES、およびMCP_ALLOWED_ORIGIN_HOSTNAMES

  • OAUTH_REDIRECT_URIと環境の公開GitHub GITHUB_CLIENT_ID

  • ENVIRONMENTproductionpreview、または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 preview

Wranglerにはnodejs_compatglobal_fetch_strictly_publicの両方を含める必要があります。承認されたデプロイの前に両方の形状を検証します。

bunx wrangler deploy --dry-run --outdir /tmp/metro-mcp-production
bunx wrangler deploy --dry-run --env preview --outdir /tmp/metro-mcp-preview

MCPクライアント統合

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プロトコルを通じて次のツールを公開します。

ツール

説明

サポートされる都市

get_station_predictions

駅のリアルタイムの列車到着予測を取得します

DC、NYC

search_stations

名前またはコードで駅を検索します

DC、NYC

get_stations_by_line

特定の路線のすべての駅を取得します

DC、NYC

get_incidents

現在のサービス中断と勧告を確認します

DC、NYC

get_all_stations

座標付きのすべての駅の完全なリストを取得します

DC、NYC

get_station_transfers 🆕

近くの駅間の乗り換え接続と徒歩時間を取得します

NYCのみ

get_route_info 🆕

詳細な路線情報(急行/各駅停車、運行パターン、時間)を取得します

NYCのみ

get_elevator_incidents

エレベーターとエスカレーターの停止を見つけます

DCのみ

get_bus_predictions

リアルタイムのバス到着予測を取得します(7桁の停留所ID)

DCのみ

get_bus_routes

利用可能なすべてのバス路線のリストを取得します

DCのみ

get_bus_stops

場所でバス停を検索するか、すべての停留所を取得します

DCのみ

get_bus_positions

すべてのバスの現在位置を取得します(オプションで路線でフィルタリング)

DCのみ

get_train_positions

システム上のすべての列車の現在位置を取得します

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)と並んで、structuredContentoutputSchemaに一致する型付きオブジェクト)を出力する。

  • ツールアノテーション: すべてのツールはreadOnlyHintidempotentHintopenWorldHintを宣言し、クライアントが安全なアクションのアフォーダンスをレンダリングできるようにする。

  • 公開される機能:

    • 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パラメータを通じてすべての都市を処理する

  • 正規化されたレスポンス: すべてのトランジットクライアントは標準化されたTransitStationTransitPredictionTransitIncident型を返す

  • 拡張性: 新しい都市の追加は抽象クライアントクラスの実装のみで済む

検証とロールバック

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メトロコミュニティへの❤️を込めて作られました

A
license - permissive license
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 Servers

View all related MCP servers

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)

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/Aarekaz/metro-mcp'

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