autobrr-mcp
autobrr-mcp
Part of the arr-mcps collection. MCP server exposing autobrr's API as tools, so an LLM can read and manage a full autobrr instance: filters, indexers, IRC networks, RSS/Torznab feeds, download clients, actions, release queue and stats, import lists, notifications, API keys, proxies, and system config.
Built with FastMCP. autobrr's API has no OpenAPI
spec, so the endpoint table is hand-maintained against autobrr's
internal/http handlers (see AGENTS.md).
Creating an API key
Create a key in autobrr Settings > API Keys. The token is shown once at
creation; the server sends it as the X-API-Token header on every request.
Install
Download a wheel from the latest release
and install it as a uv tool (no repo checkout needed):
uv tool install autobrr_mcp-*.whlThis puts an autobrr-mcp command on your PATH. Register it with Claude Code:
claude mcp add autobrr \
--env AUTOBRR_URL=https://autobrr.example.com \
--env AUTOBRR_API_KEY=<key> \
-- autobrr-mcpFrom source
uv sync
cp .env.example .env # fill in AUTOBRR_URL and AUTOBRR_API_KEYclaude mcp add autobrr \
--env AUTOBRR_URL=https://autobrr.example.com \
--env AUTOBRR_API_KEY=<key> \
-- uv run --directory /path/to/autobrr-mcp autobrr-mcpConfig
Env var | Required | Default |
| yes | - |
| yes* | none (no auth header sent if unset) |
* Every autobrr API endpoint requires a token; set it or every call returns
401. The server still starts without one so errors surface from the API rather
than at startup. If your autobrr instance is served under a base URL (e.g.
https://host/autobrr/), include that subpath in AUTOBRR_URL.
Tools
Thirteen resource-scoped tools. Each takes an operation (one of the listed
endpoints) plus an arguments dict matching that operation's parameters, and
dispatches to the underlying endpoint. This is the fleet's portmanteau
pattern: ~104 autobrr endpoints wrapped as 13 tools so every session's
system prompt stays small.
Tool | Operations (endpoints) |
| list, create, get, update, update_partial, delete, duplicate, toggle_enabled, get/update notifications ( |
| list, list_schemas, list_options, create, get, update, delete, test_api, toggle_enabled ( |
| list/create/get/update/delete networks, create channel, send_cmd, restart, message history, process announce ( |
| list, create, get, update, delete, delete_cache, test, fetch_caps, get_latest, force_run, toggle_enabled ( |
| list, create, update, test, get, delete, get_arr_tags ( |
| list, create, update, delete, toggle_enabled ( |
| list, create, update, delete, refresh_all, refresh_one ( |
| list, create, get, update, delete, test, get_pushover_sounds ( |
| list, create, delete ( |
| list, create, get, update, delete, test ( |
| list, recent, get, stats (+activity/volume/heatmap/top indexers/top filters), indexer options, delete, retry action, duplicate profiles, cleanup jobs CRUD/toggle/run ( |
| get, update ( |
| healthz liveness/readiness, log files, latest update, check updates (read-only) |
Excluded on purpose: /api/auth (session/OIDC, not usable over an API
token), /api/events (SSE stream), the inbound /api/webhook list-trigger
routes, and /api/logs/files/{file} (raw log download).
Development
make help # list all commandsCommand | Does |
|
|
| Offline tests - one per endpoint, mocked HTTP |
| Tests against the live instance (needs |
| Build wheel + sdist into |
| Bump the version in |
| Remove build artifacts |
The release workflow (.github/workflows/release.yml) builds and publishes to
Releases whenever a v*
tag is pushed - so the usual flow is make bump-patch, commit, then tag and
push.