
Blink Camera
io.github.AbhijatSaxena由 GitHub 账号 AbhijatSaxena 发布v0.1.1更新于 Oct 25, 2026
Control an Amazon Blink camera and its pan/tilt mount: aim it, read its position, grab a frame.
概览
控制 Amazon Blink 摄像头及其平移/倾斜云台:查看朝向、调整角度并抓取画面。
- 可以做什么
- 查询摄像头当前朝向角度、移动范围、会话状态与串流地址。将摄像头转到指定绝对角度,或相对当前位置微调,并等待硬件确认到位。停止电机、回到已保存的初始位置,或将当前角度设为初始位置。执行 360 度全景扫描。抓取单帧静态画面并以图像内容返回。
- 适用场景
- 当你使用 Amazon Blink 摄像头(尤其是带平移/倾斜云台的型号),并希望让 AI 助手查看当前朝向、调整角度或抓取单帧画面时适用。若想把摄像头画面当作网络摄像头使用,也可配合本地串流接入 OBS。
- 运行要求
- 需在本机运行,使用 Python 3.10 以上,可通过 uvx 或 pip 安装。需要 Blink 账号,并以环境变量 BLINK_USERNAME 与 BLINK_PASSWORD 提供登录信息;若账号启用两步验证,需用 BLINK_2FA_FILE 指定存放验证码的文件。抓取画面需要 ffmpeg(可用 BLINK_FFMPEG 指定路径),且需能连接 Blink 云端。
安装
在 SourceWeft 中
- 打开 控制台中的 Blink Camera,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
blink-camera-mcp
[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.
Why 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.
Install
The 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:
The 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:
Write 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
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:
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:
This 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.
Two 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:
status 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
The suite is offline and needs no camera. For real hardware:
which logs in, moves the camera out and back, and captures a frame.
License
MIT
来源:README.md,提交 2cd4964
工具
0版本历史
1- v0.1.1最新Sep 26, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分