sonarr-radarr-mcp

sonarr-radarr-mcp

Enables AI assistants to manage TV shows and movies via Sonarr and Radarr, including searching, adding, and monitoring downloads.

Category
Visit Server

README

sonarr-radarr-mcp

One MCP server that exposes both Sonarr (TV) and Radarr (movies) to an AI assistant, built with FastMCP. Look up a title, add it with your configured quality profile and root folder, kick off an indexer search, and ask what the download queue is doing — in plain language.

Both services are optional. Each is enabled only when both its URL and its API key are set; configuring exactly one of a pair is an error and the server refuses to start. At least one service must be configured.

Tools

Radarr (movies)

Tool What it does
search_movie Search TMDB for movies matching a title (use before adding).
add_movie Add a movie to the library by TMDB id, optionally searching immediately.
list_movies List library movies, optionally filtered.
get_movie Details for one movie already in the library.
search_movie_releases Ask Radarr to search indexers for a tracked movie.
delete_movie Remove a movie, optionally deleting its files.

Sonarr (TV)

Tool What it does
search_series Search TVDB for series matching a title (use before adding).
add_series Add a series by TVDB id, optionally starting a search.
list_series List library series, optionally filtered.
get_series Details for one series, including per-season status.
get_episodes List episodes for a series, optionally one season.
search_season Search indexers for every missing episode of one season.
search_episodes Search indexers for specific episode ids.
delete_series Remove a series, optionally deleting its files.

Both (take a service argument: "radarr" or "sonarr")

Tool What it does
get_queue What is downloading now, and whether it is actually progressing.
get_calendar Upcoming movie releases / episode air dates in a date window.
get_history Recent grabs, imports, failures and upgrades.
get_config Quality profiles and root folders the instance offers.
system_status Reachability check plus health warnings.

Where to find your API keys

In each app: Settings → General → Security → API Key. Radarr and Sonarr have separate keys.

Quick start

a) Docker Compose (homelab)

cp .env.example .env   # fill in the URLs and API keys
docker compose up -d

The server listens on http://<host>:8000/mcp.

If your *arr apps run in Docker too, put this container on their network and address them by container name (http://radarr:7878) — see the comments in docker-compose.yml. Otherwise use the host's LAN IP; localhost inside the container means the container.

Set MCP_API_KEY in .env before exposing the port beyond a trusted network — without it the endpoint is unauthenticated, and these tools can delete media.

b) Connect Claude Code (HTTP)

claude mcp add --transport http sonarr-radarr http://HOST:8000/mcp

With MCP_API_KEY set:

claude mcp add --transport http sonarr-radarr http://HOST:8000/mcp \
  --header "Authorization: Bearer YOUR_MCP_API_KEY"

c) Local stdio (Claude Desktop)

Runs the server as a child process — no port, no bearer token needed.

{
  "mcpServers": {
    "sonarr-radarr": {
      "command": "uv",
      "args": [
        "run",
        "--no-editable",
        "--directory", "/absolute/path/to/sonarr_radarr_mcp",
        "sonarr-radarr-mcp"
      ],
      "env": {
        "TRANSPORT": "stdio",
        "RADARR_URL": "http://192.168.1.10:7878",
        "RADARR_API_KEY": "...",
        "SONARR_URL": "http://192.168.1.10:8989",
        "SONARR_API_KEY": "..."
      }
    }
  }
}

TRANSPORT=stdio is required here — the default is http. The env block is also required: the server does not read .env itself. For a manual local run, export it first:

set -a; . ./.env; set +a
uv run --no-editable sonarr-radarr-mcp

Configuration

Variable Required Default Notes
RADARR_URL with RADARR_API_KEY Base URL, no /api/v3 suffix. Trailing / is stripped.
RADARR_API_KEY with RADARR_URL Settings → General → Security.
RADARR_QUALITY_PROFILE no first on instance Profile name, e.g. HD-1080p.
RADARR_ROOT_FOLDER no first on instance Path as Radarr sees it, e.g. /movies.
SONARR_URL with SONARR_API_KEY Base URL, no /api/v3 suffix.
SONARR_API_KEY with SONARR_URL Settings → General → Security.
SONARR_QUALITY_PROFILE no first on instance Profile name.
SONARR_ROOT_FOLDER no first on instance Path as Sonarr sees it, e.g. /tv.
TRANSPORT no http http (streamable HTTP at /mcp) or stdio.
HOST no 0.0.0.0 HTTP transport only.
PORT no 8000 HTTP transport only.
MCP_API_KEY no unset When set, HTTP clients must send Authorization: Bearer <key>. Ignored for stdio.

Quality profiles and root folders are configured by name/path, not id — ids differ between instances. Names are resolved against the live instance at call time.

Example prompts

  • "Download the film Dune Part Three"
  • "Is my download finished?"
  • "Add Severance and start searching for season 2"
  • "What's airing this week?"
  • "Which movies in my library are still missing files?"

Development

uv sync          # install, including dev dependencies
uv run pytest    # 105 tests

Tests are fully offline — HTTP is mocked with respx, so no live Sonarr or Radarr instance is needed.

CI/CD

Every push runs the test suite; pushes to main additionally build and publish ghcr.io/dannyj/sonarr-radarr-mcp:latest (see .github/workflows/ci.yml). The Docker host runs a systemd timer (deploy/sonarr-radarr-mcp-deploy.timer, every 10 minutes) that pulls the image and restarts the stack only when the digest changed, then verifies the MCP endpoint answers before declaring success (deploy/pull-and-deploy.sh). The host pulls rather than CI pushing, so no inbound access or host credentials live in GitHub. One-time host setup:

git clone https://github.com/dannyj/sonarr-radarr-mcp.git ~/Documents/repos/sonarr-radarr-mcp
cd ~/Documents/repos/sonarr-radarr-mcp && cp .env.example .env  # fill in URLs + keys
sudo cp deploy/sonarr-radarr-mcp-deploy.{service,timer} /etc/systemd/system/
sudo systemctl daemon-reload && sudo systemctl enable --now sonarr-radarr-mcp-deploy.timer

macOS gotcha: if uv run sonarr-radarr-mcp fails with ModuleNotFoundError: No module named 'sonarr_radarr_mcp' despite a clean uv sync, the repo is in an iCloud-synced folder (e.g. ~/Documents): iCloud re-marks the editable-install .pth file hidden+dataless, and CPython silently skips hidden .pth files. chflags nohidden does not stick — iCloud re-applies the flag within a minute. Run with uv run --no-editable sonarr-radarr-mcp instead (real files, no .pth), as all examples above do. pytest is immune (pythonpath = ["src"] in pyproject.toml), and so is the Docker image.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured