Skip to main content
Glama
jmagar

Unraid MCP Server

πŸš€ Unraid MCP Server

Python Version FastMCP License

A powerful MCP (Model Context Protocol) server that provides comprehensive tools to interact with an Unraid server's GraphQL API.

✨ Features

  • πŸ”§ 10 Tools, 90 Actions: Complete Unraid management through MCP protocol

  • πŸ—οΈ Modular Architecture: Clean, maintainable, and extensible codebase

  • ⚑ High Performance: Async/concurrent operations with optimized timeouts

  • πŸ”„ Real-time Data: WebSocket subscriptions for live log streaming

  • πŸ“Š Health Monitoring: Comprehensive system diagnostics and status

  • 🐳 Docker Ready: Full containerization support with Docker Compose

  • πŸ”’ Secure: Proper SSL/TLS configuration and API key management

  • πŸ“ Rich Logging: Structured logging with rotation and multiple levels


Related MCP server: Model Control Plane (MCP) Server

πŸ“‹ Table of Contents


🎯 Claude Code Plugin

The easiest way to use Unraid MCP is through the Claude Code marketplace:

# Add the marketplace
/plugin marketplace add jmagar/unraid-mcp

# Install the Unraid skill
/plugin install unraid @unraid-mcp

This provides instant access to Unraid monitoring and management through Claude Code with:

  • 10 MCP tools exposing 83 actions via the consolidated action pattern

  • 10 slash commands for quick CLI-style access (commands/)

  • Real-time system metrics and health monitoring

  • Docker container and VM lifecycle management

  • Disk health monitoring and storage management

See


πŸš€ Quick Start

Prerequisites

  • Docker and Docker Compose (recommended)

  • OR Python 3.12+ with uv for development

  • Unraid server with GraphQL API enabled

1. Clone Repository

git clone https://github.com/jmagar/unraid-mcp
cd unraid-mcp

2. Configure Environment

cp .env.example .env
# Edit .env with your Unraid API details
# Start with Docker Compose
docker compose up -d

# View logs
docker compose logs -f unraid-mcp

OR 3. Run for Development

# Install dependencies
uv sync

# Run development server
uv run unraid-mcp-server

πŸ“‚ Plugin Structure

This repository is a Claude Code plugin. Key components:

unraid-mcp/                      # ${CLAUDE_PLUGIN_ROOT}
β”œβ”€β”€ .claude-plugin/
β”‚   β”œβ”€β”€ marketplace.json         # Marketplace catalog
β”‚   └── plugin.json              # Plugin manifest
β”œβ”€β”€ commands/                    # 10 custom slash commands
β”œβ”€β”€ unraid_mcp/                  # MCP server Python package
β”œβ”€β”€ skills/unraid/               # Skill and documentation
β”œβ”€β”€ pyproject.toml               # Dependencies and entry points
└── scripts/                     # Validation and helper scripts
  • MCP Server: 10 tools with 76 actions via GraphQL API

  • Slash Commands: 10 commands in commands/ for quick CLI-style access

  • Skill: /unraid skill for monitoring and queries

  • Entry Point: unraid-mcp-server defined in pyproject.toml


πŸ“¦ Installation

The easiest way to run the Unraid MCP Server is with Docker:

# Clone repository
git clone https://github.com/jmagar/unraid-mcp
cd unraid-mcp

# Set required environment variables
export UNRAID_API_URL="http://your-unraid-server/graphql"
export UNRAID_API_KEY="your_api_key_here"

# Deploy with Docker Compose
docker compose up -d

# View logs
docker compose logs -f unraid-mcp

Manual Docker Build

# Build and run manually
docker build -t unraid-mcp-server .
docker run -d --name unraid-mcp \
  --restart unless-stopped \
  -p 6970:6970 \
  -e UNRAID_API_URL="http://your-unraid-server/graphql" \
  -e UNRAID_API_KEY="your_api_key_here" \
  unraid-mcp-server

πŸ”§ Development Installation

For development and testing:

# Clone repository
git clone https://github.com/jmagar/unraid-mcp
cd unraid-mcp

# Install dependencies with uv
uv sync

# Install development dependencies  
uv sync --group dev

# Configure environment
cp .env.example .env
# Edit .env with your settings

# Run development server
uv run unraid-mcp-server

βš™οΈ Configuration

Environment Variables

Create .env file in the project root:

# Core API Configuration (Required)
UNRAID_API_URL=https://your-unraid-server-url/graphql
UNRAID_API_KEY=your_unraid_api_key

# MCP Server Settings
UNRAID_MCP_TRANSPORT=streamable-http  # streamable-http (recommended), sse (deprecated), stdio
UNRAID_MCP_HOST=0.0.0.0
UNRAID_MCP_PORT=6970

# Logging Configuration
UNRAID_MCP_LOG_LEVEL=INFO  # DEBUG, INFO, WARNING, ERROR
UNRAID_MCP_LOG_FILE=unraid-mcp.log

# SSL/TLS Configuration  
UNRAID_VERIFY_SSL=true  # true, false, or path to CA bundle

# Optional: Log Stream Configuration
# UNRAID_AUTOSTART_LOG_PATH=/var/log/syslog  # Path for log streaming resource

Transport Options

Transport

Description

Use Case

streamable-http

HTTP-based (recommended)

Most compatible, best performance

sse

Server-Sent Events (deprecated)

Legacy support only

stdio

Standard I/O

Direct integration scenarios


πŸ› οΈ Available Tools & Resources

Each tool uses a consolidated action parameter to expose multiple operations, reducing context window usage. Destructive actions require confirm=True.

Tool Categories (10 Tools, 76 Actions)

Tool

Actions

Description

unraid_info

19

overview, array, network, registration, connect, variables, metrics, services, display, config, online, owner, settings, server, servers, flash, ups_devices, ups_device, ups_config

unraid_array

5

parity_start, parity_pause, parity_resume, parity_cancel, parity_status

unraid_storage

6

shares, disks, disk_details, unassigned, log_files, logs

unraid_docker

15

list, details, start, stop, restart, pause, unpause, remove, update, update_all, logs, networks, network_details, port_conflicts, check_updates

unraid_vm

9

list, details, start, stop, pause, resume, force_stop, reboot, reset

unraid_notifications

9

overview, list, warnings, create, archive, unread, delete, delete_archived, archive_all

unraid_rclone

4

list_remotes, config_form, create_remote, delete_remote

unraid_users

1

me

unraid_keys

5

list, get, create, update, delete

unraid_health

3

check, test_connection, diagnose

MCP Resources (Real-time Data)

  • unraid://logs/stream - Live log streaming from /var/log/syslog with WebSocket subscriptions

Note: MCP Resources provide real-time data streams that can be accessed via MCP clients. The log stream resource automatically connects to your Unraid system logs and provides live updates.


πŸ’¬ Custom Slash Commands

The project includes 10 custom slash commands in commands/ for quick access to Unraid operations:

Available Commands

Command

Actions

Quick Access

/info

19

System information, metrics, configuration

/array

5

Parity check management

/storage

6

Shares, disks, logs

/docker

15

Container management and monitoring

/vm

9

Virtual machine lifecycle

/notifications

9

Alert management

/rclone

4

Cloud storage remotes

/users

1

Current user query

/keys

5

API key management

/health

3

System health checks

Example Usage

# System monitoring
/info overview
/health check
/storage shares

# Container management
/docker list
/docker start plex
/docker logs nginx

# VM operations
/vm list
/vm start windows-10

# Notifications
/notifications warnings
/notifications archive_all

# User management
/users list
/keys create "Automation Key" "For CI/CD"

Command Features

Each slash command provides:

  • Comprehensive documentation of all available actions

  • Argument hints for required parameters

  • Safety warnings for destructive operations (⚠️)

  • Usage examples for common scenarios

  • Action categorization (Query, Lifecycle, Management, Destructive)

Run any command without arguments to see full documentation, or type /help to list all available commands.


πŸ”§ Development

Project Structure

