servarr-mcp
The servarr-mcp server provides a Model Context Protocol (MCP) interface to manage the Servarr media stack (Sonarr, Radarr, Lidarr, Readarr, Prowlarr). Key capabilities include:
Browse & search content – List and get details for TV series, movies, artists/albums, and authors/books tracked by each app; search for new content to add.
Add & edit media – Add new series/movies/artists/authors with desired quality profile, root folder, and monitor settings; edit existing entries (monitor state, tags, quality profile, root folder).
Calendar – View upcoming TV episodes (Sonarr) and movie releases (Radarr).
Download queue management – View, remove (with blocklist/client-delete control), or re-grab items in the queue across all apps.
History – Review recent download, import, and failure events across all apps; mark failed entries to trigger re-searches.
Wanted & searches – List missing/below-cutoff episodes; trigger searches for missing episodes, by series, season, or specific episode IDs.
Release discovery – Live-search enabled indexers for specific releases and manually grab a chosen one.
Metadata refresh – Trigger metadata re-pulls (e.g., cast, episode lists, artwork) for a series.
System health & config – Check health warnings, disk space, root folders, quality profiles, and tags.
Prowlarr indexer management – List indexers and their stats, search across all enabled indexers, view query/grab history.
Async command monitoring – Poll the status of long-running background operations like searches or refreshes.
Provides tools for managing movies: list movies, get details, search for new movies, view calendar, download queue, and history.
Provides tools for managing TV series: list series, get details, search for new series, list episodes, view calendar, download queue, and history.
Click on "Install 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., "@servarr-mcpshow me the current download queue"
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.
servarr-mcp
·
claude-opus-4-8[1m] · 2026-07-07 · details
An MCP server for the
Servarr stack — Sonarr, Radarr, Lidarr,
Readarr, and Prowlarr — packaged as a Docker container. Lets an MCP
client (Claude Desktop, etc.) browse, search, and manage whichever
*arr apps you're running: library reads plus add/edit, queue
management, interactive release grabbing, and search/refresh
commands. Every tool carries MCP annotations (readOnlyHint,
destructiveHint, idempotentHint) so clients can distinguish and
gate the write surface.
Apps are optional: configure only the ones you actually run, and only those tools register.
Tools
Sonarr (TV)
Read:
Tool | Description |
| List all TV series tracked by Sonarr |
| Series details by ID |
| Search TVDB for a new series to add |
| List episodes for a series |
| Episode details by ID |
| Upcoming episodes |
| Current download queue |
| Recent history (newest first) |
| History for one series |
| Monitored episodes with no file |
| Episodes below their quality cutoff |
| Live indexer search for candidate releases |
| Poll an async command's status |
| Health check results |
| Disk space per root folder |
| Quality profiles |
| Root folders |
| Tags |
Write:
Tool | Description |
| Add a series to the library |
| Edit a tracked series (monitoring, profile, etc.) |
| Grab a release from |
| Remove a queue item (optionally blocklist / delete from client) |
| Force re-grab of a stuck queue item |
| Mark a history record failed (triggers re-search) |
| Trigger a search for missing episodes |
| Trigger a search for a whole series |
| Trigger a search for one season |
| Trigger a search for specific episodes |
| Refresh series metadata and rescan disk |
Radarr (movies)
Read:
Tool | Description |
| All movies tracked by Radarr |
| Movie details by ID |
| Search TMDB for a new movie to add |
| Look up a movie by TMDB ID |
| Look up a movie by IMDb ID |
| Upcoming movie releases |
| Current download queue |
| Recent history (newest first) |
| History for one movie |
| Monitored movies with no file |
| Movies below their quality cutoff |
| Live indexer search for candidate releases |
| Poll an async command's status |
| Health check results |
| Disk space per root folder |
| Quality profiles |
| Root folders |
| Tags |
Write:
Tool | Description |
| Add a movie to the library |
| Edit a tracked movie (monitoring, profile, etc.) |
| Grab a release from |
| Remove a queue item (optionally blocklist / delete from client) |
| Force re-grab of a stuck queue item |
| Mark a history record failed (triggers re-search) |
| Trigger a search for missing movies |
| Trigger a search for specific movies |
| Refresh movie metadata and rescan disk |
Lidarr (music)
Read:
Tool | Description |
| All artists tracked by Lidarr |
| Artist details by ID |
| Search for a new artist to add |
| List albums (optionally per-artist) |
| Album details by ID |
| Track details |
| Track files on disk |
| Current download queue |
| Recent history |
| History for one artist |
| Monitored albums with no files |
| Albums below their quality cutoff |
| Live indexer search for candidate releases |
| Poll an async command's status |
| Health check results |
| Disk space per root folder |
| Quality profiles |
| Metadata profiles |
| Root folders |
| Tags |
Write:
Tool | Description |
| Add an artist to the library |
| Edit a tracked artist (monitoring, profiles, etc.) |
| Grab a release from |
| Remove a queue item (optionally blocklist / delete from client) |
| Force re-grab of a stuck queue item |
| Mark a history record failed (triggers re-search) |
| Trigger a search for missing albums |
| Trigger a search for an artist's albums |
| Trigger a search for specific albums |
| Refresh artist metadata and rescan disk |
Readarr (books)
Read:
Tool | Description |
| All authors tracked by Readarr |
| Author details by ID |
| Search for a new author to add |
| List books (optionally per-author) |
| Book details by ID |
| Current download queue |
| Recent history |
| History for one author |
| Monitored books with no files |
| Books below their quality cutoff |
| Live indexer search for candidate releases |
| Poll an async command's status |
| Health check results |
| Disk space per root folder |
| Quality profiles |
| Metadata profiles |
| Root folders |
| Tags |
Write:
Tool | Description |
| Add an author to the library |
| Edit a tracked author (monitoring, profiles, etc.) |
| Grab a release from |
| Remove a queue item (optionally blocklist / delete from client) |
| Force re-grab of a stuck queue item |
| Mark a history record failed (triggers re-search) |
| Trigger a search for missing books |
| Trigger a search for an author's books |
| Trigger a search for specific books |
| Refresh author metadata and rescan disk |
Prowlarr (indexer manager)
Read-only:
Tool | Description |
| All configured indexers |
| Per-indexer query/grab stats |
| Indexer health / disabled status |
| Search across enabled indexers |
| Recent history (queries, grabs) |
| Health check results |
Related MCP server: nas-mcp-server
Configuration
Each app uses two environment variables. Set both for an app to enable its tools; leave them unset to skip the app entirely.
App | URL var | API key var | Default port |
Sonarr |
|
| 8989 |
Radarr |
|
| 7878 |
Lidarr |
|
| 8686 |
Readarr |
|
| 8787 |
Prowlarr |
|
| 9696 |
API keys are found under each app's Settings → General → API Key.
At least one app must be configured or the server exits with an error.
Same-host deployments
When the *arr apps run on the same Docker host as this container
(typical home-lab setup), don't use the host's hostname (e.g.
my-nas) in the *_URL vars — Docker's DNS context can't resolve
the host's own name from inside a container. Use
http://host.docker.internal:<port> instead. The provided
docker-compose.yml already maps host.docker.internal to the host
gateway via extra_hosts, so this works on Linux Docker too (not
just Docker Desktop).
Run with Docker
docker build -t servarr-mcp .
docker run -i --rm \
-e SONARR_URL=http://192.168.1.50:8989 -e SONARR_API_KEY=... \
-e RADARR_URL=http://192.168.1.50:7878 -e RADARR_API_KEY=... \
-e PROWLARR_URL=http://192.168.1.50:9696 -e PROWLARR_API_KEY=... \
servarr-mcpPublished image
After each push to main, GitHub Actions builds and pushes a multi-arch
image to GHCR:
ghcr.io/carldog/servarr-mcp:latest (linux/amd64 + linux/arm64)
Pull instead of building locally:
docker pull ghcr.io/carldog/servarr-mcp:latest
docker run -i --rm \
-e SONARR_URL=... -e SONARR_API_KEY=... \
ghcr.io/carldog/servarr-mcp:latestRun with Docker Compose (HTTP, long-lived)
The compose file runs the server in HTTP mode (Streamable HTTP) for
long-lived deployment via Portainer or Compose. It pulls the published
image from ghcr.io/carldog/servarr-mcp:latest.
# Set whichever app credentials apply:
export SONARR_URL=http://192.168.1.50:8989; export SONARR_API_KEY=...
export RADARR_URL=http://192.168.1.50:7878; export RADARR_API_KEY=...
# ... (other apps as needed)
export HOST_PORT=3002 # optional, defaults to 3002
docker compose upThe MCP endpoint will be at http://<host>:${HOST_PORT}/mcp.
Deploy via Portainer (Stack from Git)
In Portainer, Stacks → Add Stack → Repository.
Repository URL:
https://github.com/CarlDog/servarr-mcpCompose path:
docker-compose.ymlEnvironment variables: set whichever
<APP>_URL/<APP>_API_KEYpairs apply, plus optionallyHOST_PORT.Deploy. Healthcheck reaches green within ~10 seconds.
Use with Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"servarr": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "SONARR_URL", "-e", "SONARR_API_KEY",
"-e", "RADARR_URL", "-e", "RADARR_API_KEY",
"-e", "PROWLARR_URL", "-e", "PROWLARR_API_KEY",
"servarr-mcp"
],
"env": {
"SONARR_URL": "http://192.168.1.50:8989",
"SONARR_API_KEY": "...",
"RADARR_URL": "http://192.168.1.50:7878",
"RADARR_API_KEY": "...",
"PROWLARR_URL": "http://192.168.1.50:9696",
"PROWLARR_API_KEY": "..."
}
}
}
}Repeat the -e and env block patterns for whichever apps you run.
Local development
npm install
cp .env.example .env # then edit
SONARR_URL=... SONARR_API_KEY=... npm run devSecurity
The container runs as a non-root user (
servarr).API keys are passed via env vars — never bake them into the image.
A
.githooks/pre-commitruns gitleaks on every commit. Activate it once per clone:git config core.hooksPath .githooks.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/CarlDog/servarr-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server