mirror of
https://github.com/jmagar/unraid-mcp.git
synced 2026-03-02 00:04:45 -08:00
616 lines
29 KiB
Markdown
616 lines
29 KiB
Markdown
# 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 (10 tools, 76 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-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-home-assistant-integration)
|
|
- [6. chris-mc1/unraid_api (HA integration)](#6-chris-mc1unraid_api-ha-integration)
|
|
- [Feature Matrix](#feature-matrix)
|
|
- [Gap Analysis](#gap-analysis)
|
|
- [Recommended Priorities](#recommended-priorities)
|
|
- [Sources](#sources)
|
|
|
|
---
|
|
|
|
## Executive Summary
|
|
|
|
Our `unraid-mcp` server provides 10 MCP tools (76 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)
|
|
2. **UPS monitoring** (battery level, load, runtime, power status)
|
|
3. **GPU metrics** (utilization, temperature, memory, power draw)
|
|
4. **SMART disk health data** (per-disk SMART status, errors, power-on hours)
|
|
5. **Parity check history** (dates, durations, error counts)
|
|
6. **System reboot/shutdown** commands
|
|
7. **Services status** (running system services)
|
|
8. **Flash drive info** (boot device monitoring)
|
|
9. **Plugins list** (installed plugins)
|
|
|
|
**Moderate gaps (nice-to-have features):**
|
|
10. **Docker container resource metrics** (CPU %, memory usage per container)
|
|
11. **Docker container pause/unpause** operations
|
|
12. **ZFS pool/dataset/snapshot management**
|
|
13. **User script execution** (User Scripts plugin integration)
|
|
14. **Network bandwidth monitoring** (per-interface stats)
|
|
15. **Prometheus metrics endpoint**
|
|
16. **MQTT event publishing**
|
|
17. **WebSocket real-time streaming** (not just subscription diagnostics)
|
|
18. **MCP Resources** (subscribable data streams)
|
|
19. **MCP Prompts** (guided interaction templates)
|
|
20. **Unassigned devices** monitoring
|
|
|
|
**Architectural gaps:**
|
|
21. No confirmation/safety mechanism for destructive operations
|
|
22. No Pydantic response models (type-safe responses)
|
|
23. No Docker network listing
|
|
24. No container update capability
|
|
25. No owner/cloud/remote-access info queries
|
|
|
|
---
|
|
|
|
## Project Profiles
|
|
|
|
### 1. unraid-management-agent
|
|
|
|
- **Repository:** [ruaan-deysel/unraid-management-agent](https://github.com/ruaan-deysel/unraid-management-agent)
|
|
- **Language:** Go
|
|
- **Architecture:** Unraid plugin with REST API + WebSocket + MCP + Prometheus + MQTT
|
|
- **API Type:** REST (59 endpoints) + WebSocket (9 event types) + MCP (54 tools)
|
|
- **Data Collection:** Native Go libraries (Docker SDK, libvirt, /proc, /sys) -- does NOT depend on the GraphQL API
|
|
- **Stars/Activity:** Active development, comprehensive documentation
|
|
|
|
**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 10 MCP tools (76 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
|
|
- MQTT publishing for Home Assistant/IoT integration
|
|
- Confirmation-required destructive operations (`confirm: true` parameter)
|
|
- Collector management (enable/disable collectors, adjust intervals)
|
|
- System reboot and shutdown commands
|
|
|
|
**Unique capabilities not available via GraphQL API:**
|
|
- GPU metrics (utilization, temperature, memory, power draw via nvidia-smi)
|
|
- UPS metrics via NUT (Network UPS Tools) direct integration
|
|
- Fan RPM readings from /sys
|
|
- Motherboard temperature from /sys
|
|
- SMART disk data (power-on hours, power cycles, read/write bytes, I/O utilization)
|
|
- Network interface bandwidth (rx/tx bytes, real-time)
|
|
- Docker container resource usage (CPU %, memory bytes, network I/O)
|
|
- Unassigned devices monitoring
|
|
- ZFS pools, datasets, snapshots, ARC stats
|
|
- Parity check scheduling
|
|
- Mover settings
|
|
- Disk thresholds/settings
|
|
- Service management
|
|
- Plugin and update management
|
|
- Flash drive info
|
|
- Network access URLs (LAN, WAN, mDNS, IPv6)
|
|
- User script execution
|
|
- Share configuration modification (POST endpoints)
|
|
- System settings modification
|
|
|
|
**MCP-specific features we lack:**
|
|
- MCP Resources (subscribable real-time data: `unraid://system`, `unraid://array`, `unraid://containers`, `unraid://vms`, `unraid://disks`)
|
|
- MCP Prompts (`analyze_disk_health`, `system_overview`, `troubleshoot_issue`)
|
|
- Dual MCP transport (HTTP + SSE)
|
|
- Confirmation-gated destructive operations
|
|
|
|
**REST Endpoints (59 total):**
|
|
|
|
| Category | Endpoints |
|
|
|----------|-----------|
|
|
| System & Health | `GET /health`, `GET /system`, `POST /system/reboot`, `POST /system/shutdown` |
|
|
| Array | `GET /array`, `POST /array/start`, `POST /array/stop` |
|
|
| Parity | `POST /parity-check/start\|stop\|pause\|resume`, `GET /parity-check/history`, `GET /parity-check/schedule` |
|
|
| Disks | `GET /disks`, `GET /disks/{id}` |
|
|
| Shares | `GET /shares`, `GET /shares/{name}/config`, `POST /shares/{name}/config` |
|
|
| Docker | `GET /docker`, `GET /docker/{id}`, `POST /docker/{id}/start\|stop\|restart\|pause\|unpause` |
|
|
| VMs | `GET /vm`, `GET /vm/{id}`, `POST /vm/{id}/start\|stop\|restart\|pause\|resume\|hibernate\|force-stop` |
|
|
| UPS | `GET /ups` |
|
|
| GPU | `GET /gpu` |
|
|
| Network | `GET /network`, `GET /network/access-urls`, `GET /network/{interface}/config` |
|
|
| Collectors | `GET /collectors/status`, `GET /collectors/{name}`, `POST /collectors/{name}/enable\|disable`, `PATCH /collectors/{name}/interval` |
|
|
| Logs | `GET /logs`, `GET /logs/{filename}` |
|
|
| Settings | `GET /settings/system\|docker\|vm\|disks\|disk-thresholds\|mover\|services\|network-services`, `POST /settings/system` |
|
|
| Plugins | `GET /plugins`, `GET /updates` |
|
|
| Flash | `GET /system/flash` |
|
|
| Prometheus | `GET /metrics` |
|
|
| WebSocket | `WS /ws` |
|
|
|
|
---
|
|
|
|
### 2. domalab/unraid-api-client
|
|
|
|
- **Repository:** [domalab/unraid-api-client](https://github.com/domalab/unraid-api-client)
|
|
- **Language:** Python (async, aiohttp)
|
|
- **Architecture:** Client library for the official Unraid GraphQL API
|
|
- **API Type:** GraphQL client (same API we use)
|
|
- **PyPI Package:** `unraid-api` (installable via pip)
|
|
|
|
**Key differentiators from our project:**
|
|
- Pure client library (not an MCP server), but shows what the GraphQL API can do
|
|
- Full Pydantic model coverage for all responses (type-safe)
|
|
- SSL auto-discovery (handles Unraid's "No", "Yes", "Strict" SSL modes)
|
|
- Redirect handling for myunraid.net remote access
|
|
- Session injection for Home Assistant integration
|
|
- Comprehensive exception hierarchy
|
|
|
|
**Methods we should consider adding MCP tools for:**
|
|
|
|
| Method | Our Coverage | Notes |
|
|
|--------|-------------|-------|
|
|
| `test_connection()` | Missing | Connection validation |
|
|
| `get_version()` | Missing | API and OS version info |
|
|
| `get_server_info()` | Partial | For device registration |
|
|
| `get_system_metrics()` | Missing | CPU, memory, temperature, power, uptime as typed model |
|
|
| `typed_get_array()` | Have `get_array_status()` | They have richer Pydantic model |
|
|
| `typed_get_containers()` | Have `list_docker_containers()` | They have typed models |
|
|
| `typed_get_vms()` | Have `list_vms()` | They have typed models |
|
|
| `typed_get_ups_devices()` | **Missing** | UPS battery, power, runtime |
|
|
| `typed_get_shares()` | Have `get_shares_info()` | Similar |
|
|
| `get_notification_overview()` | Have it | Same |
|
|
| `start/stop_container()` | Have `manage_docker_container()` | Same |
|
|
| `pause/unpause_container()` | **Missing** | Docker pause/unpause |
|
|
| `update_container()` | **Missing** | Container image update |
|
|
| `remove_container()` | **Missing** | Container removal |
|
|
| `start/stop_vm()` | Have `manage_vm()` | Same |
|
|
| `pause/resume_vm()` | **Missing** | VM pause/resume |
|
|
| `force_stop_vm()` | **Missing** | Force stop VM |
|
|
| `reboot_vm()` | **Missing** | VM reboot |
|
|
| `start/stop_array()` | **Missing** | Array start/stop control |
|
|
| `start/pause/resume/cancel_parity_check()` | **Missing** | Full parity control |
|
|
| `spin_up/down_disk()` | **Missing** | Disk spin control |
|
|
| `get_parity_history()` | **Missing** | Historical parity data |
|
|
| `typed_get_vars()` | Have `get_unraid_variables()` | Same |
|
|
| `typed_get_registration()` | Have `get_registration_info()` | Same |
|
|
| `typed_get_services()` | **Missing** | System services list |
|
|
| `typed_get_flash()` | **Missing** | Flash drive info |
|
|
| `typed_get_owner()` | **Missing** | Server owner info |
|
|
| `typed_get_plugins()` | **Missing** | Installed plugins |
|
|
| `typed_get_docker_networks()` | **Missing** | Docker network list |
|
|
| `typed_get_log_files()` | Have `list_available_log_files()` | Same |
|
|
| `typed_get_cloud()` | **Missing** | Unraid Connect cloud status |
|
|
| `typed_get_connect()` | Have `get_connect_settings()` | Same |
|
|
| `typed_get_remote_access()` | **Missing** | Remote access settings |
|
|
| `get_physical_disks()` | Have `list_physical_disks()` | Same |
|
|
| `get_array_disks()` | **Missing** | Array disk assignments |
|
|
|
|
---
|
|
|
|
### 3. mcp-ssh-sre / unraid-ssh-mcp
|
|
|
|
- **Repository:** [ohare93/mcp-ssh-sre](https://github.com/ohare93/mcp-ssh-sre)
|
|
- **Language:** TypeScript/Node.js
|
|
- **Architecture:** MCP server that connects via SSH to run predefined commands
|
|
- **API Type:** SSH command execution (read-only by design)
|
|
- **Tools:** 12 tool modules with 79+ actions
|
|
|
|
**Why SSH instead of GraphQL API:**
|
|
The project's documentation explicitly compares SSH vs API capabilities:
|
|
|
|
| Feature | GraphQL API | SSH |
|
|
|---------|------------|-----|
|
|
| Docker container logs | Limited | Full |
|
|
| SMART disk health data | Limited | Full (smartctl) |
|
|
| Real-time CPU/load averages | Polling | Direct |
|
|
| Network bandwidth monitoring | Limited | Full (iftop, nethogs) |
|
|
| Process monitoring (ps/top) | Not available | Full |
|
|
| Log file analysis | Basic | Full (grep, awk) |
|
|
| Security auditing | Not available | Full |
|
|
|
|
**Tool modules and actions:**
|
|
|
|
| Module | Tool Name | Actions |
|
|
|--------|-----------|---------|
|
|
| Docker | `docker` | list_containers, inspect, logs, stats, port, env, top, health, logs_aggregate, list_networks, inspect_network, list_volumes, inspect_volume, network_containers |
|
|
| System | `system` | list_files, read_file, find_files, disk_usage, system_info |
|
|
| Monitoring | `monitoring` | ps, process_tree, top, iostat, network_connections |
|
|
| Security | `security` | open_ports, audit_privileges, ssh_connections, cert_expiry |
|
|
| Log Analysis | `log` | grep_all, error_aggregator, timeline, parse_docker, compare_timerange, restart_history |
|
|
| Resources | `resource` | dangling, hogs, disk_analyzer, docker_df, zombies, io_profile |
|
|
| Performance | `performance` | bottleneck, bandwidth, track_metric |
|
|
| VMs | `vm` | list, info, vnc, logs |
|
|
| Container Topology | `container_topology` | network_topology, volume_sharing, dependency_graph, port_conflicts, network_test |
|
|
| Health Diagnostics | `health` | comprehensive, common_issues, threshold_alerts, compare_baseline, diagnostic_report, snapshot |
|
|
| **Unraid Array** | `unraid` | array_status, smart, temps, shares, share_usage, parity_status, parity_history, sync_status, spin_status, unclean_check, mover_status, mover_log, cache_usage, split_level |
|
|
| **Unraid Plugins** | `plugin` | list, updates, template, scripts, share_config, disk_assignments, recent_changes |
|
|
|
|
**Unique capabilities we lack entirely:**
|
|
- Container log retrieval and aggregation
|
|
- Container environment variable inspection
|
|
- Container topology analysis (network maps, shared volumes, dependency graphs, port conflicts)
|
|
- Process monitoring (ps, top, process trees)
|
|
- Disk I/O monitoring (iostat)
|
|
- Network connection analysis (ss/netstat)
|
|
- Security auditing (open ports, privilege audit, SSH connection logs, SSL cert expiry)
|
|
- Performance bottleneck analysis
|
|
- Resource waste detection (dangling Docker resources, zombie processes)
|
|
- Comprehensive health diagnostics with baseline comparison
|
|
- Mover status and logs
|
|
- Cache usage analysis
|
|
- Split level configuration
|
|
- User script discovery
|
|
- Docker template inspection
|
|
- Disk assignment information
|
|
- Recent config file change detection
|
|
|
|
---
|
|
|
|
### 4. PSUnraid
|
|
|
|
- **Repository:** [jlabon2/PSUnraid](https://github.com/jlabon2/PSUnraid)
|
|
- **Language:** PowerShell
|
|
- **Architecture:** PowerShell module using GraphQL API
|
|
- **API Type:** GraphQL (same as ours)
|
|
- **Status:** Proof of concept, 30+ cmdlets
|
|
|
|
**Cmdlets and operations:**
|
|
|
|
| Category | Cmdlets |
|
|
|----------|---------|
|
|
| Connection | `Connect-Unraid`, `Disconnect-Unraid` |
|
|
| System | `Get-UnraidServer`, `Get-UnraidMetrics`, `Get-UnraidLog`, `Start-UnraidMonitor` |
|
|
| Docker | `Get-UnraidContainer`, `Start-UnraidContainer`, `Stop-UnraidContainer`, `Restart-UnraidContainer` |
|
|
| VMs | `Get-UnraidVm`, `Start-UnraidVm`, `Stop-UnraidVm`, `Suspend-UnraidVm`, `Resume-UnraidVm`, `Restart-UnraidVm` |
|
|
| Array | `Get-UnraidArray`, `Get-UnraidPhysicalDisk`, `Get-UnraidShare`, `Start-UnraidArray`, `Stop-UnraidArray` |
|
|
| Parity | `Start-UnraidParityCheck`, `Stop-UnraidParityCheck`, `Suspend-UnraidParityCheck`, `Resume-UnraidParityCheck`, `Get-UnraidParityHistory` |
|
|
| Notifications | `Get-UnraidNotification`, `Set-UnraidNotification`, `Remove-UnraidNotification` |
|
|
| Other | `Get-UnraidPlugin`, `Get-UnraidUps`, `Restart-UnraidApi` |
|
|
|
|
**Features we lack that PSUnraid has (via same GraphQL API):**
|
|
- Real-time monitoring dashboard (`Start-UnraidMonitor`)
|
|
- Notification management (mark as read, delete notifications)
|
|
- Array start/stop
|
|
- Parity check full lifecycle (start, stop, pause, resume, history)
|
|
- UPS monitoring
|
|
- Plugin listing
|
|
- API restart capability
|
|
- VM suspend/resume/restart
|
|
|
|
---
|
|
|
|
### 5. ha-unraid (Home Assistant)
|
|
|
|
- **Repository:** [domalab/ha-unraid](https://github.com/domalab/ha-unraid) (ruaan-deysel fork is active)
|
|
- **Language:** Python
|
|
- **Architecture:** Home Assistant custom integration
|
|
- **API Type:** Originally SSH-based (through v2025.06.11), rebuilt for GraphQL API (v2025.12.0+)
|
|
- **Requires:** Unraid 7.2.0+, GraphQL API v4.21.0+
|
|
|
|
**Sensors provided:**
|
|
|
|
| Entity Type | Entities |
|
|
|-------------|----------|
|
|
| **Sensors** | CPU Usage, CPU Temperature, CPU Power, Memory Usage, Uptime, Array State, Array Usage, Parity Progress, per-Disk Usage, per-Share Usage, Flash Usage, UPS Battery, UPS Load, UPS Runtime, UPS Power, Notifications count |
|
|
| **Binary Sensors** | Array Started, Parity Check Running, Parity Valid, per-Disk Health, UPS Connected |
|
|
| **Switches** | Docker Container start/stop, VM start/stop |
|
|
| **Buttons** | Array Start/Stop, Parity Check Start/Stop, Disk Spin Up/Down |
|
|
|
|
**Features we lack:**
|
|
- CPU temperature and CPU power consumption monitoring
|
|
- UPS full monitoring (battery, load, runtime, power, connected status)
|
|
- Parity progress tracking
|
|
- Per-disk health binary status
|
|
- Flash device usage monitoring
|
|
- Array start/stop buttons
|
|
- Parity check start/stop
|
|
- Disk spin up/down
|
|
- Dynamic entity creation (only creates entities for available services)
|
|
|
|
---
|
|
|
|
### 6. chris-mc1/unraid_api (HA integration)
|
|
|
|
- **Repository:** [chris-mc1/unraid_api](https://github.com/chris-mc1/unraid_api)
|
|
- **Language:** Python
|
|
- **Architecture:** Lightweight Home Assistant integration using GraphQL API
|
|
- **API Type:** GraphQL
|
|
- **Status:** Simpler/lighter alternative to ha-unraid
|
|
|
|
**Entities provided:**
|
|
- Array state sensor
|
|
- Array used space percentage
|
|
- RAM usage percentage
|
|
- CPU utilization
|
|
- Per-share free space (optional)
|
|
- Per-disk state, temperature, spinning status, used space (optional)
|
|
|
|
**Notable:** This is a simpler, lighter-weight integration focused on monitoring only (no control operations).
|
|
|
|
---
|
|
|
|
## Feature Matrix
|
|
|
|
### Legend
|
|
- **Y** = Supported
|
|
- **N** = Not supported
|
|
- **P** = Partial support
|
|
- **--** = Not applicable
|
|
|
|
### Monitoring Features
|
|
|
|
| Feature | Our MCP (10 tools, 76 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 |
|
|
| CPU temperature | N | Y | Y | N | N | Y | N |
|
|
| CPU power consumption | N | Y | N | N | N | Y | N |
|
|
| Memory usage | Y | Y | Y | Y | Y | Y | Y |
|
|
| GPU metrics | N | Y | N | N | N | N | N |
|
|
| Fan RPM | N | Y | N | N | N | N | N |
|
|
| Motherboard temperature | N | Y | N | N | N | N | N |
|
|
| UPS monitoring | N | Y | Y | N | Y | Y | N |
|
|
| Network config | Y | Y | Y | Y | N | N | N |
|
|
| Network bandwidth | N | Y | N | Y | N | N | N |
|
|
| Registration/license info | Y | Y | Y | N | N | N | N |
|
|
| Unraid variables | Y | Y | Y | N | N | N | N |
|
|
| System services status | N | Y | Y | N | N | N | N |
|
|
| Flash drive info | N | Y | Y | N | N | Y | N |
|
|
| Owner info | N | N | Y | N | N | N | N |
|
|
| Installed plugins | N | Y | Y | Y | Y | N | N |
|
|
| Available updates | N | Y | N | Y | N | N | N |
|
|
|
|
### Storage Features
|
|
|
|
| Feature | Our MCP | mgmt-agent | unraid-api-client | mcp-ssh-sre | PSUnraid | ha-unraid | chris-mc1 |
|
|
|---------|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|
|
| Array status | Y | Y | Y | Y | Y | Y | Y |
|
|
| Array start/stop | N | Y | Y | N | Y | Y | N |
|
|
| Physical disk listing | Y | Y | Y | N | Y | N | N |
|
|
| Disk details | Y | Y | Y | Y | Y | Y | Y |
|
|
| Disk SMART data | N | Y | N | Y | N | P | N |
|
|
| Disk spin up/down | N | Y | Y | Y | N | Y | N |
|
|
| Disk temperatures | P | Y | Y | Y | N | Y | Y |
|
|
| Disk I/O stats | N | Y | N | Y | N | N | N |
|
|
| Shares info | Y | Y | Y | Y | Y | Y | Y |
|
|
| Share configuration | N | Y | N | Y | N | N | N |
|
|
| Parity check control | N | Y | Y | N | Y | Y | N |
|
|
| Parity check history | N | Y | Y | Y | Y | N | N |
|
|
| Parity progress | N | Y | Y | Y | Y | Y | N |
|
|
| ZFS pools/datasets/snapshots | N | Y | N | N | N | N | N |
|
|
| ZFS ARC stats | N | Y | N | N | N | N | N |
|
|
| Unassigned devices | N | Y | N | N | N | N | N |
|
|
| Mover status/logs | N | N | N | Y | N | N | N |
|
|
| Cache usage | N | N | N | Y | N | N | N |
|
|
|
|
### Docker Features
|
|
|
|
| Feature | Our MCP | mgmt-agent | unraid-api-client | mcp-ssh-sre | PSUnraid | ha-unraid | chris-mc1 |
|
|
|---------|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|
|
| List containers | Y | Y | Y | Y | Y | Y | N |
|
|
| Container details | Y | Y | Y | Y | N | P | N |
|
|
| Start/stop/restart | Y | Y | Y | N | Y | Y | N |
|
|
| Pause/unpause | N | Y | Y | N | N | N | N |
|
|
| Container resource usage | N | Y | Y | Y | N | N | N |
|
|
| Container logs | N | N | N | Y | N | N | N |
|
|
| Container env vars | N | N | N | Y | N | N | N |
|
|
| Container network topology | N | N | N | Y | N | N | N |
|
|
| Container port inspection | N | N | N | Y | N | N | N |
|
|
| Docker networks | N | Y | Y | Y | N | N | N |
|
|
| Docker volumes | N | N | N | Y | N | N | N |
|
|
| Container update | N | N | Y | N | N | N | N |
|
|
| Container removal | N | N | Y | N | N | N | N |
|
|
| Docker settings | N | Y | N | N | N | N | N |
|
|
|
|
### VM Features
|
|
|
|
| Feature | Our MCP | mgmt-agent | unraid-api-client | mcp-ssh-sre | PSUnraid | ha-unraid | chris-mc1 |
|
|
|---------|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|
|
| List VMs | Y | Y | Y | Y | Y | Y | N |
|
|
| VM details | Y | Y | Y | Y | N | P | N |
|
|
| Start/stop | Y | Y | Y | N | Y | Y | N |
|
|
| Restart | Y | Y | N | N | Y | N | N |
|
|
| Pause/resume | N | Y | Y | N | Y | N | N |
|
|
| Hibernate | N | Y | N | N | N | N | N |
|
|
| Force stop | N | Y | Y | N | Y | N | N |
|
|
| Reboot VM | N | N | Y | N | N | N | N |
|
|
| VNC info | N | N | N | Y | N | N | N |
|
|
| VM libvirt logs | N | N | N | Y | N | N | N |
|
|
| VM settings | N | Y | N | N | N | N | N |
|
|
|
|
### Cloud Storage (RClone) Features
|
|
|
|
| Feature | Our MCP | mgmt-agent | unraid-api-client | mcp-ssh-sre | PSUnraid | ha-unraid | chris-mc1 |
|
|
|---------|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|
|
| List remotes | Y | N | N | N | N | N | N |
|
|
| Get config form | Y | N | N | N | N | N | N |
|
|
| Create remote | Y | N | N | N | N | N | N |
|
|
| Delete remote | Y | N | N | N | N | N | N |
|
|
|
|
> **Note:** RClone management is unique to our project among these competitors.
|
|
|
|
### Notification Features
|
|
|
|
| Feature | Our MCP | mgmt-agent | unraid-api-client | mcp-ssh-sre | PSUnraid | ha-unraid | chris-mc1 |
|
|
|---------|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|
|
| Notification overview | Y | Y | Y | N | N | Y | N |
|
|
| List notifications | Y | Y | Y | Y | Y | N | N |
|
|
| Mark as read | N | N | N | N | Y | N | N |
|
|
| Delete notifications | N | N | N | N | Y | N | N |
|
|
|
|
### Logs & Diagnostics
|
|
|
|
| Feature | Our MCP | mgmt-agent | unraid-api-client | mcp-ssh-sre | PSUnraid | ha-unraid | chris-mc1 |
|
|
|---------|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|
|
| List log files | Y | Y | Y | N | N | N | N |
|
|
| Get log contents | Y | Y | Y | Y | Y | N | N |
|
|
| Log search/grep | N | N | N | Y | N | N | N |
|
|
| Error aggregation | N | N | N | Y | N | N | N |
|
|
| Syslog access | N | Y | N | Y | Y | N | N |
|
|
| Docker daemon log | N | Y | N | Y | N | N | N |
|
|
| Health check | Y | Y | N | Y | N | N | N |
|
|
| Subscription diagnostics | Y | N | N | N | N | N | N |
|
|
|
|
### Integration & Protocol Features
|
|
|
|
| Feature | Our MCP | mgmt-agent | unraid-api-client | mcp-ssh-sre | PSUnraid | ha-unraid | chris-mc1 |
|
|
|---------|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|
|
| MCP tools | Y (10 tools, 76 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 |
|
|
| WebSocket streaming | N | Y (9 events) | N | N | N | N | N |
|
|
| Prometheus metrics | N | Y (41) | N | N | N | N | N |
|
|
| MQTT publishing | N | Y | N | N | N | N | N |
|
|
| SSE transport | Y | Y | N | Y | N | N | N |
|
|
| Stdio transport | Y | N | N | Y | N | N | N |
|
|
| Streamable HTTP | Y | Y | N | Y | N | N | N |
|
|
| Pydantic models | N | N | Y | N | N | N | N |
|
|
| Safety confirmations | N | Y | N | N | N | N | N |
|
|
|
|
### Security & Operational Features
|
|
|
|
| Feature | Our MCP | mgmt-agent | mcp-ssh-sre | PSUnraid |
|
|
|---------|:---:|:---:|:---:|:---:|
|
|
| Open port scanning | N | N | Y | N |
|
|
| SSH login monitoring | N | N | Y | N |
|
|
| Container privilege audit | N | N | Y | N |
|
|
| SSL certificate expiry | N | N | Y | N |
|
|
| Process monitoring | N | N | Y | N |
|
|
| Zombie process detection | N | N | Y | N |
|
|
| Performance bottleneck analysis | N | N | Y | N |
|
|
| System reboot | N | Y | N | N |
|
|
| System shutdown | N | Y | N | N |
|
|
| User script execution | N | Y | Y | N |
|
|
|
|
---
|
|
|
|
## Gap Analysis
|
|
|
|
### Priority 1: High-Value Features Available via GraphQL API
|
|
|
|
These features are available through the same GraphQL API we already use and should be straightforward to implement:
|
|
|
|
1. **Array start/stop control** -- Both `domalab/unraid-api-client` and `PSUnraid` implement this via GraphQL mutations. This is a fundamental control operation that every competitor supports.
|
|
|
|
2. **Parity check lifecycle** (start, stop, pause, resume, history) -- Available via GraphQL mutations. Critical for array management.
|
|
|
|
3. **Disk spin up/down** -- Available via GraphQL mutations. Important for power management and noise control.
|
|
|
|
4. **UPS monitoring** -- Available via GraphQL query. Present in `unraid-api-client`, `PSUnraid`, and `ha-unraid`. Data includes battery level, load, runtime, power state.
|
|
|
|
5. **System services list** -- Available via GraphQL query (`services`). Shows Docker service, VM manager status, etc.
|
|
|
|
6. **Flash drive info** -- Available via GraphQL query (`flash`). Boot device monitoring.
|
|
|
|
7. **Installed plugins list** -- Available via GraphQL query (`plugins`). Useful for understanding server configuration.
|
|
|
|
8. **Docker networks** -- Available via GraphQL query. Listed in `unraid-api-client`.
|
|
|
|
9. **Parity history** -- Available via GraphQL query. Historical parity check data.
|
|
|
|
10. **VM pause/resume and force stop** -- Available via GraphQL mutations. Completing our VM control capabilities.
|
|
|
|
11. **Docker pause/unpause** -- Available via GraphQL mutations. Completing our Docker control capabilities.
|
|
|
|
12. **Cloud/remote access status** -- Available via GraphQL queries. Shows Unraid Connect status, remote access configuration.
|
|
|
|
13. **Notification management** -- Mark as read, delete. `PSUnraid` implements this via GraphQL.
|
|
|
|
14. **API/OS version info** -- Simple query that helps with compatibility checks.
|
|
|
|
### Priority 2: High-Value Features Requiring Non-GraphQL Data Sources
|
|
|
|
These would require SSH access or other system-level access that our GraphQL-only architecture cannot provide:
|
|
|
|
1. **Container logs** -- Not available via GraphQL. SSH-based solutions (mcp-ssh-sre) can retrieve full container logs via `docker logs`.
|
|
|
|
2. **SMART disk data** -- Limited via GraphQL. Full SMART data (power-on hours, error counts, reallocated sectors) requires `smartctl` access.
|
|
|
|
3. **GPU metrics** -- Not available via GraphQL. Requires nvidia-smi or similar.
|
|
|
|
4. **Process monitoring** -- Not available via GraphQL. Requires `ps`/`top` access.
|
|
|
|
5. **Network bandwidth** -- Not in GraphQL. Requires direct system access.
|
|
|
|
6. **Container resource usage** (CPU%, memory) -- Not available through the current GraphQL API at a per-container level in real-time.
|
|
|
|
7. **Log search/grep** -- While we can get log contents, we cannot search across logs.
|
|
|
|
8. **Security auditing** -- Not available via GraphQL.
|
|
|
|
### Priority 3: Architectural Improvements
|
|
|
|
1. **MCP Resources** -- Add subscribable data streams (system, array, containers, VMs, disks) for real-time AI agent monitoring.
|
|
|
|
2. **MCP Prompts** -- Add guided interaction templates (disk health analysis, system overview, troubleshooting).
|
|
|
|
3. **Confirmation for destructive operations** -- Add a `confirm` parameter for array stop, system reboot, container removal, etc.
|
|
|
|
4. **Pydantic response models** -- Type-safe response parsing like `domalab/unraid-api-client`.
|
|
|
|
5. **Connection validation tool** -- Simple tool to verify API connectivity and version compatibility.
|
|
|
|
---
|
|
|
|
## Recommended Priorities
|
|
|
|
### Phase 1: Low-Hanging Fruit (GraphQL mutations/queries we already have access to)
|
|
|
|
**Estimated effort: Small -- these are straightforward GraphQL queries/mutations**
|
|
|
|
| New Tool | Priority | Notes |
|
|
|----------|----------|-------|
|
|
| `start_array()` / `stop_array()` | Critical | Every competitor has this |
|
|
| `start_parity_check()` / `stop_parity_check()` | Critical | Full parity lifecycle |
|
|
| `pause_parity_check()` / `resume_parity_check()` | Critical | Full parity lifecycle |
|
|
| `get_parity_history()` | High | Historical data |
|
|
| `spin_up_disk()` / `spin_down_disk()` | High | Disk power management |
|
|
| `get_ups_status()` | High | UPS monitoring |
|
|
| `get_services_status()` | Medium | System services |
|
|
| `get_flash_info()` | Medium | Flash drive info |
|
|
| `get_plugins()` | Medium | Plugin management |
|
|
| `get_docker_networks()` | Medium | Docker networking |
|
|
| `pause_docker_container()` / `unpause_docker_container()` | Medium | Docker control |
|
|
| `pause_vm()` / `resume_vm()` / `force_stop_vm()` | Medium | VM control |
|
|
| `get_cloud_status()` / `get_remote_access()` | Low | Connect info |
|
|
| `get_version()` | Low | API version |
|
|
| `manage_notifications()` | Low | Mark read/delete |
|
|
|
|
### Phase 2: MCP Protocol Enhancements
|
|
|
|
| Enhancement | Priority | Notes |
|
|
|-------------|----------|-------|
|
|
| MCP Resources (5 streams) | High | Real-time data for AI agents |
|
|
| MCP Prompts (3 templates) | Medium | Guided interactions |
|
|
| Confirmation parameter | High | Safety for destructive ops |
|
|
| Connection validation tool | Medium | Health/compatibility check |
|
|
|
|
### Phase 3: Advanced Features (may require SSH)
|
|
|
|
| Feature | Priority | Notes |
|
|
|---------|----------|-------|
|
|
| Container log retrieval | High | Most-requested SSH-only feature |
|
|
| SMART disk health data | High | Disk failure prediction |
|
|
| GPU monitoring | Medium | For GPU passthrough users |
|
|
| Performance/resource monitoring | Medium | Bottleneck analysis |
|
|
| Security auditing | Low | Port scan, login audit |
|
|
|
|
---
|
|
|
|
## Sources
|
|
|
|
- [ruaan-deysel/unraid-management-agent](https://github.com/ruaan-deysel/unraid-management-agent) -- Go-based Unraid plugin with REST API, WebSocket, MCP, Prometheus, and MQTT
|
|
- [domalab/unraid-api-client](https://github.com/domalab/unraid-api-client) -- Async Python client for Unraid GraphQL API (PyPI: `unraid-api`)
|
|
- [ohare93/mcp-ssh-sre](https://github.com/ohare93/mcp-ssh-sre) -- SSH-based MCP server for read-only server monitoring
|
|
- [jlabon2/PSUnraid](https://github.com/jlabon2/PSUnraid) -- PowerShell module for Unraid 7.x management via GraphQL API
|
|
- [domalab/ha-unraid](https://github.com/domalab/ha-unraid) (ruaan-deysel fork) -- Home Assistant integration via GraphQL API
|
|
- [chris-mc1/unraid_api](https://github.com/chris-mc1/unraid_api) -- Lightweight Home Assistant integration for Unraid
|
|
- [nickbeddows-ctrl/unraid-ssh-mcp](https://github.com/nickbeddows-ctrl/unraid-ssh-mcp) -- Guardrailed MCP server for Unraid management via SSH
|
|
- [MCP SSH Unraid on LobeHub](https://lobehub.com/mcp/ohare93-unraid-ssh-mcp)
|
|
- [MCP SSH SRE on Glama](https://glama.ai/mcp/servers/@ohare93/mcp-ssh-sre)
|
|
- [Unraid Integration for Home Assistant (domalab docs)](https://domalab.github.io/ha-unraid/)
|
|
- [Home Assistant Unraid Integration forum thread](https://community.home-assistant.io/t/unraid-integration/785003)
|