Central v0.7 depth workflows (v07-central-depth)
Scope: Central-only. Adds schema-backed template/bulk/firmware-campaign/ config-health/troubleshooting-orchestration workflows on top of the existing curated central-config / central-monitoring / central-ops tools, plus a credential-gated live evaluator and a disposable-write lifecycle harness. This page documents those additions only — it does not restate or revise any global tool-count claims (see README.md / docs/architecture/RAG-ARCHITECTURE.md for those, owned by the release process).
Why these five workflows
Every endpoint below was verified against the committed OpenAPI source (ingestion/sources/openapi_specs/*.json) and/or the generated Central manifest (src/hpe_networking_mcp/mcp_servers/openapi_gen/manifests/central.json, 1,677 operations) before any tool was written — no Classic-Central-shaped path was guessed.
| Workflow | New Central schema source | Gap this closes |
|---|---|---|
| VSF stacking-template lifecycle | ingestion/sources/openapi_specs/vsf-template.json (GET/POST/PATCH/DELETE /network-config/v1alpha1/vsf-templates[/{name}]) | The only schema-backed generic “template” resource in New Central; the existing list_config_templates only probes speculative Classic-shaped endpoints |
| Bulk site / site-collection delete | scope-management-1fkx1wmq0s.json (DELETE /network-config/v1/sites/bulk, DELETE /network-config/v1/site-collections/bulk) | Device-group bulk delete already existed; site/site-collection bulk delete did not |
| Firmware-compliance campaign | Orchestrates the existing manifest-confirmed /network-config/v1alpha1/firmware-compliance POST/PATCH flow across multiple targets | No bulk-firmware endpoint exists in the schema — this composes the single-target endpoint safely across scopes/personas instead of inventing one |
| Config-health remediation planning + execution | configuration-health-b374ik1cmq.json (config-health/devices, config-health/active-issue, config-health/devices-resync, maxItems: 50) | Planning was previously manual; resync had no schema-enforced chunk bound |
| Troubleshooting orchestration | Composes existing confirmed /network-troubleshooting/* LLDP/ARP/ping/show tools | No bounded, multi-step diagnostic bundle existed |
Endpoints considered and explicitly not implemented because no authoritative schema exists in this manifest:
- Classic-style config templates with
%variable%substitution or a separate template-group assignment step (list_config_templatesnow documents this precisely instead of guessing further). - Bulk delete for
/network-config/v1alpha1/device-collections/bulk— deprecated in the spec in favor ofdevice-groups/bulk(already covered by the existingdelete_device_groups).
New tools
All writes below share one contract: dry_run=True by default (no network call), an explicit confirm=True is required to execute, execution is gated behind the existing Central write gate (HPE_MCP_CENTRAL_WRITES, denied by default — set it to 1 to opt in; enforce_platform_write in src/hpe_networking_mcp/mcp_servers/shared.py), the executed response is validated (validate_write_result, raises WriteResultError on a non-2xx/error envelope), and a read-back call confirms what Central actually stored.
src/hpe_networking_mcp/mcp_servers/config.py (75 → 80 tools)
| Tool | Annotation | Notes |
|---|---|---|
build_vsf_template | IDEMPOTENT_WRITE | Create/update a LOCAL-scoped VSF template (number_of_members 1-10); read-back via GET after write |
delete_vsf_template | DESTRUCTIVE | Delete + read-back; a 404 on read-back is surfaced as read_back={"deleted_confirmed": True} |
delete_sites_bulk | DESTRUCTIVE | Up to 100 site IDs per call; irreversible (no read-back — verify with list_sites first) |
delete_site_collections_bulk | DESTRUCTIVE | Same shape/bound as delete_sites_bulk |
run_firmware_compliance_campaign | IDEMPOTENT_WRITE | Up to 25 {scope_id, device_function} targets; every target is attempted independently — one target’s failure never aborts the rest (targets_failed, per-target error); each successful target is read back via get_firmware_compliance |
get_network_profile / set_network_profile / delete_network_profile also work generically against profile_type="vsf-template" (added to _NETWORK_PROFILE_TYPES), consistent with the existing BGP/OSPF/VRF/VSX/ telemetry profile family.
src/hpe_networking_mcp/mcp_servers/monitoring.py (85 → 87 tools)
| Tool | Annotation | Notes |
|---|---|---|
plan_config_health_remediation | READ_ONLY | Bounded scan (max_devices_scanned ≤ 200) of list_devices_config_health + get_device_config_issues; makes no config changes |
plan_device_troubleshooting | READ_ONLY | Bounded per-device telemetry plan over inventory, health, config issues, events, and active alerts; recommends existing tools only and never executes writes |
plan_site_troubleshooting | READ_ONLY | Bounded site ranking from inventory and active alerts; recommends plan_device_troubleshooting for top serials and never executes writes |
execute_config_health_remediation | IDEMPOTENT_WRITE | Chunks ≤200 serials into groups of ≤50 (the resyncCfgDevices schema max) and resyncs each chunk independently — one chunk’s failure never aborts the rest; reads back get_device_config_issues per serial in each successful chunk |
resync_device_config now enforces the same 50-serial schema bound directly (ValueError above the limit) instead of silently forwarding an oversized request.
src/hpe_networking_mcp/mcp_servers/ops.py (40 → 41 tools)
| Tool | Annotation | Notes |
|---|---|---|
run_troubleshooting_bundle | DIAGNOSTIC | CX or AOS-S only. Always runs an ARP-table step (CX also runs LLDP); optional ping (destination) and show (commands, ≤5, each must start with show ) steps. Composes existing tools only — no new endpoint. Each step’s failure is captured independently; the bundle never aborts early |
Live evaluation: scripts/evaluate_central_070_readonly.py
Credential-gated per src/hpe_networking_mcp/pipeline/live_test_config.py; every artifact is written through src/hpe_networking_mcp/pipeline/artifact_contracts.write_artifact (live_lifecycle_evidence kind), which redacts secrets and hashes any identifier before the file touches disk.
- Default (offline, fixture-backed): exercises a bounded 3-step sequence against an in-memory fake client — no network I/O.
--live-read: swaps in the realhpe_networking_mcp.mcp_servers.shared.get_client()and runs the same bounded steps as GET-only calls. RequiresHPE_MCP_LIVE_TEST_CENTRAL_READ=1; a GET-only guard is installed on the client so any non-GET verb raises before transmission. Blocked (exit code 1, no artifact written) when the env gate is unset.--live-write/run_disposable_write_lifecycle: a disposable create → read-back → delete VSF-template round trip (build_vsf_template/delete_vsf_template) against an operator-supplied lab scope. Gated byHPE_MCP_LIVE_TEST_CENTRAL_WRITE=1and the read gate (live_test_config.live_test_write_enabled).main()never calls this function in this repo revision — it only reports gate status when--live-writeis passed — by design, so this task never executes a live write.
Live status for this evaluation run
HPE_MCP_LIVE_TEST_CENTRAL_READ was not set in this environment, so per the task’s read-only-gating rule, no live call was attempted here — only the default offline/fixture-backed evaluation was run (.venv/bin/python scripts/evaluate_central_070_readonly.py). Central credentials happen to be present in config/credentials.yaml, but credential presence never implies authorization (see src/hpe_networking_mcp/pipeline/live_test_config.py) — set HPE_MCP_LIVE_TEST_CENTRAL_READ=1 explicitly to run the bounded GET-only path.
Tests
| File | Covers |
|---|---|
tests/unit/test_config_v07_workflows.py | VSF template dry_run/confirm/gate/read-back/validated-result; bulk-delete bounds + payload shape; firmware campaign bounds + partial failure |
tests/unit/test_monitoring_config_health_remediation.py | Remediation planning (healthy-device skip, scan bound, per-device error capture); execution chunk bound, dry_run/confirm/gate, partial-chunk-failure |
tests/unit/test_ops_troubleshooting_bundle.py | Device-type/command validation, CX vs AOS-S step composition, per-step partial-failure isolation |
tests/unit/test_evaluate_central_070_readonly.py | Offline artifact validity + redaction (no raw fixture identifiers), live-read gating, disposable-write harness never auto-executed and hashes its identifier |
Run: .venv/bin/python -m pytest tests/unit/test_config_v07_workflows.py tests/unit/test_monitoring_config_health_remediation.py tests/unit/test_ops_troubleshooting_bundle.py tests/unit/test_evaluate_central_070_readonly.py -q