Skip to content

rustjunosmcp v0.26.0

Choose a tag to compare

@fastrevmd-lab fastrevmd-lab released this 07 Oct 15:02
· 74 commits to main since this release
d434745

Added

  • --allow-direct-commit, off by default. load_and_commit_config, a
    committing render_and_apply_j2_template, rollback_config, and
    upgrade_junos stage, validate, and commit a device change in one call with
    no change set and no second-principal review. Without the flag, all four
    are refused before the device is touched, identically over stdio and HTTP.
    With it, the server logs loudly at startup and every call is audited
    (direct_commit_allowed=true; a refusal is audited too). See
    --allow-direct-commit in the README.

  • approve_junos_change_set now requires a human approver. The mecmcp
    dependency's ChangesetCoordinator::approve_change_set gained an
    approver_actor_type argument and refuses anything but
    mecmcp_audit::ActorType::Human — an agent or an unattributed caller could
    already never propose and approve the same change set, but nothing
    previously stopped it from standing in as the second principal.

  • get_junos_config gains a format parameter (text default, set,
    xml, or json), rendered device-side via the matching Junos
    | display <format> CLI modifier — the same mechanism
    execute_junos_command already passes through untouched. Output flows
    through the same policy check, XML-wrapper stripping, and output-cap
    pipeline as the existing text format; there is no new unredacted path.
    An unrecognized format is rejected before any device connection.

  • The load tools gain a mode parameter (merge default, replace, or
    override) controlling the wire action for <load-configuration>:
    load_and_commit_config, render_and_apply_j2_template, and the
    change-set payload spec (create_junos_change_set's actions[].payload).
    override replaces the entire candidate configuration — the highest
    blast-radius operation this server exposes — and is refused outright on
    load_and_commit_config and render_and_apply_j2_template, which commit
    directly with no second-principal review. It is permitted only through
    create_junos_change_set → approve_junos_change_set →
    apply_junos_change_set, which requires approval by a principal distinct
    from the creator before anything commits (MEC-12). config_format=set
    (configuration-set payloads) has no wire-level override action in Junos;
    that combination is rejected before any RPC is sent regardless of path.

  • Raised MSRV to 1.89 (family-wide decision; enables mecmcp to drop aes pin)

  • Two new read-only SRX tools: srx_flow_sessions, srx_policy_match.
    srx_flow_sessions queries active flow sessions with hard-capped result
    limits and node-aware summaries; srx_policy_match performs deterministic
    5-tuple policy matching against both zone-pair and global policies,
    returning the device's own verdict. Tool count: 37 → 39.

  • Four new read-only SRX tools: srx_list_policies, srx_resolve_address,
    srx_resolve_application, srx_list_nat_rules.
    Security policies by
    zone pair (incl. global policies and optional hit counts), address-book and
    application/application-set resolution (including junos-* predefined
    defaults, with recursive nested-set resolution and explicit cycle
    rejection), and source/destination/static NAT rules. Address-book and
    application resolution are configuration-sourced via a hand-built
    subtree-filtered get-configuration RPC. Names on policies and NAT rules
    are returned unresolved by design — use srx_resolve_address /
    srx_resolve_application to expand them. Tool count: 39 → 43.

  • Release image and tarball are now signed keylessly with cosign via
    GitHub Actions OIDC (no key pair, ever). The Release image workflow signs
    the pushed image by digest; a new Sign release tarball workflow signs the
    LXC tarball once it is attached to a published GitHub release. See the
    README's "Verifying the image signature" and "Downloading a prebuilt release
    tarball instead" sections for cosign verify / verify-blob recipes.

Fixed

  • cSRX devices now work. rustez 0.18 tolerates cSRX rejecting
    <get-route-engine-information/> during fact gathering
    (mechubsec/rustez#54). Previously every tool call on a cSRX device failed
    with [OperationFailed] syntax error.

Full changes: v0.25.0...v0.26.0

Backfilled GitHub release for an existing tag (2026-10-07).