mirror of
https://github.com/jmagar/unraid-mcp.git
synced 2026-03-23 12:39:24 -07:00
7.0 KiB
7.0 KiB
Changelog
All notable changes to this project are documented here.
[1.1.2] - 2026-03-23
Security
- Path traversal: Removed
/mnt/from_ALLOWED_LOG_PREFIXES— was exposing all Unraid user shares to path-based reads - Path traversal: Added early
..detection fordisk/logsandlive/log_tailbefore any filesystem access; added/boot/prefix restriction forflash_backupsource paths - Timing-safe auth:
verify_tokennow useshmac.compare_digestinstead of==to prevent timing oracle attacks on API key comparison - Traceback leak:
include_tracebackinErrorHandlingMiddlewareis now gated onDEBUGlog level; production deployments no longer expose stack traces
Fixed
- Health check:
_comprehensive_health_checknow re-raisesCredentialsNotConfiguredErrorinstead of swallowing it into a generic unhealthy status - UPS device query: Removed non-existent
nominalPowerandcurrentPowerfields fromups_devicequery — every call was failing against the live API - Stale credential bindings: Subscription modules (
manager.py,snapshot.py,utils.py,diagnostics.py) previously capturedUNRAID_API_KEY/UNRAID_API_URLat import time; replaced with_settings.ATTRcall-time access soapply_runtime_config()updates propagate correctly after credential elicitation
Added
- CI pipeline:
.github/workflows/ci.ymlwith 5 jobs — lint (ruff), typecheck (ty), test (pytest -m "not integration"), version-sync check, anduv auditdependency scan - Coverage threshold:
fail_under = 80added to[tool.coverage.report] - Version sync check:
scripts/validate-marketplace.shnow verifiespyproject.tomlandplugin.jsonversions match
Changed
- Docs: Updated
CLAUDE.md,README.mdto reflect 3 tools (1 primary + 2 diagnostic); corrected system domain count (19→18); fixed scripts comment - Docs:
docs/AUTHENTICATION.mdH1 retitled to "Authentication Setup Guide" - Docs: Added
UNRAID_CREDENTIALS_DIRcommented entry to.env.example - Removed
from __future__ import annotationsfromsnapshot.py(caused TC002 false positives with FastMCP) - Added
# noqa: ASYNC109totimeoutparameters in_handle_liveandunraid()(valid suppressions) - Fixed
start_array*→start_arrayin tool docstring table (start_arrayis not in_ARRAY_DESTRUCTIVE)
[1.1.1] - 2026-03-16
Added
- API key auth:
Authorization: Bearer <UNRAID_MCP_API_KEY>bearer token authentication viaApiKeyVerifier— machine-to-machine access without OAuth browser flow - MultiAuth: When both Google OAuth and API key are configured,
MultiAuthaccepts either method - Google OAuth: Full
GoogleProviderintegration — browser-based OAuth 2.0 flow with JWT session tokens;UNRAID_MCP_JWT_SIGNING_KEYfor stable tokens across restarts fastmcp.json: Dev tooling configs for FastMCP
Fixed
- Auth test isolation: use
os.environ[k] = ""instead ofdelenvto prevent dotenv re-injection between test reloads
[1.1.0] - 2026-03-16
Breaking Changes
- Tool consolidation: 15 individual domain tools (
unraid_docker,unraid_vm, etc.) merged into singleunraidtool withaction+subactionrouting- Old:
unraid_docker(action="list") - New:
unraid(action="docker", subaction="list")
- Old:
Added
livetool (11 subactions): Real-time WebSocket subscription snapshots —cpu,memory,cpu_telemetry,array_state,parity_progress,ups_status,notifications_overview,notification_feed,log_tail,owner,server_statuscustomizationtool (5 subactions):theme,public_theme,is_initial_setup,sso_enabled,set_themeplugintool (3 subactions):list,add,removeoidctool (5 subactions):providers,provider,configuration,public_providers,validate_session- Persistent
SubscriptionManager:unraid://live/*MCP resources backed by long-lived WebSocket connections with auto-start and reconnection diagnose_subscriptionsandtest_subscription_querydiagnostic toolsarray: Addedparity_history,start_array,stop_array,add_disk,remove_disk,mount_disk,unmount_disk,clear_disk_statskeys: Addedadd_role,remove_rolesettings: Addedupdate_ssh(confirm required)stop_arrayadded to_ARRAY_DESTRUCTIVEgate_destructive_actionhelper incore/guards.py— centralized elicitation + confirm guard- Full safety test suite:
TestNoGraphQLCallsWhenUnconfirmed(zero-I/O guarantee for all 13 destructive actions)
Fixed
- Removed 29 actions confirmed absent from live API v4.29.2 via GraphQL introspection (Docker organizer mutations,
unassignedDevices,warningsAndAlerts, etc.) log_tailpath validated against allowlist before subscription start- WebSocket auth uses
x-api-keyconnectionParams format
[1.0.0] - 2026-03-14 through 2026-03-15
Breaking Changes
- Credential storage moved to
~/.unraid-mcp/.env(dir 700, file 600); all runtimes load from this path unraid_health(action="setup")is the only tool that triggers credential elicitation; all others propagateCredentialsNotConfiguredError
Added
CredentialsNotConfiguredErrorsentinel — propagates cleanly throughtool_error_handlerwith exact credential path in the error messageis_configured()andapply_runtime_config()insettings.pyfor runtime credential injectionelicit_and_configure()with.envpersistence and confirmation before overwrite- 28 GraphQL mutations across storage, docker, notifications, and new settings tool
- Comprehensive test suite expansion: schema validation (99 tests), HTTP layer (respx), property tests, safety audit, contract tests
Fixed
- Numerous PR review fixes across 50+ commits (CodeRabbit, ChatGPT-Codex review rounds)
- Shell scripts hardened against injection and null guards
- Notification enum validation, subscription lock split, safe_get semantics
[0.6.0] - 2026-03-15
Added
- Subscription byte/line cap to prevent unbounded memory growth
asyncio.timeoutbounds onsubscribe_once/subscribe_collect- Partial auto-start for subscriptions (best-effort on startup)
Fixed
- WebSocket URL scheme handling (
ws:///wss://) flash_backuppath validation and smoke test assertions
[0.5.0] - 2026-03-15
Tool expansion and live subscription foundation.
[0.4.x] - 2026-03-13 through 2026-03-14
Credential elicitation system, per-tool refactors, and mutation additions.
[0.2.x] - 2026-02-15 through 2026-03-13
Initial public release hardening: PR review cycles, test suite expansion, security fixes, plugin manifest.
[0.1.0] - 2026-02-08
Added
- Consolidated 26 tools into 10 tools with 90 actions
- FastMCP architecture migration with
uvtoolchain - Docker Compose support with health checks
- WebSocket subscription infrastructure
Format: Keep a Changelog. Versioning: Semantic Versioning.