Frigate MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Frigate MCP Server Show recent person detections from the front door camera."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Frigate MCP Server
A Model Context Protocol (MCP) server for Frigate NVR, built with FastMCP.
Control and query your Frigate NVR instance through AI assistants like Claude Desktop, Claude Code, or any MCP-compatible client using natural language.
Features
90 tools across 8 categories, mapped 1:1 to Frigate's HTTP API. Verified against v0.17.2 and v0.18.0-rc1; tools marked 0.18+ need Frigate 0.18, everything else works on both (the export-delete change is handled automatically):
Category | Tools | Description |
System | 13 | Version, stats (+history), config (get/raw/set/save/schema), logs, restart, Frigate+ models, profiles (0.18+) |
Events | 21 | List, explore, by-id, search, summary, create/end/delete (single + bulk), retain, false-positive, sub-label, recognized plate, attributes, description, regenerate description, semantic-search trigger status + embedding CRUD |
Cameras | 7 | Latest frame, latest "best" thumbnail per camera + label, PTZ info (read-only), set camera feature (0.18+), VLM monitor start/get/cancel (0.18+) |
Recordings | 7 | Per-camera summary, days with recordings, storage, list segments, recording gaps, frame at timestamp, delete range (0.18+) |
Review | 10 | List, by-id, by-event, by-ids, summary, mark/unmark viewed, delete, motion activity, AI summary |
Exports | 14 | List (filters), get, create, delete, rename, bulk delete/reassign/batch (0.18+), custom ffmpeg export (0.18+), export cases CRUD (0.18+) |
Labels | 5 | Labels, sub-labels, audio labels (0.18+), timeline, hourly timeline |
Classification | 13 | Faces CRUD (folder/delete/rename/reprocess/list), recognized plates, LPR reprocess, event thumbnail/snapshot/clean snapshot/preview GIF, audio transcription, embeddings reindex |
PTZ camera control is not included — Frigate exposes PTZ over MQTT, not HTTP. Read-only PTZ info is.
Related MCP server: YARR Media Stack MCP Server
Quick Start
Prerequisites
Python 3.11+
A running Frigate instance
Install
# Clone the repo
git clone https://github.com/jakekeeys/frigate-mcp.git
cd frigate-mcp
# Install with pip
pip install -e .
# Or with uv
uv pip install -e .Configure
Set the FRIGATE_URL environment variable pointing to your Frigate instance:
export FRIGATE_URL=http://192.168.1.50:5000Or create a .env file (see .env.example):
FRIGATE_URL=http://192.168.1.50:5000Run
# Run via module
python -m frigate_mcp
# Or via the installed entry point
frigate-mcpMCP Client Configuration
Claude Desktop
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows):
{
"mcpServers": {
"frigate": {
"command": "python",
"args": ["-m", "frigate_mcp"],
"env": {
"FRIGATE_URL": "http://your-frigate-ip:5000"
}
}
}
}Claude Code
claude mcp add frigate -- python -m frigate_mcpThen set FRIGATE_URL in your environment or .env file.
Using uvx (no install needed)
{
"mcpServers": {
"frigate": {
"command": "uvx",
"args": ["--from", "git+https://github.com/jakekeeys/frigate-mcp", "frigate-mcp"],
"env": {
"FRIGATE_URL": "http://your-frigate-ip:5000"
}
}
}
}Example Queries
Once connected, you can ask your AI assistant things like:
"What cameras are configured in Frigate?"
"Show me recent person detections"
"Were there any cars in the driveway today?"
"Search for delivery person events"
"Show me the latest frame from the front door camera"
"How much recording storage is being used?"
"Mark all review items from today as reviewed"
"Create an export of the backyard camera from 2pm to 3pm"
"What faces has Frigate learned?"
"Summarise everything that happened in the review queue overnight"
"Show me the system stats"
Configuration
Environment Variable | Default | Description |
|
| Frigate instance URL |
|
| HTTP request timeout (seconds) |
Architecture
src/frigate_mcp/
__init__.py # Package version
__main__.py # CLI entry point (stdio transport)
config.py # Pydantic Settings from env vars
server.py # FrigateMCPServer (FastMCP wrapper)
client/
rest_client.py # Async httpx client for Frigate API
tools/
tools_system.py # System/config tools
tools_events.py # Event CRUD, search, attributes, description
tools_cameras.py # Camera frames + best-per-label thumbnails
tools_recordings.py # Recording summary, segments, gaps
tools_review.py # Review queue + GenAI summary
tools_exports.py # Video exports
tools_labels.py # Labels, sub-labels, timeline
tools_classification.py # Faces + recognised plates + event mediaLicense
MIT
Available Tools
59 toolscreate_eventA
Manually create an event on a camera.
Useful for marking a time period as notable even if Frigate didn't detect anything automatically.
Inputs: label (required), camera (required), score, duration, +2 more. Returns: object
create_exportA
Create a new video export from recorded footage.
Exports a section of recorded video between the start and end timestamps for the specified camera.
Inputs: end (required), start (required), camera (required), name, +2 more. Returns: object
create_face_folderA
Create a face folder for a new person.
Frigate face recognition must be enabled. After creation, training images can be added by uploading them to Frigate's UI (multipart upload — not exposed by this MCP server).
Inputs: name (required). Returns: object
delete_eventB
Delete a specific event and its associated media.
Inputs: event_id (required). Returns: object
delete_exportB
Delete a video export.
Inputs: export_id (required). Returns: object
delete_face_imagesA
Delete one or more stored face images for a person.
Deleting all images for a name effectively removes the person.
Inputs: name (required), image_ids (required). Returns: object
delete_reviewsA
Delete review items and their associated recordings.
Inputs: review_ids (required). Returns: object
end_eventA
End an in-progress event that was manually created.
Inputs: event_id (required). Returns: object
explore_eventsA
Get a high-level summary of recent events grouped by label.
Returns the most recent items per label across all cameras — useful as a default "what's been happening?" view.
Inputs: no named parameters. Returns: object
get_camera_label_bestA
Get the most recent 'best' thumbnail for a camera + label combo.
Frigate keeps a rolling best snapshot per (camera, label). Useful for a quick "what's the latest person seen on the front door?" query.
Inputs: label (required), camera (required), height. Returns: object
get_configA
Get the full Frigate configuration.
Returns the complete running config including cameras, detectors, objects, recording settings, snapshots, and more.
Inputs: no named parameters. Returns: object
get_config_schemaA
Get the JSON Schema for Frigate's configuration.
Inputs: no named parameters. Returns: object
get_eventA
Get full details for a specific event by its ID.
Inputs: event_id (required). Returns: object
get_eventsA
List detected events from Frigate with optional filters.
Events represent objects detected by Frigate's AI (people, cars, animals, packages, etc.). Use filters to narrow results by camera, label, zone, or time range.
Inputs: zone, after, label, limit, +9 more. Returns: object
get_events_by_idsA
Bulk fetch events by ID.
Inputs: event_ids (required). Returns: object
get_event_snapshotB
Get the snapshot image for an event as base64-encoded JPEG.
Inputs: event_id (required), crop, quality. Returns: object
get_event_summaryA
Get a summary of events grouped by label, camera, and day.
Useful for understanding detection patterns over time.
Inputs: timezone. Returns: object
get_event_thumbnailB
Get the thumbnail image for an event as base64-encoded JPEG.
Inputs: event_id (required). Returns: object
get_exportB
Get details for a specific export.
Inputs: export_id (required). Returns: object
get_exportsA
List all video exports.
Inputs: no named parameters. Returns: object
get_facesA
Get all registered face names and their image filenames.
Returns a dictionary mapping each person name to a list of stored image filenames in their face folder.
Inputs: no named parameters. Returns: object
get_labelsA
Get all object labels that have been detected.
Optionally filter to labels seen on a specific camera. Common labels: person, car, dog, cat, bird, package, etc.
Inputs: camera. Returns: object
get_latest_frameA
Get the latest camera frame as a JPEG image.
Returns the image as a base64-encoded string. Use this to see what a camera is currently viewing.
Inputs: camera (required), height. Returns: object
get_logsA
Get recent log output from a Frigate service.
Inputs: service. Returns: object
get_motion_activityA
Get motion + audio activity data across cameras and a time range.
Inputs: after, scale, before, cameras. Returns: object
get_plus_modelsA
List available Frigate+ models.
Requires a configured Frigate+ API key.
Inputs: filter_by_current_model_detector. Returns: object
get_recognized_license_platesB
List all recognized license plates that have appeared in events.
Inputs: split_joined. Returns: object
get_recordingsA
List recording segments for a camera in a time range.
Inputs: camera (required), after, before. Returns: object
get_recording_storageA
Get recording storage usage across all cameras.
Returns disk usage information for the recording storage.
Inputs: no named parameters. Returns: object
get_recording_summaryA
Get a summary of recordings for a camera.
Returns recording hours grouped by day, useful for understanding how much footage is available.
Inputs: camera (required), timezone. Returns: object
get_reviewB
Get review items from the Frigate review queue.
Review items are detection segments that should be checked by a human. Severity 'alert' items are higher priority than 'detection' items.
Inputs: after, limit, zones, before, +4 more. Returns: object
get_review_by_eventB
Find the review segment associated with a given event.
Inputs: event_id (required). Returns: object
get_review_by_idA
Fetch a single review segment by its ID.
Inputs: review_id (required). Returns: object
get_reviews_by_idsA
Bulk fetch review segments by ID.
Inputs: review_ids (required). Returns: object
get_review_summaryA
Get a 24-hour summary of the review queue grouped by severity and day.
Inputs: zones, labels, cameras, timezone. Returns: object
get_statsA
Get Frigate system statistics.
Returns CPU/memory usage, detector inference speed, camera FPS, and per-process resource consumption.
Inputs: no named parameters. Returns: object
get_stats_historyA
Get historical stats samples (recent CPU/memory/FPS history).
Inputs: keys. Returns: object
get_sub_labelsB
Get all sub-labels (e.g. identified person names).
Inputs: split_joined. Returns: object
get_timelineB
Get the detection timeline.
The timeline shows a chronological sequence of detection events with their progression (object entered zone, attribute changes, etc.).
Inputs: limit, camera, source_id. Returns: object
get_timeline_hourlyC
Get hourly bucketed timeline summary.
Inputs: after, before, labels, cameras, +1 more. Returns: object
get_versionA
Get the Frigate server version string.
Inputs: no named parameters. Returns: object
mark_event_false_positiveB
Mark an event as a false positive detection.
Inputs: event_id (required). Returns: object
mark_reviewedB
Mark review items as reviewed (or unreviewed).
Inputs: review_ids (required), reviewed. Returns: object
regenerate_event_descriptionA
Ask Frigate's GenAI provider to regenerate the event description.
Inputs: event_id (required), force, source. Returns: object
rename_exportB
Rename a video export.
Inputs: name (required), export_id (required). Returns: object
rename_faceB
Rename a registered face.
Inputs: new_name (required), old_name (required). Returns: object
reprocess_event_license_plateA
Re-run license plate recognition on an event's snapshot.
Inputs: event_id (required). Returns: object
reprocess_faceB
Reprocess a face training image to update predictions.
Inputs: training_file (required). Returns: object
restart_frigateA
Restart the Frigate process.
WARNING: This will briefly interrupt recording and detection.
Inputs: no named parameters. Returns: object
retain_eventA
Mark an event as retained (favorited) so it won't be auto-deleted.
Inputs: retain (required), event_id (required). Returns: object
save_configA
Save (and optionally restart with) a new Frigate YAML config.
Admin only. Frigate validates the YAML before persisting it.
Inputs: config_yaml (required), save_option. Returns: object
search_eventsA
Search events using natural language / semantic search.
This uses Frigate's built-in semantic search to find events matching a description. Great for queries like "delivery person", "dog in yard", or "car in driveway at night".
Requires Frigate+ or a configured search model.
Inputs: query (required), after, limit, zones, +4 more. Returns: object
set_event_attributesB
Set custom classification attributes on an event.
Inputs: event_id (required), attributes (required). Returns: object
set_event_descriptionB
Set a text description on an event.
Inputs: event_id (required), description (required). Returns: object
set_event_recognized_license_plateA
Manually set/correct the recognized license plate on an event.
Inputs: plate (required), event_id (required), plate_score. Returns: object
set_event_sub_labelA
Set a sub-label on an event (e.g. to identify a specific person).
Inputs: event_id (required), sub_label (required), sub_label_score. Returns: object
summarize_reviewsA
Use Frigate's GenAI provider to summarize review items in a time range.
Requires GenAI to be configured in Frigate.
Inputs: end_ts (required), start_ts (required). Returns: object
unmark_review_viewedA
Mark a single review item as not-viewed for the current user.
Inputs: review_id (required). Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 59 tools
Tools are generally well-differentiated by resource and action, with clear get/list vs set/create/delete splits. Some overlap exists among event/review summary and retrieval tools (explore_events vs get_event_summary, get_review_by_id vs get_reviews_by_ids, get_event_thumbnail vs get_camera_label_best), but descriptions provide enough filtering to avoid most misselection.
Most tools follow a predictable verb_noun pattern (get_event, create_export, delete_reviews, set_event_description). Minor inconsistencies like unmark_review_viewed, create_face_folder, get_camera_label_best, and explore_events/search_events/summarize_reviews break the uniformity slightly, but the overall style remains recognizable.
At 59 tools, the surface is very large and will burden an agent with selection overhead. The domain is broad, but the count is well into the 'too many' range and could be consolidated in areas like event setters and individual-vs-bulk getters.
The server covers the major Frigate domains: events, reviews, recordings, exports, faces, license plates, config, stats, and logs. Notable gaps include uploading face training images and downloading actual video clips, but these can be worked around via exports or the external UI.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for Clipkit — gives AI agents a video toolbox via the Clipkit schema.
Related MCP Servers
- AlicenseAqualityBmaintenanceA Model Context Protocol server that enables AI assistants like Claude to interact directly with Home Assistant, allowing them to query device states, control smart home entities, and perform automation tasks.29351MIT
- AlicenseNot gradedqualityCmaintenanceA comprehensive Model Context Protocol server that bridges LLMs with self-hosted media services, enabling natural language control of TV shows, movies, downloads, and notifications while maintaining traditional API access.17AGPL 3.0
- AlicenseNot gradedqualityDmaintenanceA comprehensive Model Context Protocol server implementation that enables AI assistants to interact with file systems, databases, GitHub repositories, web resources, and system tools while maintaining security and control.132 npm2MIT
- AlicenseBqualityDmaintenanceA Model Context Protocol server that enables AI assistants to query Prometheus metrics, discover available data, and analyze system performance through natural language interactions.5242 npmMIT