mirror of
https://github.com/jmagar/unraid-mcp.git
synced 2026-03-02 00:04:45 -08:00
fix: address 54 MEDIUM/LOW priority PR review issues
Comprehensive fixes across Python code, shell scripts, and documentation addressing all remaining MEDIUM and LOW priority review comments. Python Code Fixes (27 fixes): - tools/info.py: Simplified dispatch with lookup tables, defensive guards, CPU fallback formatting, !s conversion flags, module-level sync assertion - tools/docker.py: Case-insensitive container ID regex, keyword-only confirm, module-level ALL_ACTIONS constant - tools/virtualization.py: Normalized single-VM dict responses, unified list/details queries - core/client.py: Fixed HTTP client singleton race condition, compound key substring matching for sensitive data redaction - subscriptions/: Extracted SSL context creation to shared helper in utils.py, replaced deprecated ssl._create_unverified_context API - tools/array.py: Renamed parity_history to parity_status, hoisted ALL_ACTIONS - tools/storage.py: Fixed dict(None) risks, temperature 0 falsiness bug - tools/notifications.py, keys.py, rclone.py: Fixed dict(None) TypeError risks - tests/: Fixed generator type annotations, added coverage for compound keys Shell Script Fixes (13 fixes): - dashboard.sh: Dynamic server discovery, conditional debug output, null-safe jq, notification count guard order, removed unused variables - unraid-query.sh: Proper JSON escaping via jq, --ignore-errors and --insecure CLI flags, TLS verification now on by default - validate-marketplace.sh: Removed unused YELLOW variable, defensive jq, simplified repository URL output Documentation Fixes (24+ fixes): - Version consistency: Updated all references to v0.2.0 across pyproject.toml, plugin.json, marketplace.json, MARKETPLACE.md, __init__.py, README files - Tool count updates: Changed all "26 tools" references to "10 tools, 90 actions" - Markdown lint: Fixed MD022, MD031, MD047 issues across multiple files - Research docs: Fixed auth headers, removed web artifacts, corrected stale info - Skills docs: Fixed query examples, endpoint counts, env var references All 227 tests pass, ruff and ty checks clean.
This commit is contained in:
@@ -1,14 +1,14 @@
|
||||
# Competitive Analysis: Unraid Integration Projects
|
||||
|
||||
> **Date:** 2026-02-07
|
||||
> **Purpose:** Identify features and capabilities that competing Unraid integration projects offer that our `unraid-mcp` server (26 tools, GraphQL-based) currently lacks.
|
||||
> **Purpose:** Identify features and capabilities that competing Unraid integration projects offer that our `unraid-mcp` server (10 tools, 90 actions, GraphQL-based) currently lacks.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Executive Summary](#executive-summary)
|
||||
- [Project Profiles](#project-profiles)
|
||||
- [1. unraid-management-agent (Go plugin)](#1-unraid-management-agent)
|
||||
- [2. domalab/unraid-api-client (Python library)](#2-domalabu nraid-api-client)
|
||||
- [2. domalab/unraid-api-client (Python library)](#2-domalabunraid-api-client)
|
||||
- [3. mcp-ssh-sre / unraid-ssh-mcp (SSH-based MCP)](#3-mcp-ssh-sre--unraid-ssh-mcp)
|
||||
- [4. PSUnraid (PowerShell module)](#4-psunraid)
|
||||
- [5. ha-unraid (Home Assistant integration)](#5-ha-unraid)
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
## Executive Summary
|
||||
|
||||
Our `unraid-mcp` server provides 26 MCP tools built on the official Unraid GraphQL API. After analyzing six competing projects, we identified several significant gaps:
|
||||
Our `unraid-mcp` server provides 10 MCP tools (90 actions) built on the official Unraid GraphQL API. After analyzing six competing projects, we identified several significant gaps:
|
||||
|
||||
**Critical gaps (high-value features we lack):**
|
||||
1. **Array control operations** (start/stop array, parity check control, disk spin up/down)
|
||||
@@ -71,7 +71,7 @@ Our `unraid-mcp` server provides 26 MCP tools built on the official Unraid Graph
|
||||
**Key differentiators from our project:**
|
||||
- Runs as an Unraid plugin directly on the server (no external dependency on GraphQL API)
|
||||
- Collects data directly from /proc, /sys, Docker SDK, and libvirt
|
||||
- 59 REST endpoints vs our 26 MCP tools
|
||||
- 59 REST endpoints vs our 10 MCP tools (90 actions)
|
||||
- 54 MCP tools with Resources and Prompts
|
||||
- Real-time WebSocket event streaming (9 event types, 5-60s intervals)
|
||||
- 41 Prometheus metrics for Grafana dashboards
|
||||
@@ -341,7 +341,7 @@ The project's documentation explicitly compares SSH vs API capabilities:
|
||||
|
||||
### Monitoring Features
|
||||
|
||||
| Feature | Our MCP (26 tools) | mgmt-agent (54 MCP tools) | unraid-api-client | mcp-ssh-sre (79 actions) | PSUnraid | ha-unraid | chris-mc1 |
|
||||
| Feature | Our MCP (10 tools, 90 actions) | mgmt-agent (54 MCP tools) | unraid-api-client | mcp-ssh-sre (79 actions) | PSUnraid | ha-unraid | chris-mc1 |
|
||||
|---------|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|
||||
| System info (hostname, uptime) | Y | Y | Y | Y | Y | Y | N |
|
||||
| CPU usage | Y | Y | Y | Y | Y | Y | Y |
|
||||
@@ -458,7 +458,7 @@ The project's documentation explicitly compares SSH vs API capabilities:
|
||||
|
||||
| Feature | Our MCP | mgmt-agent | unraid-api-client | mcp-ssh-sre | PSUnraid | ha-unraid | chris-mc1 |
|
||||
|---------|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|
||||
| MCP tools | Y (26) | Y (54) | N | Y (79 actions) | N | N | N |
|
||||
| MCP tools | Y (10 tools, 90 actions) | Y (54) | N | Y (79 actions) | N | N | N |
|
||||
| MCP Resources | N | Y (5) | N | N | N | N | N |
|
||||
| MCP Prompts | N | Y (3) | N | N | N | N | N |
|
||||
| REST API | N | Y (59) | N | N | N | N | N |
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Unraid API Feature Gap Analysis
|
||||
|
||||
> **Date:** 2026-02-07
|
||||
> **Purpose:** Comprehensive inventory of every API capability that could become an MCP tool, cross-referenced against our current 26 tools to identify gaps.
|
||||
> **Purpose:** Comprehensive inventory of every API capability that could become an MCP tool, cross-referenced against our current 10 tools (90 actions) to identify gaps.
|
||||
> **Sources:** 7 research documents (3,800+ lines), Unraid API source code analysis, community project reviews, official documentation crawl.
|
||||
|
||||
---
|
||||
@@ -497,7 +497,7 @@ GRAPHQL_PUBSUB_CHANNEL {
|
||||
|
||||
## F. API Capabilities NOT Currently in the MCP Server
|
||||
|
||||
The current MCP server has 26 tools. The following capabilities are available in the Unraid API but NOT covered by any existing tool.
|
||||
The current MCP server has 10 tools (90 actions) after consolidation. The following capabilities are available in the Unraid API but NOT covered by any existing tool.
|
||||
|
||||
### F.1 HIGH PRIORITY - New Tool Candidates
|
||||
|
||||
@@ -663,7 +663,7 @@ The current MCP server has 26 tools. The following capabilities are available in
|
||||
| **Queries** | ~30+ | 14 | ~16+ uncovered |
|
||||
| **Mutations** | ~50+ | 10 (start/stop Docker+VM, RClone CRUD) | ~40+ uncovered |
|
||||
| **Subscriptions** | ~30+ | 0 (2 diagnostic only) | ~30+ uncovered |
|
||||
| **Total Operations** | ~110+ | 24 active | ~86+ uncovered |
|
||||
| **Total Operations** | ~110+ | 90 active (10 tools) | ~20+ uncovered |
|
||||
|
||||
**Current coverage: approximately 22% of available API operations.**
|
||||
|
||||
@@ -691,7 +691,7 @@ Capabilities this project offers that we do NOT:
|
||||
| **Update Status** | Check for OS/plugin updates | NOT available via GraphQL API |
|
||||
| **Mover Control** | Invoke the mover tool | NOT available via GraphQL API (Issue #1873) |
|
||||
| **Disk Thresholds** | Warning/critical temp settings | Partially available via `ArrayDisk.warning`/`critical` |
|
||||
| **54 MCP Tools** | Full MCP tool suite | We have 26 |
|
||||
| **54 MCP Tools** | Full MCP tool suite | We have 10 tools (90 actions) |
|
||||
| **WebSocket Events** | Real-time event stream | We have diagnostic-only subscriptions |
|
||||
|
||||
### G.2 PSUnraid (PowerShell Module)
|
||||
@@ -828,7 +828,7 @@ Chose SSH over GraphQL API due to these gaps:
|
||||
| | **Low Priority Subtotal** | **18** | **92** |
|
||||
| | **GRAND TOTAL NEW TOOLS** | **66** | **92** |
|
||||
|
||||
**Current tools: 26 | Potential total: 92 | Gap: 66 tools (72% of potential uncovered)**
|
||||
**Current tools: 10 (90 actions) | Potential total: ~110+ operations | Remaining gap: ~20+ uncovered operations**
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
[Skip to main content](https://docs.unraid.net/unraid-connect/remote-access#__docusaurus_skipToContent_fallback)
|
||||
# Remote Access (Unraid Connect)
|
||||
|
||||
On this page
|
||||
> **Source:** [Unraid Documentation - Remote Access](https://docs.unraid.net/unraid-connect/remote-access)
|
||||
> **Scraped:** 2026-02-07 | Raw content for reference purposes
|
||||
|
||||
Unlock secure, browser-based access to your Unraid WebGUI from anywhere with remote access. This feature is ideal for managing your server when you're away from home - no complicated networking or VPN Tunnel setup is required. For more advanced needs, such as connecting to Docker containers or accessing network drives, a VPN Tunnel remains the recommended solution.
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
[Skip to main content](https://docs.unraid.net/unraid-os/release-notes/7.0.0#__docusaurus_skipToContent_fallback)
|
||||
# Unraid OS 7.0.0 Release Notes
|
||||
|
||||
On this page
|
||||
> **Source:** [Unraid OS Release Notes - 7.0.0](https://docs.unraid.net/unraid-os/release-notes/7.0.0)
|
||||
> **Scraped:** 2026-02-07 | Raw content for reference purposes
|
||||
|
||||
This version of Unraid OS includes significant improvements across all subsystems, while attempting to maintain backward compatibility as much as possible.
|
||||
|
||||
@@ -882,77 +883,4 @@ With the [Unraid Patch plugin](https://forums.unraid.net/topic/185560-unraid-pat
|
||||
* VM Manager: fix issue with blank Discard field on vDisk
|
||||
* Include installed patches in diagnostics
|
||||
|
||||
Note: if you have the Mover Tuning plugin installed, you will be prompted to reboot in order to apply these patches.
|
||||
|
||||
* [Upgrading](https://docs.unraid.net/unraid-os/release-notes/7.0.0#upgrading)
|
||||
* [Known issues](https://docs.unraid.net/unraid-os/release-notes/7.0.0#known-issues)
|
||||
|
||||
* [Rolling back](https://docs.unraid.net/unraid-os/release-notes/7.0.0#rolling-back)
|
||||
|
||||
* [Storage](https://docs.unraid.net/unraid-os/release-notes/7.0.0#storage)
|
||||
* [unRAID array optional](https://docs.unraid.net/unraid-os/release-notes/7.0.0#unraid-array-optional)
|
||||
|
||||
* [Share secondary storage may be assigned to a pool](https://docs.unraid.net/unraid-os/release-notes/7.0.0#share-secondary-storage-may-be-assigned-to-a-pool)
|
||||
|
||||
* [ReiserFS file system option has been disabled](https://docs.unraid.net/unraid-os/release-notes/7.0.0#reiserfs-file-system-option-has-been-disabled)
|
||||
|
||||
* [Using 'mover' to empty an array disk](https://docs.unraid.net/unraid-os/release-notes/7.0.0#using-mover-to-empty-an-array-disk)
|
||||
|
||||
* [Predefined shares handling](https://docs.unraid.net/unraid-os/release-notes/7.0.0#predefined-shares-handling)
|
||||
|
||||
* [ZFS implementation](https://docs.unraid.net/unraid-os/release-notes/7.0.0#zfs-implementation)
|
||||
|
||||
* [Allocation profiles for btrfs, zfs, and zfs subpools](https://docs.unraid.net/unraid-os/release-notes/7.0.0#allocation-profiles-for-btrfs-zfs-and-zfs-subpools)
|
||||
|
||||
* [Pool considerations](https://docs.unraid.net/unraid-os/release-notes/7.0.0#pool-considerations)
|
||||
|
||||
* [Other features](https://docs.unraid.net/unraid-os/release-notes/7.0.0#other-features)
|
||||
|
||||
* [VM Manager](https://docs.unraid.net/unraid-os/release-notes/7.0.0#vm-manager)
|
||||
* [Improvements](https://docs.unraid.net/unraid-os/release-notes/7.0.0#improvements)
|
||||
|
||||
* [Other changes](https://docs.unraid.net/unraid-os/release-notes/7.0.0#other-changes)
|
||||
|
||||
* [Docker](https://docs.unraid.net/unraid-os/release-notes/7.0.0#docker)
|
||||
* [Docker fork bomb prevention](https://docs.unraid.net/unraid-os/release-notes/7.0.0#docker-fork-bomb-prevention)
|
||||
|
||||
* [Add support for overlay2 storage driver](https://docs.unraid.net/unraid-os/release-notes/7.0.0#add-support-for-overlay2-storage-driver)
|
||||
|
||||
* [Other changes](https://docs.unraid.net/unraid-os/release-notes/7.0.0#other-changes-1)
|
||||
|
||||
* [Networking](https://docs.unraid.net/unraid-os/release-notes/7.0.0#networking)
|
||||
* [Tailscale integration](https://docs.unraid.net/unraid-os/release-notes/7.0.0#tailscale-integration)
|
||||
|
||||
* [Support iframing the webGUI](https://docs.unraid.net/unraid-os/release-notes/7.0.0#support-iframing-the-webgui)
|
||||
|
||||
* [Other changes](https://docs.unraid.net/unraid-os/release-notes/7.0.0#other-changes-2)
|
||||
|
||||
* [webGUI](https://docs.unraid.net/unraid-os/release-notes/7.0.0#webgui)
|
||||
* [Integrated Dynamix File Manager plugin](https://docs.unraid.net/unraid-os/release-notes/7.0.0#integrated-dynamix-file-manager-plugin)
|
||||
|
||||
* [Integrated GUI Search plugin](https://docs.unraid.net/unraid-os/release-notes/7.0.0#integrated-gui-search-plugin)
|
||||
|
||||
* [Outgoing Proxy Manager](https://docs.unraid.net/unraid-os/release-notes/7.0.0#outgoing-proxy-manager)
|
||||
|
||||
* [Notification Agents](https://docs.unraid.net/unraid-os/release-notes/7.0.0#notification-agents)
|
||||
|
||||
* [NTP Configuration](https://docs.unraid.net/unraid-os/release-notes/7.0.0#ntp-configuration)
|
||||
|
||||
* [NFS Shares](https://docs.unraid.net/unraid-os/release-notes/7.0.0#nfs-shares)
|
||||
|
||||
* [Dashboard](https://docs.unraid.net/unraid-os/release-notes/7.0.0#dashboard)
|
||||
|
||||
* [SMART improvements](https://docs.unraid.net/unraid-os/release-notes/7.0.0#smart-improvements)
|
||||
|
||||
* [Diagnostics](https://docs.unraid.net/unraid-os/release-notes/7.0.0#diagnostics)
|
||||
|
||||
* [Other changes](https://docs.unraid.net/unraid-os/release-notes/7.0.0#other-changes-3)
|
||||
|
||||
* [Misc](https://docs.unraid.net/unraid-os/release-notes/7.0.0#misc)
|
||||
* [Other changes](https://docs.unraid.net/unraid-os/release-notes/7.0.0#other-changes-4)
|
||||
|
||||
* [Linux kernel](https://docs.unraid.net/unraid-os/release-notes/7.0.0#linux-kernel)
|
||||
|
||||
* [Base distro](https://docs.unraid.net/unraid-os/release-notes/7.0.0#base-distro)
|
||||
|
||||
* [Patches](https://docs.unraid.net/unraid-os/release-notes/7.0.0#patches)
|
||||
Note: if you have the Mover Tuning plugin installed, you will be prompted to reboot in order to apply these patches.
|
||||
@@ -468,6 +468,9 @@ unraid-api apikey --delete --name "workflow key" --json
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Set up cleanup trap early so it fires even if key creation fails
|
||||
cleanup() { echo "Cleaning up..."; unraid-api apikey --delete --name "temp deployment key" 2>/dev/null || true; }
|
||||
|
||||
# 1. Create temporary API key
|
||||
echo "Creating temporary API key..."
|
||||
KEY_DATA=$(unraid-api apikey --create \
|
||||
@@ -476,20 +479,20 @@ KEY_DATA=$(unraid-api apikey --create \
|
||||
--description "Temporary key for deployment $(date)" \
|
||||
--json)
|
||||
|
||||
# Register trap after key creation succeeds
|
||||
trap cleanup EXIT
|
||||
|
||||
# 2. Extract the API key
|
||||
API_KEY=$(echo "$KEY_DATA" | jq -r '.key')
|
||||
echo "API key created successfully"
|
||||
|
||||
# 3. Use the key for operations
|
||||
echo "Configuring services..."
|
||||
curl -H "Authorization: Bearer $API_KEY" \
|
||||
curl -H "x-api-key: $API_KEY" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"provider": "azure", "clientId": "your-client-id"}' \
|
||||
http://localhost:3001/graphql
|
||||
|
||||
# 4. Clean up (always runs, even on error)
|
||||
trap 'echo "Cleaning up..."; unraid-api apikey --delete --name "temp deployment key"' EXIT
|
||||
|
||||
echo "Deployment completed successfully"
|
||||
```
|
||||
|
||||
@@ -714,6 +717,8 @@ type Mutation {
|
||||
}
|
||||
```
|
||||
|
||||
> **Note:** The client schema above uses `ID!` for disk mutation args (e.g., `mountArrayDisk(id: ID!)`), but the actual server resolvers use `PrefixedID!`. The MCP tool code correctly uses `PrefixedID!` based on server source analysis.
|
||||
|
||||
#### Subscription Type
|
||||
|
||||
```graphql
|
||||
|
||||
@@ -119,7 +119,7 @@ The API implements a **multi-layered security architecture** separating authenti
|
||||
Applications can request API access via a self-service flow ([source](https://docs.unraid.net/API/api-key-app-developer-authorization-flow/)):
|
||||
|
||||
```
|
||||
https://[unraid-server]/ApiKeyAuthorize?name=MyApp&&scopes=docker:read,vm:*&&redirect_uri=https://myapp.com/callback&&state=abc123
|
||||
https://[unraid-server]/ApiKeyAuthorize?name=MyApp&scopes=docker:read,vm:*&redirect_uri=https://myapp.com/callback&state=abc123
|
||||
```
|
||||
|
||||
**Scope Format:** `resource:action` pattern
|
||||
@@ -302,7 +302,7 @@ The subscription system is event-driven: file changes on disk (detected by choki
|
||||
**jmagar/unraid-mcp** (this project) is the primary MCP server for Unraid ([source](https://glama.ai/mcp/servers/@jmagar/unraid-mcp), [source](https://mcpmarket.com/server/unraid)):
|
||||
|
||||
- Python-based MCP server using FastMCP framework
|
||||
- 26 tools for comprehensive Unraid management
|
||||
- 10 tools with 90 actions for comprehensive Unraid management
|
||||
- Read-only access by default for safety
|
||||
- Listed on Glama, MCP Market, MCPServers.com, LangDB, UBOS, JuheAPI
|
||||
- 21 GitHub stars
|
||||
|
||||
@@ -322,6 +322,7 @@ query {
|
||||
```
|
||||
|
||||
#### RClone Remotes (`rclone`)
|
||||
|
||||
```graphql
|
||||
query {
|
||||
rclone {
|
||||
@@ -334,6 +335,7 @@ query {
|
||||
```
|
||||
|
||||
#### Notifications
|
||||
|
||||
```graphql
|
||||
query {
|
||||
notifications {
|
||||
@@ -343,6 +345,7 @@ query {
|
||||
```
|
||||
|
||||
#### Shares
|
||||
|
||||
```graphql
|
||||
query {
|
||||
shares {
|
||||
@@ -354,6 +357,7 @@ query {
|
||||
### Mutation Types
|
||||
|
||||
#### Docker Container Management
|
||||
|
||||
```graphql
|
||||
mutation {
|
||||
docker {
|
||||
@@ -366,6 +370,7 @@ mutation {
|
||||
- Mutations are idempotent (starting an already-running container returns success)
|
||||
|
||||
#### VM Management
|
||||
|
||||
```graphql
|
||||
mutation {
|
||||
vm {
|
||||
|
||||
Reference in New Issue
Block a user