unraid-mcp/
β”œβ”€β”€ unraid_mcp/               # Main package
β”‚   β”œβ”€β”€ main.py               # Entry point
β”‚   β”œβ”€β”€ config/               # Configuration management
β”‚   β”‚   β”œβ”€β”€ settings.py       # Environment & settings
β”‚   β”‚   └── logging.py        # Logging setup
β”‚   β”œβ”€β”€ core/                 # Core infrastructure  
β”‚   β”‚   β”œβ”€β”€ client.py         # GraphQL client
β”‚   β”‚   β”œβ”€β”€ exceptions.py     # Custom exceptions
β”‚   β”‚   └── types.py          # Shared data types
β”‚   β”œβ”€β”€ subscriptions/        # Real-time subscriptions
β”‚   β”‚   β”œβ”€β”€ manager.py        # WebSocket management
β”‚   β”‚   β”œβ”€β”€ resources.py      # MCP resources
β”‚   β”‚   └── diagnostics.py    # Diagnostic tools
β”‚   β”œβ”€β”€ tools/                # MCP tool categories (10 tools, 76 actions)
β”‚   β”‚   β”œβ”€β”€ info.py           # System information (19 actions)
β”‚   β”‚   β”œβ”€β”€ array.py          # Parity checks (5 actions)
β”‚   β”‚   β”œβ”€β”€ storage.py        # Storage & monitoring (6 actions)
β”‚   β”‚   β”œβ”€β”€ docker.py         # Container management (15 actions)
β”‚   β”‚   β”œβ”€β”€ virtualization.py # VM management (9 actions)
β”‚   β”‚   β”œβ”€β”€ notifications.py  # Notification management (9 actions)
β”‚   β”‚   β”œβ”€β”€ rclone.py         # Cloud storage (4 actions)
β”‚   β”‚   β”œβ”€β”€ users.py          # Current user query (1 action)
β”‚   β”‚   β”œβ”€β”€ keys.py           # API key management (5 actions)
β”‚   β”‚   └── health.py         # Health checks (3 actions)
β”‚   └── server.py             # FastMCP server setup
β”œβ”€β”€ logs/                     # Log files (auto-created)
└── docker-compose.yml        # Docker Compose deployment

Code Quality Commands

# Lint and format code
uv run ruff check unraid_mcp/
uv run ruff format unraid_mcp/

# Type checking
uv run ty check unraid_mcp/

# Run tests
uv run pytest

API Schema Docs Automation

# Regenerate complete GraphQL schema reference from live introspection
set -a; source .env; set +a
uv run python scripts/generate_unraid_api_reference.py

This updates docs/UNRAID_API_COMPLETE_REFERENCE.md with all operations, directives, and types visible to your API key.

Optional cron example (daily at 03:15):

15 3 * * * cd /path/to/unraid-mcp && /usr/bin/env bash -lc 'set -a; source .env; set +a; uv run python scripts/generate_unraid_api_reference.py && git add docs/UNRAID_API_COMPLETE_REFERENCE.md && git commit -m "docs: refresh unraid graphql schema"'

Development Workflow

# Start development server
uv run unraid-mcp-server

# Or run via module directly
uv run -m unraid_mcp.main

πŸ—οΈ Architecture

Core Principles

  • Modular Design: Separate concerns across focused modules

  • Async First: All operations are non-blocking and concurrent-safe

  • Error Resilience: Comprehensive error handling with graceful degradation

  • Configuration Driven: Environment-based configuration with validation

  • Observability: Structured logging and health monitoring

Key Components

Component

Purpose

FastMCP Server

MCP protocol implementation and tool registration

GraphQL Client

Async HTTP client with timeout management

Subscription Manager

WebSocket connections for real-time data

Tool Modules

Domain-specific business logic (Docker, VMs, etc.)

Configuration System

Environment loading and validation

Logging Framework

Structured logging with file rotation


πŸ› Troubleshooting

Common Issues

πŸ”₯ Port Already in Use

# Kill existing process on port 6970, then restart
lsof -ti :6970 | xargs kill -9 2>/dev/null; uv run unraid-mcp-server

πŸ”§ Connection Refused

# Check Unraid API configuration
curl -k "${UNRAID_API_URL}" -H "X-API-Key: ${UNRAID_API_KEY}"

πŸ“ Import Errors

# Reinstall dependencies
uv sync --reinstall

πŸ” Debug Mode

# Enable debug logging
export UNRAID_MCP_LOG_LEVEL=DEBUG
uv run unraid-mcp-server

Health Check

# Use the built-in health check tool via MCP client
# or check logs at: logs/unraid-mcp.log

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.


🀝 Contributing

  1. Fork the repository

  2. Create a feature branch: git checkout -b feature/amazing-feature

  3. Run tests: uv run pytest

  4. Commit changes: git commit -m 'Add amazing feature'

  5. Push to branch: git push origin feature/amazing-feature

  6. Open a Pull Request


πŸ“ž Support

  • πŸ“š Documentation: Check inline code documentation

  • πŸ› Issues: GitHub Issues

  • πŸ’¬ Discussions: Use GitHub Discussions for questions


Built with ❀️ for the Unraid community

-
security - not tested
A
license - permissive license
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jmagar/unraid-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server