Skip to main content

arr-mcp

Version License CI

MCP server for natural language management of a home media server stack — Plex, Sonarr, Radarr, SABnzbd, and more — via Podman or Docker.

Talk to your media server through Claude instead of SSH. Ask it to restart a stuck container, check disk usage, pull the latest images for a stack, or migrate a compose file to Podman quadlets. A read-only status dashboard is also included for household members who don't need Claude.


AI Disclosure

This project was co-authored with Claude (Anthropic). The architecture, code, and documentation were developed collaboratively. All code has been reviewed by the author and is maintained as a human-owned open source project.


Quick start

The easiest way to install on a Podman (rootless) server — run this as your service account:

bash <(curl -sSL https://raw.githubusercontent.com/ryanbrinn/arr-mcp/main/scripts/install/install.sh)

This installs arr-agent on the host, generates a quadlet for arr-mcp, and starts both services. It asks five questions (media directory, API key, etc.) and takes about a minute.

Requirements: rootless Podman, uv, active systemd user session (sudo loginctl enable-linger $(whoami)).

For Docker or manual setup, see the Getting Started guide.


What it does

Talk to your server through Claude

Connect arr-mcp to Claude as an MCP server and manage your stack conversationally:

"Restart the radarr container"
"How much disk space is left on /media-server?"
"Pull the latest images for my media stack and bring it back up"
"Convert my compose.yaml to quadlet files"

Status dashboard

An authenticated dashboard is served at http://your-server:8081/ — no Claude required. Shows container status, disk usage, and stack health with auto-refresh every 30 seconds. Household members sign in with a local account or Plex to view status and manage their media interests.


Features

Category Tools
Containers list, start, stop, restart, remove, logs, stats
Stacks up, down, pull, restart, validate (via arr-agent)
Compose files read, write, validate
Conversion compose → quadlets, quadlets → compose
Filesystem disk usage, directory list, file read, write, delete
Logs tail and search any log file
Services health checks, API reachability, diagnostics, version tracking
Media watched-content cleanup, per-user interest states
Credentials encrypted credential store for service API keys
Alerts configurable threshold alerts with polling
Security session auth, rate limiting, security headers, PBKDF2 encryption

All filesystem operations are ownership-scoped — arr-mcp cannot touch files owned by root or other users. See Security.


Architecture

Claude / Browser
      │
      ▼
 arr-mcp (container)          ← MCP tools + dashboard
      │  Podman socket
      ▼
 Container runtime             ← your media stack

 arr-agent (host process)     ← podman-compose, systemctl, quadlets
      │  Unix socket (bind-mounted into arr-mcp)
      ▼
 arr-mcp container

arr-agent is a small host-side process that gives arr-mcp access to podman-compose, systemctl --user, and quadlet files — things that aren't available from inside a container. The install script sets it up automatically.


Connecting to Claude

Claude.ai

Go to Settings → Integrations and add a remote MCP server:

URL:    http://your-server-ip:8081/mcp
Header: Authorization: Bearer your-api-key

Claude Desktop

Claude Desktop requires a local bridge. Install mcpproxy on your local machine, then add to claude_desktop_config.json:

{
  "mcpServers": {
    "arr-mcp": {
      "command": "/usr/local/bin/mcpproxy",
      "args": [
        "--transport", "streamablehttp",
        "-H", "Authorization", "Bearer your-api-key",
        "http://your-server-ip:8081/mcp"
      ]
    }
  }
}

Configuration

Variable Default Description
ARR_MCP_API_KEY `` Bearer token — required (server refuses to start if empty or changeme)
ARR_MCP_PORT 8081 HTTP listen port
ARR_MCP_SERVICES_DIR /media-server Root directory where arr services live (configs, logs, data) — read-only
ARR_MCP_MEDIA_DIR /media-server/library Root directory of your media library
ARR_MCP_COMPOSE_DIR `` Root directory for Docker Compose projects — required for docker-compose runtime
ARR_MCP_CONTAINER_RUNTIME docker-compose docker-compose / docker / podman / auto
ARR_MCP_SOCKET_PATH `` Explicit runtime socket path (required in containers)
ARR_MCP_HELPER_SOCKET /run/arr-agent/arr-agent.sock arr-agent socket path
ARR_MCP_SESSION_SECRET `` Secret for signing session cookies — required
ARR_MCP_ADMIN_USERS `` Comma-separated usernames granted admin on first login
ARR_MCP_LOG_LEVEL info debug / info / warning / error

Full reference: docs/configuration.


Supported runtimes

Configuration Supported
Docker Engine ✅
Docker with Docker Compose ✅
Podman (rootless) with Quadlets ✅
Podman (rooted) ❌

Documentation


Contributing

git clone https://github.com/ryanbrinn/arr-mcp
cd arr-mcp
uv sync --extra dev
uv run pytest

See CLAUDE.md for development guidelines.


License

MIT

Metadata

Release files for arr-mcp-server 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for arr-mcp-server 0.4.0
File Size Uploaded Provenance Actions
arr_mcp_server-0.4.0.tar.gz 495.1 kB With provenance Details for arr_mcp_server-0.4.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for arr-mcp-server 0.4.0
File Interpreter ABI Platform Actions
arr_mcp_server-0.4.0-py3-none-any.whl Python 3 none any Details for arr_mcp_server-0.4.0-py3-none-any.whl

Total release size: 767.9 kB

Release files / arr_mcp_server-0.4.0.tar.gz

Download URL arr_mcp_server-0.4.0.tar.gz
Size 495.1 kB
Tags Source
SHA-256 checksum
How to use checksums
e2700ea4bf821ea28db59a1eefc4a34cde6056a8d18503db044427f90a0e26cf
BLAKE2b-256 checksum
How to use checksums
c49fb665c3b21a8910649915ef4d201518845e955ea7a5bd9bc0da71c7d52f52
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 22, 2026.

Transparency log

Release files / arr_mcp_server-0.4.0-py3-none-any.whl

Download URL arr_mcp_server-0.4.0-py3-none-any.whl
Size 272.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4efc41eac09576eec764add386e585038d78536b39d5084d5f4c4df78420dc67
BLAKE2b-256 checksum
How to use checksums
2a6a2643799a4afc135f5eb9e689054907340f7d2970b0d151f9a25f6bb0d775
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 22, 2026.

Transparency log

Security for arr-mcp-server 0.4.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for arr_mcp_server-0.4.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 22, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page