This plugin requires configuration values that are prompted when the plugin is enabled. Sensitive values are stored in your system keychain.
no_authRun unraid-mcp without MCP auth. Use only when an upstream gateway enforces auth before traffic reaches this service.
${user_config.no_auth}Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimBased on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
data_dirDirectory for runtime state (OAuth DB, JWT key). Defaults to the plugin persistent data directory.
${user_config.data_dir}api_tokenBearer token for MCP HTTP authentication (Authorization: Bearer <token>). Must match UNRAID_MCP_TOKEN on the server. Generate one with: openssl rand -hex 32
${user_config.api_token}auth_modeServer auth mode. bearer: static API token only. oauth: Google OAuth/JWT for clients like Codex while the API token remains accepted for this plugin connection. OAuth requires public_url, google_client_id, google_client_secret, and auth_admin_email.
${user_config.auth_mode}public_urlPublic base URL for OAuth issuer metadata, e.g. https://unraid.example.com. Required when auth_mode=oauth.
${user_config.public_url}server_urlBase URL the MCP client connects to. Keep the default http://localhost:40010 when Claude Code runs on the same machine as the unraid-mcp server. Change to e.g. http://nas:40010 or https://unraid.example.com when connecting to a remote instance. Do NOT append /mcp — the plugin adds it.
${user_config.server_url}use_dockerDeployment method. true: run via the bundled docker compose stack (ports 40010, mounts data_dir). false: run as a systemd user service (lighter weight, logs to journald).
${user_config.use_docker}unraid_api_keyAPI key for the Unraid GraphQL endpoint (x-api-key header). Generate in Unraid UI: Settings → Management Access → API Keys.
${user_config.unraid_api_key}unraid_api_urlFull Unraid GraphQL endpoint URL. Example: https://10-1-0-2.<hash>.myunraid.net:31337/graphql
${user_config.unraid_api_url}unraid_skip_tlsAccept self-signed TLS certificates from the Unraid GraphQL endpoint. Set true when the server uses a self-signed certificate.
${user_config.unraid_skip_tls}auth_admin_emailBootstrap allowed Google account for OAuth mode. The server refuses to start OAuth without an allowlisted account.
${user_config.auth_admin_email}google_client_idGoogle OAuth client ID for auth_mode=oauth. Create a Web application client at https://console.cloud.google.com.
${user_config.google_client_id}google_client_secretGoogle OAuth client secret for auth_mode=oauth.
${user_config.google_client_secret}Rust MCP server that bridges Claude (and any MCP client) to the Unraid server GraphQL API. Exposes 24 read-only data actions covering array health, Docker, VMs, shares, logs, metrics, UPS, and more, plus a status observability action and a help action.
┌────────────────────────────────────┐
Claude / MCP ◀────▶ │ POST /mcp (RMCP Streamable HTTP) │
stdio client ◀────▶ │ runraid mcp (stdio transport) │
│ │
│ mcp/tools.rs ─▶ app.rs │
│ │ │
│ graphql.rs │
│ │ │
│ POST <UNRAID_API_URL> │
│ x-api-key: <key> │
└───────────────────────┼────────────┘
│
Unraid GraphQL API (myunraid.net)
graphql.rs — HTTP client: POSTs GraphQL queries to the Unraid API with the x-api-key headerapp.rs — UnraidService: business layer, one method per action, no logicmcp/tools.rs — thin shim: parse JSON args, call service, return Valuecli.rs — thin shim: parse CLI args, call service, format and printmain.rs — mode dispatch: HTTP MCP server, stdio MCP, or CLIrustup show)git clone https://github.com/jmagar/unraid-mcp
cd unraid-mcp
# Set required environment variables
export UNRAID_API_URL="https://10-1-0-2.<hash>.myunraid.net:31337/graphql"
export UNRAID_API_KEY="your-api-key-here"
export UNRAID_MCP_PORT=40010
export UNRAID_MCP_DISABLE_HTTP_AUTH=true
# Or copy .env and edit it
cp .env .env.local
# Start the MCP HTTP server
cargo run -- serve mcp
# Verify it is up
curl -sf http://localhost:40010/health | jq .
# → {"status":"ok"}
curl -s -X POST http://localhost:40010/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "unraid",
"arguments": {"action": "server"}
}
}' | jq .result.content[0].text | jq -r . | jq .
| Mode | Command | Description |
|---|---|---|
| HTTP MCP | runraid serve mcp or runraid (no args) | RMCP Streamable HTTP on POST /mcp |
| stdio MCP | runraid mcp | For MCP clients that launch the server as a child process |
| CLI | runraid <command> | Human-readable or --json output |
One tool is exposed: unraid. Set the required action argument to select the operation.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "unraid",
"arguments": {"action": "array"}
}
}
| Action | Description |
|---|---|
array | Array state, disk health, parity check status, capacity |
disks | Physical disks with SMART status, temperature, interface type |
docker | All Docker containers: state, status, ports, update availability |
docker_logs | Container logs — requires id, optional tail (default 100) |
vms | Virtual machines and their state |
server | Server identity, LAN/WAN IP, local and remote URLs |
info | OS, CPU, memory layout, Unraid and kernel versions |
shares | User shares with size, cache settings, LUKS status |
notifications | Active warnings and alerts with overview counts |
| Action | Description |
|---|---|
services | Running system services with uptime |
network | Network access URLs (type, name, IPv4, IPv6) |
metrics | Live CPU percent per core, memory usage, temperature sensors |
vars | System configuration variables (hostname, sharing, SSL, SSH) |
registration | License type, state, expiry |
flash | USB flash drive vendor and product info |
| Action | Description | Extra args |
|---|---|---|
log_files | List available log files with sizes and modification times | — |
log_file | Read a log file | path (required), lines, start_line |
| Action | Description |
|---|---|
parity_history | All past parity check results (date, duration, speed, errors) |
rclone | Backup remote configurations and drive names |
| Action | Description |
|---|---|
ups | UPS devices: battery charge, estimated runtime, power load |
ups_config | UPS monitoring configuration (service, type, shutdown thresholds) |
npx claudepluginhub jmagar/dendrite --plugin unraidQuery, monitor, and manage Unraid servers via GraphQL API through MCP tools. Supports system info, Docker, VMs, array/parity, notifications, plugins, rclone, and live telemetry.
Core homelab agents, commands, and setup/health skills for self-hosted service management. Includes interactive credential setup wizard and unified service health dashboard.
UniFi network management via MCP tools. Monitor devices, clients, network health, firewall rules, and perform management operations.
Gotify push notifications and management via MCP tools with HTTP fallback. Sends alerts for long-running tasks, plan completions, and blocked states.
Agents, commands, skills, and scripts for scaffolding, reviewing, aligning, and deploying homelab MCP server plugins. Includes canonical Python, TypeScript, and Rust server templates.
Memory compression system for Claude Code - persist context across sessions
Ultra-compressed communication mode. Cuts ~75% of tokens while keeping full technical accuracy by speaking like a caveman.
Multi-model consensus engine integrating OpenAI Codex CLI, Gemini CLI, and Claude CLI for collaborative code review and problem-solving.
Curate auto-memory, promote learnings to CLAUDE.md and rules, extract proven patterns into reusable skills.
Standalone image generation plugin using Nano Banana MCP server. Generates and edits images, icons, diagrams, patterns, and visual assets via Gemini image models. No Gemini CLI dependency required.