An independently deployable MCP (Model Context Protocol) server for Radarr, written in Go. It exposes one MCP server over Streamable HTTP at /mcp/radarr and a health endpoint at /health, and talks to Radarr API v3 (validated against Radarr 6.4.4.10685-ls321).
docker run -d --name radarr-mcp \
--read-only --cap-drop ALL --security-opt no-new-privileges:true \
-e RADARR_URL=http://your-radarr:7878 \
-e RADARR_API_KEY='your-radarr-api-key' \
-e RADARR_LISTEN_ADDR=0.0.0.0:8080 \
-p 127.0.0.1:8091:8080 \
marcosisocram/radarr-mcp:latest
http://127.0.0.1:8091/mcp/radarrhttp://127.0.0.1:8091/healthThe container runs as a non-root user with no shell, on a distroless base, and declares HEALTHCHECK CMD ["/radarr-mcp", "--healthcheck"] — the same command a Kubernetes livenessProbe/readinessProbe should use.
| Variable | Required | Default | Description |
|---|---|---|---|
RADARR_URL | yes | — | Trusted Radarr base URL (may include an install path prefix, e.g. https://host/radarr) |
RADARR_API_KEY | yes | — | Radarr API key (Radarr → Settings → General → Security) |
RADARR_LISTEN_ADDR | no | 127.0.0.1:8080 | Listen address; use 0.0.0.0:8080 in containers |
Never pass upstream URLs through tool arguments — the base URL is trusted configuration only. TLS verification for upstream HTTPS is always enabled, and redirects are never followed so the API key cannot be replayed to another origin.
Read tools: radarr_list_movies (with monitored/has_file filters and limit/offset), radarr_get_movie, radarr_lookup_movies, radarr_list_quality_profiles, radarr_list_root_folders, radarr_get_queue, radarr_get_history, and radarr_get_command.
Write tools: radarr_add_movie, radarr_set_movie_monitored, and radarr_search_movie.
A typical flow is radarr_lookup_movies → radarr_list_quality_profiles + radarr_list_root_folders → radarr_add_movie → radarr_search_movie → radarr_get_command.
radarr_add_movie requires tmdb_id, quality_profile_id, and root_folder_path; there are no silent defaults for those. It never starts a release search and returns already_exists without writing when the TMDB ID is already in the library. radarr_search_movie asks Radarr to search indexers for one explicit movie and can start a download; it returns a command ID that radarr_get_command tracks.
Errors report the operation and HTTP status only — never the API key or the upstream response body. Removing movies or files, manual import, config/indexer/download-client editing, backups, and generic administrative commands are not part of this integration.
The server provides no inbound authentication. Expose the port only on a trusted network or behind a TLS/access-control proxy. Container hardening shown above (--read-only, cap-drop ALL, no-new-privileges) is recommended for all deployments.
marcosisocram/qbittorrent-mcp — qBittorrentmarcosisocram/radarr-mcp — Radarr (movies, this image)marcosisocram/sonarr-mcp — Sonarr (TV series)Content type
Image
Digest
sha256:ba481ae48…
Size
4.3 MB
Last updated
2 days ago
docker pull marcosisocram/radarr-mcp