Releases: dinglebear-ai/runraid
Releases · dinglebear-ai/runraid
Release list
unraid-rmcp v0.2.2
unraid-rmcp v0.2.1
v0.2.0
[0.2.0] - 2026-07-06
Changed
- Renamed the binary
unraid→runraid(package remainsunraid-mcp; env vars and
the~/.unraiddata dir are unchanged — only the executable name moved). - Default MCP port is now 40010 (
config.rsdefault_mcp_port()andconfig.toml
agree). Earlier docs referencing 3100/6970 were incorrect. - The binary loads
~/.unraid/.env(or/data/.envin a container) at startup via
dotenvybeforeConfig::load, so it can find its credentials without a process
manager. The loader is symlink-guarded (a symlinked.envis refused) and never
overrides already-set env vars. - CI and release builds are now linux/amd64 only — the arm64 leg (QEMU-emulated,
taking 50+ minutes per build) has been dropped from both the Docker image build and
the release binary matrix. Documented in the README prerequisites.
Added
statusMCP action — a server reachability/health observability action
(requiresunraid:read). MCP-only; no CLI command.setup installanddoctorCLI commands (CLI-only; not exposed as MCP actions).- Pagination/filtering on list actions (
limit/offset, plusstate/namefilters
where relevant), returning a{items, total, limit, offset, has_more, next_offset}
envelope (MCP surface). - ~40 KB truncation cap on MCP tool responses.
docker_restartaction (unraid:admin), added after re-vendoring
schema/unraid-schema.graphqlfromunraid/api@2679fda1picked up a new
DockerMutations.restartmutation.array_set_stateaccepts optionaldecryption_password/decryption_keyfile
(MCP-only — not exposed via the CLI, to avoid putting secrets in shell
history/process listings), so an encrypted array can be started without the
web UI unlock step. Also picked up from the same schema re-vendor.- Full coverage of the remaining Unraid GraphQL surface found via the same
schema re-vendor (~142 total operations now implemented, up from 111): the
Docker Organizer subsystem (docker_create_folder,
docker_create_folder_with_items,docker_set_folder_children,
docker_delete_entries,docker_move_entries_to_folder,
docker_move_items_to_position,docker_rename_folder; CLI parity for all
of these), plusdocker_update_view_preferences/
docker_update_autostart_configuration/refresh_docker_digests/
reset_docker_template_mappings/sync_docker_template_paths(MCP-only
for the two JSON-blob ones);customization_set_locale/
customization_set_theme; the full Onboarding lifecycle
(onboarding_bypass_onboarding,onboarding_clear_onboarding_override,
onboarding_close_onboarding,onboarding_open_onboarding,
onboarding_resume_onboarding,onboarding_refresh_internal_boot_context,
onboarding_create_internal_boot_pool,onboarding_set_onboarding_override
— the last MCP-only, its input tree is deeply nested);connect_sign_in,
setup_remote_access,enable_dynamic_remote_access(MCP-only, nested
input),update_api_settings,update_settings(MCP-only, raw JSON),
update_ssh_settings,initiate_flash_backup,notify_if_unique; and the
preview_effective_permissionsquery.
Fixed
- GraphQL injection: queries now pass arguments as GraphQL variables instead of
interpolating them into the query string. - UTF-8 truncation panic: response truncation no longer splits a multi-byte character.
/statusinfo leak: the endpoint no longer returns server details to unauthenticated
callers.- Widened the
/healthupstream reachability probe timeout to 5s and log the
underlying error cause on failure (was too tight, causing false-negative
"unreachable" reports under normal upstream latency). quinn-protobumped to 0.11.15 for RUSTSEC-2026-0185 (remote memory
exhaustion via unbounded out-of-order stream reassembly); pulled in
transitively vialab-auth→reqwest0.13.- Stale plugin-hook contract test (
tests/setup_contract.rs) that still
asserted the pre-e2c22d0binary-direct hook command instead of the
currentscripts/plugin-setup.shwrapper.