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.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · http counts 24 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
arr_agentic
-
arr_calendar
-
arr_calendar_card
-
arr_health
-
arr_health_card
-
arr_help
-
arr_orchestrate
-
arr_stats
-
arr_stats_card
-
bazarr_subtitles
-
lidarr_albums
-
lidarr_artists
-
overseerr_requests
-
overseerr_search
-
overseerr_users
-
prowlarr_applications
-
prowlarr_history
-
prowlarr_indexers
-
prowlarr_search
-
radarr_movies
-
readarr_authors
-
readarr_books
-
sonarr_episodes
-
sonarr_series
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 48f977e · analyzer v33 · 1w ago
skills & prompt files 4
- agent-rules sandraschi-arr-mcp-48f977e/AGENTS.md
- agent-rules sandraschi-arr-mcp-48f977e/CLAUDE.md
- prompt-file sandraschi-arr-mcp-48f977e/mcpb/assets/prompts/system.md
- prompt-file sandraschi-arr-mcp-48f977e/mcpb/assets/prompts/user.md
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 127
filesystem 4
- fs sandraschi-arr-mcp-48f977e/mcpb/src/config.py :4
from pathlib import Path - fs (weak) sandraschi-arr-mcp-48f977e/scripts/cua-smoke.py :47
with open(p) as f: - fs (weak) sandraschi-arr-mcp-48f977e/scripts/cua-webapp-test.py :33
from pathlib import Path - fs sandraschi-arr-mcp-48f977e/src/arr_mcp/config.py :4
from pathlib import Path
shell / exec 2
- shell (weak) sandraschi-arr-mcp-48f977e/scripts/cua-smoke.py :31
import subprocess - shell (weak) sandraschi-arr-mcp-48f977e/scripts/cua-webapp-test.py :27
import subprocess
network 15
- net sandraschi-arr-mcp-48f977e/mcpb/src/api.py :236
"total_requests": requests.get("pageInfo", {}).get("total", 0), - net sandraschi-arr-mcp-48f977e/mcpb/src/app.py :51
import httpx - net sandraschi-arr-mcp-48f977e/mcpb/src/server.py :158
import socket - net (weak) sandraschi-arr-mcp-48f977e/scripts/cua-smoke.py :34
import urllib.error - net (weak) sandraschi-arr-mcp-48f977e/scripts/cua-webapp-test.py :30
import urllib.error - net sandraschi-arr-mcp-48f977e/src/arr_mcp/api.py :258
"total_requests": requests.get("pageInfo", {}).get("total", 0), - net sandraschi-arr-mcp-48f977e/src/arr_mcp/app.py :51
import httpx - net sandraschi-arr-mcp-48f977e/src/arr_mcp/server.py :159
import socket - net sandraschi-arr-mcp-48f977e/src/arr_mcp/services/base.py :11
import httpx - net sandraschi-arr-mcp-48f977e/src/arr_mcp/services/bazarr_service.py :16
import httpx - net sandraschi-arr-mcp-48f977e/src/arr_mcp/services/overseerr_service.py :15
import httpx - net sandraschi-arr-mcp-48f977e/src/arr_mcp/utils/emby_bridge.py :14
import httpx
show 3 more
- net sandraschi-arr-mcp-48f977e/src/arr_mcp/utils/jellyfin_bridge.py :13
import httpx - net sandraschi-arr-mcp-48f977e/src/arr_mcp/utils/plex_bridge.py :13
import httpx - net (weak) sandraschi-arr-mcp-48f977e/tests/test_api.py :5
from httpx import ASGITransport, AsyncClient
secrets 2
- secrets sandraschi-arr-mcp-48f977e/mcpb/src/config.py :95
api_key=os.getenv("RADARR_API_KEY", ""), - secrets sandraschi-arr-mcp-48f977e/src/arr_mcp/config.py :95
api_key=os.getenv("RADARR_API_KEY", ""),
tool registrations 24
- arr_agentic sandraschi-arr-mcp-48f977e/src/arr_mcp/tools/agentic.py :39
- bazarr_subtitles sandraschi-arr-mcp-48f977e/src/arr_mcp/tools/bazarr_tools.py :25
- arr_orchestrate sandraschi-arr-mcp-48f977e/src/arr_mcp/tools/cross_arr_tools.py :53
- arr_calendar sandraschi-arr-mcp-48f977e/src/arr_mcp/tools/cross_arr_tools.py :232
- arr_stats sandraschi-arr-mcp-48f977e/src/arr_mcp/tools/cross_arr_tools.py :309
- arr_health sandraschi-arr-mcp-48f977e/src/arr_mcp/tools/health_tools.py :22
- arr_help sandraschi-arr-mcp-48f977e/src/arr_mcp/tools/help_tools.py :130
- lidarr_artists sandraschi-arr-mcp-48f977e/src/arr_mcp/tools/lidarr_tools.py :20
- lidarr_albums sandraschi-arr-mcp-48f977e/src/arr_mcp/tools/lidarr_tools.py :97
- overseerr_requests sandraschi-arr-mcp-48f977e/src/arr_mcp/tools/overseerr_tools.py :20
- overseerr_search sandraschi-arr-mcp-48f977e/src/arr_mcp/tools/overseerr_tools.py :117
- overseerr_users sandraschi-arr-mcp-48f977e/src/arr_mcp/tools/overseerr_tools.py :142
show 12 more
- arr_health_card sandraschi-arr-mcp-48f977e/src/arr_mcp/tools/prefab_tools.py :27
- arr_calendar_card sandraschi-arr-mcp-48f977e/src/arr_mcp/tools/prefab_tools.py :65
- arr_stats_card sandraschi-arr-mcp-48f977e/src/arr_mcp/tools/prefab_tools.py :115
- prowlarr_indexers sandraschi-arr-mcp-48f977e/src/arr_mcp/tools/prowlarr_tools.py :20
- prowlarr_search sandraschi-arr-mcp-48f977e/src/arr_mcp/tools/prowlarr_tools.py :108
- prowlarr_applications sandraschi-arr-mcp-48f977e/src/arr_mcp/tools/prowlarr_tools.py :156
- prowlarr_history sandraschi-arr-mcp-48f977e/src/arr_mcp/tools/prowlarr_tools.py :213
- radarr_movies sandraschi-arr-mcp-48f977e/src/arr_mcp/tools/radarr_tools.py :26
- readarr_authors sandraschi-arr-mcp-48f977e/src/arr_mcp/tools/readarr_tools.py :20
- readarr_books sandraschi-arr-mcp-48f977e/src/arr_mcp/tools/readarr_tools.py :97
- sonarr_series sandraschi-arr-mcp-48f977e/src/arr_mcp/tools/sonarr_tools.py :20
- sonarr_episodes sandraschi-arr-mcp-48f977e/src/arr_mcp/tools/sonarr_tools.py :101
declared dependencies 23
- fastmcp@>=3.4.4,<4
- pydantic@>=2.0.0
- pydantic-settings@>=2.0.0
- python-dotenv@>=1.0.0
- httpx@>=0.25.0
- fastapi@>=0.104.0
- uvicorn@>=0.24.0
- rich@>=13.0.0
- prefab-ui@>=0.18.0
- pytest@>=8.0.0,<9.0.0
- pytest-asyncio@>=0.23.0,<1.0.0
- pytest-cov@>=4.0.0,<5.0.0
show 11 more
- pytest-httpx@>=0.30.0
- ruff@>=0.16.0,<0.17
- mypy@>=1.8.0,<2.0.0
- pre-commit@>=3.6.0
- tauri-build@2
- tauri@2
- tauri-plugin-shell@2
- tauri-plugin-fs@2
- tauri-plugin-process@2
- serde@1
- serde_json@1