Vancam

io.github.shughestrPublished by GitHub account shughestrv0.1.0Updated Oct 24, 2026

Search 1M+ live traffic cameras worldwide by bounds, radius, route, or nearest point.

VerifiedSTDIODesktop onlyLocation & LifestyleMedia & Design

Overview

AI-generated overview

Lets an assistant search over a million live traffic cameras worldwide by map area, radius, route, or nearest point, and fetch live camera frames.

What you can do
Provides tools to list cameras inside a bounding box, find cameras within a radius of a point, find cameras along a straight-line corridor between two points, and get the nearest cameras to a point. A separate tool fetches a camera's live frame by asset ID and returns the image data directly in the tool result. A documentation tool describes search modes, camera fields, and image URL patterns. Results include fields such as asset_id, coordinates, street address, direction, camera class, and location levels.
When to use it
Useful when an assistant needs current roadside or traffic-camera information for a location, corridor, or route, for example checking conditions near a point or along a drive. Also useful when a live camera image should be returned to the conversation rather than just a link.
Requirements
Runs locally as a Python package (uvx vancam-mcp or pip install vancam-mcp) over stdio, and is registered in an MCP client such as Claude Desktop or Claude Code. Network access to the Vancam API is required. An optional VANCAM_API_KEY environment variable raises rate limits; without it a shared, rate-limited key is used.
Before you install
The optional VANCAM_API_KEY is a personal credential and should be supplied through the environment, not committed to config files. Search and image requests go to the third-party Vancam API, so query locations are sent to that service. The shared anonymous key is pooled and rate-limited (about 1 request per second, 500 per month), so heavy use may be throttled.

Installation

In SourceWeft

  1. Open Vancam in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

Vancam MCP Server

Vancam.ai — Traffic Cameras & Road Conditions — as an MCP (Model Context Protocol) server. Gives AI agents live access to the same camera network behind Vancam's road-condition data: over 1 million traffic cameras worldwide, searchable by map bounds, radius, route, or nearest point.

  • 🔍 Search cameras by bounding box, radius, route corridor, or nearest-to-point
  • 📸 Fetch live frames by camera asset ID, returned directly in the tool result
  • 🌐 Real-time data from the same backend that powers the Vancam.ai map
  • 🤖 AI-ready — built with FastMCP, works with Claude Desktop, Claude Code, and any MCP-compatible client

Quick Start

Option A: Install from PyPI

bash
uvx vancam-mcp   # or: pip install vancam-mcp

Option B: Clone and install dependencies

bash
git clone https://github.com/shughestr/vancam-mcp.gitcd vancam-mcppip install -r requirements.txt

2. (Optional) Set up an API key

Requests work out of the box using a shared, rate-limited key (1 req/s, 500/month, pooled across all anonymous users). For higher limits, grab a free personal key from your Vancam.ai account page and set it as an environment variable:

bash
cp .env.example .env   # then edit .env
bash
# .envVANCAM_API_KEY=your_personal_key_here

3. Register the server with your MCP client

For Claude Desktop or Claude Code, add to your MCP config. If installed from PyPI (Option A):

json
{  "mcpServers": {    "vancam": {      "command": "uvx",      "args": ["vancam-mcp"],      "env": {        "VANCAM_API_KEY": ""      }    }  }}

If running from a local clone (Option B, see .mcp.json in this repo):

json
{  "mcpServers": {    "vancam": {      "command": "python3",      "args": ["/absolute/path/to/vancam-mcp/vancam_mcp/server.py"],      "env": {        "VANCAM_API_KEY": ""      }    }  }}

VANCAM_API_KEY is optional — leave it blank to use the shared, rate-limited key.

Restart your client, and the tools below become available.

Available Tools

list_cameras

List cameras within a bounding box — the same query the VanCam map runs on pan/zoom.

python
list_cameras(min_lat=49.2, min_lon=-123.2, max_lat=49.3, max_lon=-123.0, limit=50)
ParameterTypeDescription
min_lat, min_lon, max_lat, max_lonfloatBounding box (WGS84)
limitint, optionalMax results, 1–100 (default 100)
active_onlybool, optionalOnly camera_class=open live feeds (default false)

get_cameras_by_radius

Get cameras within a radius of a point.

python
get_cameras_by_radius(lat=49.28, lon=-123.12, radius=1.0, limit=20)
ParameterTypeDescription
lat, lonfloatCenter point (WGS84)
radiusfloat, optionalRadius in km (default 1.0)
limitint, optionalMax results (default 50)
active_onlybool, optionalOnly open/live cameras

get_cameras_along_route

Get cameras along a straight-line corridor between two points.

python
get_cameras_along_route(    origin_lat=49.2827, origin_lon=-123.1207,    dest_lat=49.1666, dest_lon=-123.1367,    buffer=200.0, limit=50)
ParameterTypeDescription
origin_lat, origin_lon, dest_lat, dest_lonfloatRoute endpoints
bufferfloat, optionalCorridor width in meters (default 100.0)
limitint, optionalMax results (default 50)
active_onlybool, optionalOnly open/live cameras

Results are sorted by route_fraction (0 = origin, 1 = destination). Note: this is a straight line between the two points, not a driving route.

get_nearest_cameras

Get the closest cameras to a point.

python
get_nearest_cameras(lat=49.2827, lon=-123.1207, limit=5)
ParameterTypeDescription
lat, lonfloatQuery point (WGS84)
limitint, optionalNumber of cameras (default 5)
active_onlybool, optionalOnly open/live cameras

get_camera_image

Fetch a camera's live frame by asset ID, returned as image data in the tool result (not just a URL — the image endpoint requires an API key header that most MCP clients can't attach themselves).

python
get_camera_image(asset_id="30145")

describe_camera_api

Returns documentation for all search modes, camera fields, and image URL patterns. Call this first if you're unsure which tool to use.

API Reference

Every search tool queries the same spatial API that backs the Vancam.ai map:

PurposeURL
Spatial searchhttps://api.vancam.ai/cameras/cameras
Live imagehttps://api.vancam.ai/api?asset_id={id}

Each camera includes asset_id, latitude, longitude, street_address, direction, camera_class (open/premium), level1/level2/level3 (country/state/city), distance_meters (radius/nearest searches), route_fraction (route search), and image_url/image_urls.

Full schema: openapi.yaml.

Environment overrides: VANCAM_API_KEY, VANCAM_CAMERAS_SEARCH_URL, VANCAM_API_IMAGE_URL

Project Structure

vancam-mcp/├── vancam_mcp/│   ├── server.py      # MCP server — registers the tools above│   └── camera_api.py  # api.vancam.ai client├── openapi.yaml       # API specification├── pyproject.toml     # Package metadata (PyPI: vancam-mcp)├── requirements.txt   # Python dependencies└── .mcp.json          # Example MCP client config

Related Projects

Contributing

Contributions are welcome — feel free to open an issue or submit a pull request.

License

MIT — see LICENSE.

Source: README.md at commit 1a3db75

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.1.0LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts