mcpField
U
Unraid MCP

Unraid MCP

Local
github.com/jmagarCloud & Infra148Updated 3d ago

About Unraid MCP

Unraid MCP is a set of MCP servers for Unraid, exposing tools that wrap the Unraid GraphQL API. The monorepo includes a Python server, a Rust server with CLI, Unraid OS plugins and Claude Code and Codex agent plugins.

Key features

  1. 01Python server unraid-py published to PyPI
  2. 02Rust server and runraid CLI as a static binary
  3. 03Access to the Unraid GraphQL API
  4. 04Claude Code and Codex plugins with marketplace install
  5. 05OAuth or static bearer token auth in the Rust server

Use cases

  1. 01Querying Unraid array state from an AI assistant
  2. 02Managing Unraid VMs and Docker containers from Claude Code or Codex
  3. 03Deploying an MCP server onto an Unraid box as a plugin

MCP support

The project is an MCP server that exposes Unraid query and mutation tools to MCP clients. The Rust server offers HTTP transport and separates unraid:read and unraid:admin scopes.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"tv-tootie-unraid": {
"command": "uvx",
"args": [
"unraid-mcp"
],
"env": {
"UNRAID_API_URL": "<UNRAID_API_URL>",
"UNRAID_API_KEY": "<UNRAID_API_KEY>"
}
}
}
}
Run commanduvx unraid-mcp
Environment variables to set
UNRAID_API_URLBase URL of your Unraid server, e.g. http://192.168.1.100.
UNRAID_API_KEYSecretUnraid API key for authentication.

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
pypiunraid-mcp2.8.0

Tools

No tool list yet

Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.

Details

From the project README

Unraid

PyPI ghcr.io

A monorepo of Unraid tooling: two MCP servers (Python and Rust) and three Unraid OS plugins, plus the Claude/Codex agent integrations that surface them.

Repo name. This repo was renamed unraid-mcp → unraid on 2026-07-27, and the former standalone runraid and incus-unraid repos were merged in here. Some deployed plugin install/update URLs still depend on the old-name redirect; migrating those runtime URLs requires a deliberate release. The PyPI package, the container image, the Claude plugin, and the Unraid .plg are all still named unraid-mcp — only the repo changed.

Components

PathWhat it isToolchainBuild / test
unraid-py/unraid-mcp — Python MCP server (GraphQL), the flagship. Published to PyPI as unraid-mcp.Python / uv / hatchlingcd unraid-py && uv run pytest && uv build --wheel
unraid-rs/runraid — Rust MCP server + CLI (single static binary). Crate unraid-rmcp on crates.io, plus the compatibility npm launcher @dinglebear/unraid.Rust / cargocd unraid-rs && cargo fmt --check && cargo clippy --all-targets --features test-support -- -D warnings && cargo test
plugins/mcp/Unraid OS plugin that ships the Rust runraid MCP server onto an Unraid box.shell .plg + Rust + Vuebash plugins/mcp/scripts/build-txz.sh <ver> <runraid-binary>
plugins/incus/Unraid OS plugin running Incus system containers ("dev containers") firewalled off the LAN. Includes a NestJS/GraphQL unraid-api backend.shell .plg + NestJS/Vuecd plugins/incus && ./scripts/verify-classic-package.sh && ./tests/classic-contract.sh
plugins/codex/Unraid OS plugin embedding a Codex chathead app-server.shell .plg + Reactcd plugins/codex && ./tests/contract.sh
agents/unraid-py/Claude Code / Codex plugin (name: unraid-mcp) for the Python server.——
agents/unraid-rs/Claude Code / Codex plugin (name: runraid) for the Rust server.——

Install the agent plugins (one marketplace command, two manifests)

/plugin marketplace add dinglebear-ai/unraid
/plugin install unraid-mcp@unraid-mcp   # Python server
/plugin install runraid@unraid-mcp      # Rust server

The @unraid-mcp suffix is the marketplace name declared in .claude-plugin/marketplace.json, not the repo name — it stays unraid-mcp even though the repo is now dinglebear-ai/unraid.

Both plugins are published from a single repo. Claude reads .claude-plugin/marketplace.json; Codex reads .agents/plugins/marketplace.json. meta-ci.yml asserts the two list the same plugin set, so they cannot drift.

marketplace add accepts the owner/repo shorthand (or a full git URL / local path). After install, Claude Code prompts for the connection settings (the plugin's userConfig).

Plugin credentials need no manual step

The agent plugins ship no Claude Code hooks, and none are needed: both .mcp.json files map your plugin settings into the server environment directly via ${user_config.*}. agents/unraid-rs wires endpoint, TLS, authentication, and tool-selector settings; agents/unraid-py wires UNRAID_API_URL and UNRAID_API_KEY. Set them in plugin settings and the server picks them up on next launch.

Optional, for non-plugin installs (systemd, Docker) that want ~/.unraid/.env written to disk:

runraid setup plugin-hook          # or: npx -y @dinglebear/unraid setup plugin-hook

unraid-py quickstart (Python MCP server)

The Python server is the flagship. Full documentation — installation, Claude Code / Codex / Gemini setup, configuration, authentication, guardrails, and the tool surface — lives in unraid-py/README.md and unraid-py/docs/. It publishes to PyPI as unraid-mcp (import package unraid_mcp) and launches with uvx unraid-mcp.

unraid-rs quickstart (Rust MCP server + CLI)

cargo install --path unraid-rs --locked     # from the repository root
# Configure UNRAID_API_URL and UNRAID_API_KEY privately before querying.
runraid setup check                        # inspect setup without repairing files
runraid array                              # read array state
runraid serve mcp                          # MCP HTTP (default :40010; configure auth)
Env varPurpose
UNRAID_API_URLUnraid GraphQL endpoint (required)
UNRAID_API_KEYx-api-key for the Unraid API (required)
UNRAID_API_SKIP_TLS_VERIFYAccept a self-signed Unraid cert (default false)
UNRAID_RMCP_HOST / UNRAID_RMCP_PORTMCP bind address (default 0.0.0.0:40010)
UNRAID_RMCP_TOKENStatic bearer token for /mcp
UNRAID_RMCP_AUTH_MODEbearer (default) or oauth

Full list and the OAuth variables: unraid-rs/AGENTS.md.

Not read-only. The Rust server exposes both queries and mutations. Read actions need the unraid:read scope; mutating actions (VM and Docker lifecycle, array start/stop, notification writes) need unraid:admin.

Development and documentation

Start with AGENTS.md, the canonical contributor guide. CLAUDE.md and GEMINI.md are symlinks to it, including within components. The documentation index links to development and verification, architecture, and release procedures.

Rust MCP supports UNRAID_RMCP_PROJECTION=legacy (default), atomic, or both. All projections share enabled-action policy, scopes, and execution; atomic mode is not a second backend. See the Rust README for selectors and migration.

Releases

There are two release lanes. release-please manages only unraid-py and unraid-rs — the Python server keeps unprefixed vX.Y.Z tags (the existing audience's scheme) and Rust uses unraid-rs-vX.Y.Z. The Incus and Codex plugins do not use release-please: they are versioned by .github/scripts/plugin_calver.py with fixed-width YYYYMMDD.NNN versions and incus-v* / codex-v* tags (Unraid compares plugin versions as raw strings, so the fixed width is mandatory).

The native MCP plugin is built from the matching unraid-rs-vX.Y.Z tag, and Community Applications reads its rolling manifest from the unraid-plugin-latest release. Plugin .txz payloads ship as GitHub release assets, never tracked in git.

License

MIT — see LICENSE.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.