mcpField
F
Frigate Auth

Frigate Auth

本地服务
github.com/adel-s安全01 周前更新

关于 Frigate Auth

Frigate Auth 是面向需要查看 Frigate NVR 摄像头、事件和审核记录的 AI 助手的只读 MCP 服务。它以 Frigate 的 viewer 角色登录,由 Frigate 管理可见范围,不提供配置修改或破坏性操作。

主要功能

  1. 01以 viewer 角色验证身份
  2. 02查询摄像头状态和事件
  3. 03获取事件快照与实时画面
  4. 04列出审核记录并汇总
  5. 05可限制图像摄像头和尺寸

适用场景

  1. 01查看指定摄像头的近期活动
  2. 02通过描述或快照检查事件
  3. 03避免室内摄像头画面发送给模型

MCP 相关

向 MCP 客户端提供只读的 Frigate 状态、事件、图像和审核工具。它使用 Frigate 的身份验证端口和 viewer 账户;除登录外只发送 GET 请求。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"adel-s-frigate-auth": {
"command": "uvx",
"args": [
"frigate-auth-mcp"
],
"env": {
"FRIGATE_URL": "<FRIGATE_URL>",
"FRIGATE_USER": "<FRIGATE_USER>",
"FRIGATE_PASSWD": "<FRIGATE_PASSWD>",
"FRIGATE_IMAGE_CAMERAS": "<FRIGATE_IMAGE_CAMERAS>",
"FRIGATE_IMAGE_MAX_HEIGHT": "<FRIGATE_IMAGE_MAX_HEIGHT>",
"FRIGATE_IMAGE_MAX_QUALITY": "<FRIGATE_IMAGE_MAX_QUALITY>",
"FRIGATE_TIMEOUT": "<FRIGATE_TIMEOUT>"
}
}
}
}
启动命令uvx frigate-auth-mcp
需要配置的环境变量
FRIGATE_URLBase URL of the authenticated Frigate port
FRIGATE_USERFrigate username with the viewer role
FRIGATE_PASSWD密钥Password of the Frigate user
FRIGATE_IMAGE_CAMERASCameras allowed to return images, comma-separated; default all
FRIGATE_IMAGE_MAX_HEIGHTUpper limit for the height of returned images, in pixels; default no limit
FRIGATE_IMAGE_MAX_QUALITYUpper limit for the JPEG quality of returned images (1-100); default no limit
FRIGATE_TIMEOUTSeconds per request

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypifrigate-auth-mcp0.3.0

工具

7

收录的工具列表 · 更新于 1 周前

此工具无需参数。

详细介绍

tests publish

frigate-auth-mcp

功能

一个为 Frigate NVR 提供身份验证的 MCP 服务:让 AI 助手(Claude Code、Claude Desktop、Hermes 或其他 MCP 客户端)查看摄像头、事件和审核项—— 仅限这些内容。

它会以具有 viewer 角色的用户身份登录 Frigate 的身份验证端口,因此可由 Frigate 自身强制限制助手可查看的内容。已通过 Frigate 0.17.x 测试。

安装

需要 Python 3.11+ 和 uv。无需手动安装任何内容:MCP 客户端会通过 PyPI 启动服务,命令如下:

uvx frigate-auth-mcp

使用 uvx --from git+https://github.com/adel-s/frigate-auth-mcp frigate-auth-mcp 可运行 GitHub 上的最新代码。

设置

  1. 在 Frigate 中为助手创建一个用户(Settings -> Users),并分配 viewer 角色。如果该角色允许限制摄像头访问,请仅授予助手应查看的摄像头权限。
  2. 将服务添加到 MCP 客户端。对于 Claude Code,请在 .mcp.json 中配置:
{
  "mcpServers": {
    "frigate": {
      "command": "uvx",
      "args": ["frigate-auth-mcp"],
      "env": {
        "FRIGATE_URL": "https://frigate.example.com:8971",
        "FRIGATE_USER": "assistant",
        "FRIGATE_PASSWD": "${FRIGATE_PASSWD}"
      }
    }
  }
}

不要将密码写入文件:请将其放在客户端运行环境的环境变量中。

工具

