Skip to main content
Glama

transit-mcp-server

511.org SF Bay Open Data のトランジットAPI用MCPサーバー。LLMにベイエリアのリアルタイム交通データ(事業者、路線、停留所、リアルタイムの発車情報、車両位置、運行障害情報)を提供します。BART、Muni、AC Transit、Caltrain、VTA、その他511に報告しているすべての事業者に対応しています。

ツールは6つ、すべて読み取り専用です。

要件

Related MCP server: Bay Wheels MCP Server

インストール

npm install
npm run build

設定

{
  "mcpServers": {
    "transit": {
      "command": "node",
      "args": ["/absolute/path/to/transit-mcp-server/dist/index.js"],
      "env": { "TRANSIT_511_API_KEY": "your-token-here" }
    }
  }
}

変数

必須

デフォルト

目的

TRANSIT_511_API_KEY

はい

https://511.org/open-data/token から取得するトークン

TRANSIT_511_BASE_URL

いいえ

https://api.511.org

APIホストを上書き

TRANSIT_511_REQUEST_TIMEOUT_MS

いいえ

30000

リクエストごとのタイムアウト

TRANSPORT

いいえ

stdio

stdio または http

PORT / HOST

いいえ

3000 / 127.0.0.1

HTTPトランスポートのバインドアドレス

MCP_PATH_SECRET

ホスト時

エンドポイントを /mcp/<secret> で提供します。HOST がループバックでない場合は必須

ALLOWED_ORIGINS

いいえ

localhost + claude.ai

カンマ区切りのオリジン許可リスト

クォータが主な制約です

511ではキーごとに毎時60リクエストが許可されており、すべてのエンドポイントで共有されます。これは、これらのツールの使い方を左右するほど低い値です。

  • 事業者コードと停留所コードは一度解決したら再利用してください。これらは変わりません。

  • operator_id を指定しない transit_list_service_alerts を優先してください。1回の呼び出しで全事業者をカバーします。

  • transit_next_departures をループでポーリングしないでください。通勤中に10回チェックすると、時間あたりの予算の6分の1を消費します。

transit_list_operators は、511がすべてのレスポンスで返す RateLimit-Remaining ヘッダーから、残りの予算を報告します。クォータを超えると429が返ります。増量をリクエストするには transitdata@511.org に連絡してください。

デプロイ(Claude mobile / claude.ai コネクタ用)

ホスト型MCPサーバーと同じ構成です。openssl rand -hex 32 でパスシークレットを生成し、プラットフォームのダッシュボードで TRANSIT_511_API_KEYMCP_PATH_SECRET を設定します。同梱の Dockerfilerailway.json は、Railway、Render、Flyでそのまま動作します。サーバーはシークレットなしではパブリックインターフェースでの起動を拒否します。/healthz は認証不要の死活監視エンドポイントです。

その後、ブラウザで claude.ai で: Customize → Connectors → Add custom connector を選択し、URL に https://your-app.up.railway.app/mcp/<secret> を指定します。

ツール

ネットワークtransit_list_operatorstransit_list_linestransit_find_stops

リアルタイムtransit_next_departurestransit_list_vehicles

アラートtransit_list_service_alerts

すべてのツールは response_format: "markdown" | "json" を受け取ります。Markdownがデフォルトで、LLMが読むのに最適化されています。JSONは完全な構造化ペイロードです。structuredContent はフォーマットに関係なく常に設定されます。

「次のNジュダはいつ?」operator_id="SF"query="judah"transit_find_stops を呼び出して停留所コードを取得し、そのコードと line="N"transit_next_departures を呼び出します。

「BARTは正常に動いてる?」operator_id="BA"transit_list_service_alerts を呼び出します。

「通勤経路で何か問題ある?」 → オペレーターを指定せずに transit_list_service_alerts を呼び出します。1回の呼び出しでベイエリアの全事業者をスキャンします。

「今、電車はどこにいる?」operator_id="BA"transit_list_vehicles を呼び出します。

設計メモ

構造的に読み取り専用。 511には書き込みエンドポイントがなく、すべてのツールに readOnlyHint: true が付いています。テストでこれを検証しています。

エンドポイントごとに1つの operator_id をマッピング。 511は静的エンドポイントではこのパラメータを operator_id と呼び、リアルタイムエンドポイントでは同じ値に対して agency と呼びます。ここではすべてのツールが operator_id を受け取り、クライアントがそれをマッピングします。この分割は511側の問題であり、呼び出し側の問題ではありません。

2つのリアルタイムエンドポイントは実際には異なるエンベロープを持ちます。 StopMonitoring には Siri ルートラッパーがありませんVehicleMonitoring にはあります。公開されている仕様では両方に1つあるとされていますが、仕様が間違っており、文書化された形で解析すると発車情報がまったく返りません。両方とも実際のAPIが出力する形で解析され、それぞれを固定するテストがあります。

