Skip to main content
Glama

unraid-mcp

MCP server for Unraid's official GraphQL API (Unraid 7.3.2 / unraid-api 4.35.1). Connects to /graphql on the standard web port — not port 31337.

Install

claude mcp add unraid -e UNRAID_HOST=tower.local -e UNRAID_API_KEY=your-key -- uvx unraid-mcp

Related MCP server: unraid-code-mode-mcp

Tool surface

One MCP tool: unraid(domain, action, **params).

Domain

Read actions

Write actions (gated)

system

info, versions, vars, server, time, plugins

array

status, disks, parity_history

start, stop, parity_start, parity_pause, parity_resume, parity_cancel

docker

list, get, logs, networks, port_conflicts, update_status

start, stop, restart, pause, unpause

vm

list, get

start, stop, pause, resume, reboot

share

list, get

notification

overview, list

archive, unread, archive_all

metrics

cpu, memory, temperature, network, ups

logs

list, read

health

ping, schema_check, capabilities

Configuration

Env var

Default

Meaning

UNRAID_HOST

— (required unless UNRAID_API_URL)

Hostname/IP of the Unraid server

UNRAID_API_KEY

— (required)

API key from unraid-api apikey --create

UNRAID_API_URL

http://{host}/graphql

Full endpoint override

UNRAID_ALLOW_WRITES

0

Master write switch

UNRAID_VERIFY_SSL

1

0 or path to CA bundle

UNRAID_TIMEOUT

30

Read timeout in seconds

UNRAID_MAX_RESPONSE_BYTES

40000

Response cap

UNRAID_TRANSPORT

stdio

stdio or http

UNRAID_LOG_LEVEL

INFO

Logging level

Safety

Two independent write locks prevent accidental mutations:

  1. Server-level: writes are refused unless UNRAID_ALLOW_WRITES=1. Default is read-only. Refusal is a structured write_disabled error naming the env var.

  2. Call-level: every write action requires confirm=true or an accepted MCP elicitation prompt.

For defence in depth, use a VIEWER-role API key so the Unraid API itself rejects mutations regardless of server configuration.

docker restart is implemented as stop then start (the API has no restart mutation).

Non-goals (v1)

Not implemented: disk add/remove, clearArrayDiskStatistics, removeContainer, VM forceStop/reset, API-key mutations, OIDC, rclone, updateSettings, flash backup, plugin install/remove, GraphQL subscriptions.

Each returns a structured not_implemented error naming the reason.

Development

uv sync
uv run ruff check .
uv run ruff format --check .
uv run mypy
uv run pytest

Live tests against a real Unraid server (read-only):

UNRAID_LIVE=1 uv run --env-file .env pytest tests/test_live.py

License

MIT

Available Tools

1 tool
unraidUnraidC

Single entry point for all Unraid operations.

Use health.capabilities to discover available actions.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
domainYes
paramsNo
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It does not explain the 'confirm' flag's role in gating destructive actions, whether operations mutate state, permission/auth requirements, or rate limits. For a multi-purpose gateway that can perform writes, this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the tool's role and followed by the discovery instruction. Efficient and free of filler, though too terse given the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a complex gateway tool with 0% schema coverage and no annotations, yet the description explains only the entry-point concept. It omits the domain/action/params interaction and confirm semantics; the output schema covers return values, but the call contract remains underspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description adds almost no parameter meaning. It hints that 'action' comes from health.capabilities, but says nothing about 'domain', the free-form 'params' object, or the 'confirm' boolean, leaving four undocumented parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool is a 'single entry point for all Unraid operations', which clarifies its role as a dispatcher rather than a specific verb+resource. However, it never says what kinds of operations exist (storage, VMs, shares, etc.), so an agent still needs to call health.capabilities to understand the tool's actual scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives one actionable step: 'Use health.capabilities to discover available actions', which is genuine usage guidance for a discovery-first gateway. There are no sibling tools to distinguish from and no when-not-to-use guidance, so it is implied usage at best.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev0.1.0
    • First observedunraid

TDQS

B3/5.0

Scored across 1 tool

Disambiguation5/5

With only one tool, there is no possibility of confusion between tools. The tool is a single entry point, so all operations funnel through it, but that is an intra-tool concern rather than inter-tool ambiguity.

Naming Consistency4/5

The lone tool is named 'unraid', which is trivially consistent since there is no other name to conflict with. However, it does not follow a descriptive verb_noun convention, making it slightly less predictable than ideal.

Tool Count2/5

One tool for an entire Unraid management server is far too few. The domain typically involves discrete operations for array, disk, Docker, VM, and share management, and a single catch-all tool is a poor fit for that scope.

Completeness4/5

The tool claims to be a single entry point for all Unraid operations with capability discovery, suggesting broad coverage. The opaque surface and lack of explicit operations is a minor gap, but the design intends complete access.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Automatically generates MCP tools from any GraphQL API by introspecting its schema, supporting queries, mutations, and authentication.
    5
    GPL 3.0
  • A
    license
    A
    quality
    D
    maintenance
    A code-mode MCP server for the Unraid 7.2+ GraphQL API that exposes search and execute tools, allowing LLM agents to introspect and call any GraphQL field via sandboxed JavaScript.
    2
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Read-only MCP server for TrueNAS SCALE 25.10+ that connects via JSON-RPC 2.0 WebSocket API, providing tools to inspect storage, shares, services, system info, jobs, and alerts.
    21 npm
    MIT