Arr-MCP
The Arr-MCP server provides a unified MCP interface to manage your *ARR media stack (Radarr, Sonarr, Lidarr, Readarr, Prowlarr). It supports both local (stdio) and remote (HTTP/Streamable HTTP) transport modes, with a health endpoint (including optional deep checks). A Docker image is available on GHCR with multi-arch support. Only services configured via environment variables are exposed.
Cross-service: list configured services, search across all services simultaneously.
Radarr (Movies): list, search, add (by TMDB ID), update, delete movies; trigger download searches, refresh metadata; manage queue, calendar, health; view quality profiles, root folders, download clients, tags, naming, and system status.
Sonarr (TV): list, search, add (by TVDB ID), delete, refresh series; list episodes, search missing/episode; manage queue, calendar, health; view quality profiles, root folders, download clients, tags, naming, and system status.
Lidarr (Music): list, search, add artists (by MusicBrainz ID), albums; trigger missing album search, grab releases; view history, blocklist, wanted missing; manage queue, disk space, command status, calendar, health; view quality/metadata profiles, root folders, download clients, tags, and system status.
Readarr (Books, retired upstream): limited tools for authors, books; check health, quality profiles, root folders, status.
Prowlarr (Indexers): list, test indexers; search across indexers, grab releases; view stats, health, status.
Provides tools for managing movies in Radarr, including listing, searching, adding, deleting, and viewing queue, health, quality profiles, root folders, and system status.
Provides tools for managing TV series in Sonarr, including listing, searching, adding, deleting, viewing episodes, queue, health, quality profiles, root folders, and system status.
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., "@Arr-MCPsearch for the movie Inception"
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.
Arr-MCP
An MCP server for your *ARR stack — Radarr, Sonarr, Lidarr, Readarr, and Prowlarr.
Readarr is retired by upstream (since May 2024) — its tools still work but metadata may be unreliable. See Readarr status.
Supports stdio (local, Claude Desktop) and HTTP/Streamable HTTP (remote, ChatGPT, any MCP-compatible client).
Tools
Cross-service
Tool | Description |
| Show which services are configured |
| Search all configured services at once |
Radarr (Movies)
Tool | Description |
| List movies (paginated) |
| Search by title |
| Add by TMDB ID |
| Update monitored/quality profile |
| Delete (optionally with files) |
| Trigger download search for a movie |
| Refresh metadata |
| Download queue (paginated) |
| Remove item from queue |
| Upcoming releases |
| Health warnings |
| Quality profiles |
| Root folders |
| Download clients |
| Tags |
| File naming config |
| System status |
Sonarr (TV Shows)
Tool | Description |
| List series (paginated) |
| Search by title |
| Add by TVDB ID |
| Delete (optionally with files) |
| Refresh metadata |
| List episodes (optionally by season) |
| Trigger search for missing episodes |
| Trigger search for a specific episode |
| Download queue (paginated) |
| Remove item from queue |
| Upcoming air dates |
| Health warnings |
| Quality profiles |
| Root folders |
| Download clients |
| Tags |
| File naming config |
| System status |
Lidarr (Music)
Tool | Description |
| List artists (paginated) |
| Search by name |
| Add by MusicBrainz ID |
| List albums (optionally by artist, paginated) |
| Trigger search for missing albums |
| Get available releases for an album |
| Grab a specific release by GUID |
| Download history (grabs, imports, failures) |
| Blocklist |
| Remove item from blocklist |
| Monitored albums with no file |
| Download queue (paginated) |
| Remove item from queue |
| Disk space per root folder |
| Check status of a triggered command |
| Upcoming album releases |
| Health warnings |
| Quality profiles |
| Metadata profiles |
| Root folders |
| Download clients |
| Tags |
| System status |
Readarr (Books) — ⚠️ retired upstream
Tool | Description |
| List authors (paginated) |
| Search by name |
| Add by Goodreads ID |
| List books (optionally by author, paginated) |
| Search by title or ISBN |
| Health warnings |
| Quality profiles |
| Root folders |
| System status |
Prowlarr (Indexers)
Tool | Description |
| List indexers |
| Test a specific indexer |
| Test all indexers |
| Search across indexers |
| Grab a release found via search |
| Indexer statistics |
| Health warnings |
| System status |
Related MCP server: nas-mcp-server
Setup
1. Install & Build
npm install
npm run build2. Configure
Copy .env.example to .env and fill in your service URLs and API keys. Only configure the services you use — unconfigured services are skipped at startup and their tools don't appear.
API keys: Settings → General → Security → API Key in each app.
Transport modes
stdio — local (Claude Desktop)
Default mode. The MCP client launches the process directly.
{
"mcpServers": {
"arr": {
"command": "node",
"args": ["/path/to/arr-mcp/dist/index.js"],
"env": {
"RADARR_URL": "http://localhost:7878",
"RADARR_API_KEY": "...",
"SONARR_URL": "http://localhost:8989",
"SONARR_API_KEY": "..."
}
}
}
}HTTP — remote (ChatGPT, hosted clients)
Set MCP_TRANSPORT=http. The server listens on http://HOST:PORT/mcp and accepts POST requests per the MCP Streamable HTTP spec.
MCP_TRANSPORT=http MCP_PORT=3000 \
RADARR_URL=http://... RADARR_API_KEY=... \
node dist/index.jsHealth endpoint
In http mode zijn er twee niveaus:
Request | Betekenis | Status |
| Liveness — proces draait en serveert | altijd |
| Readiness — pingt bovendien elke geconfigureerde *ARR service |
|
curl http://localhost:3000/health
# → {"status":"ok","transport":"http","version":"1.5.0","uptimeSeconds":42}
curl "http://localhost:3000/health?deep=1"
# → {"status":"degraded", ..., "services":[
# {"name":"Radarr","ok":true,"ms":12,"version":"5.14.0"},
# {"name":"Sonarr","ok":false,"ms":5000,"error":"timeout after 5000ms"}]}De plain /health is bewust onafhankelijk van je *ARR services: een kort onbereikbare Radarr maakt de MCP-server zelf niet stuk.
Docker
Het gepubliceerde image staat op GitHub Container Registry:
ghcr.io/ltmarx/arr-mcp:latestDe docker-compose.yml heeft twee profielen — stdio en http — die nooit tegelijk actief zijn.
HTTP mode — remote/persistent server
cp .env.example .env # vul je keys in
docker compose --profile http upDe server luistert op http://<host>:3000/mcp. Poort aanpassen: MCP_PORT=8080 docker compose --profile http up.
Controleer of de server draait:
curl http://localhost:3000/health
# → {"status":"ok","transport":"http","version":"1.5.0","uptimeSeconds":42}Container healthcheck
Het image heeft een ingebouwde HEALTHCHECK. Die gebruikt node, niet curl of wget —
die zitten namelijk niet in node:22-alpine. Een eigen healthcheck met curl -f ...
faalt daarom altijd met curl: not found; gebruik deze in plaats daarvan:
healthcheck:
test: ["CMD", "node", "docker-healthcheck.js"]Status bekijken:
docker compose --profile http ps # STATUS toont (healthy)
docker inspect --format '{{json .State.Health}}' <container> | jqIn stdio mode draait er geen HTTP-server, dus daar is niets te proben: de check
stopt direct met exit 0 en in compose staat hij expliciet uit (healthcheck: disable: true).
Wil je dat de container ook ongezond wordt als een *ARR service onbereikbaar is,
zet dan HEALTHCHECK_DEEP=1. Standaard staat dat uit, zodat een herstartende
Radarr niet je hele MCP-container omlaag trekt.
Stdio mode — lokaal (Claude Desktop)
docker compose --profile stdio upOf direct via docker run (wordt gestart door de MCP client):
docker run --rm -i \
-e RADARR_URL=http://192.168.1.x:7878 \
-e RADARR_API_KEY=abc123 \
ghcr.io/ltmarx/arr-mcp:latestMCP client config voor Claude Desktop:
{
"mcpServers": {
"arr": {
"command": "docker",
"args": ["run", "--rm", "-i",
"-e", "RADARR_URL", "-e", "RADARR_API_KEY",
"-e", "SONARR_URL", "-e", "SONARR_API_KEY",
"ghcr.io/ltmarx/arr-mcp:latest"
],
"env": {
"RADARR_URL": "http://localhost:7878",
"RADARR_API_KEY": "...",
"SONARR_URL": "http://localhost:8989",
"SONARR_API_KEY": "..."
}
}
}
}Tip: Als je *ARR draait op de host machine gebruik dan
host.docker.internal(Mac/Windows) of het host IP-adres in plaats vanlocalhost.
Releases
Releases worden automatisch gepubliceerd via GitHub Actions. Maak een tag aan op GitHub (v1.0.0) en publiceer een Release — het multi-arch image (amd64 + arm64) verschijnt vanzelf op GHCR.
Development
npm run dev # run met tsx (geen build stap)
npm run build # compileer naar dist/
npm start # run gecompileerde outputAvailable Tools
1 toolarr_get_servicesA
List which *ARR services are configured and available
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the transparency burden. It states the tool lists 'configured and available' services, but doesn't disclose what the output looks like (e.g., array of names, objects with status). Basic behavioral info is present, but more detail on output format would improve score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundant words. Every word contributes to meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no siblings, no output schema), the description covers the essential purpose. It is complete enough for an agent to understand when to call it, though slightly more detail on the return value would be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With no parameters and 100% schema coverage, the description adds no parameter info but none is needed. According to guidelines, 0 parameters yields a baseline of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('*ARR services'), clearly stating what the tool does. It is unambiguous and actionable, with no need for sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (when you need to know which ARR services are configured and available). With no siblings, explicit guidance isn't critical, but a brief 'use this to check service availability' would enhance clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v1.2.0- First observed
arr_get_services
TDQS
Scored across 1 tool
With only one tool, there is no possibility of confusion between tools.
The single tool name follows a clear snake_case verb_noun pattern, which is consistent.
One tool is too few for a server that presumably manages *ARR services, which typically require multiple operations.
The tool only lists services, missing essential actions like adding, updating, or deleting services, leaving significant gaps.
Maintenance
Related MCP Connectors
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
The official MCP Server for the Mux API
MCP server for the FFmpeg Micro video transcoding API — create, monitor, download transcodes.
MCP server for accessing curated awesome list documentation
Related MCP Servers
- AlicenseAqualityAmaintenanceAn 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 and search whichever \*arr apps you're running.29MIT
- AlicenseAqualityDmaintenanceMCP server for managing a media server stack (Plex, Radarr, Overseerr, Bazarr, Prowlarr, Trakt.tv) using natural language to browse, request, and discover content.12MIT
- FlicenseNot gradedqualityBmaintenanceMCP server for Overseerr that enables searching, requesting, and managing media (movies and TV shows) through natural language, with integration to Radarr/Sonarr for automated downloads.-
- AlicenseAqualityCmaintenanceEnables interaction with the *arr media management suite (Sonarr, Radarr, Lidarr, Prowlarr, SABnzbd) and TRaSH Guides through MCP tools, allowing media library management, searching, and configuration via natural language.708 npm1MIT