forked from HomeLab/unraid-mcp
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.
2.7 KiB
2.7 KiB
Unraid API Quick Reference
Quick reference for the most common Unraid GraphQL API queries.
Setup
# Set environment variables
export UNRAID_URL="https://your-unraid-server/graphql"
export UNRAID_API_KEY="your-api-key-here"
# Or use the helper script directly
./scripts/unraid-query.sh -u "$UNRAID_URL" -k "$UNRAID_API_KEY" -q "{ online }"
Common Queries
System Status
{
online
metrics {
cpu { percentTotal }
memory { total used free percentTotal }
}
}
Array Status
{
array {
state
parityCheckStatus { status progress errors }
}
}
Disk List with Temperatures
{
array {
disks {
name
device
temp
status
fsSize
fsFree
isSpinning
}
}
}
All Physical Disks (including USB/SSDs)
{
disks {
id
name
}
}
Network Shares
{
shares {
name
comment
}
}
Docker Containers
{
docker {
containers {
id
names
image
state
status
}
}
}
Virtual Machines
{
vms {
id
name
state
cpus
memory
}
}
List Log Files
{
logFiles {
name
size
modifiedAt
}
}
Read Log Content
{
logFile(path: "syslog", lines: 20) {
content
totalLines
}
}
System Info
{
info {
time
cpu { model cores threads }
os { distro release }
system { manufacturer model }
}
}
UPS Devices
{
upsDevices {
id
name
status
charge
load
}
}
Notifications
Counts:
{
notifications {
overview {
unread { info warning alert total }
archive { info warning alert total }
}
}
}
List Unread:
{
notifications {
list(filter: { type: UNREAD, offset: 0, limit: 10 }) {
id
subject
description
timestamp
}
}
}
List Archived:
{
notifications {
list(filter: { type: ARCHIVE, offset: 0, limit: 10 }) {
id
subject
description
timestamp
}
}
}
Field Name Notes
- Use
metricsfor real-time usage (CPU/memory percentages) - Use
infofor hardware specs (cores, model, etc.) - Temperature field is
temp(nottemperature) - Status field is
statefor array (notstatus) - Sizes are in kilobytes
- Temperatures are in Celsius
Response Structure
All responses follow this pattern:
{
"data": {
"queryName": { ... }
}
}
Errors appear in:
{
"errors": [
{ "message": "..." }
]
}