mcpField
W
wsdot-mcp-server

wsdot-mcp-server

リモート
github.com/cyanheads地図・旅行1今日更新
リポジトリ

wsdot-mcp-server について

wsdot-mcp-serverは、ワシントン州の道路・フェリー情報を提供し、路況、運航時刻、船舶位置、通行料金、国境の待ち時間を調べられます。WSDOTの交通情報とWSFのフェリー情報を1つのMCPサーバーにまとめています。

主な機能

  1. 01峠の路況と道路アラート
  2. 02区間所要時間と通行料金
  3. 03国境の待ち時間とカメラ情報
  4. 04フェリー路線・時刻・ターミナル空き状況
  5. 05船舶のリアルタイム位置と運航アラート

活用シーン

  1. 01運転前に峠の路況を確認
  2. 02道路の所要時間と料金を比較
  3. 03フェリーを計画し車両スペースを確認
  4. 04交通アラートと国境の待ち時間を確認

MCP 対応

MCPクライアント向けに、WSDOTの交通情報とWSFのフェリー情報を照会する12個のツールを公開します。STDIOとStreamable HTTPに対応し、公開ホスト型エンドポイントもあります。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://wsdot.caseyjhand.com/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

パッケージ
npm@cyanheads/wsdot-mcp-server0.5.0

ツール

12

このツールにパラメーターはありません。

詳細

@cyanheads/wsdot-mcp-server

MCP を介して、ワシントン州の高速道路の状況、フェリーの時刻表、船舶の位置、通行料金、国境での待ち時間、アラートを照会できます。STDIO または Streamable HTTP に対応しています。

12 個のツール

バージョン ライセンス Docker MCP SDK npm TypeScript Bun

Claude Desktop にインストール Cursor にインストール VS Code にインストール

フレームワーク

公開ホストサーバー: https://wsdot.caseyjhand.com/mcp


概要

WSDOT が提供するワシントン州の道路とフェリーの情報を利用できます。山道の状況、所要時間、通行料金、国境での待ち時間、アラート、交通カメラを確認できるほか、フェリーの時刻表、船舶の位置、ターミナルの空き状況を追跡できます。

ツール
ツール説明
wsdot_get_mountain_passesWA の全山岳峠の現在の状況:ステータス、道路状況、滑り止め規制、気温、標高。
wsdot_search_alerts有効な高速道路アラート(事故、工事、通行止め)。州道、WSDOT 地域、キロポスト範囲で絞り込めます。
wsdot_get_travel_timesWA の名称付き高速道路区間(I-5、I-90、SR 520 など)の現在と平均の所要時間、および渋滞による遅延。
wsdot_get_toll_ratesWA のエクスプレスレーンおよび有料施設(SR 99、SR 167 HOT、I-405 Express、SR 509、SR 520)の変動料金。路線で絞り込めます。
wsdot_get_border_waitsWA とカナダのすべての陸路国境検問所における、現在の車両待ち時間。
wsdot_search_cameras高速道路カメラのメタデータと画像 URL。州道、地域、キロポスト範囲、タイトルの単語で絞り込めます。
wsdot_get_ferry_terminals時刻表と空き状況の照会に必要な数値 ID、および座標を含む、WSF の全フェリーターミナル。
wsdot_get_ferry_routes指定日に運航する WSF の航路。航路の検出、時刻表の照会、フェリーアラートの相互参照に使える航路 ID、略称、説明、および航路が運航するターミナルの組み合わせ。
wsdot_get_ferry_schedule特定の WSF 航路の出航時刻。今日の残りまたは将来の終日モードに対応し、各便の船舶、積載ルール、注記を含みます。
wsdot_get_vessel_locations運航中の全 WSF 船舶のリアルタイム AIS 位置、速度、進行方向、到着予定時刻、停泊状況。
wsdot_get_terminal_spaceWSF ターミナルで、今後の便に利用できる乗船順の車両スペースおよび予約可能な車両スペース。
wsdot_get_ferry_alerts影響を受ける航路 ID を含む、現在有効な WSF の運航障害および告知。

