Example prompts
These scenarios are written for the default low-token router profile:
HPE_MCP_ROUTER_MODE=minimal
HPE_MCP_TOOLSETS=central,glp,rag
In this profile, ask your MCP client to use find_tool first, then dispatch
with invoke_read_tool (read), invoke_tool (diagnostic/write/destructive).
That keeps the tool list small while still reaching the full backend catalog.
See tool-router.md for how discovery and dispatch work and
what each safety classification means.
read
diagnostic
write
destructive
label each scenario below by its normalized capability.
1. First read
read
Prompt: "Use hpe-networking-mcp to find the tool for listing Aruba Central sites, then call it with a limit of 10."
find_tool("list Aruba Central sites")
invoke_read_tool("list_sites", {"limit": 10, "offset": 0})
Expected shape: a JSON array of site records (id, name,
location fields), or a {"items": [...], "_pagination": {...}}
wrapper only if the result needed clipping.
Variation: swap in list_devices with
device_type/site_id filters to inventory APs or
switches instead of sites. For wireless troubleshooting, use
list_bssids with site_id,
serial_number, or MAC filters to map each BSSID to its AP,
radio, WLAN, band, and site. Use list_sites_client_health with
site_id, site_name, or health sorting to compare
wired and wireless client experience across sites.
2. Exact API lookup
read
Prompt: "Look up the exact OpenAPI endpoint or schema for Central client alerts. Do not guess from prose."
find_tool("exact OpenAPI lookup")
invoke_read_tool("lookup_api", {"query": "Central client alerts", "top_k": 10})
Expected shape: a JSON array of matched OpenAPI
operations/schema fields, authoritative and lossless from the parsed specs;
an empty array means no confident match -- fall back to ask_docs
or search_docs.
Variation: ask for exact enum values, e.g.
lookup_api("wlan-ssids opmode enum values"), or bypass fuzzy
ranking with an exact route or operation ID:
lookup_api("GET /network-monitoring/v1/sites-client-health") and
lookup_api("listSitesClientHealthV1").
3. RAG answer
read
Prompt: "Explain how WPA3 SAE transition mode is represented in Central config. Include citations."
find_tool("ask Aruba docs with citations")
invoke_read_tool("ask_docs", {"question": "WPA3 SAE transition mode", "top_k": 5})
Expected shape: a compact extractive answer plus a
bounded list of citations (file_path and matched chunk),
instead of several long raw chunks.
Variation: call search_docs directly for
raw retrieval when you want to see every matched chunk yourself.
4. Bounded batch
read
Prompt: "Show me the active critical alerts and the first 25 sites in one round trip."
find_tool("active critical alerts")
invoke_read_tool_batch({
"calls": [
{"id": "alerts", "name": "list_active_alerts", "arguments": {"severity": "CRITICAL"}},
{"id": "sites", "name": "list_sites", "arguments": {"limit": 25}}
]
})
Expected shape:
{"ok": bool, "results": [{"id": ..., "tool": ..., "status": "ok"|"blocked"|..., "result": {...}}], "counts": {"total": 2, "succeeded": ..., "failed": ...}, "failed_ids": [...], "truncated": bool}.
ok is only true when every entry succeeded; one
failed entry never aborts the rest.
Variation: outside a batch, resume one oversized single
read by passing the previous response's next_cursor back as
cursor: invoke_read_tool("list_devices", {"site_id": "SITE_ID"}, cursor="eyJ2IjoxLCJl...").
invoke_read_tool_batch is available outside minimal
mode.
5. Diagnostic call
diagnostic
Prompt: "Ping 10.0.0.1 from CX switch CN12ABC456 and show me the result."
find_tool("ping from a CX switch")
invoke_tool("cx_ping", {"serial_number": "CN12ABC456", "destination": "10.0.0.1"})
Expected shape: an async result dict (the call polls for
roughly 60s) with the ping output and an errors list. Diagnostic
tools dispatch through invoke_tool, not
invoke_read_tool, because they are intentionally not annotated
read-only even though they change no device state.
Variation: cx_traceroute for a path trace, or
cx_show with a commands list for raw CLI output.
6. Dry-run write
write
Prompt: "Build a MAC-auth guest SSID on scope SCOPE_ID. Show me the dry-run payload only -- do not apply it yet."
find_tool("build an SSID")
invoke_tool("build_underlay_ssid", {"ssid_name": "guest-wifi", "scope_id": "SCOPE_ID", "opmode": "OPEN", "dry_run": true})
Expected shape: the preview payload describing what
would be created, plus an execution_contract whose
dry_run.state reports preview. Nothing is written
while dry_run is true.
Variation: after the user reviews the preview and asks
for the change, repeat the same call with "dry_run": false.
7. Confirmation-gated destructive change
destructive
Prompt: "I reviewed the dry-run output for migration run RUN_ID -- apply it for real now."
find_tool("AOS8 apply migration run")
invoke_tool("aos8_apply_migration_run", {"run_id": "RUN_ID", "dry_run": false, "confirm": true})
Expected shape: per-candidate apply/resume results. This
tool takes an explicit confirm: bool argument alongside
dry_run and refuses a real write without both a prior dry run
and confirm=true.
Variation: some destructive ops tools
(reboot_device, port_bounce, poe_bounce,
disconnect_client) have no confirm argument at all
-- they confirm interactively through MCP elicitation instead. Check the
tool's schema before assuming either shape.
8. Blocked by a write gate
write
Prompt: "Invite jane@example.com to the GreenLake workspace."
find_tool("invite a GLP user")
invoke_tool("invite_glp_user", {"email": "jane@example.com"})
Expected shape (default install): GLP writes default to
disabled, so this returns a blocked response before any backend call --
{"error": "... glp writes are not enabled ...", "tool": "invite_glp_user", "status": "blocked", "platform": "glp", "execution_contract": {...}}.
See the router safety-gates section
for the full shape.
Variation: set HPE_MCP_GLP_V2BETA1_WRITES=1
and repeat the identical call to actually send the invite.
9. Optional-product example
read
Prompt: "Check whether the Mist optional backend is configured, then list the first 10 Apstra blueprints."
HPE_MCP_ACCESS_PROFILE=custom
HPE_MCP_PRODUCTS=mist,apstra
HPE_MCP_PRODUCT_ACCESS=read-only
find_tool("Mist backend status")
invoke_read_tool("mist_status", {})
find_tool("Apstra list blueprints")
invoke_read_tool("apstra_list_blueprints", {"limit": 10})
Expected shape: mist_status returns
{"configured": bool, "host": ..., "has_token": bool};
apstra_list_blueprints returns a limit/offset-paginated list of
blueprint records. Optional products stay disabled unless
HPE_MCP_PRODUCTS/HPE_MCP_TOOLSETS enables
them, and their write tools stay hidden while
HPE_MCP_PRODUCT_ACCESS=read-only under the custom
compatibility profile.
Variation: swap in UXI --
invoke_read_tool("uxi_list_sensors", {"page_size": 10}) then
invoke_read_tool("uxi_get_sensor_status", {"sensor_id": "SENSOR_ID"}).
Write or destructive work. Confirm scope, device type, and
(for SSIDs) security mode and VLANs before calling a write tool – never
assume. Prefer dry_run=true first when the tool supports it,
and use invoke_tool only after the user has given explicit
intent for a write or destructive action.
Next
- tool-router.md – discovery/dispatch flow, pagination and bounded responses, and every safety gate in detail.
- optional-products.md – the full ClearPass, Mist, Apstra, AOS8, EdgeConnect, UXI, and Axis workflow matrix.
- mcp-client-recipes.md – stdio and streamable HTTP client setup recipes.