Install any skill in seconds. Free to start, no credit card required.
Get Started Free →CML node operations — start, stop, console access, CLI execution, config management, node details. Use when starting or stopping a CML node, running show commands on a lab router, setting startup configs, or reading console logs.
.claude/skills/automateyournetwork-cml-node-operations/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 105% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 89% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 112% | 0% |
| case-13 | ✗→✓ | ▲ Improved | -30% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 46% | 0% |
cml-mcp (pip-installed, stdio transport)CML_URL, CML_USERNAME, CML_PASSWORD environment variablescml-mcp[pyats] for CLI execution via pyATS| Tool | Parameters | What It Does | |------|-----------|-------------| | start_node | lab_id/lab_title, node_id/node_label | Start (boot) a single node | | stop_node | lab_id/lab_title, node_id/node_label | Stop (shutdown) a single node | | get_node | lab_id/lab_title, node_id/node_label | Get node details: state, CPU, RAM, interfaces, config | | get_nodes | lab_id/lab_title | List all nodes with their current states | | wipe_node | lab_id/lab_title, node_id/node_label | Wipe a node's configuration (reset to default) |
| Tool | Parameters | What It Does | |------|-----------|-------------| | set_node_config | lab_id/lab_title, node_id/node_label, config | Set a node's startup configuration | | get_node_config | lab_id/lab_title, node_id/node_label | Get a node's current configuration | | download_lab_configs | lab_id/lab_title | Download all node configs from a running lab |
| Tool | Parameters | What It Does | |------|-----------|-------------| | get_node_console | lab_id/lab_title, node_id/node_label | Get console connection details (URL, protocol) | | get_node_console_log | lab_id/lab_title, node_id/node_label, lines? | Retrieve console log output from a running node | | execute_command | lab_id/lab_title, node_id/node_label, command | Execute a CLI command on a running node (requires pyATS) |
| State | Meaning | |-------|---------| | DEFINED_ON_CORE | Node exists but is not running | | BOOTING | Node is in the process of booting | | BOOTED | Node has finished booting and is reachable | | STOPPED | Node has been shut down |
When a user wants to configure a specific node:
get_node to see current stateset_node_config with the full configurationstart_node to boot itexecute_command to run show version or show ip int briefWhen a user wants to back up or review configs:
get_lab to check statedownload_lab_configs gets everything at onceget_node_config for individual nodesWhen a user needs to see what happened during boot or troubleshoot a node:
get_node — node must be BOOTED or BOOTINGget_node_console_log to retrieve recent console output%PARSER-4-BADCFG — invalid configuration commands%LINK-3-UPDOWN — interface state changes%OSPF-5-ADJCHG — OSPF adjacency changes%BGP-5-ADJCHANGE — BGP neighbor state changes%SYS-5-RESTART — system restart messagesWhen a user wants to run show commands or make live changes:
get_node to check stateexecute_command with the CLI commandexecute_command per commandCommon commands to execute:
show ip interface brief
show ip ospf neighbor
show ip bgp summary
show running-config
show cdp neighbor
show version
show ip route
show interfaces statusWhen a user wants to start fresh with a node:
stop_nodewipe_node resets to factory defaultset_node_config with the new startup configurationstart_nodehostname {HOSTNAME}
!
interface Loopback0
ip address {LOOPBACK_IP} 255.255.255.255
!
interface GigabitEthernet0/0
ip address {MGMT_IP} {MASK}
no shutdown
!
interface GigabitEthernet0/1
ip address {P2P_IP} {MASK}
no shutdown
!
router ospf 1
router-id {LOOPBACK_IP}
network {LOOPBACK_IP} 0.0.0.0 area 0
network {P2P_NETWORK} {WILDCARD} area 0
!
line con 0
logging synchronous
line vty 0 4
login local
transport input ssh
!
endhostname {HOSTNAME}
!
interface Loopback0
ip address {LOOPBACK_IP} 255.255.255.255
!
interface GigabitEthernet0/1
ip address {PEER_IP} {MASK}
no shutdown
!
router bgp {LOCAL_AS}
bgp router-id {LOOPBACK_IP}
bgp log-neighbor-changes
neighbor {NEIGHBOR_IP} remote-as {REMOTE_AS}
!
address-family ipv4
network {LOOPBACK_IP} mask 255.255.255.255
neighbor {NEIGHBOR_IP} activate
exit-address-family
!
endhostname {HOSTNAME}
!
feature ospf
feature bgp
feature nv overlay
feature vn-segment-vlan-based
!
interface loopback0
ip address {LOOPBACK_IP}/32
!
interface Ethernet1/1
description To-Spine1
no switchport
ip address {P2P_IP}/30
no shutdown
!
router ospf 1
router-id {LOOPBACK_IP}
!
router bgp {AS}
router-id {LOOPBACK_IP}
neighbor {SPINE_IP} remote-as {AS}
update-source loopback0
address-family l2vpn evpn
send-community extended
!
endhostname {HOSTNAME}
!
interface Loopback0
ipv4 address {LOOPBACK_IP} 255.255.255.255
!
interface GigabitEthernet0/0/0/0
ipv4 address {P2P_IP} {MASK}
no shutdown
!
router isis CORE
is-type level-2-only
net 49.0001.{SYSTEM_ID}.00
address-family ipv4 unicast
metric-style wide
!
interface Loopback0
passive
address-family ipv4 unicast
!
!
interface GigabitEthernet0/0/0/0
address-family ipv4 unicast
!
!
!
endexecute_command requires pyATS — the cml-mcp[pyats] extra must be installedset_node_config sets the startup config; apply it before bootCML_URL — CML server URLCML_USERNAME — CML usernameCML_PASSWORD — CML passwordCML_VERIFY_SSL — Verify SSL certificate (true/false)Other measured skills in the registry, with their headline benchmark lift.