Blink Camera について
Blink Cameraは、Amazon Blinkカメラとパン・チルトマウント向けのMCPサーバーです。MCPクライアントから映像や状態を確認して向きを操作でき、ライブセッションを通じて移動の完了を確認します。
主な機能
- 01カメラ状態と向きの確認
- 02パン・チルトの角度指定と微調整
- 03停止、ホーム移動、ホーム位置の保存
- 04360°の概要スイープ
- 05静止画の取得
- 06ライブセッションの管理と更新
活用シーン
- 01Blinkカメラを指定位置へ向ける
- 02向きを確認して視野を微調整する
- 03カメラ映像から静止画を取得する
- 04複数の利用者でカメラセッションを共有する
MCP 対応
MCPサーバーは、カメラ状態、パン・チルト操作、スナップショットのツールをクライアントに公開します。Blinkのライブセッションを管理または再利用し、そのセッション経由でマウントを制御します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx blink-camera-mcpBLINK_USERNAMEBlink account email address.BLINK_PASSWORDシークレットBlink account password.BLINK_2FA_FILEシークレットPath to a file holding the 2FA code, when the account has verification enabled. The code is read from the file, never from the command line.BLINK_CAMERA_NAMEWhich camera to drive, when the account has more than one.BLINK_STATE_FILEWhere to cache the login token. Defaults to ~/.blink-mcp/state.json.BLINK_FFMPEGPath to the ffmpeg binary, if it is not on PATH.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
8掲載時のツール一覧 · 2 週間前に更新
このツールにパラメーターはありません。
詳細
blink-camera-mcp
Amazon Blink カメラ(Blink 独自の API では動かす方法のないパン/チルトマウントを含む)向けの MCP サーバーです。
uvx blink-camera-mcp でインストールできます。公式 MCP Registry には
io.github.AbhijatSaxena/blink-camera-mcp として登録されています。
Claude Desktop、IDE エージェント、自作のクライアントなど、あらゆる MCP ホストに、カメラの向きを確認し、照準を合わせ、カメラを通して見る機能を提供します。
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 content
このプロジェクトの目的
Blink カメラはクラウドデバイスです。ローカル API も ONVIF も UVC もなく、映像は Blink のクラウドを介した有効期間の短いセッションでのみ利用でき、その上限は 300 秒です。これには次の 2 つの影響があります。
- カメラを使うものは、そのセッションを開いたまま保持し、更新する必要があります。
- パン/チルトマウントは、直接通信できるデバイスではありません。独自のエンドポイントはなく、カメラのメディアセッション内で動作し、その位置情報も同じソケットから返されます。映像だけを読み取り、ほかのメッセージをすべて無視するクライアントには、これらの通信が一切見えません。そのため、マウントは長年、制御不能に見えていました。
このサーバーはセッションを管理(または既存のセッションを再利用)し、適切にフレーミングし、アクセサリーのメッセージを振り分け、閉ループ方式の MCP ツールとして全機能を公開します。
インストール
pip install blink-camera-mcp # or without installing: uvx blink-camera-mcp
配布パッケージ名は blink-camera-mcp、インストールされるコマンド名は blink-mcp です。
Python 3.10 以降、Blink アカウント、および snapshot 用の ffmpeg が PATH 上に必要です(通常と異なる場所にある場合は BLINK_FFMPEG を設定してください)。
設定
認証情報は環境変数から取得され、必要なのは初回実行時のみです。
export BLINK_USERNAME="[email protected]"
export BLINK_PASSWORD="..."
export BLINK_CAMERA_NAME="Front Door" # optional; defaults to the only camera
トークンはキャッシュされるため(保存されるのはトークン情報のみで、パスワードがディスクに書き込まれることはありません)、以降の実行では認証情報は不要です。キャッシュの既定の場所は ~/.blink-mcp/state.json です。BLINK_STATE_FILE で変更できます。
Blink から 2FA コードを求められた場合、サーバーがコードを尋ねることはなく、ファイル以外からコードを受け取ることもありません。
export BLINK_2FA_FILE=/path/to/code.txt
最新のコードをそのファイルに書き込んでください。コードは一度だけ読み取られ、その後削除されます。これにより、有効な認証情報がチャットログ、シェル履歴、引数リストに残らないようにできます。
MCP ホストに追加する
blink-mcp --print-config
{
"mcpServers": {
"blink": {
"command": "uvx",
"args": ["blink-camera-mcp", "--stream-port", "9000"]
}
}
}
独自に Python を管理するホスト(Claude Desktop、VS Code、LM Studio など)では、上記のように uvx を実行します。代わりに仮想環境にインストールした場合は、command にそのインタープリターを、args に ["-m", "blink_mcp", …] を設定してください。
Claude Desktop — ワンクリック
リリースページから blink-camera-mcp-0.1.1.mcpb をダウンロードして開いてください。
Claude Desktop から Blink のメールアドレスとパスワードを尋ねられます(OS のキーチェーンに保存されます)。アカウントで認証が必要な場合に限り、2FA コードファイルについても尋ねられます。このバンドルには独自のサーバーコードは含まれず、PyPI のこのパッケージに依存するため、リリース済みバージョンとの不一致は起こりません。
LM Studio、VS Code、Cursor、Cline など
いずれも上記と同じ JSON を読み込みます。ホストの MCP 設定に貼り付けてください。LM Studio の場合は mcp.json、VS Code の場合は .vscode/mcp.json、Cursor の場合は .cursor/mcp.json です。Cline ではこの README からインストールします。
Hermes
Hermes の厳選カタログはリモートの OAuth 認証サーバー向けですが、このサーバーはカメラに接続できるマシンで実行する必要があります。そのため、通常の stdio サーバーとして ~/.hermes/config.yaml に追加してください。
mcp_servers:
blink:
command: "uvx"
args: ["blink-camera-mcp"]
env:
BLINK_USERNAME: "[email protected]"
BLINK_PASSWORD: "…"
セッションを再起動する(または /reload-mcp を実行する)と、ほかのツールと同じように 8 つのツールが表示されます。
実行方法は2つあります
単独(デフォルト) — サーバーがカメラのライブセッションを管理し、動画をローカルの TCP ポート(tcp://127.0.0.1:<port>、または --stream-port 9000 で指定する固定ポート)に配信します。カメラをウェブカメラとしても使う場合は、OBS のメディアソースとして指定してください。
ブリッジ経由 — すでに別のものがセッションを保持している場合:
blink-mcp --control-url http://127.0.0.1:9100 --stream-url tcp://127.0.0.1:9000
この点が重要なのは、Blink ではカメラごとにライブセッションを1つしか持てないためです。ビューアーとコントローラーはセッションを共有するか、交互に使用する必要があります。それぞれが個別のセッションを要求するものを2つ同時に実行すると、片方は接続を失います。
ここでいう「クローズドループ」の意味
マウントは、動作中も角度を報告します。そのため、pan_tilt は待機して成功を期待するのではなく、コマンドを送信し、モーターが要求した角度で停止したとハードウェアが報告するまで戻りません。通常は1秒もかかりません。
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=-75
自信たっぷりの誤った回答は失敗より悪いため、意図的に次のように動作します。
- マウントが確認を返さない場合、最後に把握していた角度を返すのではなく、ツールは失敗します(古い位置情報を成功として返すと、実際には動いていないのにエージェントが動作したと伝えてしまうためです)。
- カメラがすでに保持している角度へのコマンドは、
moved: falseとして報告される何もしない操作です。失敗ではなく成功です。
プライバシーと安全性
snapshotは、カメラが向いている先のフレームをデコードします。ツールの説明にはその旨が記載されており、ユーザーから求められた場合にのみ使用するようエージェントに指示しています。このツールが独自に何かを撮影することはありません。- サーバーは Blink と直接通信し、トークンキャッシュにパスワードは保存されません。
- ブリッジの制御プレーンは、設計上ループバックのみで動作します。物理カメラを動かすためです。
開発方法
アクセサリーチャネルは非公開です。公式 Android アプリの dex バイトコードとネイティブライブラリのシンボルテーブルから復元し、実機で検証しました。
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/7
status はアイドル時が 0x00、動作中が 0x10 です。角度は符号付き1バイトです。
同じプロトコルの知識を blinkpy にも貢献しており、このサーバーだけでなく、すべての Blink インテグレーションで活用できるようにしています。blink_mcp/immi.py はそこに提出したモジュールとバイト単位で同一であり、アップストリーム版がリリースされると自動的にそちらへ切り替わります。
Blink クラウド API と IMMI トランスポートを実装する blinkpy の成果を基盤にしています。
制限事項
- パン/チルトマウント付き Blink Mini で検証済みです。ほかのカメラファミリーでは異なるライブトランスポート(このバイナリチャネルではなく、JSON-RPC コマンドを使用する WebRTC)が使われており、現時点ではサポートされていません。
- 上述のとおり、カメラごとにライブセッションは1つです。
- Blink のセッション上限は300秒です。サーバーは約270秒でセッションを更新するため、利用者が気付くことはありません。
snapshotにはffmpegが必要です。2つ目のセッションを開くのではなく、ストリームから1フレームをデコードします。
テスト
pytest # 68 offline tests: protocol bytes, closed-loop logic, tool layer,
# a real stdio handshake, and a stub control plane
テストスイートはオフラインで動作し、カメラは不要です。実機でテストする場合:
python tests/live_smoke.py --state-file ~/.blink-mcp/state.json
ログインしてカメラを一度動かして元に戻し、フレームをキャプチャします。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。