Releases: Nightreaver/python-ssh-mcp
Releases · Nightreaver/python-ssh-mcp
v1.5.2 — extract CHANGELOG.md from DESIGN.md
Changed
- Release history extracted into this
CHANGELOG.md(previously the "shipped milestones" block inDESIGN.md).DESIGN.mdnow points here. No behaviour changes.
v1.5.1 — host-notes skill polish
Changed
ssh_host_notes_setskill gains a canonical sidecar-structure template: safety-first head sections (CRITICAL, At-a-glance, platform quirks, storage, workloads, access caveats) and an append-only Timeline tail. Marks_setas the structural owner and_appendas the history-only writer so two agents don't fight over the same regions.ssh_host_notes_appendandssh_host_notesskills updated for the same contract.
v1.5.0 — ssh_server_info tool + mcp://ssh-mcp/server-info resource
Added
ssh_server_inforead-tier tool +mcp://ssh-mcp/server-inforesource. Dual surface (resource as primary discovery path, tool as fallback for clients that don't expose resources to the LLM) sharing one payload shape:name,version,total_tools,enabled_tiers,enabled_groups. Lives in thehostgroup. Not@audited-- server-meta, no host touch.
v1.4.1 — documentation polish
Changed
- Documentation polish across public docs, source docstrings, and skill files. No behaviour changes.
v1.4.0 — secret redaction layer + sudo file-ops tier, plus ssh_docker_system_df
Added
- Secret-redaction policy (ADR-0027). New service stack:
services/redact_policy.py(config: key lists, glob lists, bypass policy, salt, entropy detection) +services/redactor.py(line-level redaction engine). New toolssh_read_redactedroutes through path policy then applies redaction before returning content. Operator knobs:SSH_REDACT_KEYS_ADD/SSH_REDACT_KEYS_REPLACE,SSH_REDACT_PATHS_GLOBS,SSH_RESTRICTED_GLOBS,SSH_REDACT_SALT,SSH_REDACT_ENTROPY_DETECTION,SSH_REDACT_BYPASS_POLICY,SSH_REDACT_HINT_CHARS. Audit line gains optionalredact_bypass: truefield. HMAC-SHA256 hash markers allow cross-host secret identity comparison without leaking plaintext. - Sudo-tier path-bearing tools + path-aware cheatsheet (ADR-0028). Five new tools (
ssh_sudo_read,ssh_sudo_read_redacted,ssh_sudo_write,ssh_sudo_edit,ssh_sudo_sftp_list) implemented viaservices/sudo_file_ops.py. Each routes through the sameresolve_path/resolve_path_for_redacted_readpolicy chain as the SFTP-read tier, closing the gap wheressh_sudo_exec("cat .env")bypassedredact_bypass_policy=block. Path-aware cheatsheet extension: single-pathcat,head,lsshapes resolve the path and redirect to the*_redactedvariant when appropriate. INC-064 documents the residual raw-exec gap (complex shell shapes) as a known limitation. ssh_docker_system_dfread-tier tool. Reports disk consumption by images, containers, volumes, and build cache. Added to thedockergroup.- CAS concurrent-writer safety for
ssh_host_notes_append(INC-065). Pure optimistic CAS -- no lock.SidecarSnapshotcaptures(text, mtime_ns, size)at read time viaread_sidecar_with_snapshot;atomic_write_sidecar_if_unchangedre-stats the file immediately beforeos.replaceand returnsFalse(no write) ifmtime_nsorsizechanged since the snapshot.ssh_host_notes_appendwraps the full build+write in a 5-iteration retry loop; each retry takes a fresh snapshot and rebuilds content against the newer existing text. After 5 contention failures it raisesRuntimeErrorinstead of spinning unbounded.ssh_host_notes_setis deliberately left last-writer-wins; a CAS variant withexpected_etagis deferred.
v1.3.0 — local_path transfer mode + low_access package split
Added
- Local-disk transfer mode.
ssh_upload,ssh_deploy,ssh_sftp_download, andssh_sudo_writegain an optionallocal_path=argument. The MCP server reads/writes a file directly on its own filesystem instead of routing the payload through the MCP JSON channel as base64. New serviceservices/local_path_policy.pyenforces an operator-configured allowlist (SSH_LOCAL_TRANSFER_ROOTS) and byte cap (SSH_LOCAL_TRANSFER_MAX_BYTES, default 2 GiB). Mode is fully disabled when the allowlist is empty (the default).
Changed
low_access_tools.pyrefactored into alow_access/subpackage (_helpers,fs_tools,edit_tools,link_tools,upload_tools), mirroring the docker subpackage split (INC-043). The top-levellow_access_toolsmodule is now a thin re-export facade; imports and test monkeypatch points are preserved.
v1.2.0 — apt + systemctl mutation tiers, exec cheatsheet, host runbooks
Added
aptmutation tier (group:pkg):ssh_apt_install/upgrade/remove/autoremove/mark, plus read-tierssh_apt_show_holds. Package names validated against the Debian shape inmodels.aptbefore argv; argv built list-style +shlex.join.systemctlmutation tier (group:systemctl):start/stop/restart/reload/enable/disable/mask/unmask/reset-failedvia one_run_unit_actiondispatcher with a frozenset verb tripwire. Unit names validated before argv.- Exec-cheatsheet service: rejects
ssh_exec_run/_streaming/ssh_sudo_execinvocations matching a native-tool cheatsheet shape (heredoc,tee,echo > path, leadingdocker, singlesystemctl/journalctl/apt(-get), singlemkdir/cp/mv/rm, output redirection to a real file). Default-on viaSSH_EXEC_ALLOW_CHEATSHEET_PATTERNS=false; matches raiseCommandIsCheatsheetMatchwith a hint to the native tool. - Host runbooks:
host-snapshot,long-running-job,os-upgradeplus per-tool SKILLs for every new mutation.
Changed
- All mutations are
{"dangerous"}-tagged,@audited(tier="dangerous"), and do NOT auto-prepend sudo (matches read-tier convention). _run_systemctlnow returns the resolved hostname so read tools drop a secondresolve_hostround-trip.path_policy,pool,sudo, anderrorsmodules hardened.snapshots/added to.gitignore.
v1.1.0 — apt/broadcast/link/transfer tooling, host notes, output sanitization
Added
aptread-tier tooling (ssh_apt_list,ssh_apt_search,ssh_apt_show) and broadcast / link / transfer surface.- Host-notes layer (operator-baseline notes in
hosts.toml+ agent-written sidecars). - Output sanitization across read tools.
v1.0.0 — initial release
Added
- Initial public release. FastMCP 3 server exposing SSH / SFTP / Docker / systemd operations as MCP tools. Three independent access tiers (read-only always on, low-access via
ALLOW_LOW_ACCESS_TOOLS, exec viaALLOW_DANGEROUS_TOOLS, sudo viaALLOW_SUDO). Multi-host via TOML registry.known_hostsenforcement, structured audit log, OTel tracing.