Help us improve
Share bugs, ideas, or general feedback.
From overseerr-mcp
Credential setup and diagnostics for the overseerr-mcp media stack. Automatically extracts API keys from service config files (local or via SSH) and writes them to the plugin credential store. Use when the user asks to 'setup credentials', 'configure plex', 'add my API key', 'setup media stack', 'authentication failed', 'API key not working', '401 error', '403 forbidden', 'why isn't X working', 'check my credentials', 'did my keys get extracted', or mentions any of the 8 bundled services (Plex, Overseerr, Radarr, Sonarr, Prowlarr, Tautulli, SABnzbd, qBittorrent) in a setup or authentication context.
npx claudepluginhub jmagar/claude-homelab --plugin overseerr-mcpHow this skill is triggered — by the user, by Claude, or both
Slash command
/overseerr-mcp:config-media-stackThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You manage credentials for 8 media services in `~/.config/overseerr-mcp/.env`. The goal is to get that file fully populated with minimal manual input — most API keys can be extracted automatically from service config files.
Interactive wizard configures credentials for homelab services like Plex, Radarr, Sonarr, Unraid, Tailscale in ~/.claude-homelab/.env. Use for initial setup or adding services.
Configures UniFi Protect NVR connection: prompts for host, username/password/API key, permissions, and writes to .claude/settings.local.json using platform scripts.
Walks through UniFi Network MCP server setup: prompts for controller host, username/password/API key, optional port/site/SSL/permissions, writes config to settings.local.json via bash/powershell.
Share bugs, ideas, or general feedback.
You manage credentials for 8 media services in ~/.config/overseerr-mcp/.env. The goal is to get that file fully populated with minimal manual input — most API keys can be extracted automatically from service config files.
If the user set appdata_path in the plugin config UI (e.g. /mnt/cache/appdata or myserver:/mnt/cache/appdata), the ConfigChange hook already ran extract-keys when the plugin was enabled. Keys for Radarr, Sonarr, Prowlarr, Overseerr, Tautulli, SABnzbd, and Plex may already be populated — check before asking the user for anything.
All commands below assume the plugin root as the working directory.
Read the .env and report what's populated vs missing:
grep -E "^(PLEX|OVERSEERR|RADARR|SONARR|PROWLARR|TAUTULLI|SABNZBD|QBITTORRENT)_(URL|TOKEN|API_KEY|USERNAME|PASSWORD)=" \
"~/.config/overseerr-mcp/.env" 2>/dev/null \
| sed 's/=.*/=<set>/' \
|| echo "File missing or empty"
Also check for placeholder values that weren't replaced:
grep "your_" "~/.config/overseerr-mcp/.env" 2>/dev/null || true
If most keys are already set and only a few are missing, skip straight to those. If the file is missing or empty, bootstrap it first:
cp skills/config-media-stack/references/.env.example \
"~/.config/overseerr-mcp/.env"
chmod 600 "~/.config/overseerr-mcp/.env"
If keys weren't auto-extracted (file is fresh, or appdata_path wasn't set), ask the user:
- Are your services running on this machine or a remote host?
- If remote: what hostname? (must be in
~/.ssh/configwith key auth)- What is the base appdata path? (e.g.
/mnt/cache/appdataor/mnt/user/appdata)
Then run extraction:
# Local
bash skills/config-media-stack/scripts/extract-keys \
--appdata /mnt/cache/appdata \
--env-file "~/.config/overseerr-mcp/.env"
# Remote
bash skills/config-media-stack/scripts/extract-keys \
--host myserver \
--appdata /mnt/cache/appdata \
--env-file "~/.config/overseerr-mcp/.env"
The script cats each config file (via SSH if remote) and parses locally — credentials never travel as parsed values. It reports what it found and what it missed.
Never ask the user to paste credentials into the chat. For anything that wasn't auto-extracted, tell the user which key is missing, where to find it, and have them edit the file directly:
${EDITOR:-nano} "~/.config/overseerr-mcp/.env"
qBittorrent — password is stored as a salted hash; can't be extracted. Tell the user:
Add your plaintext username and password to
~/.config/overseerr-mcp/.env:QBITTORRENT_USERNAME=your_username QBITTORRENT_PASSWORD=your_password
Plex token — only extractable if Plex runs in Docker with the appdata volume mounted. If it wasn't found, tell the user:
- Open Plex Web → any media item → ⋮ → Get Info → View XML
- Copy the
X-Plex-Tokenvalue from the URL- Add it to
~/.config/overseerr-mcp/.env:PLEX_TOKEN=your_token
Any other missing key — tell the user which service, where to find the key (Settings → General → API Key for all *arr apps and Overseerr, Settings → Web Interface for Tautulli, Config → General for SABnzbd), and that they should add it directly to the .env file. Do not ask them to paste it here.
Run the pre-flight check — it validates all env vars are set, tests connectivity and auth for each service, and checks container status if appdata_path is configured:
preflight # bin/preflight — installed on PATH by the plugin
Any failures will be reported with the specific reason (missing var, auth error, unreachable). Fix those and re-run until all checks pass.
To update a single key without touching anything else:
sed -i "s|^RADARR_API_KEY=.*|RADARR_API_KEY=newvalue|" "~/.config/overseerr-mcp/.env"
chmod 600 "~/.config/overseerr-mcp/.env"
To re-run full extraction (e.g. after a service reinstall):
bash skills/config-media-stack/scripts/extract-keys \
--host myserver \
--appdata /mnt/cache/appdata \
--env-file "~/.config/overseerr-mcp/.env"
To update URLs, change them in the Claude Code plugin config UI — the ConfigChange hook writes them to .env automatically.
chmod 600 "~/.config/overseerr-mcp/.env" after any write