Unraid MCP
MCP servers for Unraid in Python and Rust: array state, Docker, virtual machines and telemetry over the GraphQL API
- 153 ★ on the repository
- Last commit
- MIT
Broad access
Why this level
- An agent with write rights can stop the array and break running services
- The Unraid API key gives access to the system, so keep it in plugin settings and not in a repository
- The Rust server listens on all interfaces on port 40010 by default
Install
- Works in
Manual install
/plugin marketplace add dinglebear-ai/unraidAdds the repository marketplace, then `unraid-mcp@unraid-mcp` installs.
Access and checks
How we reviewBroad accessThe tool can change data, run commands or handle secrets.
- An agent with write rights can stop the array and break running services
- The Unraid API key gives access to the system, so keep it in plugin settings and not in a repository
- The Rust server listens on all interfaces on port 40010 by default
This is third-party code. Review the repository files before installing.
What it does
The repository bundles two MCP servers for a home Unraid server and three plugins for the OS itself. The Python server `unraid-mcp` is published to PyPI and starts with `uvx unraid-mcp`, while the Rust server `runraid` builds into one static binary together with a CLI client. Both call the Unraid GraphQL API with the `UNRAID_API_KEY` key. The agent gets data on the system, the disk array, Docker containers, virtual machines and notifications, plus live telemetry. The Python server exposes a single `unraid` tool, and dangerous operations there need explicit confirmation. In the Rust server reading maps to the `unraid:read` scope, and starting and stopping virtual machines, containers and the array maps to `unraid:admin`. There are plugins for Claude Code and Codex in the repository marketplace and an extension for Gemini CLI.
Who it is for. Owners of home servers and small labs on Unraid who want to ask an agent about the state of disks, containers and virtual machines.
Good fit when
- The array shows a warning and the agent reads disk state and notifications instead of walking the dashboard by hand
- A Docker container hung and the agent checks its state and restarts it on an explicit request
- You want a summary of load and temperature from live telemetry without opening the web interface
- The server runs in Docker on Unraid itself and the connection goes over HTTP with a token
Not a fit when
- You want read-only access with no way to change the system: the Rust server can also modify, so issue a read-scope key
- You manage other NAS systems such as Synology or TrueNAS: the servers are written for the Unraid GraphQL API
- Unraid is not updated to a version with the GraphQL API: the server has nothing to query without it
Example request
Show the array and disk state in Unraid, the list of stopped Docker containers and the latest notificationsMCP
- Transport
- stdio, http
- Authentication
- API key
Environment variables
UNRAID_API_URLrequired- Unraid GraphQL API address, for example `https://tower.local/graphql`.
UNRAID_API_KEYrequired, secret- Unraid API key for the `x-api-key` header.
UNRAID_RMCP_TOKENsecret- Static bearer token for `/mcp` in the Rust server.
Limitations
The `UNRAID_API_URL` address and the `UNRAID_API_KEY` key are both required. The Rust server is not read-only: it has both queries and mutations. By default it listens on `0.0.0.0:40010`, so the network needs the `UNRAID_RMCP_TOKEN` token or OAuth. The `UNRAID_API_SKIP_TLS_VERIFY` flag accepts a self-signed certificate and should be enabled only on a trusted network. The repository was renamed from `unraid-mcp` to `unraid` on July 27, 2026, and the PyPI package and the ghcr.io image kept the old name.
How to disable. Remove the plugin (`/plugin uninstall unraid-mcp@unraid-mcp`) or the server registration in the client, revoke the key in Unraid settings and stop the container if you ran it in Docker.
FAQ
How do I connect the server to Claude Code?
Add the marketplace with `/plugin marketplace add dinglebear-ai/unraid` and install `/plugin install unraid-mcp@unraid-mcp`. Claude Code will ask for the GraphQL API address and the key.
How does the Python server differ from the Rust server?
The Python server `unraid-mcp` is the main one and installs from PyPI, while the Rust server `runraid` ships one binary and a CLI client, supports token and OAuth and separates read and admin scopes.
Can the agent change the state of the server?
Yes, both servers contain mutating operations: starting and stopping virtual machines, containers and the array. In the Python server dangerous actions need confirmation and in the Rust server they need the `unraid:admin` scope.
Which environment variables are required?
`UNRAID_API_URL` with the GraphQL address, for example `https://tower.local/graphql`, and `UNRAID_API_KEY` with the Unraid API key.
Can I run the server in Docker?
Yes, the repository has `docker compose up -d` for the Python server and the image sits in ghcr.io as `unraid-mcp`. Claude Desktop connects through the `mcp-remote` proxy when needed.
Discussion
No questions or reviews yet.
Related
MCP serversA set of MCP servers for UniFi: the agent works with Ubiquiti Network, Protect and Access controllers
A Node.js manager for MCP servers: it starts local servers, connects remote ones and gives a client one address, with a REST API for control
The official TrueNAS MCP server: ask about pools, snapshots, virtual machines and apps in plain language.
An MCP server connects agents to UniFi infrastructure for device diagnostics, configuration reviews and approved changes
maintenant monitoring MCP server: an agent reads container logs, check history and alerts but never touches the containers
Docker MCP by QuantGeekDev
docker-mcp
Docker MCP: an agent creates containers, deploys Docker Compose stacks from YAML, reads logs and lists containers. Runs through uvx for Claude Desktop
README in short
The repository is described as a monorepo of two MCP servers and three Unraid plugins with Claude and Codex integrations. Then come a component table, plugin install steps, quick starts for the Python and Rust servers, an environment variable table, a warning that the Rust server does more than read, and release notes.