
Unraid MCP Server
The Unraid MCP Server is a Python-based bridge that enables AI assistants to interact with Unraid servers through natural language. Using the Model Context Protocol (MCP) with stdio transport, it provides comprehensive management capabilities including system monitoring, array operations, Docker container management, VM control, disk operations, user administration, API key management, remote access configuration, notification handling, and share management. This integration allows users to query system status, manage resources, and perform administrative tasks through conversational AI, eliminating the need for command-line expertise while maintaining robust error handling, timeout management, and detailed logging for reliable server management.
Installation
Installing for Claude Desktop
Manual Configuration Required
This MCP server requires manual configuration. Run the command below to open your configuration file:
npx mcpbar@latest edit -c claude
This will open your configuration file where you can add the Unraid MCP Server MCP server manually.
Unraid MCP Server
This server provides an MCP interface to interact with an Unraid server's GraphQL API.
Setup
This section describes the setup for local development without Docker. For Docker-based deployment, see the "Docker" section below.
- Ensure your main project dependencies (including
fastmcp
,python-dotenv
,httpx
) are installed. If your project usespyproject.toml
, this is typically done via a command likeuv pip install -e .
orpip install -e .
from the project root. - Navigate to the directory containing
unraid-mcp-server.py
(e.g.,src/unraid-mcp/
or the project root if it's there). - Copy
.env.example
to.env
:cp .env.example .env
- Edit
.env
and fill in your Unraid and MCP server details:UNRAID_API_URL
: Your Unraid GraphQL endpoint (e.g.,http://your-unraid-ip/graphql
). Required.UNRAID_API_KEY
: Your Unraid API key. Required.UNRAID_MCP_TRANSPORT
(optional, defaults tosse
for local non-Docker.streamable-http
is recommended for new setups). Valid options:streamable-http
,sse
,stdio
.UNRAID_MCP_HOST
(optional, defaults to0.0.0.0
for network transports, listens on all interfaces).UNRAID_MCP_PORT
(optional, defaults to6970
for network transports).UNRAID_MCP_LOG_LEVEL
(optional, defaults toINFO
). Examples:DEBUG
,INFO
,WARNING
,ERROR
.UNRAID_MCP_LOG_FILE
(optional, defaults tounraid-mcp.log
in the script's directory).UNRAID_VERIFY_SSL
(optional, defaults totrue
. Set tofalse
for self-signed certificates, or provide a path to a CA bundle).
Running the Server
From the project root (yarr-mcp/
):
python src/unraid-mcp/unraid-mcp-server.py
Or from src/unraid-mcp/
:
python unraid-mcp-server.py
The server will start, by default using SSE transport on port 6970.
Implemented Tools
Below is a list of the implemented tools and their basic functions. Refer to the Unraid GraphQL schema for detailed response structures.
get_system_info()
: Retrieves comprehensive system, OS, CPU, memory, and hardware information.get_array_status()
: Gets the current status of the storage array, capacity, and disk details.list_docker_containers(skip_cache: Optional[bool] = False)
: Lists all Docker containers.manage_docker_container(container_id: str, action: str)
: Starts or stops a Docker container (action: "start" or "stop").get_docker_container_details(container_identifier: str)
: Gets detailed info for a specific Docker container by ID or name.list_vms()
: Lists all Virtual Machines and their states.manage_vm(vm_id: str, action: str)
: Manages a VM (actions: "start", "stop", "pause", "resume", "forceStop", "reboot").get_vm_details(vm_identifier: str)
: Gets details for a specific VM by ID or name.get_shares_info()
: Retrieves information about all user shares.get_notifications_overview()
: Gets an overview of system notifications (counts by severity/status).list_notifications(type: str, offset: int, limit: int, importance: Optional[str] = None)
: Lists notifications with filters.list_available_log_files()
: Lists all available log files.get_logs(log_file_path: str, tail_lines: Optional[int] = 100)
: Retrieves content from a specific log file (tails last N lines).list_physical_disks()
: Lists all physical disks recognized by the system.get_disk_details(disk_id: str)
: Retrieves detailed SMART info and partition data for a specific physical disk.get_unraid_variables()
: Retrieves a wide range of Unraid system variables and settings.get_network_config()
: Retrieves network configuration details, including access URLs.get_registration_info()
: Retrieves Unraid registration details.get_connect_settings()
: Retrieves settings related to Unraid Connect.
Claude Desktop Client Configuration
If your Unraid MCP Server is running on localhost:6970
(the default for SSE):
Create or update your Claude Desktop MCP settings file at ~/.config/claude/claude_mcp_settings.jsonc
(create the claude
directory if it doesn't exist).
Add or update the entry for this server:
{
"mcp_servers": {
"unraid": { // Use a short, descriptive name for the client
"url": "http://localhost:6970/mcp", // Default path for FastMCP SSE is /mcp
"disabled": false,
"timeout": 60, // Optional: timeout in seconds for requests
"transport": "sse" // Explicitly set transport if not default or for clarity
}
// ... other server configurations
}
}
Make sure the url
matches your UNRAID_MCP_HOST
and UNRAID_MCP_PORT
settings if you've changed them from the defaults.
(Details to be added after implementation based on the approved toolset.)
Docker
This application can be containerized using Docker.
Prerequisites
- Docker installed and running.
Building the Image
-
Navigate to the root directory of this project (
unraid-mcp
). -
Build the Docker image:
docker build -t unraid-mcp-server .
Running the Container
To run the container, you'll need to provide the necessary environment variables. You can do this directly on the command line or by using an environment file.
Option 1: Using an environment file (recommended)
-
Create a file named
.env.local
in the project root (this file is in.dockerignore
and won't be copied into the image). -
Add your environment variables to
.env.local
:UNRAID_API_URL=http://your-unraid-ip/graphql UNRAID_API_KEY=your-unraid-api-key # Optional: override default port # UNRAID_MCP_PORT=6971 # Optional: override log level # UNRAID_MCP_LOG_LEVEL=DEBUG # Optional: SSL verification settings # UNRAID_VERIFY_SSL=false
-
Run the container, mounting the
.env.local
file:docker run -d --name unraid-mcp --restart unless-stopped -p 6970:6970 --env-file .env.local unraid-mcp-server
-d
: Run in detached mode.--name unraid-mcp
: Assign a name to the container.--restart unless-stopped
: Restart policy.-p 6970:6970
: Map port 6970 on the host to port 6970 in the container. Adjust if you changedUNRAID_MCP_PORT
.--env-file .env.local
: Load environment variables from the specified file.
Option 2: Providing environment variables directly
docker run -d --name unraid-mcp --restart unless-stopped -p 6970:6970 \
-e UNRAID_API_URL="http://your-unraid-ip/graphql" \
-e UNRAID_API_KEY="your-unraid-api-key" \
unraid-mcp-server
Accessing Logs
To view the logs of the running container:
docker logs unraid-mcp
Follow logs in real-time:
docker logs -f unraid-mcp
Stopping and Removing the Container
(Using docker run
commands)
docker stop unraid-mcp
docker rm unraid-mcp
Using Docker Compose
A docker-compose.yml
file is provided for easier management.
Prerequisites:
- Docker Compose installed (usually included with Docker Desktop).
- Ensure you have an
.env.local
file in the same directory asdocker-compose.yml
with yourUNRAID_API_URL
andUNRAID_API_KEY
(and any other overrides). See "Option 1: Using an environment file" in thedocker run
section above for an example.env.local
content. - If you haven't built the image yet, Docker Compose can build it for you if you uncomment the
build
section indocker-compose.yml
or build it manually first:docker build -t unraid-mcp-server .
Starting the service:
docker-compose up -d
This will start the unraid-mcp
service in detached mode.
Viewing logs:
docker-compose logs -f unraid-mcp
Stopping the service:
docker-compose down
This stops and removes the container defined in the docker-compose.yml
file.
Claude Desktop Client Configuration (for Docker)
docker stop unraid-mcp
docker rm unraid-mcp
Claude Desktop Client Configuration (for Docker)
If your Unraid MCP Server is running in Docker and exposed on localhost:6970
(default Docker setup):
Create or update your Claude Desktop MCP settings file at ~/.config/claude/claude_mcp_settings.jsonc
.
Add or update the entry for this server:
{
"mcp_servers": {
"unraid": { // Use a short, descriptive name for the client
"url": "http://localhost:6970/mcp", // Default path for FastMCP streamable-http is /mcp
"disabled": false,
"timeout": 60, // Optional: timeout in seconds for requests
"transport": "streamable-http" // Ensure this matches the server's transport
}
// ... other server configurations
}
}
Make sure the url
(host and port) matches your Docker port mapping. The default transport in the Dockerfile is streamable-http
. # unraid-mcp
Stars
0Forks
0Last commit
13 days agoRepository age
13 days
Auto-fetched from GitHub .
MCP servers similar to Unraid MCP Server:

Stars
Forks
Last commit

Stars
Forks
Last commit

Stars
Forks
Last commit