機能リファレンス

wsdot_get_mountain_passes ツール
  • 入力不要です。1 回の呼び出しで、WA の全 16 山岳峠(Snoqualmie、Stevens、White、Blewett、Cayuse など)の現在の状況を取得します。
  • 各峠の道路状況、天候、気温、標高、および方向別の滑り止め/通行規制を最大 2 件取得できます。

wsdot_search_alerts ツール
  • stateRoute、region(Northwest、Olympic、Southwest、South Central、North Central、Eastern)、startMilepost/endMilepost は任意です。アラートの対象範囲が指定範囲と重なる場合に一致します。すべて省略すると、州全体のすべてのアラートが対象になります。alertId 順に並べられ、ページ分けされます(デフォルト 20、最大 500)。
  • 不明な地域を指定すると invalid_region、開始値が終了値を超えると invalid_milepost_range が返され、それぞれ復旧のヒントが示されます。

wsdot_get_travel_times ツール
  • route は任意です。路線("I-5"、"SR 520")を指定すると、その路線で計測されているすべての区間が返されます。それ以外のテキストは区間名と照合されます("Everett")。ページ分けされます(デフォルト 50、最大 500)。
  • 各区間では現在と平均の所要時間が分単位で報告されます。現在の所要時間が平均を上回る場合は渋滞しており、その差が遅延時間です。照会した方向で可逆式エクスプレスレーンの区間が閉鎖されている場合、その数値はゼロとして報告されず、省略されます。

wsdot_get_toll_rates ツール
  • SR 99(WSDOT Tunnel)、SR 167 HOT Lanes、I-405 Express Lanes、SR 509 の有料区間、SR 520 Bridge が対象です。stateRoute は標識上の路線名("I-405"、"SR 520")と照合されます。有料施設のない路線では、対象の有料路線を示す通知付きで空のページが返されます。ページ分けされます(デフォルト 50、最大 500)。
  • 各行の先頭には startLocationName → endLocationName の区間が表示されます。stateRoute はフィードの先頭ゼロ付き番号("099")で、travelDirection はフィードのコードです。SR 99、SR 509、SR 520 では施設ごとに方向が固定されているため、区間の始点と終点から方向を確認してください。

wsdot_get_border_waits ツール
  • 入力なし — I-5(Peace Arch)、SR 543(Pacific Highway)、SR 539(Lynden)、SR 9(Sumas)の crossings[] に11件のレーン情報を返します。各地点に一般レーンとNexusレーンがあり、SR 539とSR 543にはトラックレーンもあります
  • crossingName はルートコード(I5、SR543Trucks)、location.description は読みやすい名称です。最新データのないレーンでは waitTimeInMinutes が省略されます

wsdot_search_cameras ツール
  • stateRoute、region コード(NW、SW、OL、ER、SC、NC、OSはOregon TripCheckのカメラ、WAは空港カメラ)、startMilepost / endMilepost、および titleContains(語順を問わず、すべての単語に一致)を任意で指定できます。cameraId 順に並び、ページ分割されます(デフォルト50件、最大500件)
  • 画像データではなく、メタデータと画像URLを返します(カメラ画像の著作権はWSDOTにあります)。不明な地域を指定すると invalid_region、範囲の開始地点が終了地点より後の場合は invalid_milepost_range エラーになります

wsdot_get_ferry_terminals ツール
  • 入力なし — WSFの全20ターミナルと、それぞれの数値ID、略称、緯度・経度を返します
  • 「Bainbridge Island」や「Seattle」などの名称を、wsdot_get_ferry_schedule と wsdot_get_terminal_space が受け取るIDに対応付けます

wsdot_get_ferry_routes ツール
  • tripDate(YYYY-MM-DD、デフォルトは今日)を任意で指定できます。WSFが公開している範囲外の日付を指定すると、その範囲を示す invalid_date エラーになります
  • 各ルートには、ID(wsdot_get_ferry_alerts の impactedRouteIds)、略称、説明、および terminalPairs が含まれます。terminalPairs は、その日に wsdot_get_ferry_schedule が受け付ける出発地 → 到着地の組み合わせです

