Skip to main content
Glama

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:5000

Or create a .env file (see .env.example):

FRIGATE_URL=http://192.168.1.50:5000

Run

# Run via module
python -m frigate_mcp

# Or via the installed entry point
frigate-mcp

MCP 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_mcp

Then 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_URL

http://localhost:5000

Frigate instance URL

FRIGATE_TIMEOUT

30

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 media

License

MIT

Available Tools

59 tools
create_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_recordings_unavailableA

Get time ranges where no recordings are available (gaps).

Inputs: after, scale, before, cameras. 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

    B3.4/5.0

    Scored across 59 tools

    Disambiguation4/5

    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.

    Naming Consistency4/5

    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.

    Tool Count2/5

    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.

    Completeness4/5

    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

    ActivityStale
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      B
      maintenance
      A 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.
      29
      351
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      A 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 npm
      2
      MIT
    • A
      license
      B
      quality
      D
      maintenance
      A Model Context Protocol server that enables AI assistants to query Prometheus metrics, discover available data, and analyze system performance through natural language interactions.
      5
      242 npm
      MIT