工具返回内容Frigate API
frigate_status版本、运行时间、该用户可查看的摄像头,以及每个摄像头的 fps/api/stats、/api/profile、/api/version
list_events跟踪对象事件,可按摄像头、标签、时间和 GenAI 描述筛选/api/events
get_event单个事件的详细信息及其 GenAI 描述/api/events/<id>
event_snapshot事件快照,包含边界框,可选择裁剪;默认 480 px、质量 70/api/events/<id>/snapshot.jpg
latest_frame摄像头的当前画面;默认 480 px、质量 70/api/<camera>/latest.jpg
list_reviews与 Frigate UI 中相同的审核项,默认显示最近 7 天/api/review
review_summary最近 24 小时的警报和检测计数,以及按天统计的数据/api/review/summary

环境变量

变量含义
FRIGATE_IMAGE_CAMERAS允许返回图像的摄像头,以逗号分隔;默认全部允许
FRIGATE_IMAGE_MAX_HEIGHT图像 height 的像素上限;默认不限制
FRIGATE_IMAGE_MAX_QUALITYJPEG quality 的上限(1-100);默认不限制
FRIGATE_PASSWDFrigate 用户的密码,必填(机密)
FRIGATE_TIMEOUT每个请求的秒数,默认 30
FRIGATE_URL身份验证端口的基础 URL,默认 http://localhost:8971
FRIGATE_USERFrigate 用户名,必填

安全性

  • 只与经过身份验证的端口(默认为 8971)通信,绝不连接未经身份验证的内部端口 5000,因为任何能够访问该端口的人都能获得完整的 API 访问权限。
  • 以角色为 viewer 的 Frigate 用户身份登录;唯一的非 GET 调用是 POST /api/login。
  • 没有任何工具会删除内容、导出数据、编辑配置或重启任何服务。
  • 每个工具都带有 MCP 注解 readOnlyHint: true 和 destructiveHint: false,让客户端知道该服务只会读取数据。
  • 不会公开原始 Frigate 配置:其中包含带凭据的摄像头流 URL。
  • 可选图像筛选器 FRIGATE_IMAGE_CAMERAS:只有这些摄像头会返回图像(快照、帧)。这是 Frigate 用户角色的摄像头限制之外的第二层保护;默认情况下允许所有摄像头。如果 MCP 客户端会将图像发送给第三方模型,而某些画面(例如室内摄像头画面)不得离开你的家,请使用此筛选器。

技能

skills/frigate-cameras/SKILL.md 会告诉助手如何使用这些工具:哪个工具能回答哪个问题、先显示文字再显示图像、使用小尺寸图像,以及空结果或错误分别意味着什么。 这是一项纯粹的 Agent Skill:将 frigate-cameras 文件夹复制到客户端的技能文件夹中(Claude Code 使用 .claude/skills/,Hermes 使用 ~/.hermes/skills/<category>/)。

原因

我找到的 Frigate MCP 服务未经身份验证便连接到端口 5000,并提供了可删除事件、启动导出、保存配置或重启 Frigate 的工具。把这些交给 AI 模型,意味着对它的信任超过了摄像头系统应得的程度。这个服务让助手能看,而不能动手。

说明

  • 如果不提供 after,Frigate 的 /api/review 只会返回最近 24 小时的数据;因此,list_reviews 会改为查询最近 7 天的数据,这样询问“这周发生了什么”才能得到完整答案。
  • list_events 的 has_description 会根据 GenAI 描述筛选,这是 Frigate API 本身无法做到的。
  • 图像默认尺寸为 480 px,JPEG 质量为 70,以减少模型上下文占用;如果细节太小而看不清,可以通过 height 和 quality 提高尺寸和质量。模型往往会要求超出需要的值:FRIGATE_IMAGE_MAX_HEIGHT 和 FRIGATE_IMAGE_MAX_QUALITY 会限制实际返回的值,超出限制的请求会被调低至上限。
  • 错误会以简短的纯文本消息返回(对象未找到、登录遭拒、访问被拒或无法连接 Frigate),不会包含 Frigate 内部主机名。

测试

uv run python -m unittest discover -s tests

测试使用 unittest 和基于 httpx.MockTransport 的模拟 Frigate API,因此无需运行 Frigate。测试还会检查除登录外,是否有任何工具发送了 GET 以外的请求。

GitHub Actions 会在每次向 master 和 dev/* 分支推送时,使用 Python 3.11 至 3.14 运行测试。

开发

如果遇到问题或需要新功能,欢迎提交 issue,我会尽快修复!

许可证

MIT,详见 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。