wsdot_get_ferry_schedule ツール
  • departingTerminalId と arrivingTerminalId(wsdot_get_ferry_routes の terminalPairs にある組み合わせ)が必須です。tripDate(デフォルトは今日)と remainingOnly(今日の今後の出航のみ)を任意で指定できます
  • 各便には、ISO 8601形式のUTCによる departureTime / arrivalTime(tripDate は太平洋時間の運航日)、vesselId、loadingRule、およびその組み合わせの annotations へのインデックスが含まれます。キャンセルフラグはありません。WSFはキャンセルされた便を削除するため、wsdot_get_ferry_alerts を確認してください
  • 指定日のスケジュールがない組み合わせは invalid_terminal_pair、便が1便もない日付は invalid_date エラーになります。空のスケジュールが返されることはありません

wsdot_get_vessel_locations ツール
  • 入力なし — 運航中のWSF船舶すべての位置、速度、進行方向、到着予定時刻、着岸状況を返します
  • 位置情報には30~60秒の遅延が生じる場合があります。運航中でない船舶では多くのフィールドが欠落し、任務の割り当てがない船舶では opRouteAbbrev が none reported になります

wsdot_get_terminal_space ツール
  • departingTerminalId(wsdot_get_ferry_terminals から取得)を任意で指定できます。指定しない場合は全ターミナルが対象です。ターミナル単位でページ分割され(デフォルト5件、最大20件)、返された各ターミナルのすべての便が含まれます
  • 重要なフィールドは driveUpSpaceCount です。ゼロは自動車用レーンが満車であることを意味し、定員超過の便では、上流の負の台数はゼロに切り下げられます。arrivingTerminalIds は wsdot_get_ferry_schedule に渡して連携できます

wsdot_get_ferry_alerts ツール
  • 入力なし — WSFの有効な運航障害、遅延、お知らせを返します。それぞれに alertTitle、1行の alertDescription、全文の bulletinText が含まれます(代替便などの詳細は本文にのみ記載されます)
  • impactedRouteIds は wsdot_get_ferry_routes のルートに対応します。affectsAllRoutes: true は全船隊に影響するお知らせを示し、その場合、ルートの一覧が空であればすべてのルートが対象です

機能

@cyanheads/mcp-ts-core を基盤としています。stdio と Streamable HTTP のトランスポート、プラグイン可能な認証(none / jwt / oauth)、切り替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションの OpenTelemetry トレーシングに対応した構造化ログを備えています。

WSDOT 固有の機能:

  • 2 つの API を連携 — WSDOT Traffic API と WSF Ferry API は、単一の WSDOT_ACCESS_CODE を共有します
  • ツールの説明にツール間の連携を組み込み — フェリーツールは、検索前に ID を解決するため、wsdot_get_ferry_terminals / wsdot_get_ferry_routes を案内します
  • 両 API でレスポンス形式を統一 — 上流 API で欠落しているフィールドは、省略やデフォルト値ではなくオプションとして示されます
  • 安定したページネーション — 上流 API ではアラートとカメラのフィードが複数の行順で同じ項目を返すため、ID でソートして、指定したオフセットで再現可能な結果を保ちます
  • ページ分割されたリストツールは offset / limit を受け取り、レスポンスが 24,000 バイトの上限に達した場合もページを早期終了します。その際、通知に次のオフセットが示されます
  • ルートフィルターでは、実際に使われる形式("I-90"、"90"、"090"、"SR 520")を受け付けます。また、すべてのテキストフィルターは最大 200 文字です

