{
  "markdown": "# Vancam MCP Server\n\n<!-- mcp-name: io.github.shughestr/vancam-mcp -->\n\n[Vancam.ai](https://vancam.ai) — **Traffic Cameras & Road Conditions** — as an [MCP (Model Context Protocol)](https://modelcontextprotocol.io) 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.\n\n- 🔍 **Search cameras** by bounding box, radius, route corridor, or nearest-to-point\n- 📸 **Fetch live frames** by camera asset ID, returned directly in the tool result\n- 🌐 **Real-time data** from the same backend that powers the [Vancam.ai](https://vancam.ai) map\n- 🤖 **AI-ready** — built with [FastMCP](https://github.com/modelcontextprotocol/python-sdk), works with Claude Desktop, Claude Code, and any MCP-compatible client\n\n## Quick Start\n\n**Option A: Install from PyPI**\n\n```bash\nuvx vancam-mcp   # or: pip install vancam-mcp\n```\n\n**Option B: Clone and install dependencies**\n\n```bash\ngit clone https://github.com/shughestr/vancam-mcp.git\ncd vancam-mcp\npip install -r requirements.txt\n```\n\n**2. (Optional) Set up an API key**\n\nRequests 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](https://vancam.ai) and set it as an environment variable:\n\n```bash\ncp .env.example .env   # then edit .env\n```\n\n```bash\n# .env\nVANCAM_API_KEY=your_personal_key_here\n```\n\n**3. Register the server with your MCP client**\n\nFor Claude Desktop or Claude Code, add to your MCP config. If installed from PyPI (Option A):\n\n```json\n{\n  \"mcpServers\": {\n    \"vancam\": {\n      \"command\": \"uvx\",\n      \"args\": [\"vancam-mcp\"],\n      \"env\": {\n        \"VANCAM_API_KEY\": \"\"\n      }\n    }\n  }\n}\n```\n\nIf running from a local clone (Option B, see `.mcp.json` in this repo):\n\n```json\n{\n  \"mcpServers\": {\n    \"vancam\": {\n      \"command\": \"python3\",\n      \"args\": [\"/absolute/path/to/vancam-mcp/vancam_mcp/server.py\"],\n      \"env\": {\n        \"VANCAM_API_KEY\": \"\"\n      }\n    }\n  }\n}\n```\n\n`VANCAM_API_KEY` is optional — leave it blank to use the shared, rate-limited key.\n\nRestart your client, and the tools below become available.\n\n## Available Tools\n\n### `list_cameras`\nList cameras within a bounding box — the same query the VanCam map runs on pan/zoom.\n\n```python\nlist_cameras(min_lat=49.2, min_lon=-123.2, max_lat=49.3, max_lon=-123.0, limit=50)\n```\n| Parameter | Type | Description |\n|---|---|---|\n| `min_lat`, `min_lon`, `max_lat`, `max_lon` | float | Bounding box (WGS84) |\n| `limit` | int, optional | Max results, 1–100 (default 100) |\n| `active_only` | bool, optional | Only `camera_class=open` live feeds (default false) |\n\n### `get_cameras_by_radius`\nGet cameras within a radius of a point.\n\n```python\nget_cameras_by_radius(lat=49.28, lon=-123.12, radius=1.0, limit=20)\n```\n| Parameter | Type | Description |\n|---|---|---|\n| `lat`, `lon` | float | Center point (WGS84) |\n| `radius` | float, optional | Radius in km (default 1.0) |\n| `limit` | int, optional | Max results (default 50) |\n| `active_only` | bool, optional | Only open/live cameras |\n\n### `get_cameras_along_route`\nGet cameras along a straight-line corridor between two points.\n\n```python\nget_cameras_along_route(\n    origin_lat=49.2827, origin_lon=-123.1207,\n    dest_lat=49.1666, dest_lon=-123.1367,\n    buffer=200.0, limit=50\n)\n```\n| Parameter | Type | Description |\n|---|---|---|\n| `origin_lat`, `origin_lon`, `dest_lat`, `dest_lon` | float | Route endpoints |\n| `buffer` | float, optional | Corridor width in meters (default 100.0) |\n| `limit` | int, optional | Max results (default 50) |\n| `active_only` | bool, optional | Only open/live cameras |\n\nResults are sorted by `route_fraction` (0 = origin, 1 = destination). Note: this is a straight line between the two points, not a driving route.\n\n### `get_nearest_cameras`\nGet the closest cameras to a point.\n\n```python\nget_nearest_cameras(lat=49.2827, lon=-123.1207, limit=5)\n```\n| Parameter | Type | Description |\n|---|---|---|\n| `lat`, `lon` | float | Query point (WGS84) |\n| `limit` | int, optional | Number of cameras (default 5) |\n| `active_only` | bool, optional | Only open/live cameras |\n\n### `get_camera_image`\nFetch 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).\n\n```python\nget_camera_image(asset_id=\"30145\")\n```\n\n### `describe_camera_api`\nReturns documentation for all search modes, camera fields, and image URL patterns. Call this first if you're unsure which tool to use.\n\n## API Reference\n\nEvery search tool queries the same spatial API that backs the [Vancam.ai](https://vancam.ai) map:\n\n| Purpose | URL |\n|---|---|\n| Spatial search | `https://api.vancam.ai/cameras/cameras` |\n| Live image | `https://api.vancam.ai/api?asset_id={id}` |\n\nEach 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`.\n\nFull schema: [`openapi.yaml`](openapi.yaml).\n\n**Environment overrides:** `VANCAM_API_KEY`, `VANCAM_CAMERAS_SEARCH_URL`, `VANCAM_API_IMAGE_URL`\n\n## Project Structure\n\n```\nvancam-mcp/\n├── vancam_mcp/\n│   ├── server.py      # MCP server — registers the tools above\n│   └── camera_api.py  # api.vancam.ai client\n├── openapi.yaml       # API specification\n├── pyproject.toml     # Package metadata (PyPI: vancam-mcp)\n├── requirements.txt   # Python dependencies\n└── .mcp.json          # Example MCP client config\n```\n\n## Related Projects\n\n- [Vancam.ai](https://vancam.ai) — Web interface for traffic cameras\n- [Model Context Protocol](https://modelcontextprotocol.io) — MCP specification\n- [Vancam GPT](https://chatgpt.com/g/g-693512b18c0481918eb9b2c5d77e9eaa-vancam) — Same data, packaged as a ChatGPT GPT\n\n## Contributing\n\nContributions are welcome — feel free to open an issue or submit a pull request.\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n",
  "bytes": 6174,
  "sha": "c702526661fff26a75ab4286070eefa8db1a0fe73a0aa14c0eba42409ef67b3a",
  "repo_slug": "shughestr/vancam-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_shughestr_vancam_mcp_c401163b/readme"
}