mcpField
B
Blink Camera

Blink Camera

ローカル
github.comメディア・デザイン05 週間前に更新

Blink Camera について

Blink Cameraは、Amazon Blinkカメラとパン・チルトマウント向けのMCPサーバーです。MCPクライアントから映像や状態を確認して向きを操作でき、ライブセッションを通じて移動の完了を確認します。

主な機能

  1. 01カメラ状態と向きの確認
  2. 02パン・チルトの角度指定と微調整
  3. 03停止、ホーム移動、ホーム位置の保存
  4. 04360°の概要スイープ
  5. 05静止画の取得
  6. 06ライブセッションの管理と更新

活用シーン

  1. 01Blinkカメラを指定位置へ向ける
  2. 02向きを確認して視野を微調整する
  3. 03カメラ映像から静止画を取得する
  4. 04複数の利用者でカメラセッションを共有する

MCP 対応

MCPサーバーは、カメラ状態、パン・チルト操作、スナップショットのツールをクライアントに公開します。Blinkのライブセッションを管理または再利用し、そのセッション経由でマウントを制御します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"abhijatsaxena-blink-camera": {
"command": "uvx",
"args": [
"blink-camera-mcp"
],
"env": {
"BLINK_USERNAME": "<BLINK_USERNAME>",
"BLINK_PASSWORD": "<BLINK_PASSWORD>",
"BLINK_2FA_FILE": "<BLINK_2FA_FILE>",
"BLINK_CAMERA_NAME": "<BLINK_CAMERA_NAME>",
"BLINK_STATE_FILE": "<BLINK_STATE_FILE>",
"BLINK_FFMPEG": "<BLINK_FFMPEG>"
}
}
}
}
起動コマンドuvx blink-camera-mcp
設定が必要な環境変数
BLINK_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 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypiblink-camera-mcp0.1.1

ツール

8

掲載時のツール一覧 · 2 週間前に更新

このツールにパラメーターはありません。

詳細

blink-camera-mcp

ci pypi python

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 つの影響があります。

  1. カメラを使うものは、そのセッションを開いたまま保持し、更新する必要があります。
  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

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。