UniFi保护MCP服务器
一个MCP(模型上下文协议)服务器,公开UniFi Protect的集成REST API作为Claude Code和其他MCP客户端的工具。与UniFi Protect API一致 7.1.60 --73种工具,涵盖摄像头、灯、传感器、铃声、查看器、警报器、遥控器、继电器、扬声器、网桥、链接站、报警中心、手臂配置文件、实时视图、文件、用户、NVR状态和WebSocket订阅。
先决条件
- Node.js 20+
- 启用集成API的UniFi Protect系统
- 从UniFi Protect控制台生成的API密钥
设置
快速启动(npx)
只需一个命令即可添加到Claude Code中,无需克隆或构建:
claude mcp add-json unifi-protect '{"command":"npx","args":["-y","@owine/unifi-protect-mcp@latest"],"env":{"UNIFI_PROTECT_HOST":"192.168.1.1","UNIFI_PROTECT_API_KEY":"your-api-key","UNIFI_PROTECT_VERIFY_SSL":"false"}}' -s user
使用 -s user 确保所有项目的全球可用性,或 -s project 仅适用于当前项目。
来源
如果您更喜欢在本地构建:
git clone https://github.com/owine/unifi-protect-mcp.git
cd unifi-protect-mcp
npm install
npm run build
然后添加到克劳德代码中:
claude mcp add-json unifi-protect '{"command":"node","args":["/path/to/unifi-protect-mcp/dist/index.js"],"env":{"UNIFI_PROTECT_HOST":"192.168.1.1","UNIFI_PROTECT_API_KEY":"your-api-key","UNIFI_PROTECT_VERIFY_SSL":"false"}}' -s user
环境变量
| 变量 | 必填 | 默认 | 描述 |
|---|
UNIFI_PROTECT_HOST | 是 | -- | UniFi Protect主机的IP或主机名 |
UNIFI_PROTECT_API_KEY | 是 | - | Protect集成设置中的API密钥 |
UNIFI_PROTECT_VERIFY_SSL | 没有 | true | 设置为 false 跳过TLS证书验证(自签名证书需要) |
UNIFI_PROTECT_READ_ONLY | 没有 | true | 设置为 false 启用写/修改工具(默认为仅监视模式) |
手动配置
或者,添加到您的 ~/.claude.json 在顶层之下 "mcpServers" 按键:
{
"mcpServers": {
"unifi-protect": {
"command": "npx",
"args": ["-y", "@owine/unifi-protect-mcp@latest"],
"env": {
"UNIFI_PROTECT_HOST": "192.168.1.1",
"UNIFI_PROTECT_API_KEY": "your-api-key",
"UNIFI_PROTECT_VERIFY_SSL": "false"
}
}
}
}
安全功能
此服务器为负责任的操作提供分层安全控制:
- 工具注释 --每个工具都声明
readOnlyHint 和 destructiveHint 因此MCP客户端(如Claude Code)可以做出明智的确认决策 - 只读模式 --默认情况下启用。仅注册读取操作(列表、获取、快照)。集
UNIFI_PROTECT_READ_ONLY=false 启用写入/修改工具 - 确认参数 --最危险的工具(
protect_disable_mic, protect_trigger_alarm_webhook)要求明确 confirm: true 调用成功所必需的参数 - 模拟运行支持 --所有书写工具(带
confirm)接受可选 dryRun: true 参数,返回在不进行任何更改的情况下会发生什么的预览
工具(共73个)
系统(2)
| 工具 | 说明 |
|---|
protect_get_info | 获取系统信息和版本详细信息 |
protect_list_nvrs | 列出所有NVR设备 |
订阅(2)
| 工具 | 说明 |
|---|
protect_subscribe_devices | 通过WebSocket订阅设备状态更新 |
protect_subscribe_events | 通过WebSocket订阅事件通知 |
摄像机(12)
| 工具 | 说明 |
|---|
protect_list_cameras | 列出所有摄像头 |
protect_get_camera | 按ID获取相机详细信息 |
protect_update_camera | 更新相机设置 |
protect_get_snapshot | 获取JPEG快照(返回图像) |
protect_create_rtsp_stream | 创建RTSPS流会话 |
protect_get_rtsp_streams | 获取活动RTSPS流会话 |
protect_delete_rtsp_stream | 停止并删除活动的RTSPS流 |
protect_create_talkback | 创建对讲(双向音频)会话 |
protect_disable_mic | 不可逆: 永久禁用摄像头麦克风 |
protect_start_ptz_patrol | 在指定位置开始PTZ巡逻 |
protect_stop_ptz_patrol | 停止PTZ巡逻 |
protect_goto_ptz_preset | 将PTZ移动到预设位置 |
灯光(3)
| 工具 | 说明 |
|---|
protect_list_lights | 列出所有灯光 |
protect_get_light | 按ID获取灯光细节 |
protect_update_light | 更新灯光设置 |
传感器(3)
| 工具 | 说明 |
|---|
protect_list_sensors | 列出所有传感器 |
protect_get_sensor | 按ID获取传感器详细信息 |
protect_update_sensor | 更新传感器设置 |
编钟(3)
| 工具 | 说明 |
|---|
protect_list_chimes | 列出所有钟声 |
protect_get_chime | 按ID获取蜂鸣器详细信息 |
protect_update_chime | 更新蜂鸣器设置 |
浏览者(3)
| 工具 | 说明 |
|---|
protect_list_viewers | 列出所有观众 |
protect_get_viewer | 按ID获取观众详细信息 |
protect_update_viewer | 更新查看器设置 |
警报器(6)
| 工具 | 说明 |
|---|
protect_list_sirens | 列出所有警报器 |
protect_get_siren | 按ID获取警报器详细信息 |
protect_update_siren | 更新警报器设置(名称、音量、LED) |
protect_play_siren | 在给定的持续时间(5/10/20/30s)内激活警报器 |
protect_stop_siren | 停止活动警报器 |
protect_test_siren_sound | 在给定音量下测试警报器声音5秒 |
福布斯 (3)
| 工具 | 说明 |
|---|
protect_list_fobs | 列出所有遥控钥匙 |
protect_get_fob | 通过ID获取遥控器详细信息 |
protect_update_fob | 更新遥控钥匙设置 |
继电器(4)
| 工具 | 说明 |
|---|
protect_list_relays | 列出所有继电器 |
protect_get_relay | 按ID获取中继详细信息 |
protect_update_relay | 更新继电器设置 |
protect_activate_relay_output | 设置/切换继电器输出通道,脉冲持续时间可选 |
演讲者(4)
| 工具 | 说明 |
|---|
protect_list_speakers | 列出所有发言者 |
protect_get_speaker | 按ID获取演讲者详细信息 |
protect_update_speaker | 更新扬声器设置(音量、麦克风) |
protect_test_speaker_sound | 在给定音量下测试扬声器声音 |
桥梁(3)
| 工具 | 说明 |
|---|
protect_list_bridges | 列出所有桥梁 |
protect_get_bridge | 按ID获取桥梁详细信息 |
protect_update_bridge | 更新网桥设置 |
链接站(3)
| 工具 | 说明 |
|---|
protect_list_link_stations | 列出所有链路站(非报警集线器网关) |
protect_get_link_station | 按ID获取链接站详细信息 |
protect_update_link_station | 更新链接站设置 |
报警集线器(4)
| 工具 | 说明 |
|---|
protect_list_alarm_hubs | 列出所有报警中心 |
protect_get_alarm_hub | 按ID获取报警中心详细信息 |
protect_update_alarm_hub | 更新报警中心设置 |
protect_trigger_alarm_hub_output | 触发报警集线器输出通道(警报器、灯等) |
Arm Profiles(7)-本地报警管理器
| 工具 | 说明 |
|---|
protect_list_arm_profiles | 列出所有手臂轮廓 |
protect_create_arm_profile | 创建新的手臂轮廓 |
protect_set_current_arm_profile | 设置武装时使用的活动配置文件 |
protect_update_arm_profile | 更新手臂轮廓 |
protect_delete_arm_profile | 破坏性: 按ID删除手臂轮廓 |
protect_enable_arm_alarm | 使用当前配置文件设置警报 |
protect_disable_arm_alarm | 解除警报 |
实时视图(4)
| 工具 | 说明 |
|---|
protect_list_liveviews | 列出所有实时视图 |
protect_get_liveview | 按ID获取实时取景详细信息 |
protect_create_liveview | 创建新的实时视图 |
protect_update_liveview | 更新实时视图 |
报警和文件(3)
| 工具 | 说明 |
|---|
protect_trigger_alarm_webhook | 触发报警webhook(触发外部报警操作) |
protect_list_files | 按类型列出文件 |
protect_upload_file | 上传文件(base64编码) |
用户(4)
| 工具 | 说明 |
|---|
protect_list_users | 列表保护用户(按访问权限筛选) |
protect_get_user | 通过ID获取保护用户 |
protect_list_ulp_users | 列出已注册凭据的UniFi Identity(ULP)用户 |
protect_get_ulp_user | 通过ID获取UniFi Identity用户 |
发展
npm run build # Compile TypeScript
npm start # Run the server
npm run typecheck # Type-check without emitting
npm run lint # ESLint
npm test # Run all tests (vitest)
承诺约定
feat: ... --新功能(次要版本凹凸)fix: ... --错误修复(补丁版本碰撞)feat!: ... 或 BREAKING CHANGE: 页脚--突破性更改(主要版本凸起)chore:, docs:, ci:等等。--无版本冲突
关于推送 main,release请打开一个发布PR,该PR会暂停版本和更新 CHANGELOG.md合并该PR会自动发布到npm。
要覆盖版本号,请添加 Release-As: x.x.x 在提交主体中:
git commit --allow-empty -m "chore: release 2.0.0" -m "Release-As: 2.0.0"
许可证
麻省理工学院