Open Eagle Eye

io.github.stuchapin909由 GitHub 账号 stuchapin909 发布v8.0.0更新于 Oct 27, 2026

Live snapshots from ~29,000 public cameras across 11 countries — traffic, weather, webcams

已验证STDIO仅桌面位置与生活媒体与设计

概览

AI 生成的概览

让助手浏览约 2.9 万个公共交通、天气与网络摄像头,并抓取实时 JPEG/PNG 快照保存到本地磁盘。

可以做什么
  • 按城市、地点、类别或名称浏览和搜索摄像头注册表
  • 抓取摄像头实时快照,保存到磁盘并返回文件路径
  • 管理本地摄像头集合:添加、列出、删除并向上游提交
  • 报告损坏或画质差的摄像头,查看 API 密钥配置状态
适用场景
适合需要助手获取公共交通、天气、高速或城市摄像头当前画面,或想维护自己的直连图片摄像头清单以便反复抓图的场景。
运行要求
以 npm 包形式通过 stdio 在本地运行(npx 或全局安装),需要 Node.js 和网络访问:启动时从 GitHub 拉取注册表,并需能访问各摄像头主机。部分摄像头需要可选 API 密钥,放在用户主目录下的配置文件中。向上游提交本地摄像头需要已登录的 gh CLI。
安装前请注意
快照会写入本地数据目录,本地摄像头条目也会持久保存。部分摄像头需要把免费 API 密钥明文存放在配置文件中。向上游提交摄像头会通过 gh CLI 创建 GitHub 议题,报告摄像头也会向上游发送反馈。画面来自第三方公共视频源,应视为不可信内容。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Open Eagle Eye,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

Open Eagle Eye

[npm version] [License: MIT]

MCP server that gives AI agents instant access to public camera feeds worldwide. One HTTP GET, sub-second captures, no browser automation, no stream decoding.

Why

Most camera APIs require authentication, serve video streams, or hide images behind JavaScript rendering. Open Eagle Eye only indexes cameras that return a JPEG or PNG on a plain HTTP GET — the simplest possible integration. Agents don't need to render pages or decode video. They just fetch an image.

The registry is self-healing. A GitHub Action runs nightly, checks every camera, retries failures before removing them, and uses vision AI to catch cameras that return error pages instead of live feeds. Dead cameras get flagged automatically.

Quick start

json
{  "mcpServers": {    "openeagleeye": {      "command": "npx",      "args": ["-y", "openeagleeye"]    }  }}

Or install globally:

bash
npm install -g openeagleeyeopeneagleeye

On first run, the server fetches the latest camera registry from GitHub and caches it locally in ~/.openeagleeye/. Subsequent starts refresh the cache automatically.

How it works

A valid camera URL is any endpoint that returns a JPEG or PNG on a plain HTTP GET. Most city traffic cameras, weather stations, and park cams expose exactly this. The server fetches the image, saves it to disk, and returns the file path.

MCP Tools

ToolDescription
get_snapshotFetch a live image from a camera — saves to disk, returns file path
list_camerasBrowse the registry with filters (city, location, category)
search_camerasSearch by name, location, or category
add_local_cameraAdd a camera to your local collection
list_localShow your locally-added cameras
remove_localDelete a locally-added camera
submit_localShare local cameras upstream via GitHub issue
report_cameraReport a broken or low-quality camera
check_configShow API key configuration status

Upstream vs local cameras

The registry has two layers:

  • Upstream — the global registry fetched from GitHub on every server start. These are the ~32,000 validated public cameras.
  • Local — cameras you add yourself via add_local_camera. They persist in ~/.openeagleeye/local-cameras.json, survive restarts, and appear in list_cameras/search_cameras with source: "local". Share them upstream anytime with submit_local.

Filtering

Every camera has a city field. Use list_cameras with city: "Sydney" to get a short, focused list instead of dumping all cameras into context.

Output format

Every tool returns structured JSON. Snapshots save to disk and return the file path — the MCP server runs as a local subprocess, so the agent has filesystem access.

Snapshot response:

json
{  "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 }  }}

Registry

~32,000 cameras across eleven countries (32,096 verified):

[Global Coverage]

CountryCountSources
US27,184NYC 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
FI1,309Digitraffic weather cameras (Fintraffic)
CA1,292Ontario MTO, Alberta 511
HK995Hong Kong Transport Department
GB424London TfL JamCams
NZ248NZTA nationwide highways
AU247Queensland DOT traffic + flood cameras
BR160CET São Paulo urban traffic
JP98NEXCO East expressways
SG90Singapore LTA
IE49TII motorway cams (M50 Dublin)

Every camera has country, city, location, timezone, and coordinates (lat/lng).

Self-healing

A GitHub Action runs nightly at 3 AM UTC:

  • Checks cameras not validated in the last 7 days, plus any flagged as suspect
  • First failure marks as suspect, second consecutive failure removes and opens a GitHub issue
  • Vision AI (GPT-4o-mini via GitHub Models) catches cameras returning error pages
  • Suspect cameras that recover are cleared automatically

Security

  • SSRF protection — blocks private IPs, cloud metadata endpoints, non-HTTP protocols, and DNS rebinding
  • Content-type whitelist — only image/jpeg and image/png accepted
  • Magic byte detection — validates JPEG/PNG by file header when CDN returns wrong content-type
  • Push/PR cap — max 500 cameras per push to prevent DoS via oversized PRs
  • Random filenames — snapshots use random hex filenames, no camera ID in the path

API Keys (optional)

Most cameras work out of the box. Some require a free API key. If a snapshot fails with a key error, the response tells you where to sign up and how to configure it.

Create ~/.openeagleeye/config.json:

json
{  "api_keys": {    "PROVIDER_API_KEY": "your-key-here"  }}

Use check_config to see which cameras need keys and whether yours are set.

Adding cameras

  1. Find a direct-image URL (must return image/jpeg or image/png on plain GET)
  2. add_local_camera with the URL, city, location, timezone, and optional coordinates
  3. get_snapshot to test it
  4. submit_local to share upstream — requires the gh CLI (gh auth login)

Local cameras work immediately and don't need upstream approval to be useful.

Good sources: city DOTs, weather stations, ski resorts, national parks, ports, airports.

File layout

All runtime data lives in ~/.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

Pull requests welcome. See CONTRIBUTING.md for guidelines on adding camera sources.

Why this exists

See WHY.md for the reasoning behind the project's design decisions, how it compares to other camera services, and why agent-native and self-healing matter.

Privacy & security

See SECURITY.md for answers to common questions about surveillance, data collection, private cameras, and the security architecture.

License

MIT

来源:README.md,提交 62654d5

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v8.0.0最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分