Releases: muchiny/bridge-mcp
Release list
v3.0.0
What's Changed
- fix(ci): retry test-container pull to survive Docker Hub rate limits by @muchiny in #63
- test: cover post_process on 13 low-coverage handlers (+26 tests) by @muchiny in #64
- Fix/session reader blocking and utf8 truncation by @muchiny in #115
- ci: make every workflow run the toolchain it claims, and finish its jobs by @muchiny in #113
- fix(ci): clear the last stable-clippy lint and let diff mutation finish by @muchiny in #116
- fix(security): escape or validate every shell argument the builders splice by @muchiny in #120
- build(deps): bump the rust-minor-patch group across 1 directory with 21 updates by @dependabot[bot] in #111
- fix(ci): repair the two scheduled gates that have been lying for weeks by @muchiny in #126
- fix: ship the documented feature set, and actually write the HTTP audit trail by @muchiny in #125
- build(deps): bump the five pending GitHub Actions in one change by @muchiny in #128
- fix(fuzz): the harness stopped compiling six weeks ago; nothing said so by @muchiny in #130
- build(deps): serde-saphyr 1.x, jsonwebtoken 11, base64 0.23 by @muchiny in #129
- fix(ssh): three ways the SSH layer reported something it had not established by @muchiny in #127
- fix: six mechanisms that reported success without doing the thing they named by @muchiny in #131
- fix(domain): a completed task could resolve to None if eviction won the re-read by @muchiny in #134
- chore(release): 2.2.0 — name the seven breaking changes 1.x shipped quietly by @muchiny in #133
- fix(lint): clear the clippy 1.98 and rustdoc failures main inherited from dev by @muchiny in #140
- fix(fuzz): the targets asserted a product that no longer exists by @muchiny in #136
- chore(release): v3.0.0 by @muchiny in #148
Full Changelog: v1.20.0...v3.0.0
v1.20.0
What's Changed
- Plugin 1.19.1 — skill descriptions + version, README marketplace install & rebrand by @muchiny in #55
- chore(deps): bump serde-saphyr from 0.0.27 to 0.0.28 by @dependabot[bot] in #58
- release: v1.20.0 — russh 0.62, CI hardening, live-Pi bug fixes, doc sweep by @muchiny in #62
Full Changelog: v1.19.0...v1.20.0
v1.19.0 — Plugin marketplace + structured-output tabular fix
Plugin marketplace install:
claude plugin marketplace add muchiny/bridge-mcp
claude plugin install bridge-mcp@muchiny
cargo install --git https://github.com/muchiny/bridge-mcp --features full
Fixed structured output for ssh_process_list / ssh_service_list / ssh_net_connections (empty/garbled rows on real hosts), verified live on a Raspberry Pi. Deps: kube 4.0, k8s-openapi 0.28, tower-http 0.7. +79 tests. Rebrand to Bridge MCP.
Full notes: https://github.com/muchiny/bridge-mcp/blob/main/CHANGELOG.md
🤖 Generated with Claude Code
What's Changed
Full Changelog: v1.18.0...v1.19.0
v1.18.0
What's Changed
Full Changelog: v1.17.0...v1.18.0
v1.17.0
v1.16.1 — annotation honesty + parsing fixes
v1.16.1 — annotation honesty + parsing fixes
Annotations (security):
- Add MutatingIdempotent annotation kind (4th variant)
preserves idempotent_hint=true on convergent mutators - Fix 8 mis-tagged tools that lied about being read_only:
ssh_k8s_apply, ssh_iis_restart, ssh_nginx_reload,
ssh_service_restart, ssh_service_daemon_reload,
ssh_win_service_restart, ssh_alert_set, ssh_helm_rollback - New tests/annotation_audit.rs: CI gate enforcing
name x annotation coherence by suffix rule + allowlist - Couples cleanly with security.require_elicitation_on_destructive
so confirmation dialogs fire on real state changes
Parsing fixes:
- ssh_storage_df: prepend LC_ALL=C so headers stay English
- ssh_storage_lsblk: --list flag drops Unicode tree glyphs
(box-drawing chars shifted byte alignment, broke gutter detection) - ssh_process_list: replace 'grep | grep -v grep' with awk that
preserves NR==1 (header) so columnar parser keeps working
Misc:
- Restore [dev-dependencies] block (tempfile, criterion, filetime,
tracing-test, proptest, insta) — cargo test --all-targets --no-run
now compiles again - README: 4 hero workflows up-front (Linux service, K8s with 80%
fewer tokens, cross-platform, audited destructive) - Sync tool counts to 357/75/9; drop phantom protocols from docs
Verified: 6974 lib tests + 5 audit tests + 246 process + 104 storage
all green. cargo fmt --check + clippy -D warnings + cargo deny pass.
Tested live on raspberry pi 5 (k3s + plex + argocd stack).
Full Changelog: v1.16.0...v1.16.1
v1.16.0 — Phase D/E/F/G + Mutation Harden
[1.16.0] - 2026-05-03
Summary
MCP interactive integration: Phase D/E/F/G across 38 handlers + mutation
testing harden across 27 modules. Long-running tools now stream
per-step progress, destructive tools confirm via elicitation, diagnostic
tools optionally enrich output via LLM sampling, and multi-step tools
emit structured logs through notifications/message. Test suite grew
from 6,934 to 6,973 tests; mutation kill rate is now 99 %+ on the
testable surface across 27 hot files.
Added
- Phase D — Per-step progress notifications. Long-running multi-host
tools (ssh_exec_multi,ssh_metrics_multi,ssh_runbook_execute,
ssh_log_search_multi,ssh_log_tail_multi) now emit
notifications/progressfor each host or step, so clients with a
progress UI can render real-time completion instead of a single
black-box wait. - Phase E — Elicitation on destructive tools. 18 destructive
handlers gain asecurity.require_elicitation_on_destructive
opt-in: when enabled and the client advertises the elicitation
capability, the server sendselicitation/createand short-circuits
with a structured error if the user declines. Affected tools include
ssh_cron_remove,ssh_file_patch,ssh_file_write,
ssh_files_write,ssh_firewall_deny,ssh_group_delete,
ssh_helm_uninstall,ssh_hyperv_vm_stop,ssh_k8s_delete,
ssh_net_equip_config,ssh_process_kill,ssh_reg_delete,
ssh_service_stop,ssh_template_apply,ssh_win_feature_remove,
ssh_win_firewall_remove,ssh_win_process_kill,
ssh_win_service_stop. - Phase F — Optional LLM sampling on diagnostic tools. 13
diagnostic handlers add asummarize=trueflag (with
summary_max_tokenscap) that asks the client's LLM to analyse the
raw output viasampling/createMessageand appends the summary
alongside the raw data. Falls through to raw-only when the client
doesn't advertise sampling. Tools:ssh_diagnose,
ssh_security_audit,ssh_log_aggregate,ssh_compliance_check,
ssh_compliance_score,ssh_compliance_report,ssh_vuln_scan,
ssh_journal_query,ssh_compare_state,ssh_env_diff,
ssh_env_drift,ssh_incident_correlate,ssh_incident_triage. - Phase G — MCP-side structured logging. 8 long-running tools
(ssh_runbook_execute,ssh_ansible_playbook,ssh_helm_install,
ssh_helm_upgrade,ssh_helm_rollback,ssh_terraform_apply,
ssh_k8s_rollout,ssh_security_audit) emit per-step
notifications/messageso clients can stream the playbook /
rollout / audit log to their UI instead of waiting for the bulk
result. - Async pre-execute and enrich hooks on
StandardToolso handlers
can drive elicitation / sampling / logging without re-implementing
the 16-step pipeline.
Changed
- Tool count: 338 → 357 across 75 groups (was 74). The
total_toolsandtotal_groupsfields on themcp_list_tool_groups
response, the DXT manifest, and the.well-known/mcp/server-card.json
all reflect the new totals. Metrics::render_token_summaryarithmetic refactor. The two
innerif before > 0 { saved * 100 / before } else { 0 }and
if total_kind > 0 { *count * 100 / total_kind } else { 0 }checks
are now removed — the outer guards already prove both denominators
positive, so the dead branches are inlined as direct divisions.
Behaviour identical, surface for arithmetic mutations reduced.
Tests
- Mutation testing: 27 modules, ~99 % kill rate on viable mutants.
Files now at 100 % kill rate (excluding provably-equivalent or
feature-gated mutants):mcp/{elicitation, sampling, progress, logger, meta_tools, pending_requests, client_requester, instructions, protocol}.rs,domain/{output_kind, output_cache, diff, output_truncator, runbook, history, task_store, data_reduction}.rs,metrics.rs,security/{rbac, validator, audit, rate_limiter}.rs,ports/{tools, executor, protocol}.rs.
Two mutants onmcp/standard_tool.rs(audit-log content + warn
tracing) remain — killing them needs a tracing-subscriber and
audit-log file harness, deferred. - Test count: 6 934 → 6 973 lib tests (+39 net new). New tests
includetokio::time::timeout-bounded shortcuts on
ToolContext::elicit_confirm/sample, async-cache twins of the
truncator arithmetic invariants, two-kind percentage assertions on
render_token_summary, single-fieldis_emptycases on
ToolAnnotations, exact-byte 160/161-char truncation cases, and a
threadedfloor_char_boundary/ceil_char_boundarytermination
check that catchesi /= 1/i *= 1infinite-loop mutants. .cargo/mutants.tomlexclude_renow lists ten classes of
provably equivalent or untestable-without-Clock-injection
mutations:ToolHandler::output_kinddefaults, empty-vec
scoped_paths, jq-feature-gated bodies, OutputCache TTL
boundaries,floor/ceilshort-circuit equivalents, infinite-loop
arithmetic on the boundary scanners, ConfigWatcher fs-timing /
filter mutations, AuditLogger TTL boundary, and the> -> <
u64-zero comparison family inrender_token_summary.
Full Changelog: v1.15.1...v1.16.0