DMV Transit について
DMV Transitは、ワシントンD.C.、メリーランド州、バージニア州の独立系交通アシスタントで、特に初めて利用する人を対象としています。各機関の最新データを使い、路線、乗り換え、時刻、運賃、運行情報を出典付きで案内します。
主な機能
- 01地域の路線・時刻検索
- 02利用可能な場合のリアルタイム発車案内
- 03区間ごとの運賃と支払い方法
- 04時刻表と併記される運行情報
- 05出典の提示と古いデータの表示
活用シーン
- 01DMV地域の公共交通ルート計画
- 02指定時刻に乗り換え可能か確認
- 03各区間の支払い方法の確認
- 04出発前の運行障害の確認
MCP 対応
MCPサーバーは、交通データと経路計画の17個のツールをMCPクライアントに公開します。回答は出典付きの保存データに基づき、ウェブアプリの個人向け旅行計画ツールはMCPでは利用できません。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://dmvtransit.com/mcpclaude mcp add --transport http com-dmvtransit-transit https://dmvtransit.com/mcp{"mcpServers":{"com-dmvtransit-transit":{"type":"http","url":"https://dmvtransit.com/mcp"}}}Cursor で開く{"servers":{"com-dmvtransit-transit":{"type":"http","url":"https://dmvtransit.com/mcp"}}}VS Code で開く{"mcpServers":{"com-dmvtransit-transit":{"type":"http","url":"https://dmvtransit.com/mcp"}}}{"mcpServers":{"com-dmvtransit-transit":{"serverUrl":"https://dmvtransit.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
DMV 地域交通アシスタント(transit-mcp)
公共交通機関を使ってワシントン D.C./メリーランド州/バージニア州の地域を移動できるよう、特に初めて利用する方を支援する、平易な言葉で案内するアシスタントです。WMATA(Metrorail + Metrobus)、バージニア州の交通機関(VRE、Fairfax Connector、ART、DASH、CUE、Loudoun、OmniRide、Virginia Breeze)、メリーランド州の交通機関(MTA bus、commuter bus、Metro SubwayLink、Light RailLink、MARC、Annapolis Transit、Harbor Connector、Potomac Valley)、Dulles Airport のシャトル、都市間交通サービス(Amtrak、FlixBus などの都市間バス)から取得した、最新の出典付きデータに基づいて回答します。実際の移動の要点となる、各交通機関がどこで接続するか、接続が何曜日の何時に利用できるか、各区間の運賃の支払い方法に重点を置いています。
ホームページは、地図上で出発時刻を指定せずに今すぐ利用できる経路を探すプランナーです。目的地を入力(または現在地を使用)すると、今後 3 時間以内に到着できるおすすめの経路をすべて表示します。乗り換えなしの経路を優先し、所要時間が短縮される場合のみ乗り換えを 1 回含め、待ち時間が 10 分以下の乗り換えを優先します(よりよい経路がない場合に限り、待ち時間が長い経路も提示します)。交通機関が公開している場合は、リアルタイムの発車時刻も表示します。各交通機関の最寄りの停留所(約 1 マイル以内)を使い、各経路の徒歩距離も表示します。アシスタントとのチャットは、地図の横にあるドロワーに表示されます。
非公式です。 これは独立したプロジェクトです。WMATA やその他の交通機関とは提携、推奨、後援、運営のいずれの関係もありません。交通機関の名称は、各サービスを示す目的でのみ使用しています。公式情報については、各交通機関に直接お問い合わせください。
回答は保存済みのデータに基づいています。アシスタントは回答する前にツールを呼び出す必要があり、モデルの一般知識で不足情報を補わないよう指示されています。また、推測する代わりに「その情報はありません」と回答します。(Claude API では temperature の設定が受け付けられなくなったため、代わりにデータ、ツール、プロンプトを使って正確性を確保しています。詳しくは chat/agent.py をご覧ください。)
クイックスタート(Windows)
- Python 3.11 以降をインストールします(Add python.exe to PATH にチェックを入れます)。
start.batをダブルクリックします。- 初回は、必要な設定を行い、設定ファイルを作成してメモ帳で開きます。
ANTHROPIC_API_KEY(console.anthropic.com)とWMATA_API_KEY(developer.wmata.com で無料取得)を貼り付けて保存し、もう一度start.batをダブルクリックします。その後、交通機関のデータをダウンロードします(23 件すべてのフィードで 15~20 分かかります)。 - 地図プランナーを使う場合は、
TRANSITLAND_API_KEY(transit.land、Explorer プラン)とGOOGLE_GEOCODING_API_KEY(Google Geocoding API。 geocode.maps.co のGEOCODE_API_KEYも使用できます)も追加し、地域地図を一度ダウンロードします (約 600 MB。ダウンロードしない場合、地図には単色の背景が表示されます)。powershell -ExecutionPolicy Bypass -File deploy\map\fetch-basemap.ps1 - 以降は、数秒以内にウェブブラウザーでアシスタントが開きます。
- 初回は、必要な設定を行い、設定ファイルを作成してメモ帳で開きます。
- 使用中は黒いウィンドウを開いたままにします。終了するにはウィンドウを閉じます。
| ファイル | 機能 |
|---|---|
start.bat | 必要に応じてセットアップし、アシスタントを起動してブラウザーを開きます |
refresh-data.bat | 最新の運行情報、お知らせ、運行スケジュール、運賃、利用者向け情報をダウンロードします(毎週実行してください) |
check-setup.bat | キー、データ、交通機関、経路プランナーを平易な言葉で確認します |
フィードをダウンロードできない場合は、手動で追加できます。feeds/README.md をご覧ください。
デプロイ(公開ウェブサイト)
同じアプリは公開サイト — https://dmvtransit.com — として、Docker を使用したオハイオ州(us-east-2)の小規模な AWS
Lightsail サーバー 1 台で動作します。このサーバーは deploy/lightsail/ 内のスクリプトで作成・管理されます。docker compose up -d --build を実行すると、ウェブサイト、
自動 HTTPS(Caddy)、データを最新の状態に保つスケジューラーが起動します。公開モードでは、訪問者ごとのレート制限、サイト全体の日次上限、わかりやすいエラーメッセージが追加されます。
手順ガイド:deploy/README.md。
アーキテクチャ
それぞれ単独で置き換え可能な 3 つのレイヤーです(詳細は docs/EXTENDING.md を参照してください)。
agencies/*.toml ──► ingest source plugins ──► SQLite (FTS5) + data/gtfs/*.zip
one file per gtfs · web_pages · │
agency wmata_api · (yours) ▼
retrieval + scheduling engine
heuristic | python | process | http
│ TripRequest / TripPlan
▼
MCP server (17 tools) ──► web chat (Claude)
└─► any MCP client
| レイヤー | 拡張方法 | 場所 |
|---|---|---|
| 交通機関 | TOML ファイルを配置するだけです。コードは不要です | agencies/、組み込み定義は src/transit_mcp/agencies/definitions/ |
| データソース | @register_source プラグインまたはエントリーポイント | src/transit_mcp/ingest/sources/ |
| 経路検索 | バージョン管理された JSON コントラクトのもとで、Python、Node(stdio)、または HTTP を使ってエンジンを実装します | src/transit_mcp/planning/、テンプレートは engines/ |
保存された各レコードには、ソース URL、取得時刻、コンテンツハッシュが保持されるため、回答には出典が示され、古いデータにはその旨が表示されます。
回答の種類ごとの情報源
| 回答 | 情報源 |
|---|---|
| 路線、停留所、時刻表、運行日、運行時間(Metrorail と Metrobus を含む) | Transitland から取得する各交通機関の GTFS フィード |
| 運賃、支払い方法、乗車方法 | 各交通機関の公式 運賃・乗客向けウェブページ と、WMATA の駅間運賃データ(wmata.com/pay.html と照合済み) |
| 運行障害 | WMATA のリアルタイム障害情報、各交通機関の GTFS-realtime アラート、運行アラート・運行変更のウェブページ。GTFS 時刻表の代わりではなく、常に時刻表と併せて表示されます |
| リアルタイムの発車時刻(地図プランナー) | Transitland が掲載する URL にある、各交通機関独自の GTFS-realtime TripUpdates フィード(WMATA の鉄道・バス、VRE、Fairfax Connector、MARC、ART)。その他は Transitland の発車時刻 API を利用します。利用できない場合は、時刻表に基づく時刻を「Scheduled」と表示します |
| 住所から地図上の地点への変換 | 入力中の候補には Google Places Autocomplete を使用します(場所を選択すると、その所在地を取得するために Place Details を使用)。それ以外の場合は Google Geocoding API を使用し、Google キーがない場合は geocode.maps.co を使用します。いずれもサーバーから呼び出されます(キーがブラウザーに渡ることはありません) |
| 地図 | セルフホストの Protomaps 抽出データに含まれる OpenStreetMap のデータを、MapLibre GL で描画します |
ウェブページを路線や時刻表の情報源として使用することはありません。各フィードは Transitland の公開レジストリに記載された公式 URL からダウンロードされるため、API クォータは使用されません。取得できない場合は Transitland がホストするコピーをフォールバックとして使用し、フィードごとに API 呼び出しが 1 回、従量課金されます(各フィードの使用元は transit-mcp doctor で確認できます)。Transitland API の呼び出しはすべて TRANSITLAND_MONTHLY_BUDGET に加算されます(Explorer プランの上限 5,000 件のうち 4,500 件)。上限に達すると、プランナーには時刻表に基づく時刻が表示されます。
プランナーが 2 つの停留所間の乗り換えを提案するのは、交通機関を問わず両停留所の距離が 0.3 km 未満の場合に限られます。そのため、すべての乗り換えは短い徒歩移動になります。乗り換えが 2 回の経路は、乗り換え回数がより少ない経路が見つからない場合にのみ検索されます(TRIP_MAX_TRANSFERS)。BWI、DCA、IAD では、ターミナルと鉄道駅の間の移動情報を planning/airports.toml から取得します。BWI の場合は、MARC/Amtrak 駅までの無料シャトル(現在、シャトルの GTFS フィードがないため、所要時間は空港のウェブサイトから取得)。DCA と IAD の場合は、それぞれの空港独自の案内を含む通路情報です。運行間隔で運行を記述するフィード(frequencies.txt:Dulles のシャトル、CUE、Annapolis Transit)は、読み込み時に各運行を個別の便として展開されます。近隣の停留所は、アシスタントが「ここで何に乗り換えられるか」という質問に回答できるよう、クラスター(クラスター内のすべての停留所間の距離が 0.3 km 未満)にもまとめられます。
運賃
各事業者の運賃概要は定義ファイルに記載されており、サイトが対応している場合は、運賃ページを毎晩スクレイピングしています。VRE と MARC は駅ごとに運賃が設定されていますが、GTFS には駅ごとの運賃が含まれないため、公開されている運賃表は planning/rail_fares.toml にあり、経路には正確な片道運賃が表示されます。経路によって運賃が変わる事業者(Amtrak、FlixBus、Greyhound、Virginia Breeze、都市間バス)は、利用者を運行事業者のサイトに案内します。
利用者レポート(クラウドソーシング)
利用者は地図ページの 問題を報告 から、駅と路線(該当する場合)、移動の出発地と到着地、日付、何が起きたかを自分の言葉で互いに知らせることができます。各レポートは交通データベース(rider_reports)に保存され、小型の Claude モデル(REPORTS_MODEL、既定値は claude-haiku-5-5)で確認されます。このモデルは無関係または不適切な投稿を保留し、内容を分類(遅延、混雑、エレベーターなど)して、中立的な短い要約を作成し、事業者、路線、駅を記録します。公開されたレポートは、REPORTS_SHOW_HOURS(3)時間のあいだ、該当する経路候補に表示され、アシスタントからも参照できます。いずれの場合も、未確認の利用者レポートであることが明記されます。transit-mcp reports list|hide|publish|delete で確認してください。
アカウント:登録した場所
利用者(特に旅行者)は、メールアドレスと、メールで届く6桁のコードでサインインし(パスワードは不要)、チェックイン日とチェックアウト日を設定したホテル、自宅、訪問予定の観光地を保存できます。観光地には任意で日付を設定できます。現在の場所は「行き先は?」の下にワンタップで選べる候補として表示され、「出発地」と「到着地」の候補にも表示されます。また、地図上にピン(ここへ行く/ここから出発)として表示されます。ホテルは宿泊期間中のみ対象となり、過去の訪問先は表示されなくなります。アカウントは独立した SQLite ファイル(ACCOUNTS_DB)に保存され、チャットログとは決して紐付けられません。保存した場所は名前を含めず「saved」として記録され、リンクにも含まれません。コードは SMTP 経由で送信されます(公開サイトでは Amazon SES を使用します。deploy/README.md を参照してください)。SMTP を設定していないローカルサーバーでは、コードがログに出力されます。コードの有効期限は10分で、試行回数は5回です。
旅行プランを作成する(アシスタント)
サイトでは、地図の横に1つのパネルが表示されます。上部に「行き先は?」があり、その下に1つの会話画面が続き、経路検索の結果はアシスタントの回答と並んでライブカードとして表示されます。アシスタントは経路を自分で地図に表示でき(「動物園まで連れて行って」などの show_trip)、質問には画面上の経路が紐付けられるため、「この経路の料金はどうやって払うの?」という質問は、利用者が選んだ経路を指します。スマートフォンでは、パネルが地図の上にシートとして表示されます。
サインインした利用者は、チャットで旅行を計画できます。「訪問を計画する」を選ぶと、計画モードが始まります。ホテルと場所を保存し、「その場所に到着する時間」または「出発する時間」を指定して、訪問先を日ごとに割り当てます。また、各日の場所間を移動するバスや列車も調べます(時間に余裕をもって到着する時刻表に基づく経路、または時間が迫っている場合は徒歩)。食事や訪問先に関する質問には Google Places Text Search を使って回答します(評価、価格、営業時間)。モデルの記憶から回答することはありません。検索回数は GOOGLE_PLACES_SEARCH_MONTHLY_BUDGET で制限されます。質問は誰でもできますが、保存と計画にはアカウントが必要です。プランはアカウントに保存され、「登録した場所」に表示されます。計画ツールはウェブアプリでのみ実行され、MCP サーバーでは実行されないため、/mcp に個人データは保持されません。ツールの入力内容はチャットログに記録されません。
コマンドライン
すべてのコマンドはプロジェクトフォルダーから実行します(.venv\Scripts\transit-mcp.exe …、または仮想環境を有効化して transit-mcp …)。
transit-mcp launch # what start.bat runs
transit-mcp doctor # what check-setup.bat runs
transit-mcp ingest all # what refresh-data.bat runs
transit-mcp ingest gtfs --only dash,vre # one scope (api|gtfs|web), some agencies
transit-mcp agencies # every system with role + fare headline
transit-mcp agencies --config # agency files, their sources, problems
transit-mcp status # row counts + freshness (JSON)
transit-mcp search "how do I pay with my phone"
transit-mcp chat --open # web chat only
transit-mcp serve # MCP server over stdio
transit-mcp planner request "Reston" "Pentagon" # the JSON an engine receives
transit-mcp planner test "Reston" "Pentagon" --engine process --command "node engines/example-js/engine.js"
transit-mcp planner schema # write docs/planner-schema/*.json
ingest は何度実行しても安全で、コストもかかりません。変更のないページやフィードはコンテンツハッシュで検出されます。1つのソースで失敗が起きても、残りの処理は停止しません。
読み込まれる事業者
| スラッグ | 事業者 | 運行モード | データ |
|---|---|---|---|
wmata | Metrorail (WMATA) | 鉄道 | Transitland 経由の GTFS + WMATA API(駅、運行障害、運賃)+ wmata.com(運賃、アラート、ガイド) |
metrobus | Metrobus (WMATA) | バス | Transitland 経由の GTFS(+ WMATA のバス運行障害) |
vre | Virginia Railway Express | 通勤鉄道 | Transitland 経由の GTFS |
fairfax-connector | Fairfax Connector | バス | Transitland 経由の GTFS + GTFS-realtime アラート + 運賃ページ |
art | Arlington Transit | バス | Transitland 経由の GTFS + 運賃・アラートのページ |
dash | DASH (Alexandria) — 運賃無料 | バス | Transitland 経由の GTFS + 利用者向けページ |
cue | CUE (City of Fairfax) | バス | Transitland 経由の GTFS |
loudoun | Loudoun County Transit | バス | Transitland 経由の GTFS + 運賃・ニュースのページ |
omniride | OmniRide (PRTC) | バス | Transitland 経由の GTFS + 運賃・運行情報のページ |
virginia-breeze | Virginia Breeze | 都市間高速バス | Transitland 経由の GTFS + 予約ページ |
mta-md-bus | MTA Maryland Local Bus | バス | Transitland 経由の GTFS |
mta-md-commuter-bus | MTA Maryland Commuter Bus | 通勤バス | Transitland 経由の GTFS |
mta-md-metro | MTA Maryland Metro SubwayLink | 鉄道 | Transitland 経由の GTFS |
mta-md-light-rail | MTA Maryland Light RailLink | 鉄道 | Transitland 経由の GTFS |
marc | MARC Train | 通勤鉄道 | Transitland 経由の GTFS |
annapolis-transit | Annapolis Transit | バス | Transitland 経由の GTFS |
harbor-connector | Harbor Connector (Baltimore) | フェリー | Transitland 経由の GTFS |
potomac-valley | Potomac Valley Transit Authority | バス | Transitland 経由の GTFS |
dulles-shuttles | Dulles Airport Shuttles (ガレージ、エコノミー駐車場) | バス | Transitland 経由の GTFS |
charm-city-circulator | Charm City Circulator (Baltimore、無料) | バス | Transitland 経由の GTFS |
intercity-bus | 都市間バス(統合フィード) | 都市間バス | Transitland 経由の GTFS |
flixbus | FlixBus | 都市間バス | Transitland 経由の GTFS |
amtrak | Amtrak | 都市間鉄道 | Transitland 経由の GTFS |
メリーランド州および都市間の事業者には、まだ独自に作成された運賃ページや利用者向けページがありません。アシスタントは、GTFS フィードから各事業者独自の運賃ページを案内します。
追加するには、agencies/_template.toml をコピーしてください。agencies/README.md を参照してください。
MCP サーバーの公開
https://dmvtransit.com/mcp の MCP サーバーは公開されており、キーなしで誰でも接続できます(MCP_OPEN)。ネットワークアドレスごとに毎分 120 リクエスト、1 日 3,000 リクエスト(ChatGPT と Claude は共有サーバーから呼び出します)(MCP_OPEN_RATE_PER_MINUTE、MCP_OPEN_RATE_PER_DAY)、キーなしのすべての呼び出し元で 1 日 8,000 リクエスト(MCP_OPEN_DAILY_CAP)が上限です。transit-mcp mcp-keys add で発行したキーには、より高い上限が適用されます。ここでの住所検索には独自の Google 利用枠(MCP_GOOGLE_GEOCODING_MONTHLY_BUDGET)を使用するため、外部からの利用でウェブサイトの利用枠が消費されることはありません。すべてのツールにはタイトルと読み取り専用の注釈があります。ディレクトリから求められるページは、/mcp-server(ドキュメント)、/privacy、/terms です。
server.json では、公式 MCP Registry 用にサーバーを com.dmvtransit/transit として記述しています(2026-11-03 に 1.0.0 を公開)。新しいバージョンを公開するには、version を上げて python tools/registry_publish.py を実行してください(サインインのみをテストするには --dry-run を追加します)。HTTP ドメイン検証でサインインします。公開鍵は /.well-known/mcp-registry-auth で提供され、秘密鍵はリポジトリ外の ~/.dmvtransit/mcp-registry-key.pem に保存されます。安全に保管してください。公開済みのバージョンは削除できません。
MCP ツール
| ツール | 目的 |
|---|---|
search_transit_info(query, category?, limit?) | 各交通機関の運賃/利用方法/お知らせのページを検索します(路線や時刻表は対象外です) |
get_service_alerts(line?, station?, mode?, agency?) | 運行状況の最新情報:WMATA のインシデントと、各交通機関の GTFS-realtime アラート |
get_elevator_escalator_status(station?) | エレベーター/エスカレーターの運休状況 |
get_station_info(station) | 路線、住所、駐車場、出入口 |
get_fare(origin, destination, rider_type?) | Metrorail の駅間運賃 |
get_metro_route(origin, destination) | Metrorail の路線、乗り換え、進行方向、始発/終電、運行障害 |
list_topics() / get_guide(topic) | コンテンツの概要/乗客向けガイドの全文 |
list_agencies() | すべての交通機関:役割、強み、サービスエリア、運賃の概要 |
find_stops_near(place, radius_m?, agency?) | 複数の交通機関を対象に、場所の近くにある停留所/駅を検索します |
get_route(agency, query) | 路線の運行曜日、時間、頻度、起終点、運賃 |
transfers_at(place, day?, time?) | 徒歩圏内にある他の交通機関と、その時間に乗り換えが利用できるかどうか |
how_to_pay(agency) | 支払い方法、購入場所、アプリ、SmarTrip/非接触決済、乗り換え |
geocode_address(query, limit?) | 住所、ホテル、ランドマークの場所を特定します。旅行の計画前の段階で、LLM が場所を確認できるようにします |
plan_trip(origin, destination, depart_at?) | 指定時刻(デフォルトは現在時刻)から3時間以内の実際の移動候補を、徒歩、待ち時間、今出発する場合のリアルタイム時刻とともに提示します。住所、場所、駅、「lat,lon」を指定できます |
plan_connection(origin, destination, when?) | 設定済みのエンジンを通じて、区間ごとの交通機関、乗り換え拠点、運行日、運賃を提示します。住所も指定できます |
get_rider_reports(station?, line?, days?) | サイト上の乗客からの最近の未検証レポート(遅延、混雑、エレベーター、ヒント) |
estimate_trip_cost(origin, destination, when?, rider_category?) | 区間ごとの運賃と合計 |
リソース:transit://region/agencies、transit://wmata/freshness、
transit://wmata/guide/{topic}。
別のクライアントから MCP サーバーを使用する
ウェブ経由で、別のマシン上の LLM またはアプリから使用する場合:https://dmvtransit.com/mcp
(MCP Streamable HTTP)。API キーを Authorization: Bearer <key> として送信します。キーと
上限については、deploy/README.md をご覧ください。自分で実行するには、
transit-mcp mcp-keys add "who it's for" を実行し、続けて transit-mcp serve --http
を実行します(http://127.0.0.1:8766/mcp で提供されます)。
同じマシン上で、stdio 経由で使用する場合 — Claude Desktop(claude_desktop_config.json):
{
"mcpServers": {
"dmv-transit": {
"command": "C:\\path\\to\\transit_mcp\\.venv\\Scripts\\transit-mcp.exe",
"args": ["serve"],
"env": { "TRANSIT_MCP_DB": "C:\\path\\to\\transit_mcp\\transit.db" }
}
}
}
開発
.venv\Scripts\python.exe -m pip install -e ".[dev]"
.venv\Scripts\python.exe -m pytest
テストは tests/fixtures/ 内のフィクスチャを使用してオフラインで実行します(node がインストールされている場合は、Node エンジンのテストも実行されます)。設定については .env.example に記載されています。
法的事項
NOTICE.md をご覧ください。WMATA API のデータは同機関の開発者ライセンス契約に基づいて使用しています。GTFS フィードは各交通機関が公開しており、Transitland を通じて取得しています。スクレイピングは、一般公開され、robots.txt で許可されているページに限り、アクセス頻度を制限したうえで、出典を明記して保存しています。 WMATA および記載されているいずれの交通機関とも提携していません。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。