Cisco CML lab lifecycle management — create, start, stop, wipe, delete, clone, import/export labs. Use when building a network lab, starting or stopping a CML lab, cloning a topology, or importing lab YAML files.
cml-mcp (pip-installed, stdio transport)CML_URL, CML_USERNAME, CML_PASSWORD environment variablesCML_VERIFY_SSL (default: true)| Tool | Parameters | What It Does |
|---|---|---|
create_lab | title | Create a new empty lab with a title |
get_lab | lab_id or lab_title | Get lab details (state, node count, link count) |
get_labs | none | List all labs on the CML server |
start_lab | lab_id or lab_title | Start all nodes in a lab (boot the topology) |
stop_lab | lab_id or lab_title | Stop all nodes in a lab (graceful shutdown) |
wipe_lab | lab_id or lab_title | Wipe lab node configurations (reset to factory) |
delete_lab | lab_id or lab_title | Delete a lab permanently |
| Tool | Parameters | What It Does |
|---|---|---|
import_lab | topology (YAML string) | Import a lab from CML topology YAML |
export_lab | lab_id or lab_title | Export a lab as CML topology YAML |
clone_lab | lab_id or lab_title | Clone an existing lab (deep copy) |
download_lab_configs | lab_id or lab_title | Download all node configs from a running lab |
When a user says something like "build me a 3-router OSPF lab" in Slack:
create_lab with a descriptive titlestart_lab to boot everything"Build me a 3-router OSPF lab" → create_lab "OSPF Lab - 3 Routers" → create_node x3 (IOSv: R1, R2, R3) → create_interface + create_link (R1-R2, R2-R3, R1-R3 full mesh) → set_node_config for each (OSPF area 0, loopbacks, point-to-point links) → start_lab → execute_command: "show ip ospf neighbor" on each router → Report: "Lab ready! R1, R2, R3 all have FULL OSPF adjacencies."
"Add a 4th router to the OSPF lab" → stop_lab (topology changes require stopped state) → create_node R4 (IOSv) → create_interface + create_link (R4 to R2 and R3) → set_node_config for R4 (OSPF area 0) → Update R2 and R3 configs if needed → start_lab → Verify all 4 routers have adjacencies
"Create a lab from this YAML topology" → import_lab with the provided YAML → start_lab → Report node count, link count, state
"Clone the OSPF lab and add BGP peering" → clone_lab "OSPF Lab - 3 Routers" → "OSPF+BGP Lab" → Modify configs to add BGP router stanzas → start_lab → Verify both OSPF and BGP adjacencies
When a user is done with a lab:
stop_lab — graceful shutdown of all nodesexport_lab)wipe_lab to reset node configs (if reusing later)delete_lab to free CML resourcesWhen a user wants to experiment with a variant of an existing lab:
clone_lab creates a deep copystart_lab on the new copyWhen a user wants to share a lab topology:
export_lab returns CML YAML topologyLabs go through these states:
| State | Meaning |
|---|---|
DEFINED_ON_CORE | Lab exists but no nodes are running |
STARTED | All (or some) nodes are booting/running |
STOPPED | All nodes have been shut down |
BOOTED | All nodes have finished booting |
"Create a CCIE routing lab with:
- 4 x IOSv routers (R1-R4)
- 2 x IOSv L2 switches (SW1-SW2)
- Full mesh between R1-R4
- SW1 connecting R1 and R2, SW2 connecting R3 and R4"
"Build a DC lab:
- 2 x NX-OS spines
- 4 x NX-OS leaves
- 1 x external router (IOSv)
- Spine-leaf full mesh, external router to both spines"
"Create an SP lab:
- 4 x IOS-XR routers (PE1, PE2, P1, P2)
- 2 x IOSv CE routers
- PE-P full mesh, CE1 to PE1, CE2 to PE2"
get_labs first to see what already exists — avoid duplicate lab namesCML_URL — CML server URL (e.g., https://cml.example.com)CML_USERNAME — CML usernameCML_PASSWORD — CML passwordCML_VERIFY_SSL — Verify SSL certificate (true/false)