到着時刻にカウントダウンが含まれ、出発時刻には含まれません。 ExpectedDepartureTime は実質的にすべての実データでnullであるため、それに基づいてカウントダウンを行うと、サービスがない停留所として表示されます。ExpectedArrivalTime が信頼できるフィールドです。

UTF-8 BOMは解析前に除去されます。 511はJSONボディの先頭に U+FEFF を付けるため、単純な JSON.parse では有効なペイロードでも例外が発生します。認証失敗はBOMなしのプレーンテキストであるため、ステータスチェック後に除去が行われます。

数値やブール値に見える値は、実際にはそうでないことがよくあります。 座標と方位はJSON文字列として到着し、VehicleAtStop は文字列 "false" であり、nullを意図した場所では "" が使用されます。盲目的に変換すると、欠落した位置がアフリカ沖の有効な0,0に見えてしまうため、空文字列はゼロではなく欠落として扱われます。

エポックゼロのセンチネルはタイムスタンプではありません。 スケジュールされているが車両が割り当てられていない便は、RecordedAtTime1970-01-01T00:00:00Z と報告されます。これは「56年前に記録された」ではなく「まだ車両が割り当てられていません」と表示されます。

GTFS-Realtimeの列挙型はデコードされます。 511のJSONアラートレンダリングは "effect": 3 を出力しますが、XMLレンダリングでは SignificantDelays と表示されます。原因と影響の両方が単語にマッピングされます。

511内部の疑似事業者は除外されます。 5E5F5O5S は511の緊急、フラップサイン、運用、スタッフであり、事業者リストにサービスデータなしで表示されます。

すべて太平洋時間です。 タイムスタンプはUTCで到着し、America/Los_Angeles でレンダリングされるため、夏時間はモデルが年に2回処理するのではなく、ここで一度処理されます。511自身の TimeZone フィールドは、ベイエリアのすべての事業者に対して America/Vancouver を報告することに注意してください。これは既知の上流のデータバグであり、意図的に無視されています。

切り捨ては常に明示されます。 511はページネーションを行わず、コレクション全体を返します。大規模な事業者には数千の停留所があります。ツールはクライアント側の limit を受け取り、切り詰められた結果はすべて、保留された量を明示します。黙って短縮されたリストは「それがすべてです」と読めるからです。

注意事項

  • 時間あたりのクォータは全エンドポイントで60リクエストです。これはどのワークフローでも制約となります。

  • 事業者コードは間違えやすいです。VTAは SCVT ではない)、Capitol Corridorは AMCC ではない)、Tri Deltaは 3D です。transit_list_operators はこれらの罠を出力に表示します。

  • 停留所コードは1つの事業者に属し、事業者間で交換できません。

  • transit_find_stops はこのサーバー上でフィルタリングするため、狭いクエリでもクォータは節約されません。完全な停留所リストはどちらにせよ取得されます。

  • リアルタイム予測は約90分先までで、511は路線の最終到着専用停留所を発車情報フィードから除外します。

  • tripupdatesvehiclepositions はprotobufのみでJSONオプションがないため、意図的に公開していません。サポートするには、SIRIエンドポイントがすでにカバーしているデータのためにprotobuf依存関係を追加する必要があります。

プロジェクト構成

src/
├── index.ts               # entry point, transport selection
├── constants.ts           # enums, limits, operator-code traps
├── types.ts               # interfaces for every 511 entity
├── services/
│   └── transit-client.ts  # fetch wrapper, auth, BOM stripping, quota tracking, errors
├── schemas/
│   ├── inputs.ts          # Zod input schemas
│   └── outputs.ts         # structuredContent schemas
├── formatters/
│   ├── response.ts        # limiting, truncation, Pacific-time rendering
│   └── entities.ts        # per-entity markdown rendering
└── tools/
    ├── network.ts         # operators, lines, stops
    ├── departures.ts      # real-time arrivals and vehicles
    └── alerts.ts          # service alerts

テスト

npm run build
npm test            # 42 checks: handshake, BOM, envelopes, quirks, errors (mocked API)
npm run test:http   # 17 checks: config validation, path-secret gating, method handling, origins

両方のスイートは、511の実際の癖(BOM、欠落した Siri ラッパー、文字列化されたブール値と座標、エポックセンチネル、プレーンテキストのエラーボディ)を意図的に再現するローカルモックに対して実行されます。これらはまさに、素朴なクライアントが間違える点だからです。

Install Server
F
license - not found
A
quality
C
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

  • Gateway between LLM agents and world data through eight tools and a bundled endpoint catalog.

  • Read and update your Everway trips and itineraries from any MCP-compatible AI assistant.

  • US weather & geo for AI agents: forecasts, alerts, earthquakes, elevation, geocoding. No keys.

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/RyK57/transit-mcp-server'

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