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.
220 lines
2.7 KiB
Markdown
220 lines
2.7 KiB
Markdown
# Unraid API Quick Reference
|
|
|
|
Quick reference for the most common Unraid GraphQL API queries.
|
|
|
|
## Setup
|
|
|
|
```bash
|
|
# 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
|
|
```graphql
|
|
{
|
|
online
|
|
metrics {
|
|
cpu { percentTotal }
|
|
memory { total used free percentTotal }
|
|
}
|
|
}
|
|
```
|
|
|
|
### Array Status
|
|
```graphql
|
|
{
|
|
array {
|
|
state
|
|
parityCheckStatus { status progress errors }
|
|
}
|
|
}
|
|
```
|
|
|
|
### Disk List with Temperatures
|
|
```graphql
|
|
{
|
|
array {
|
|
disks {
|
|
name
|
|
device
|
|
temp
|
|
status
|
|
fsSize
|
|
fsFree
|
|
isSpinning
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### All Physical Disks (including USB/SSDs)
|
|
```graphql
|
|
{
|
|
disks {
|
|
id
|
|
name
|
|
}
|
|
}
|
|
```
|
|
|
|
### Network Shares
|
|
```graphql
|
|
{
|
|
shares {
|
|
name
|
|
comment
|
|
}
|
|
}
|
|
```
|
|
|
|
### Docker Containers
|
|
```graphql
|
|
{
|
|
docker {
|
|
containers {
|
|
id
|
|
names
|
|
image
|
|
state
|
|
status
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Virtual Machines
|
|
```graphql
|
|
{
|
|
vms {
|
|
id
|
|
name
|
|
state
|
|
cpus
|
|
memory
|
|
}
|
|
}
|
|
```
|
|
|
|
### List Log Files
|
|
```graphql
|
|
{
|
|
logFiles {
|
|
name
|
|
size
|
|
modifiedAt
|
|
}
|
|
}
|
|
```
|
|
|
|
### Read Log Content
|
|
```graphql
|
|
{
|
|
logFile(path: "syslog", lines: 20) {
|
|
content
|
|
totalLines
|
|
}
|
|
}
|
|
```
|
|
|
|
### System Info
|
|
```graphql
|
|
{
|
|
info {
|
|
time
|
|
cpu { model cores threads }
|
|
os { distro release }
|
|
system { manufacturer model }
|
|
}
|
|
}
|
|
```
|
|
|
|
### UPS Devices
|
|
```graphql
|
|
{
|
|
upsDevices {
|
|
id
|
|
name
|
|
status
|
|
charge
|
|
load
|
|
}
|
|
}
|
|
```
|
|
|
|
### Notifications
|
|
|
|
**Counts:**
|
|
```graphql
|
|
{
|
|
notifications {
|
|
overview {
|
|
unread { info warning alert total }
|
|
archive { info warning alert total }
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**List Unread:**
|
|
```graphql
|
|
{
|
|
notifications {
|
|
list(filter: { type: UNREAD, offset: 0, limit: 10 }) {
|
|
id
|
|
subject
|
|
description
|
|
timestamp
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**List Archived:**
|
|
```graphql
|
|
{
|
|
notifications {
|
|
list(filter: { type: ARCHIVE, offset: 0, limit: 10 }) {
|
|
id
|
|
subject
|
|
description
|
|
timestamp
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Field Name Notes
|
|
|
|
- Use `metrics` for real-time usage (CPU/memory percentages)
|
|
- Use `info` for hardware specs (cores, model, etc.)
|
|
- Temperature field is `temp` (not `temperature`)
|
|
- Status field is `state` for array (not `status`)
|
|
- Sizes are in kilobytes
|
|
- Temperatures are in Celsius
|
|
|
|
## Response Structure
|
|
|
|
All responses follow this pattern:
|
|
```json
|
|
{
|
|
"data": {
|
|
"queryName": { ... }
|
|
}
|
|
}
|
|
```
|
|
|
|
Errors appear in:
|
|
```json
|
|
{
|
|
"errors": [
|
|
{ "message": "..." }
|
|
]
|
|
}
|
|
```
|