エージェントに適した出力:

  • 型付きエラー — invalid_access_code および api_unavailable エラーには、設定上の問題と一時的な上流 API の問題を区別する、明示的な復旧ヒントが含まれます
  • driveUpSpaceCount: 0 と渋滞の差分フィールド(delayInMinutes)により、文字列を解析しなくてもエージェントが実用的な情報を得られます
  • HTML をプレーンテキストに変換 — 上流 API から HTML で届くアラートの説明、航行情報、速報はテキストで返され、リンクは リンクテキスト (url) の形式でインライン表示されます
  • 部分データを保持 — 上流 API のペイロードにデータがない場合、合成されたデフォルト値ではなく null / undefined として示されます(例:waitTimeInMinutes が省略されている場合や、arrivalTime が存在しない場合)
  • content[] と structuredContent はフィールド名だけでなく、同じ値を保持します。false のフラグ、空のリスト、座標ペアの片方だけに値がある場合も、一部のクライアントが読み取る Markdown 表示から欠落せずに出力されます。空文字列または空白のみの上流文字列は両方から除外され、値がある場合はトリミングされて届きます

はじめに

公開ホストインスタンス

https://wsdot.caseyjhand.com/mcp で公開インスタンスを利用できます。インストールは不要です。Streamable HTTP を提供しており、クライアントごとに設定形式が異なります。

Claude Code の場合:

claude mcp add --transport http wsdot-mcp-server https://wsdot.caseyjhand.com/mcp

Cline(cline_mcp_settings.json)の場合:

{
  "mcpServers": {
    "wsdot-mcp-server": {
      "type": "streamableHttp",
      "url": "https://wsdot.caseyjhand.com/mcp"
    }
  }
}

Cursor(mcp.json)の場合:

{
  "mcpServers": {
    "wsdot-mcp-server": {
      "url": "https://wsdot.caseyjhand.com/mcp"
    }
  }
}

Claude Desktop では、Settings → Connectors からリモートサーバーを追加します。

セルフホスト / ローカル

以下を MCP クライアントの設定ファイルに追加してください。WSDOT Traveler API のアクセスコードが必要です。wsdot.wa.gov/Traffic/api/ で登録してください。

{
  "mcpServers": {
    "wsdot-mcp-server": {
      "type": "stdio",
      "command": "bunx",
      "args": ["@cyanheads/wsdot-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info",
        "WSDOT_ACCESS_CODE": "your-access-code"
      }
    }
  }
}

または、npx を使用します(Bun は不要です)。

{
  "mcpServers": {
    "wsdot-mcp-server": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@cyanheads/wsdot-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info",
        "WSDOT_ACCESS_CODE": "your-access-code"
      }
    }
  }
}

または、Docker を使用します。

{
  "mcpServers": {
    "wsdot-mcp-server": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "MCP_TRANSPORT_TYPE=stdio",
        "-e", "WSDOT_ACCESS_CODE=your-access-code",
        "ghcr.io/cyanheads/wsdot-mcp-server:latest"
      ]
    }
  }
}

Streamable HTTP を使用するには、トランスポートを設定してサーバーを起動します。

MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 WSDOT_ACCESS_CODE=your-access-code bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
  • Bun v1.4.0 以降(または Node.js v24 以降)。
  • WSDOT Traveler API のアクセスコード。wsdot.wa.gov/Traffic/api/ で登録してください。登録は無料です。
インストール
  1. リポジトリをクローンします:
git clone https://github.com/cyanheads/wsdot-mcp-server.git
  1. ディレクトリに移動します:
cd wsdot-mcp-server
  1. 依存関係をインストールします:
bun install
  1. 環境を設定します:
cp .env.example .env
# edit .env and set WSDOT_ACCESS_CODE

設定

設定はすべて、起動時に src/config/server-config.ts の Zod スキーマで検証されます。主な環境変数は次のとおりです。

