open-eagle-eye について
Open Eagle Eyeは、AIエージェントが公共カメラのライブ画像を取得するためのMCPサーバーです。通常のHTTP GETで取得できるJPEGまたはPNGを扱い、検索可能なカメラ一覧とローカルカメラ管理機能を備えています。
主な機能
- 01カメラのライブスナップショット取得
- 02名前・場所・カテゴリで検索
- 03都市などの条件で絞り込み
- 04ローカルカメラの管理
- 05不具合報告とカメラの登録
活用シーン
- 01都市の交通カメラ画像を確認
- 02気象観測所や公園のカメラを確認
- 03独自カメラをテストして保存
- 04特定地域の公共カメラを検索
MCP 対応
MCPサーバーは、カメラの検索、絞り込み、スナップショット取得、ローカルカメラ管理のツールを提供します。画像はファイルに保存され、パスが返されます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Open Eagle Eye
世界中の公開カメラ映像にAIエージェントが即座にアクセスできるMCP サーバーです。HTTP GETを1回実行するだけで、1秒未満で画像を取得できます。ブラウザー操作の自動化も、ストリームのデコードも必要ありません。
その理由
多くのカメラAPIでは認証が必要だったり、動画ストリームが配信されたり、JavaScriptのレンダリングを経由しないと画像を取得できなかったりします。Open Eagle Eyeがインデックスするのは、通常のHTTP GETでJPEGまたはPNGを返すカメラだけです。これが最もシンプルな連携方法です。エージェントがページをレンダリングしたり、動画をデコードしたりする必要はありません。画像を取得するだけです。
レジストリは自動で修復されます。GitHub Actionが毎晩実行され、すべてのカメラを確認し、削除する前に失敗したカメラを再試行します。また、ビジョンAIを使って、ライブ映像の代わりにエラーページを返すカメラを検出します。停止したカメラには自動的にフラグが付けられます。
クイックスタート
{
"mcpServers": {
"openeagleeye": {
"command": "npx",
"args": ["-y", "openeagleeye"]
}
}
}
または、グローバルにインストールします。
npm install -g openeagleeye
openeagleeye
初回起動時、サーバーはGitHubから最新のカメラレジストリを取得し、~/.openeagleeye/にローカルキャッシュを保存します。2回目以降の起動では、キャッシュが自動的に更新されます。
仕組み
有効なカメラURLとは、通常のHTTP GETでJPEGまたはPNGを返すエンドポイントです。多くの都市の交通カメラ、気象観測所、公園のカメラが、まさにこの形式で公開されています。サーバーは画像を取得してディスクに保存し、ファイルパスを返します。
MCP ツール
| ツール | 説明 |
|---|---|
get_snapshot | カメラからライブ画像を取得します。ディスクに保存し、ファイルパスを返します |
list_cameras | フィルター(都市、場所、カテゴリ)を使ってレジストリを閲覧します |
search_cameras | 名前、場所、カテゴリで検索します |
add_local_camera | ローカルコレクションにカメラを追加します |
list_local | ローカルに追加したカメラを表示します |
remove_local | ローカルに追加したカメラを削除します |
submit_local | GitHub issueを通じてローカルカメラを上流に共有します |
report_camera | 故障中または品質の低いカメラを報告します |
check_config | APIキーの設定状況を表示します |
上流カメラとローカルカメラ
レジストリは2つの層で構成されています。
- 上流 — サーバー起動時に毎回GitHubから取得するグローバルレジストリです。検証済みの公開カメラが約32,000台含まれています。
- ローカル —
add_local_cameraを使って自分で追加したカメラです。~/.openeagleeye/local-cameras.jsonに保存され、再起動後も保持されます。また、source: "local"を付けてlist_cameras/search_camerasの結果に表示されます。submit_localを使えば、いつでも上流に共有できます。
フィルタリング
すべてのカメラにはcityフィールドがあります。list_camerasでcity: "Sydney"を指定すると、すべてのカメラをコンテキストに大量に出力する代わりに、対象を絞った短いリストを取得できます。
出力形式
すべてのツールは構造化JSONを返します。スナップショットはディスクに保存され、ファイルパスが返されます。MCP サーバーはローカルのサブプロセスとして実行されるため、エージェントはファイルシステムにアクセスできます。
スナップショットのレスポンス:
{
"success": true,
"file_path": "/home/user/.openeagleeye/snapshots/a1b2c3d4e5f6a7b8.jpg",
"size_bytes": 14579,
"content_type": "image/jpeg",
"camera": {
"id": "nyc-bb-21-north-rdwy-at-above-south-st",
"name": "BB-21 North Rdwy @ Above South St",
"city": "New York",
"location": "Manhattan, New York, USA",
"coordinates": { "lat": 40.708, "lng": -73.999 }
}
}
レジストリ
11か国に約32,000台のカメラがあります(32,096台を確認済み)。
| 国 | 件数 | ソース |
|---|---|---|
| US | 27,184 | NYC DOT、NY 511、WSDOT、Caltrans CWWP2、CDOT CoTrip、VDOT 511、FDOT FL511、NCDOT、PennDOT 511PA、Arizona ADOT、Oregon ODOT、Nevada NDOT、Utah UDOT、Wisconsin WisDOT、New England 511、Louisiana LADOTD、Alaska DOT&PF、Missouri MoDOT |
| FI | 1,309 | Digitrafficの気象カメラ(Fintraffic) |
| CA | 1,292 | Ontario MTO、Alberta 511 |
| HK | 995 | Hong Kong Transport Department |
| GB | 424 | London TfL JamCams |
| NZ | 248 | NZTA全国高速道路 |
| AU | 247 | Queensland DOTの交通・洪水カメラ |
| BR | 160 | CET São Pauloの都市交通 |
| JP | 98 | NEXCO東日本の高速道路 |
| SG | 90 | Singapore LTA |
| IE | 49 | TIIの高速道路カメラ(ダブリンM50) |
すべてのカメラにcountry、city、location、timezone、coordinates(緯度/経度)があります。
自己修復
GitHub Action が毎晩 3 AM UTC に実行されます。
- 過去 7 日間に検証されていないカメラと、不審としてフラグが付けられたカメラを確認します
- 最初の失敗で不審としてマークし、2 回連続で失敗すると削除して GitHub の Issue を作成します
- Vision AI(GitHub Models 経由の GPT-4o-mini)が、エラーページを返すカメラを検出します
- 復旧した不審なカメラは自動的に解除されます
セキュリティ
- SSRF 対策 — プライベート IP、クラウドのメタデータエンドポイント、HTTP 以外のプロトコル、DNS リバインディングをブロックします
- コンテンツタイプの許可リスト —
image/jpegとimage/pngのみを受け付けます - マジックバイト検出 — CDN が誤ったコンテンツタイプを返した場合、ファイルヘッダーで JPEG/PNG を検証します
- Push/PR の上限 — サイズの大きすぎる PR を介した DoS を防ぐため、1 回の push あたりのカメラ数を最大 500 台に制限します
- ランダムなファイル名 — スナップショットにはランダムな 16 進数のファイル名を使用し、パスにカメラ ID を含めません
API キー(任意)
ほとんどのカメラはそのまま利用できます。一部のカメラでは無料の API キーが必要です。キーのエラーでスナップショットの取得に失敗した場合、応答に登録先と設定方法が表示されます。
~/.openeagleeye/config.json を作成します。
{
"api_keys": {
"PROVIDER_API_KEY": "your-key-here"
}
}
check_config を使うと、キーが必要なカメラと、キーが設定済みかどうかを確認できます。
カメラの追加
- 画像への直接 URL を探します(通常の GET リクエストで
image/jpegまたはimage/pngを返す必要があります) - URL、都市、場所、タイムゾーン、任意の座標を指定して
add_local_cameraを実行します get_snapshotでテストしますsubmit_localで上流リポジトリに共有します —ghCLI が必要です(gh auth login)
ローカルカメラはすぐに使用でき、役立てるために上流で承認を得る必要はありません。
おすすめのソース:市の運輸局、気象観測所、スキーリゾート、国立公園、港、空港。
ファイル構成
すべての実行時データは ~/.openeagleeye/ に保存されます。
~/.openeagleeye/
cameras.json # Upstream registry (fetched from GitHub on boot)
local-cameras.json # Your locally-added cameras
.registry-state.json # Validation state (active/suspect/offline)
snapshots/ # Downloaded camera images
config.json # API keys
コントリビューション
プルリクエストを歓迎します。カメラのソースを追加する際のガイドラインについては、CONTRIBUTING.md をご覧ください。
このプロジェクトの目的
プロジェクトの設計上の判断の背景、他のカメラサービスとの比較、エージェントネイティブと自己修復が重要である理由については、WHY.md をご覧ください。
プライバシーとセキュリティ
監視、データ収集、プライベートカメラ、セキュリティアーキテクチャに関するよくある質問への回答については、SECURITY.md をご覧ください。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。