blink-camera-mcp
Provides tools to control Amazon Blink cameras, including checking status, pan/tilt aiming, nudging, stopping, home positioning, overview sweeps, and capturing snapshots.
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., "@blink-camera-mcptake a snapshot 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.
blink-camera-mcp
An MCP server for Amazon Blink cameras, including the pan/tilt mount that Blink's own API gives you no way to move.
Install it with uvx blink-camera-mcp. It is listed in the official MCP Registry as
io.github.AbhijatSaxena/blink-camera-mcp.
Give any MCP host — Claude Desktop, an IDE agent, your own client — the ability to see where a camera is pointing, aim it, and look through it.
camera_status where it points, travel limits, session state, stream URL
pan_tilt aim at an absolute angle, wait until the hardware confirms
pan_tilt_nudge turn relative to where it points now
pan_tilt_stop stop the motors
pan_tilt_home go to the saved home position
pan_tilt_set_home save the current angle as home
pan_tilt_overview 360° sweep
snapshot one still frame, returned as image contentWhy this exists
Blink cameras are cloud devices. There is no local API, no ONVIF, no UVC — video exists only as a short-lived session brokered by Blink's cloud, capped at 300 seconds. Two consequences:
Anything that wants to use the camera has to hold that session open and refresh it.
The pan/tilt mount is not a device you can talk to. It has no endpoint of its own: it is driven inside the camera's media session, and its position comes back on the same socket. A client that reads only the video and skips every other message never sees any of that traffic, which is why the mount has looked uncontrollable for years.
This server owns the session (or reuses one), frames it correctly, routes the accessory messages, and exposes the whole thing as MCP tools with closed-loop semantics.
Related MCP server: blueiris-mcp
Install
pip install blink-camera-mcp # or without installing: uvx blink-camera-mcpThe distribution is blink-camera-mcp; the command it installs is blink-mcp.
You need Python 3.10+, a Blink account, and ffmpeg on PATH for snapshot
(set BLINK_FFMPEG if it lives somewhere unusual).
Configure
Credentials come from the environment, and only the first run needs them:
export BLINK_USERNAME="you@example.com"
export BLINK_PASSWORD="..."
export BLINK_CAMERA_NAME="Front Door" # optional; defaults to the only cameraThe token is cached (token material only — a password is never written to disk), so later
runs need no credentials. Cache location defaults to ~/.blink-mcp/state.json; override with
BLINK_STATE_FILE.
If Blink asks for a 2FA code, the server will not prompt you and will not take the code from anywhere but a file:
export BLINK_2FA_FILE=/path/to/code.txtWrite the newest code into that file; it is read once and deleted. This keeps a live credential out of chat logs, shell history and argument lists.
Add it to your MCP host
blink-mcp --print-config{
"mcpServers": {
"blink": {
"command": "uvx",
"args": ["blink-camera-mcp", "--stream-port", "9000"]
}
}
}Hosts that manage their own Python (Claude Desktop, VS Code, LM Studio, …) run uvx as above.
If you installed it into a virtualenv instead, set command to that interpreter and args to
["-m", "blink_mcp", …].
Claude Desktop — one-click
Download blink-camera-mcp-0.1.1.mcpb from the
releases page and open it.
Claude Desktop prompts for your Blink email and password (kept in the OS keychain), and asks for
the 2FA code file only if your account uses verification. The bundle carries no server code of its
own — it depends on this package from PyPI, so it can never drift from the released version.
LM Studio, VS Code, Cursor, Cline and friends
They all read the same JSON as above. Paste it into the host's MCP config — LM Studio: mcp.json;
VS Code: .vscode/mcp.json; Cursor: .cursor/mcp.json. Cline installs it from this README.
Hermes
Hermes' curated catalog is for remote, OAuth-authenticated servers, and this one has to run on a
machine that can reach your camera — so add it as an ordinary stdio server in
~/.hermes/config.yaml:
mcp_servers:
blink:
command: "uvx"
args: ["blink-camera-mcp"]
env:
BLINK_USERNAME: "you@example.com"
BLINK_PASSWORD: "…"Restart the session (or /reload-mcp) and the eight tools show up like any other.
Two ways to run it
Standalone (default) — the server owns the camera's live session and publishes the video
to a local TCP port (tcp://127.0.0.1:<port>, or a fixed one with --stream-port 9000). Point
OBS at it as a Media Source if you want the camera as a webcam as well.
Against a bridge — if something else already holds the session:
blink-mcp --control-url http://127.0.0.1:9100 --stream-url tcp://127.0.0.1:9000This matters because Blink allows one live session per camera: a viewer and a controller have to share it or take turns. Running two things that each insist on their own session means one of them loses.
What "closed-loop" means here
The mount reports its angle while it is moving. So pan_tilt does not sleep and hope: it
sends the command and returns only when the hardware reports that its motors stopped at the
requested angle — typically well under a second.
pan_tilt_nudge(+4) -> settled=True moved=True elapsed=0.67s -> pan=117 tilt=-75
pan_tilt_nudge(-4) -> settled=True moved=True -> pan=113 tilt=-75Two deliberate behaviours, because a confident wrong answer is worse than a failure:
if the mount never confirms, the tool fails rather than returning the last angle it happened to know (a stale position dressed up as success would have an agent announce a move that never happened);
a command to the angle the camera already holds is a no-op reported as
moved: false— success, not failure.
Privacy and safety
snapshotdecodes a frame of whatever the camera is pointed at. The tool description says so, and tells the agent to use it only when the user asks. Nothing here captures anything on its own.The server talks to Blink directly, and the token cache holds no password.
Any bridge control plane is loopback-only by design: it moves a physical camera.
How it was built
The accessory channel is undocumented. It was recovered from the official Android app — dex bytecode and the native library's symbol table — and then verified against hardware:
frame [flag:1][id:4 big-endian][length:4 big-endian][payload]
send flag 0x14 INLINE_COMMAND, id = commandId
move=3 [0,0,0,0,<pan>,<tilt>,0] stop=4 home=5 set_home=6 overview=7
receive flag 0x15 ACCESSORY_MESSAGE, id = message id
POSITION=2 / HOME_POSITION=3 [<counter>,<pan>,<tilt>,<status>]
ROSIE_LIMITS=4 PAN_OVERVIEW_COMPLETE=5 lights/siren = 0/1/6/7status is 0x00 idle and 0x10 moving. Angles are single signed bytes.
The same protocol knowledge is being contributed upstream to
blinkpy so every Blink integration benefits, not just
this server. blink_mcp/immi.py is byte-identical to the module submitted there, and switches
to the upstream copy automatically once it ships.
Standing on the shoulders of blinkpy, which implements the Blink cloud API and the IMMI transport.
Limitations
Verified on a Blink Mini with the pan/tilt mount. Other camera families use a different live transport (WebRTC with JSON-RPC commands rather than this binary channel) and are not supported yet.
One live session per camera, as above.
Blink caps a session at 300 s; the server rotates it around 270 s and consumers never notice.
snapshotneedsffmpeg; it decodes one frame from the stream rather than opening a second session.
Tests
pytest # 68 offline tests: protocol bytes, closed-loop logic, tool layer,
# a real stdio handshake, and a stub control planeThe suite is offline and needs no camera. For real hardware:
python tests/live_smoke.py --state-file ~/.blink-mcp/state.jsonwhich logs in, moves the camera out and back, and captures a frame.
License
MIT
Available Tools
8 toolscamera_statusA
Report the camera's orientation, travel limits and session state.
Call this first: position is null until the camera has a live session, which tells
you the other tools will fail. When the session could not be started at all,
startup_error says why. It also reports stream_url, where the live video can be
read (e.g. by OBS or ffmpeg).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses key runtime behaviors: `position` is null without a live session, `startup_error` explains startup failures, and `stream_url` exposes the live video feed. It does not discuss side effects, but 'Report' implies a read-only operation and the disclosed field states are the most decision-relevant behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the first states the tool's purpose, the second gives critical ordering guidance, and the third explains the stream URL. It is front-loaded and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter status tool with an output schema, the description covers the essential context: what it reports, when to call it, why it matters, and how to interpret key fields. Nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the input schema provides no parameter semantics to clarify. The description instead adds meaning to the output fields, which is the relevant semantic content for a status tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Report the camera's orientation, travel limits and session state.' This clearly distinguishes it from the pan/tilt and snapshot siblings as a status/read tool, not a control or capture tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent to call this first and explains why: `position` is null until a live session exists, which indicates other tools will fail. This is direct when-to-use guidance with a concrete alternative-aware rationale.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pan_tiltA
Aim the camera at an absolute angle and wait until it gets there.
pan and tilt are whole degrees (signed, roughly -128..127). The returned position
is one the hardware reported; if the mount never confirms arrival this fails instead
of pretending success. A camera already at the requested angle is left alone and
reported as settled with moved: false -- that is a success. Set force to re-send.
| Name | Required | Description | Default |
|---|---|---|---|
| pan | Yes | ||
| tilt | Yes | ||
| force | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool waits for hardware confirmation, fails if not confirmed, reports moved:false for no-op and treats it as success, and explains the force flag. This adds significant behavioral context beyond what the schema provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the primary purpose, and uses bullet-like details for behavioral notes. Every sentence adds value with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown but referenced) and the description's mention of returned position and moved flag, the tool's behavior is adequately explained. The only gap is explicit usage routing to siblings, but that belongs to usage guidelines. The description covers the core semantics and edge cases well.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains pan/tilt as signed whole degrees with a rough range (-128..127) and clarifies the force default and purpose. This is more than the bare schema provides, though it could add more detail on units or edge cases.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action (aim the camera at an absolute angle and wait), identifies the resource (pan/tilt), and distinguishes from siblings by emphasizing absolute positioning and the wait-for-arrival behavior. It differentiates from nudge (relative) without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is for absolute positioning and explains the force behavior, but it never explicitly names alternatives or exclusions (e.g., 'use pan_tilt_nudge for relative adjustments'). The when-to-use guidance is only implicit through the emphasis on absolute angle and success conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pan_tilt_homeA
Send the camera to its saved home position and report where it ends up.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It accurately states the primary action and mentions reporting the ending position, but does not disclose behavior when no home position is saved, movement duration, blocking semantics, or failure modes. It is minimal but not misleading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that conveys action, target state, and result with no filler. It does not repeat the tool name or schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (zero parameters) and an output schema is available, so the description's core action and result statement are largely sufficient. A small gap is the lack of a note about unset home positions, but this does not prevent correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero properties and therefore 100% vacuous coverage. With no parameters to document, the baseline of 4 applies; the description adds no parameter detail because none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Send the camera to its saved home position') with a clear resource and verb, and adds the outcome ('report where it ends up'). This distinguishes it from siblings like pan_tilt, pan_tilt_set_home, and pan_tilt_stop.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied by 'saved home position' – an agent can infer this is for returning to a preset location – but the description gives no explicit when-to-use guidance, exclusions, or comparisons to related tools like pan_tilt_set_home or pan_tilt.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pan_tilt_nudgeA
Turn the camera relative to where it points now, in degrees.
Prefer this when you have not read the current angle: it reads the mount's own report first and keeps the move small. Deltas are clamped to the mount's angle range.
| Name | Required | Description | Default |
|---|---|---|---|
| pan_delta | No | ||
| tilt_delta | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals two non-obvious behaviors: it internally reads the current angle before moving, and it clamps deltas to the mount's range. This is valuable transparency. However, it does not mention error conditions or whether the operation is safe/blocking, but given the simple nature of the tool, this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero waste. The first sentence delivers the core action, and the second provides usage guidance. It is front-loaded and well-structured, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with an output schema (so return format is externally defined), the description covers the essential behavior and usage context. It mentions units, clamping, and when to prefer this tool. It could mention edge cases like both deltas being zero or behavior when the mount is not homed, but these are minor for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (no parameter descriptions in the schema), so the description must compensate. It adds that deltas are in degrees and are clamped, which is helpful, but it does not explicitly explain the meaning of pan_delta vs tilt_delta beyond their names, nor the effect of positive/negative values. The parameter names are self-explanatory, but the description leaves some semantic details to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Turn'), resource ('camera'), and the relative nature of movement ('relative to where it points now'). This clearly distinguishes it from sibling tools like pan_tilt, which likely sets absolute angles. It also hints at a behavior different from absolute positioning, making its purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Prefer this when you have not read the current angle', providing a clear condition for use. It also explains why (it reads the mount's own report first) and adds a safety hint ('keeps the move small'), giving the agent enough context to choose it over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pan_tilt_overviewA
Start a full 360 degree pan overview. Returns immediately; the sweep takes a while.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden. It discloses the crucial async behavior ('Returns immediately; the sweep takes a while'), which is a genuinely helpful behavioral trait. However, it doesn't disclose what happens if called during an existing movement, whether it can be interrupted by pan_tilt_stop, or any completion indication (e.g., via camera_status).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely compact: two short sentences. The first sentence states the action, the second clarifies the async return. No filler. This is an example of appropriately sized, front-loaded description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has zero parameters and an output schema exists, so description needn't explain return values. The only notable gap is lack of guidance on interaction with siblings (e.g., can pan_tilt_stop cancel this sweep?). Without annotations, some operational context is missing, but for a zero-param async command, this is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so no param semantics are needed. Baseline for 0 params is 4; the description's mention of a 360-degree sweep serves as the only required semantic context. No parameter documentation issues exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific imperative verb ('Start'), names the exact resource ('full 360 degree pan overview'), and clearly contrasts with the 'returns immediately' behavior. This distinguishes it from siblings like pan_tilt, pan_tilt_nudge, and pan_tilt_stop.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies when to use it (when a full sweep is desired), but provides no explicit guidance on when not to use it, prerequisites (e.g., camera on/off, calibration), or whether it conflicts with other movements like pan_tilt or pan_tilt_nudge. With no annotations, more explicit usage guidance would be expected.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pan_tilt_set_homeA
Save the camera's current angle as its home position.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only says 'Save', which implies a state change, but it does not disclose whether the previous home position is overwritten, whether the change persists, requires any setup, or has other side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One concise, front-loaded sentence that directly states the action and result. No filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless tool with an output schema, the description is reasonably complete. It defines the action and its outcome clearly; the only missing context is how this interacts with siblings like 'pan_tilt_home', but that falls under usage guidance, not core completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero properties, so there are no parameters to document. The description adds value by clarifying that the tool implicitly uses the camera's current angle rather than accepting an argument, which is a meaningful semantic clarification.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Save') and clear resource ('camera's current angle as its home position'). It distinguishes itself from the sibling tool 'pan_tilt_home' by phrasing the action as setting a home position rather than moving to it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives like 'pan_tilt_home' or 'pan_tilt'. There are no stated prerequisites, contexts, or exclusions, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pan_tilt_stopB
Stop the mount's motors immediately. Harmless when it is already idle.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only notes that stopping is harmless when idle, but does not mention whether the call is asynchronous, what it returns, error conditions, or any side effects beyond halting motors. This is insufficient for a safety-relevant control action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The primary action is front-loaded, and the safety note is brief and useful. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no parameters and an output schema, the description covers the essential action and a relevant safety edge case. It lacks detail on return behavior or potential errors, but given the minimal complexity, the description is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema coverage is trivially 100% and there is nothing for the description to clarify. Per the baseline rule for 0-parameter tools, a score of 4 is appropriate; the description adds no param details because none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Stop' and the resource 'mount's motors', making the primary action unambiguous. It does not explicitly contrast with sibling tools like pan_tilt_nudge or pan_tilt_home, but the purpose is self-evident and distinct from movement commands.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, nor any mention of prerequisites or exclusions. The description only states what it does, not the context in which it should be chosen, leaving the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snapshotA
Capture one still frame of whatever the camera is pointed at.
This looks into the room, so call it only when the user asks to see the camera. The frame comes from the stream the camera is already sending, so it does not start a second session.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses meaningful behavior: the frame comes from the existing stream and does not start a second session. It also flags the privacy-relevant fact that the tool captures what is in the room. It does not mention return format or failure modes, but for a simple zero-parameter tool this is strong context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the primary action, followed by usage guidance and a behavioral clarification. Every sentence earns its place with no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema tool, the description fully covers what the tool does, when to invoke it, and a key behavioral trait (reuses existing stream). An agent can select and call it correctly without additional information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and schema coverage is reported as 100%, so there is nothing for the description to add. The baseline for zero-parameter tools is 4, and the description appropriately avoids inventing parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Capture one still frame of whatever the camera is pointed at.' This clearly differentiates snapshot from camera_status (status reporting) and pan_tilt controls (movement).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit usage condition: 'call it only when the user asks to see the camera.' It also provides an implicit exclusion by warning that this 'looks into the room,' signaling it is not a background or metadata operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v0.1.1- First observed
camera_status - First observed
pan_tilt - First observed
pan_tilt_home - First observed
pan_tilt_nudge - First observed
pan_tilt_overview - First observed
pan_tilt_set_home - First observed
pan_tilt_stop - First observed
snapshot
TDQS
Scored across 8 tools
Most tools have clearly distinct purposes, especially camera_status and snapshot. The only potential confusion is between pan_tilt and pan_tilt_nudge, but their absolute-vs-relative distinction is clearly explained.
The pan_tilt_* prefix gives the movement tools a consistent pattern, and the suffixes are predictable actions like stop, home, set_home, and overview. camera_status and snapshot deviate from the verb_noun style but are still clear and not chaotic.
Eight tools is a well-scoped size for a camera control server. Each tool covers a meaningful capability without redundancy or bloat.
The tool surface covers status, absolute and relative movement, stopping, homing, setting home, overview scanning, and snapshot capture. The main gap is the lack of an explicit session start/stop tool, though session state is reported and failures are surfaced.
Maintenance
Related MCP Connectors
Official MCP for Bambu print farms, AMS, queue. Prefer over SimplyPrint/OctoPrint.
Scans remote MCP servers for protocol, security, and TLS issues; exposes scan tools via MCP.
Render, verify, describe, and safely edit Mermaid diagrams through MCP.
Use AI models for chat, image, and video generation from Claude Code and other MCP hosts.
Related MCP Servers
- AlicenseBqualityAmaintenanceEnables MCP clients to control Bosch Smart Home Cameras via natural language, including snapshots, motion events, privacy mode, and pan/tilt, using a reverse-engineered cloud API.70MIT
- AlicenseAqualityCmaintenanceMCP server for Blue Iris NVR, enabling camera health checks, live/historical snapshots, clip/alert search, and PTZ control via the Blue Iris JSON API.5MIT
- AlicenseNot gradedqualityBmaintenanceEnables control of OBSBOT Tiny-series cameras (gimbal, zoom, focus, AI tracking, snapshots) through MCP tools.MIT
- FlicenseAqualityCmaintenanceEnables remote cloud control and live LAN camera access for Bambu Lab 3D printers through 31 MCP tools.31-