変数説明デフォルト
WSDOT_ACCESS_CODE必須。 WSDOT Traveler API のアクセスコードです。wsdot.wa.gov/Traffic/api/ で登録してください。—
MCP_TRANSPORT_TYPEトランスポート:stdio または http。stdio
MCP_HTTP_PORTHTTP サーバーのポートです。3010
MCP_HTTP_HOSTHTTP サーバーのホスト名です。127.0.0.1
MCP_HTTP_ENDPOINT_PATHHTTP エンドポイントのパスです。/mcp
MCP_PUBLIC_URLTLS を終端するリバースプロキシ環境で使用する公開オリジンです。—
MCP_SESSION_MODEセッション処理:auto、stateful、または stateless。スキーマのデフォルト値 auto は stateful に解決されます。このサーバーでは stateless を明示的に設定しています。stateless
MCP_AUTH_MODE認証:none、jwt、または oauth。none
MCP_LOG_LEVELログレベル(debug、info、notice、warning、error)。info
LOGS_DIRログファイルのディレクトリ(Node.js のみ)。<project-root>/logs
STORAGE_PROVIDER_TYPEストレージバックエンド:in-memory、filesystem、supabase、cloudflare-kv/r2/d1。in-memory
LOG_TOOL_FAILURE_PAYLOADS失敗した各ツール呼び出しの引数と結果を記録します(キー名のみをマスキング)。false
OTEL_ENABLEDOpenTelemetry の計装(スパン、メトリクス、完了ログ)を有効にします。false
OTEL_EXPORTER_OTLP_ENDPOINTOTLP のベース URL。トレースは /v1/traces に、メトリクスは /v1/metrics に送信されます。—
OTEL_EXPORTER_OTLP_LOGS_ENDPOINTオプトイン方式の OTLP ログエクスポートです。ベースエンドポイントを設定しても有効にはなりません。—

オプションの上書き設定の一覧については、.env.example を参照してください。

サーバーの実行

ローカル開発
  • ビルドして実行:

    # One-time build
    bun run rebuild
    
    # Run the built server
    bun run start:stdio
    # or
    bun run start:http
    
  • チェックとテストを実行:

    bun run devcheck   # Lint, format, typecheck, security
    bun run test       # Vitest test suite
    bun run lint:mcp   # Validate MCP definitions against spec
    
Docker
docker build -t wsdot-mcp-server .
docker run --rm -e WSDOT_ACCESS_CODE=your-access-code -p 3010:3010 wsdot-mcp-server

Dockerfile のデフォルトは HTTP トランスポート、stateless セッションモードで、ログは /var/log/wsdot-mcp-server に出力されます。OpenTelemetry のピア依存関係はデフォルトでインストールされます。省略するには、--build-arg OTEL_ENABLED=false を指定してビルドしてください。

プロジェクト構成

ディレクトリ用途
src/index.tscreateApp() のエントリーポイントです。12 個すべてのツールを登録し、サービスを初期化します。
src/configサーバー固有の環境変数の解析と、Zod による検証を行います。
src/mcp-server/toolsツール定義(*.tool.ts)です。交通関連ツール 6 個、フェリー関連ツール 6 個があります。
src/services/trafficWSDOT Traffic API サービス(峠、アラート、所要時間、料金、国境での待ち時間、カメラ)。
src/services/ferryWSF Ferry API サービス(ターミナル、ルート、スケジュール、船舶の位置、空き状況、アラート)。
tests/src/ の構成に対応した単体テストと統合テストです。

開発ガイド

開発ガイドラインとアーキテクチャ上のルールについては、CLAUDE.md を参照してください。要点は次のとおりです。

  • ハンドラーは例外をスローし、フレームワークが捕捉します。ツールのロジックでは try/catch を使用しないでください
  • リクエスト単位のログには ctx.log を、テナント単位のストレージには ctx.state を使用してください
  • 新しいツールは src/index.ts の createApp() 配列に登録してください
  • 外部 API 呼び出しをラップします。生データを検証し、ドメイン型に正規化してから出力スキーマに合う形で返してください。不足しているフィールドを捏造しないでください

コントリビューション

Issue の報告を歓迎します。提出前にチェックとテストを実行してください。

bun run devcheck
bun run test

ライセンス

Apache-2.0 — 詳細は LICENSE を参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。