AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
翻譯準備中
Unified FastMCP 3.3 server for the *arr automation stack — Radarr, Sonarr, Lidarr, Prowlarr, Readarr, Overseerr, Bazarr. 25 MCP tools, cross-arr orchestration, Jellyfin bridge, Prefab-UI cards.
翻譯準備中
開發工具Python · TypeScriptGitHub @sandraschi自行安裝營運者未確認
試用過了嗎? 點一下就好,不需要登入。
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
安裝型專案無需部署網域也可驗證。個人儲存庫可透過 GitHub 登入驗證,組織儲存庫可使用上方的儲存庫驗證檔案。
正在載入完整 README。 以下為已儲存的摘錄。
FastMCP 3.3 MCP server for the complete *arr automation stack — Radarr, Sonarr, Lidarr, Prowlarr, Readarr, Overseerr, and Bazarr — under a single MCP interface.檢視完整 README ↗FastMCP 3.4 MCP server for the complete *arr automation stack — Radarr, Sonarr, Lidarr, Prowlarr, Readarr, Overseerr, and Bazarr — under a single MCP interface.
New here? Start at docs/ONBOARDING.md (10-minute setup, no account needed).
Download arr-mcp.mcpb + install.ps1 from the
latest release,
then run install.ps1 — it installs the bundle into Claude Desktop.
Other MCP clients (Cursor, Windsurf, opencode):
{
"mcpServers": {
"arr-mcp": { "command": "uvx", "args": ["arr-mcp"] }
}
}
arr_health_card, arr_calendar_card, arr_stats_card (@mcp.tool(app=True)) — rich interactive cards in Claude Desktop, Cursor.env, no restart (.env still works as fallback)arr://config, arr://quickstart, arr://help, arr://capabilities for agent self-discoveryarr_agentic tool with Context injection for LLM-powered cross-arr workflows/mcp, see raw JSON-RPC response/api/logs/stream for live log viewing.exe installer bundling Python backend via PyInstaller# 1. Clone
git clone https://github.com/sandraschi/arr-mcp
cd arr-mcp
# 2. Create config (optional — auto-discovery probes default ports,
# or use Settings → Services in the webapp later; no file editing needed)
cp .env.example .env
# 3. Run
uv sync
uv run arr-mcp
# 4. Webapp (separate terminal)
cd webapp
npm install
npm run dev # → http://localhost:10939
| Service | Default Port | Config Prefix | Description |
|---|---|---|---|
| Radarr | 7878 | RADARR_ | Movies |
| Sonarr | 8989 | SONARR_ | TV Series |
| Lidarr | 8686 | LIDARR_ | Music |
| Prowlarr | 9696 | PROWLARR_ | Indexer Backbone |
| Readarr | 8787 | READARR_ | Books |
| Overseerr | 5055 | OVERSEERR_ | Media Requests & Discovery |
| Bazarr | 6767 | BAZARR_ | Subtitles |
| Page | Route | What it does |
|---|---|---|
| Dashboard | / | KPIs (items/wanted/reachable), per-service cards with Open/Setup actions, detected Docker containers, fleet siblings |
| Radarr / Sonarr / Lidarr / Prowlarr / Readarr / Overseerr / Bazarr | /{service} | Live per-service data: counts, wanted, queue, disk space — or a setup guide when unconfigured |
| Orchestrate | /orchestrate | Request form (runs the real pipeline) + stack overview with total wanted |
| Chat | /chat | AI chat with Ollama/LM Studio model selection |
| Inspector | /inspector | Interactive MCP tool runner — select, param, execute |
| Logger | /logger | Real-time SSE log streaming with filter/export |
| Help | /help | Setup guide, Docker Compose, per-service install, API keys |
| Settings | /settings | LLM provider config, backend health, port reference |
"I want to watch Dune"
↓
Jellyfin check → already in library? → DONE
↓ not found
Type detection → movie → Radarr
↓
Queue check → not already queued?
↓
Add to Radarr → downloading...
The same pipeline runs from the webapp: the Orchestrate page has a request
form backed by POST /api/orchestrate/request.
Three servers, three jobs: arr-mcp acquires, plex-mcp owns Plex,
jellyfin-mcp owns Jellyfin. arr-mcp checks your Plex/Jellyfin/Emby
servers directly before downloading — it does not route through the sibling
MCP servers, and nothing is shared between them. GET /api/fleet probes both
siblings live; the Dashboard links to their dashboards when running. Full
contract: docs/FLEET_MEDIA_TOPOLOGY.md.
arr-mcp/
├── src/arr_mcp/ # Python backend (FastMCP 3.4)
│ ├── services/ # 8 arr clients (BaseArrClient + 7 arrs)
│ ├── tools/ # 31 MCP tools (portmanteau + single-purpose + prefab cards)
│ ├── prefabs.py # Prefab-UI card builders (health, calendar, stats, orchestrate)
│ ├── utils/ # Jellyfin bridge
│ ├── api.py # REST router with /api/{service}/summary
│ ├── app.py # FastMCP singleton, lifespan, resources, prompts
│ ├── server.py # Entry point, auto-discovery, log buffer
│ ├── config.py # Pydantic v2 config + .env loading
│ └── transport.py # STDIO/HTTP/SSE + FastMCP 3.3 env vars
├── webapp/ # React 19 + Vite + Tailwind
│ ├── src/pages/ # 15 page components
│ ├── src/utils/ # apiFetch<T>(), notifications, LLM client
│ └── e2e/ # Playwright smoke tests (15 pages)
├── native/ # Tauri 2.0 app wrapper
│ ├── Cargo.toml # Rust deps (tauri 2, shell/fs/process)
│ ├── src/main.rs # Entry point, sidecar launch, cleanup
│ ├── tauri.conf.json # Window config, sidecar path
│ ├── capabilities/ # Tauri 2.0 permission model
│ ├── icons/ # App icons
│ └── build-sidecar.ps1 # PyInstaller → binaries/
├── tests/ # pytest + pytest-httpx (289 tests)
├── docker-compose.yml # Full *arr stack (8 services)
├── .github/workflows/ci.yml # GitHub Actions (ruff + pytest + biome + tsc)
├── justfile # Fleet-standard recipes
├── arr-mcp-backend.spec # PyInstaller spec
└── run_server.py # PyInstaller entry point
just install # uv sync + pre-commit
just start # run MCP server
just webapp # start React dev server
just lint # ruff check
just typecheck # mypy
just test # pytest with coverage (289 tests)
just e2e # Playwright e2e (starts backend + webapp)
just ci # lint + typecheck + test + webapp build
just tauri-build # full native installer
just tauri-dev # Tauri hot-reload
just tauri-sidecar # PyInstaller backend only → native/binaries/
cd webapp
npm install
npx playwright install chromium
npm run test:e2e # headless
npm run test:e2e:ui # interactive UI
npm run test:e2e:headed # visible browser
Playwright auto-starts the backend (:10938) and Vite dev server (:10939). 15 smoke tests verify every page loads without crashing.
/mcp + REST /api/* + SSE /api/logs/stream)docker compose up -d arr-mcp # backend on :10938 (HTTP transport)
docker compose --profile webapp up -d # dashboard on :10939
The arr-mcp service builds Dockerfile (uv, locked deps) with
ARR_MCP_TRANSPORT=http; config comes from the repo-root .env.
Point MCP clients at http://HOST:10938/mcp. See docs/TROUBLESHOOTING.md
for container networking notes (use compose service names, not localhost).
MIT