axis-cam-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@axis-cam-mcp grab a still from the front door camera"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
axis-cam-mcp
MCP server for still images from Axis network cameras over VAPIX.
See axis-camera.md for full build, test and deployment instructions.
Layout
axis-cam-mcp/
├── LICENSE README.md CHANGELOG.md PLAN.md
├── environment.yml
├── pyproject.toml
├── examples/cameras.yaml
├── src/axis_cam_mcp/{__init__,cameras,vapix,server}.py
└── tests/Related MCP server: MCP Camera Tool
Quick start
conda env create -f environment.yml
conda activate axis-cam-mcp
pytest -q
axis-cam-mcp --checkSee axis-camera.md for camera configuration and AIDA wiring.
Tools
Tool | What it does |
| The configured names, descriptions and addresses. Never credentials. |
| One JPEG still. Optional |
| Model, product number and firmware. The cheapest reachability proof. |
| What a device actually supports: resolutions, rotations, video inputs. |
Devices
Works with native Axis IP cameras and with multi-channel video encoders, which differ in three ways the registry covers:
Anonymous access --
auth: noneon a camera that needs no login. Otherwise credentials come from the named environment variables, and a missing one is an error rather than a silent unauthenticated request.Several cameras behind one address --
channelpicks a video input ("1"-"4","quad"). Give each view its own registry entry so an agent can choose by description.Fixed resolution lists -- an encoder serves only a handful of sizes. Ask
camera_capabilities, or letgrab_frameretry at the closest supported size and tell you it did.axis-cam-mcp --checkflags a configured resolution or channel the device will refuse.
Available Tools
4 toolscamera_capabilitiesA
What camera actually supports: resolutions, rotations and video inputs.
Ask before guessing a resolution on an unfamiliar device, or to find out
which channel of a multi-channel encoder holds the view you want.
The listed resolutions are the WIDTHxHEIGHT values the device advertises. Most also accept named presets they do not advertise - an encoder taking 720x480 will usually take "D1", "4CIF", "CIF" and "QCIF" too.
Inputs: camera (required). Returns: object
camera_infoA
Model, product number and firmware for camera.
The cheapest way to prove credentials and network reach are good without moving an image.
Inputs: camera (required). Returns: object
grab_frameA
Capture one still frame from camera and return it as a JPEG.
If the device refuses the requested resolution, the frame is taken at the closest one it supports instead and the reply says so.
Args:
camera: A name from list_cameras.
resolution: "WIDTHxHEIGHT", e.g. "1280x720", or a device-specific
preset name such as "D1". The camera scales server-side; omit for
the camera's configured default. See camera_capabilities.
compression: 0-100, where 0 is best quality and the largest file.
rotation: 0, 90, 180 or 270 degrees.
channel: Which video input to read on a multi-channel encoder, e.g.
"3" or "quad". Omit on a single-sensor camera.
Inputs: camera (required), channel, rotation, resolution, +1 more.
list_camerasA
List the configured cameras: name, description and address.
Never returns credentials - only the names of the environment variables they are read from.
Inputs: no named parameters. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 4 tools
Each tool has a distinct purpose: listing configured cameras, grabbing a frame, retrieving device metadata, and querying supported capabilities. The potential similarity between camera_info and camera_capabilities is resolved by clear descriptions covering different aspects of the camera.
Names are all lowercase snake_case and readable, but the convention is mixed: list_cameras and grab_frame use verb_noun while camera_info and camera_capabilities are noun phrases with no verb. This is not chaotic, but it lacks a single predictable pattern.
Four tools is well-scoped for a camera-focused MCP: enumeration, metadata, capabilities, and frame capture. Each tool earns its place and there is no redundant or filler functionality.
The tool set covers the core read-only camera workflow: discover cameras, verify connectivity, check capabilities, and capture still frames. Minor gaps such as continuous video capture, camera configuration, or PTZ control are plausible extensions but do not seem essential to the stated purpose.
Maintenance
Related MCP Connectors
Clean PNG/JPEG screenshots via REST or MCP, with goal-driven multi-step navigation.
Full-page, viewport or mobile screenshots of many web pages via Apify, as PNG or JPEG.
1Screenshot/PDF/HTML rendering API. API key or x402 required — keyless access disabled.
Create and manage real-world Huint photo verification tasks via hosted streamable HTTP.
Related MCP Servers
- -licenseAqualityNot gradedmaintenanceA bridge between AI assistants like Claude and Anava-enabled Axis cameras, enabling real-time image analysis, event monitoring, and camera management through natural language commands.4-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to access and control network cameras to capture images and perform analysis including brightness detection, color distribution, and edge detection.1MIT
- AlicenseAqualityDmaintenanceMCP server for configuring Axis IP cameras via VAPIX, supporting device info, snapshots, image settings, overlays, network, PTZ, and system management.3712 npm1GPL 3.0
- FlicenseNot gradedqualityDmaintenanceMCP server that lets an LLM control an Axis network camera over VAPIX, including live streaming, PTZ, image settings, overlays, clock, light, user management, and a built-in RAG knowledge base of VAPIX docs.-