Skip to content

Releases: staticrevolution-com/sr-truenas-mcp

v1.2.1 — reporting_get_data forwards unit/page

Choose a tag to compare

@whasamatau whasamatau released this 21 Aug 10:28
a007762

Patch. Completes the 2026-08-21 field report. Additive parameters only — no action surface change, no change to existing call behaviour.

Fixed — unit and page are forwarded

Both were discarded before the call, so a caller paging backwards received correctly-shaped data for the last hour with nothing to indicate the parameters had been ignored. The query schema accepts both, and its additionalProperties is false, so middleware would have rejected them loudly — silently dropping them was the only reason it went unnoticed.

⚠️ page is not an index. unit: "HOUR", page: 3 returns the last three hours, not the third hour back. unit and start/end are mutually exclusive (the API rejects the combination) and page requires unit; both are now rejected client-side with a clear message.

Documented — two gaps closed without new actions

Enumerating middleware (781 methods on 26.0.0-BETA.1) settled both:

  • Kernel log is unreachable — no method exposes the ring buffer, and containers can't substitute without CAP_SYSLOG. TROUBLESHOOTING.md now records the substitute that works: cgroup memory.events plus State.OOMKilled, which is what separates a host-wide OOM from a cgroup-limit kill.
  • No memory/swap/ARC action will be added — memory and ARC compose from a single reporting_get_data call, cheap now that detail defaults to "summary". Swap has no middleware source at all.

272 tests pass. Action count (270) and safety tiers unchanged.

v1.2.0 — usable reporting windows, summary-by-default responses

Choose a tag to compare

@whasamatau whasamatau released this 21 Aug 03:49
4f50e69

Fixes the two reporting_get_data defects found during a live memory-pressure investigation against TrueNAS 26.0.0-BETA.1. Full write-up: docs/FIELD-REPORT-2026-08-21-reporting-and-diagnostics.md.

Fixed — start/end were unsatisfiable

Neither spelling worked. The Zod schema demanded a string, middlewared's query schema demands an integer epoch, and the value was forwarded verbatim — so a string returned query.start: Input should be a valid integer while a number never got past the schema. ISO 8601 was never converted despite the parameter description promising it, which left the no-argument call and its fixed last-hour window as the only thing that worked.

Both now accept epoch seconds (number or string) or ISO 8601 and coerce to integer epoch seconds. An inverted window is rejected up front instead of being passed upstream.

Changed — responses default to a summary

A two-graph, one-hour query returned 400,403 characters (3,601 points per graph at 1s resolution), while the aggregations block the payload already carries is ~200 bytes and answers most of what these graphs get consulted for.

detail now defaults to "summary" — keeps aggregations, legend, start, end; drops the raw series; reports the elided count as data_points.

⚠️ This changes the default response shape. Callers that parse data should pass detail: "raw". detail: "downsampled" returns roughly max_points rows (default 120), bucketed to preserve each bucket's minimum and maximum — a mean-based reduction erases exactly the spikes and troughs the series is read for.

aggregate's description is also corrected: it adds the aggregations block and does not reduce the size of data.

Notes

Minor rather than major: the change is additive with a documented opt-out, following the precedent of 1.1.2, which altered the content of every response (secret redaction) as a patch. No action surface change — 270 registered actions and the tier counts are unchanged. 268 tests pass.

v1.1.2

Choose a tag to compare

@whasamatau whasamatau released this 17 Jun 16:06
10a558a

Bug-fix + hardening release. Verified against TrueNAS-26.0.0-BETA.1. Full details in CHANGELOG.md.

Security

  • Fixed a response-filter bypass that returned sensitive fields (e.g. VM display passwords) in cleartext in tool-call responses. Resource reads were unaffected.

Fixed

  • The confirm gate is satisfiable again for create/update actions — confirm no longer leaks into strict upstream payloads (and is now a first-class top-level dispatcher field).
  • vm_device_create/vm_device_update nest dtype under attributes as current middleware requires.
  • dataset_set_permissions (was non-functional), replication_restore validation, vm_display_uri, vm_update, alertservice_test, and cpu_mode underscore tolerance.

