Unraid MCP Server
A Python-based server that enables AI assistants to interact with an Unraid server through the official Unraid GraphQL API, providing read-only access to system information, Docker containers, VMs, storage, and more.
README Documentation
š Unraid MCP Server
A powerful MCP (Model Context Protocol) server that provides comprehensive tools to interact with an Unraid server's GraphQL API.
⨠Features
- š§ 26 Tools: 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
š Table of Contents
- Quick Start
- Installation
- Configuration
- Available Tools & Resources
- Development
- Architecture
- Troubleshooting
š Quick Start
Prerequisites
- Docker and Docker Compose (recommended)
- OR Python 3.10+ 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
3. Deploy with Docker (Recommended)
# 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
./dev.sh
š¦ Installation
š³ Docker Deployment (Recommended)
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
./dev.sh
āļø 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
System Information & Status
get_system_info()- Comprehensive system, OS, CPU, memory, hardware infoget_array_status()- Storage array status, capacity, and disk detailsget_unraid_variables()- System variables and settingsget_network_config()- Network configuration and access URLsget_registration_info()- Unraid registration detailsget_connect_settings()- Unraid Connect configuration
Docker Container Management
list_docker_containers()- List all containers with caching optionsmanage_docker_container(id, action)- Start/stop containers (idempotent)get_docker_container_details(identifier)- Detailed container information
Virtual Machine Management
list_vms()- List all VMs and their statesmanage_vm(id, action)- VM lifecycle (start/stop/pause/resume/reboot)get_vm_details(identifier)- Detailed VM information
Storage & File Systems
get_shares_info()- User shares informationlist_physical_disks()- Physical disk discoveryget_disk_details(disk_id)- SMART data and detailed disk info
Monitoring & Diagnostics
health_check()- Comprehensive system health assessmentget_notifications_overview()- Notification counts by severitylist_notifications(type, offset, limit)- Filtered notification listinglist_available_log_files()- Available system logsget_logs(path, tail_lines)- Log file content retrieval
Cloud Storage (RClone)
list_rclone_remotes()- List configured remotesget_rclone_config_form(provider)- Configuration schemascreate_rclone_remote(name, type, config)- Create new remotedelete_rclone_remote(name)- Remove existing remote
Real-time Subscriptions & Resources
test_subscription_query(query)- Test GraphQL subscriptionsdiagnose_subscriptions()- Subscription system diagnostics
MCP Resources (Real-time Data)
unraid://logs/stream- Live log streaming from/var/log/syslogwith 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.
š§ 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
ā ā āāā docker.py # Container management
ā ā āāā system.py # System information
ā ā āāā storage.py # Storage & monitoring
ā ā āāā health.py # Health checks
ā ā āāā virtualization.py # VM management
ā ā āāā rclone.py # Cloud storage
ā āāā server.py # FastMCP server setup
āāā logs/ # Log files (auto-created)
āāā dev.sh # Development script
āāā docker-compose.yml # Docker Compose deployment
Code Quality Commands
# Format code
uv run black unraid_mcp/
# Lint code
uv run ruff check unraid_mcp/
# Type checking
uv run mypy unraid_mcp/
# Run tests
uv run pytest
Development Workflow
# Start development server (kills existing processes safely)
./dev.sh
# Stop server only
./dev.sh --kill
šļø 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
./dev.sh # Automatically kills existing processes
š§ 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
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Run tests:
uv run pytest - Commit changes:
git commit -m 'Add amazing feature' - Push to branch:
git push origin feature/amazing-feature - 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