About Frigate Auth
Frigate Auth is a read-only MCP server for AI assistants that need to inspect Frigate NVR cameras, events, and reviews. It authenticates as a Frigate viewer, leaving access limits to Frigate and avoiding configuration or destructive operations.
Key features
- 01Viewer-role authentication
- 02Camera status and event queries
- 03Event snapshots and latest frames
- 04Review lists and summaries
- 05Optional image camera and size limits
Use cases
- 01Checking recent activity on selected cameras
- 02Reviewing events with descriptions or snapshots
- 03Keeping indoor-camera images out of model requests
MCP support
Exposes read-only Frigate status, event, image, and review tools to MCP clients. It uses Frigate's authenticated port and a viewer account; the only non-GET request is login.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
uvx frigate-auth-mcpFRIGATE_URLBase URL of the authenticated Frigate portFRIGATE_USERFrigate username with the viewer roleFRIGATE_PASSWDSecretPassword of the Frigate userFRIGATE_IMAGE_CAMERASCameras allowed to return images, comma-separated; default allFRIGATE_IMAGE_MAX_HEIGHTUpper limit for the height of returned images, in pixels; default no limitFRIGATE_IMAGE_MAX_QUALITYUpper limit for the JPEG quality of returned images (1-100); default no limitFRIGATE_TIMEOUTSeconds per requestLocal servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.
Tools
7Saved tool list · updated 1w ago
This tool takes no parameters.
Details
From the project READMEfrigate-auth-mcp
What
An MCP server with authentication for Frigate NVR: lets an AI assistant (Claude Code, Claude Desktop, Hermes or any other MCP client) look at your cameras, events and reviews - and nothing more.
It logs in to Frigate's authenticated port as a user with the viewer role, so Frigate itself enforces what the
assistant may see. Tested with Frigate 0.17.x.
Install
Python 3.11+ and uv. Nothing to install by hand: the MCP client starts the server from PyPI with
uvx frigate-auth-mcp
The latest code from GitHub runs with uvx --from git+https://github.com/adel-s/frigate-auth-mcp frigate-auth-mcp.
Setup
- In Frigate, create a user for the assistant (Settings -> Users) with the role
viewer. If the role lets you limit cameras, give it only the cameras the assistant should see. - Add the server to your MCP client. For Claude Code, in
.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}"
}
}
}
}
Keep the password out of the file: put it in the environment the client runs in.
Tools
| Tool | What it returns | Frigate API |
|---|---|---|
frigate_status | version, uptime, the cameras this user may see, per-camera fps | /api/stats, /api/profile, /api/version |
list_events | tracked-object events, filters by camera, label, time, GenAI description | /api/events |
get_event | one event in detail, with its GenAI description | /api/events/<id> |
event_snapshot | snapshot of an event with the bounding box, optionally cropped; 480 px, quality 70 by default | /api/events/<id>/snapshot.jpg |
latest_frame | the current frame of a camera; 480 px, quality 70 by default | /api/<camera>/latest.jpg |
list_reviews | review items as in the Frigate UI, last 7 days by default | /api/review |
review_summary | alert and detection counts for the last 24 hours and per day | /api/review/summary |
Environment
| Variable | Meaning |
|---|---|
FRIGATE_IMAGE_CAMERAS | cameras allowed to return images, comma-separated; default all |
FRIGATE_IMAGE_MAX_HEIGHT | upper limit for the image height in pixels; default no limit |
FRIGATE_IMAGE_MAX_QUALITY | upper limit for the JPEG quality (1-100); default no limit |
FRIGATE_PASSWD | password of the Frigate user, required (secret) |
FRIGATE_TIMEOUT | seconds per request, default 30 |
FRIGATE_URL | base URL of the authenticated port, default http://localhost:8971 |
FRIGATE_USER | Frigate username, required |
Safety
- Talks to the authenticated port (
8971by default) only, never to the unauthenticated internal port5000, which gives full API access to anyone who can reach it. - Logs in as a Frigate user with the role
viewer; the only non-GET call isPOST /api/login. - No tool deletes, exports, edits the config or restarts anything.
- Every tool carries the MCP annotations
readOnlyHint: trueanddestructiveHint: false, so clients can tell that the server only reads. - The raw Frigate config is not exposed: it carries camera stream URLs with credentials.
- Optional image filter
FRIGATE_IMAGE_CAMERAS: only these cameras return images (snapshots, frames). This is the second layer of protection, after the camera limit of the Frigate user's role; by default all cameras are allowed. Use it when the MCP client sends images to a third-party model and some frames, such as indoor cameras, must not leave your home.
Skill
skills/frigate-cameras/SKILL.md tells the assistant how to use the tools:
which tool answers which question, text before images, small images, what an empty result or an error means.
It is a plain Agent Skill: copy the frigate-cameras folder into the skills folder of
your client (for Claude Code .claude/skills/, for Hermes ~/.hermes/skills/<category>/).
Why
The Frigate MCP server I found talks to port 5000 without authentication and exposes tools that delete events,
start exports, save the config or restart Frigate. Handing that to an AI model is more trust than a camera system
deserves. This server gives the assistant eyes, not hands.
Notes
- Without
after, Frigate's/api/reviewreturns only the last 24 hours;list_reviewsasks for the last 7 days instead, so "what happened this week" gets a full answer. list_eventswithhas_descriptionfilters on the GenAI description, which the Frigate API cannot do itself.- Images default to 480 px and JPEG quality 70 to keep the model's context small;
heightandqualityraise them when a detail is too small to see. Models tend to ask for more than they need:FRIGATE_IMAGE_MAX_HEIGHTandFRIGATE_IMAGE_MAX_QUALITYcap what they get, larger requests are lowered to the limit. - Errors come back as short plain messages (object not found, login rejected, access denied, Frigate unreachable) without the internal Frigate host name.
Tests
uv run python -m unittest discover -s tests
The tests use unittest and a fake Frigate API on httpx.MockTransport, so they need no running Frigate. They
also check that no tool sends anything but GET, apart from the login.
GitHub Actions runs them on Python 3.11 to 3.14 on each push to master and dev/* branches.
Development
If something doesn't work or you need a new feature feel free to open an issue and I'll fix it ASAP!
License
MIT, see LICENSE.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.