Changed

  • Long-running @job actions return a structured descriptor instead of a bare job id.
  • Safety tiers tightened: iSCSI creates and the *_run family are now tier-2 (93 tier-2 / 157 tier-3).
  • Unknown params are dropped centrally (registry .strip()).

v1.1.1

Choose a tag to compare

@whasamatau whasamatau released this 13 Jun 13:16
d1c5d55

Bug-fix release carrying the TrueNAS 26.0.0-BETA.1 field-report fixes — the same code as the withdrawn v1.0.1, renumbered to sit above the 1.1.0 image that was running in production. No new actions, no schema changes, no breaking changes.

Why 1.1.1 and not 1.0.1: the production gateway was pinned to an orphaned :1.1.0 GHCR image left over from before the 2026-05-01 history rewrite (which consolidated the old internal 1.0.0/1.0.1/1.1.0 tags into the single public 1.0.0). A patch cut from master as 1.0.1 would have numbered below the deployed image. Current master is a superset of that orphaned 1.1.0 (same 270-action / 17-category surface plus these fixes), so 1.1.1 deploys the fixes with zero surface loss. v1.0.1 is withdrawn — do not deploy it.

Fixed

  • API errors no longer collapse to "API call failed." The client now surfaces middlewared's errname + first line of reason (e.g. [EZFS_EXISTS] ... dataset already exists); the legacy message/code shape still works.
  • Filesystem write handlers no longer report false success. filesystem.chown/setperm/setacl are @job methods — the handlers now wait for the job and surface its terminal state (a FAILED/ABORTED job is an error).
  • filesystem_mkdir verifies the directory exists after creating it, and dataset_create warns when the new dataset is left unmounted (both seen against 26.0.0-BETA.1).
  • Discovery errors no longer render an empty action list. Unknown categories now list valid categories; unknown actions list that category's actions.

Changed

  • Category-list discovery output points callers at system_version.
  • 226 tests (was 211).

Full triage record: docs/FIELD-REPORT-2026-06-12-truenas-26.md.

Full changelog: v1.0.0...v1.1.1

v1.0.1 — WITHDRAWN (superseded by v1.1.1)

Choose a tag to compare

@whasamatau whasamatau released this 13 Jun 07:44
b429500

Withdrawn — do not deploy. This release was numbered below the 1.1.0 image that was running in production (an orphaned pre-rewrite artifact). The identical fix code was re-released as v1.1.1, which sorts above the deployed version. Use v1.1.1.

v1.0.0 — Initial public release

Choose a tag to compare

@whasamatau whasamatau released this 01 May 09:38

First public release of sr-truenas-mcp.

A hardened Model Context Protocol server for TrueNAS SCALE. 270 safety-tiered actions across 17 categories, exposed through a single hierarchical truenas tool. Forked from spranab/truenas-mcp; transport migrated from REST to WebSocket JSON-RPC 2.0, four-tier safety classification, layered response filtering, path / dataset-name validation, fail-closed registration.

Licensed under PolyForm Noncommercial 1.0.0 — free for personal, educational, governmental, and research use. Commercial use requires a paid commercial license; email admin@staticrevolution.com. Upstream MIT attribution preserved in NOTICES.

See CHANGELOG.md for the full development log.

Assets

  • sr-truenas-mcp-linux-x64.tar.gz — standalone Linux x64 binary, no Node.js install required (~21 MB)
  • sr-truenas-mcp-linux-x64.tar.gz.sha256 — SHA-256 checksum of the tarball
  • sr-truenas-mcp-linux-x64.spdx.json — SPDX SBOM of the build
  • sr-truenas-mcp-1.0.0.tgz — npm package (Node.js 20+)

Verifying the binary

sha256sum -c sr-truenas-mcp-linux-x64.tar.gz.sha256
tar -xzf sr-truenas-mcp-linux-x64.tar.gz
./sr-truenas-mcp --version
# Expected: 1.0.0+6210ee8