Skip to main content
Glama

unifi_protect_get_camera_snapshot

Read-only

Capture a still frame from a camera as it looks now, saving it to disk and returning the JPEG path, or returning the image inline for vision models.

Instructions

Capture a still frame from a camera as it looks right now. Writes the JPEG to disk and returns its path, size and content type by default. Set output="image" to get the frame inline instead so a vision model can actually look at it — that costs roughly 300,000 to 700,000 characters of context per call, so choose it deliberately rather than by default. A fresh capture is forced; without that the console can hand back a cached frame that is minutes old.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
outputNoWhere the frame goes. "file" writes it to disk and returns the path — cheap, and you can read the file later if it turns out to matter. "image" returns it inline for a model to look at, at a large cost in context.file
cameraIdYesCamera id — the `id` from unifi_protect_list_cameras, a 24-character hex string. Not the camera's name and not its MAC address.
savePathNoAbsolute path to write the JPEG to. Defaults to a timestamped file under UNIFI_PROTECT_SNAPSHOT_DIR. Parent directories are created.
highQualityNoRequest the camera's full resolution rather than a scaled frame. Larger and slower; with output="image" it multiplies an already expensive call.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the sparse readOnlyHint=true annotation: it discloses the disk write and returned fields, the large context cost of inline mode, and the forced-fresh-capture behavior that prevents stale cached frames. The local disk write is a client-side side effect rather than a mutation of the Protect system, so it doesn't contradict readOnlyHint=true. This is exactly the kind of behavioral context an agent needs that annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences with the core action front-loaded, followed by mode guidance, cost warning, and the cache-freshness caveat — each sentence earns its place. The cost figure is unusually specific but directly shapes agent decision-making, so it's justified. Slightly longer than the tightest possible version, but nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and only readOnlyHint=true as annotation support, the description carries the full burden and covers the essentials: return fields, both output modes, cost implications, and the staleness pitfall. Minor gaps remain — no error-case behavior and no exact return JSON shape — but since it names the return fields explicitly and covers parameter interactions, it is sufficiently complete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3 even with no description-side parameter info. The description adds value above that baseline: it quantifies the context cost of output="image", explains the multiplicative cost when highQuality is combined with output="image", and names the default savePath directory (UNIFI_PROTECT_SNAPSHOT_DIR). These cross-parameter interactions are not present in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource pair — 'Capture a still frame from a camera as it looks right now' — which both states the action and pins the tool to live capture. The phrase 'right now' plus the forced-fresh-capture note distinguishes it from siblings like get_event_thumbnail (historical frames) and export_video (video). The default return (path, size, content type) further disambiguates what the tool produces.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear in-tool mode guidance: use output="image" only when a vision model must inspect the frame, choose output="file" by default, backed by a concrete cost range (300,000–700,000 context characters) as the decision driver. It does not explicitly name sibling alternatives for historical captures, but the 'as it looks right now' phrasing implies the live-capture context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mgcrea/mcp-unifi-protect'

If you have feedback or need assistance with the MCP directory API, please join our Discord server