{"name":"io.github.stuchapin909/open-eagle-eye","slug":"stuchapin909-open-eagle-eye","title":null,"description":"Live snapshots from ~29,000 public cameras across 11 countries — traffic, weather, webcams","url":"https://mcp.market/server/stuchapin909-open-eagle-eye","rating":null,"grade":"B","score":74,"certified":false,"status":"active","category":"maps","tags":["maps"],"presence":{"score":31,"stars":4,"forks":2,"downloads_week":64,"last_push_at":"2026-09-27T09:30:09.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/stuchapin909/Open-Eagle-Eye","website":null,"version":"8.0.0","remotes":[],"packages":[{"registryType":"npm","identifier":"openeagleeye","version":"8.0.0","transport":{"type":"stdio"}}],"tools":[{"name":"add_local_camera","description":"Add a camera to your local collection. Local cameras persist in ~/.openeagleeye/local-cameras.json and survive restarts and registry updates. They appear in list_cameras and search_cameras with source 'local'. Share upstream anytime with submit_local.","write_action":false,"price_micros":0,"input_schema":null},{"name":"check_config","description":"Show API key configuration status. Lists all cameras in the registry that require authentication, the provider name, whether a key is configured in ~/.openeagleeye/config.json, and the signup URL for each. Use when a snapshot fails with an API key error to see which keys are missing.","write_action":false,"price_micros":0,"input_schema":null},{"name":"explore_cameras","description":"Get random cameras from the registry for discovery. Returns a surprise selection. Filter by city, country, or category to narrow the pool, or leave empty for a truly random pick.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_camera_info","description":"Look up camera metadata by ID. Returns full details for a single camera without fetching a snapshot. Use this to check if an ID is valid or to get current metadata for a known camera.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_snapshot","description":"Fetch a live image from a camera. Downloads the image to disk and returns the file path. Works on both upstream registry cameras and locally-added cameras. Use list_cameras or search_cameras first to find IDs.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_snapshots","description":"Fetch live images from multiple cameras in one call. Returns all snapshot file paths. Use to compare several cameras at once or to monitor a set of favorites. Max 5 cameras per call.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_cameras","description":"Browse the camera registry. Returns cameras with id, name, city, country, location, category, coordinates, and source (upstream or local). Supports filtering by city, country, location, and category. Use limit/offset for pagination — the full registry is large.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_local","description":"Show your locally-added cameras. These persist in ~/.openeagleeye/local-cameras.json and survive restarts and registry updates. They appear in list_cameras and search_cameras with source 'local'. Returns camera IDs, names, URLs, coordinates, and auth requirements.","write_action":false,"price_micros":0,"input_schema":null},{"name":"nearby_cameras","description":"Find cameras within a geographic radius. Returns cameras sorted by distance from the given point. Use for spatial queries like 'webcams near Times Square' or 'cameras within 10km of the Opera House'.","write_action":false,"price_micros":0,"input_schema":null},{"name":"remove_local","description":"Delete a locally-added camera by ID. Removes it from ~/.openeagleeye/local-cameras.json and the in-memory merged view. The camera is also auto-removed from the merged list. Use after sharing upstream via submit_local, or when a URL stops working.","write_action":true,"price_micros":0,"input_schema":null},{"name":"report_camera","description":"Report a broken or low-quality camera. Files a GitHub issue with a snapshot showing the current state, and saves the report locally. If the camera is local with a broken link, it is automatically removed. Requires 'gh' CLI for GitHub issue creation.","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_cameras","description":"Search cameras by text. Matches against name, city, country, location, and category. Use when looking for cameras in a specific place or of a specific type.","write_action":false,"price_micros":0,"input_schema":null},{"name":"submit_local","description":"Share your locally-added cameras with the upstream Open Eagle Eye registry by filing a GitHub issue. Validates each camera URL, checks for duplicates, and embeds a snapshot preview. Requires the 'gh' CLI installed and authenticated (gh auth login). Your local cameras are not removed — use remove_local after they are accepted.","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":74,"grade":"B","scanned_at":"2026-09-27T23:18:43.909Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-27T23:18:43.786Z","components":{"code":{"score":13,"max":25,"notes":["6 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 1 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"exec.shell-concat","severity":"high","component":"code","title":"Shell command built from a string (injection risk)","evidence":"src/github.js: …dy, 'utf8'); try { const result = execSync( `gh issue create --repo ${GITHUB_REPO} --title ${JSON.stringify(title)} --body-file ${JSON.stringify(tmpFile)} --label ${JSON.stringify(label)}`, { encodin…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"openeagleeye","version":"8.0.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":3,"publishedAt":"2026-03-31T08:40:56.542Z","repositoryUrl":"git+https://github.com/stuchapin909/Open-Eagle-Eye.git","weeklyDownloads":64}],"repo":{"found":true,"owner":"stuchapin909","repo":"Open-Eagle-Eye","archived":false,"pushedAt":"2026-09-27T09:30:09Z","stars":4,"forks":2,"openIssues":15,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/178119976?v=4","ownerCreatedAt":"2024-08-12T00:50:49Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/178119976?v=4&s=128","source":"github"},"presence":{"stars":4,"forks":2,"downloadsWeek":64,"license":"MIT","lastPushAt":"2026-09-27T09:30:09.000Z","score":31}}}},"grade_history":[],"reviews":[]}