Monitors and manages Unraid NAS servers: health checks, disk/array status, Docker containers, VMs, parity, logs, notifications, UPS, CPU/memory via API or MCP.
From unraid-mcpnpx claudepluginhub jmagar/unraid-mcp --plugin unraidThis skill uses the workspace's default tool permissions.
README.mdexamples/disk-health.shexamples/read-logs.shreferences/api-reference.mdreferences/endpoints.mdreferences/introspection-schema.mdreferences/quick-reference.mdreferences/schema.graphqlreferences/troubleshooting.mdscripts/dashboard.shscripts/unraid-query.shsetup.shDesigns and optimizes AI agent action spaces, tool definitions, observation formats, error recovery, and context for higher task completion rates.
Enables AI agents to execute x402 payments with per-task budgets, spending controls, and non-custodial wallets via MCP tools. Use when agents pay for APIs, services, or other agents.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
MCP mode (preferred): Use when mcp__unraid-mcp__unraid tool is available.
HTTP fallback: Use when MCP tools are unavailable. Credentials are in Bash subprocesses
as $CLAUDE_PLUGIN_OPTION_UNRAID_API_URL and $CLAUDE_PLUGIN_OPTION_UNRAID_API_KEY.
Do NOT attempt ${user_config.unraid_api_key} in curl — sensitive values only work
as $CLAUDE_PLUGIN_OPTION_* in Bash subprocesses.
MCP URL: ${user_config.unraid_mcp_url}
Use the single unraid MCP tool with action (domain) + subaction (operation) for all Unraid operations.
First time? Run setup to configure credentials:
unraid(action="health", subaction="setup")
Credentials are stored at ~/.unraid-mcp/.env. Re-run setup any time to update or verify.
unraid(action="<domain>", subaction="<operation>", [additional params])
Examples:
unraid(action="system", subaction="overview")
unraid(action="docker", subaction="list")
unraid(action="health", subaction="check")
unraid(action="array", subaction="parity_status")
unraid(action="disk", subaction="disks")
unraid(action="vm", subaction="list")
unraid(action="notification", subaction="overview")
unraid(action="live", subaction="cpu")
system — Server Information| Subaction | Description |
|---|---|
overview | Complete system summary (recommended starting point) |
server | Hostname, version, uptime |
servers | All known Unraid servers |
array | Array status and disk list |
network | Network interfaces and config |
registration | License and registration status |
variables | Environment variables |
metrics | Real-time CPU, memory, I/O usage |
services | Running services status |
display | Display settings |
config | System configuration |
online | Quick online status check |
owner | Server owner information |
settings | User settings and preferences |
flash | USB flash drive details |
ups_devices | List all UPS devices |
ups_device | Single UPS device (requires device_id) |
ups_config | UPS configuration |
health — Diagnostics| Subaction | Description |
|---|---|
check | Comprehensive health check — connectivity, array, disks, containers, VMs, resources |
test_connection | Test API connectivity and authentication |
diagnose | Detailed diagnostic report with troubleshooting recommendations |
setup | Configure credentials interactively (stores to ~/.unraid-mcp/.env) |
array — Array & Parity| Subaction | Description |
|---|---|
parity_status | Current parity check progress and status |
parity_history | Historical parity check results |
parity_start | Start a parity check |
parity_pause | Pause a running parity check |
parity_resume | Resume a paused parity check |
parity_cancel | Cancel a running parity check |
start_array | Start the array |
stop_array | ⚠️ Stop the array (requires confirm=True) |
add_disk | Add a disk to the array (requires slot, id) |
remove_disk | ⚠️ Remove a disk (requires slot, confirm=True) |
mount_disk | Mount a disk |
unmount_disk | Unmount a disk |
clear_disk_stats | ⚠️ Clear disk statistics (requires confirm=True) |
disk — Storage & Logs| Subaction | Description |
|---|---|
shares | List network shares |
disks | All physical disks with health and temperatures |
disk_details | Detailed info for a specific disk (requires disk_id) |
log_files | List available log files |
logs | Read log content (requires log_path; optional tail_lines) |
flash_backup | ⚠️ Trigger a flash backup (requires confirm=True) |
docker — Containers| Subaction | Description |
|---|---|
list | All containers with status, image, state |
details | Single container details (requires container identifier) |
start | Start a container (requires container identifier) |
stop | Stop a container (requires container identifier) |
restart | Restart a container (requires container identifier) |
networks | List Docker networks |
network_details | Details for a specific network (requires network_id) |
Container Identification: Name, ID, or partial name (fuzzy match supported).
vm — Virtual Machines| Subaction | Description |
|---|---|
list | All VMs with state |
details | Single VM details (requires vm_id) |
start | Start a VM (requires vm_id) |
stop | Gracefully stop a VM (requires vm_id) |
pause | Pause a VM (requires vm_id) |
resume | Resume a paused VM (requires vm_id) |
reboot | Reboot a VM (requires vm_id) |
force_stop | ⚠️ Force stop a VM (requires vm_id, confirm=True) |
reset | ⚠️ Hard reset a VM (requires vm_id, confirm=True) |
notification — Notifications| Subaction | Description |
|---|---|
overview | Notification counts (unread, archived by type) |
list | List notifications (optional filter, limit, offset) |
mark_unread | Mark a notification as unread (requires notification_id) |
create | Create a notification (requires title, subject, description, importance) |
archive | Archive a notification (requires notification_id) |
delete | ⚠️ Delete a notification (requires notification_id, notification_type, confirm=True) |
delete_archived | ⚠️ Delete all archived (requires confirm=True) |
archive_all | Archive all unread notifications |
archive_many | Archive multiple (requires ids list) |
unarchive_many | Unarchive multiple (requires ids list) |
unarchive_all | Unarchive all archived notifications |
recalculate | Recalculate notification counts |
key — API Keys| Subaction | Description |
|---|---|
list | All API keys |
get | Single key details (requires key_id) |
create | Create a new key (requires name; optional roles, permissions) |
update | Update a key (requires key_id) |
delete | ⚠️ Delete a key (requires key_id, confirm=True) |
add_role | Add a role to a key (requires key_id, roles) |
remove_role | Remove a role from a key (requires key_id, roles) |
plugin — Plugins| Subaction | Description |
|---|---|
list | All installed plugins |
add | Install plugins (requires names — list of plugin names) |
remove | ⚠️ Uninstall plugins (requires names — list of plugin names, confirm=True) |
rclone — Cloud Storage| Subaction | Description |
|---|---|
list_remotes | List configured rclone remotes |
config_form | Get configuration form for a remote type |
create_remote | Create a new remote (requires name, provider_type, config_data) |
delete_remote | ⚠️ Delete a remote (requires name, confirm=True) |
setting — System Settings| Subaction | Description |
|---|---|
update | Update system settings (requires settings_input object) |
configure_ups | ⚠️ Configure UPS settings (requires confirm=True) |
customization — Theme & Appearance| Subaction | Description |
|---|---|
theme | Current theme settings |
public_theme | Public-facing theme |
is_initial_setup | Check if initial setup is complete |
sso_enabled | Check SSO status |
set_theme | Update theme (requires theme parameters) |
oidc — SSO / OpenID Connect| Subaction | Description |
|---|---|
providers | List configured OIDC providers |
provider | Single provider details (requires provider_id) |
configuration | OIDC configuration |
public_providers | Public-facing provider list |
validate_session | Validate current SSO session (requires token) |
user — Current User| Subaction | Description |
|---|---|
me | Current authenticated user info |
live — Real-Time SubscriptionsThese use persistent WebSocket connections. Returns a "connecting" placeholder on the first call — retry momentarily for live data.
| Subaction | Description |
|---|---|
cpu | Live CPU utilization |
memory | Live memory usage |
cpu_telemetry | Detailed CPU telemetry |
array_state | Live array state changes |
parity_progress | Live parity check progress |
ups_status | Live UPS status |
notifications_overview | Live notification counts |
owner | Live owner info |
server_status | Live server status |
log_tail | Live log tail stream |
notification_feed | Live notification feed |
All require confirm=True as an explicit parameter. Without it, the action is blocked and elicitation is triggered.
| Domain | Subaction | Risk |
|---|---|---|
array | stop_array | Stops array while containers/VMs may use shares |
array | remove_disk | Removes disk from array |
array | clear_disk_stats | Clears disk statistics permanently |
vm | force_stop | Hard kills VM without graceful shutdown |
vm | reset | Hard resets VM |
notification | delete | Permanently deletes a notification |
notification | delete_archived | Permanently deletes all archived notifications |
rclone | delete_remote | Removes a cloud storage remote |
key | delete | Permanently deletes an API key |
disk | flash_backup | Triggers flash backup operation |
setting | configure_ups | Modifies UPS configuration |
plugin | remove | Uninstalls a plugin |
unraid(action="health", subaction="setup")
unraid(action="health", subaction="check")
unraid(action="system", subaction="overview")
unraid(action="health", subaction="check")
unraid(action="docker", subaction="list")
unraid(action="docker", subaction="details", container_id="plex")
unraid(action="docker", subaction="restart", container_id="sonarr")
unraid(action="array", subaction="parity_status")
unraid(action="disk", subaction="disks")
unraid(action="system", subaction="array")
unraid(action="disk", subaction="log_files")
unraid(action="disk", subaction="logs", log_path="/var/log/syslog", tail_lines=50)
unraid(action="live", subaction="cpu")
unraid(action="live", subaction="memory")
unraid(action="live", subaction="array_state")
unraid(action="vm", subaction="list")
unraid(action="vm", subaction="start", vm_id="<id>")
unraid(action="vm", subaction="force_stop", vm_id="<id>", confirm=True)
/var/log/, /boot/logs/, /mnt/ prefixes accepteddocker logsarraySubscription: Known Unraid API bug — live/array_state may show "connecting" indefinitelynotifications_overview, owner, server_status, ups_status): Only populate cache on first real server eventWhen MCP tools are unavailable, use direct GraphQL queries via curl. Credentials are
available as $CLAUDE_PLUGIN_OPTION_* environment variables in Bash subprocesses.
# System overview
curl -s "$CLAUDE_PLUGIN_OPTION_UNRAID_API_URL" \
-H "x-api-key: $CLAUDE_PLUGIN_OPTION_UNRAID_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"{ info { os { hostname uptime } } }"}'
# List Docker containers
curl -s "$CLAUDE_PLUGIN_OPTION_UNRAID_API_URL" \
-H "x-api-key: $CLAUDE_PLUGIN_OPTION_UNRAID_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"{ docker { containers { names state status } } }"}'
# Array status
curl -s "$CLAUDE_PLUGIN_OPTION_UNRAID_API_URL" \
-H "x-api-key: $CLAUDE_PLUGIN_OPTION_UNRAID_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"{ array { state capacity { kilobytes { free used total } } disks { name status temp } } }"}'