workspace/skills/clab-lab-management/SKILL.md
ContainerLab network lab lifecycle management — authenticate, list, deploy, inspect, execute commands on, and destroy containerized network labs via the ContainerLab API. Use when deploying containerized network labs, spinning up SR Linux or cEOS topologies, running commands on lab nodes, or tearing down test environments.
npx skillsauth add automateyournetwork/netclaw clab-lab-managementInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
python3 -u $CLAB_MCP_SCRIPT (stdio transport)CLAB_API_SERVER_URL, CLAB_API_USERNAME, CLAB_API_PASSWORD environment variablesauthenticate call neededpython3 $MCP_CALL "python3 -u $CLAB_MCP_SCRIPT" <tool_name> '<args_json>'
| Tool | Parameters | What It Does |
|------|-----------|-------------|
| authenticate | apiServerURL, username, password | Manual auth override (optional — auto-auth handles normal usage) |
| listLabs | none | List all labs on the ContainerLab server |
| deployLab | topologyContent (JSON object), reconfigure (bool) | Deploy a new lab topology |
| inspectLab | labName, details (bool) | Get lab details, node status, management IPs |
| execCommand | labName, command, nodeName (optional) | Execute a command on one or all nodes |
| destroyLab | labName, cleanup (bool), graceful (bool) | Destroy a lab and clean up resources |
When a user wants to create a containerized network lab:
listLabs — check what's already running, avoid name conflictsdeployLab with a topology JSON objectinspectLab with details: true — verify success, get management IPsexecCommand — run show commands to verify connectivity# List existing labs
python3 $MCP_CALL "python3 -u $CLAB_MCP_SCRIPT" listLabs '{}'
# Deploy
python3 $MCP_CALL "python3 -u $CLAB_MCP_SCRIPT" deployLab '{"topologyContent":{"name":"srlinux-demo","topology":{"nodes":{"srl1":{"kind":"nokia_srlinux","image":"ghcr.io/nokia/srlinux:latest","type":"ixrd2l"},"srl2":{"kind":"nokia_srlinux","image":"ghcr.io/nokia/srlinux:latest","type":"ixrd2l"}},"links":[{"endpoints":["srl1:e1-1","srl2:e1-1"]},{"endpoints":["srl1:e1-2","srl2:e1-2"]}]}}}'
# Inspect
python3 $MCP_CALL "python3 -u $CLAB_MCP_SCRIPT" inspectLab '{"labName":"srlinux-demo","details":true}'
# Execute command
python3 $MCP_CALL "python3 -u $CLAB_MCP_SCRIPT" execCommand '{"labName":"srlinux-demo","nodeName":"srl1","command":"show version"}'
When a user is done with a lab:
destroyLab with graceful: true and cleanup: truepython3 $MCP_CALL "python3 -u $CLAB_MCP_SCRIPT" destroyLab '{"labName":"srlinux-demo","cleanup":true,"graceful":true}'
ContainerLab topologies define nodes and links in a structured JSON format.
ContainerLab supports a wide range of network operating systems:
| Kind | Platform | Example Image |
|------|----------|---------------|
| cisco_iosxr | Cisco IOS XR | ios-xr/xrd-control-plane:latest |
| cisco_iosxe | Cisco IOS XE (Cat8000v) | c8000v:latest |
| cisco_nxos | Cisco NX-OS (Nexus 9000v) | n9kv:latest |
| cisco_ftdv | Cisco Firepower FTDv | ftdv:latest |
| nokia_srlinux | Nokia SR Linux | ghcr.io/nokia/srlinux:latest |
| ceos | Arista cEOS | ceos:latest |
| juniper_crpd | Juniper cRPD | crpd:latest |
| frr | FRRouting | frrouting/frr:latest |
| linux | Generic Linux | alpine:latest |
For the full list, see the ContainerLab documentation.
{
"name": "lab-name",
"topology": {
"nodes": {
"node1": {
"kind": "nokia_srlinux",
"image": "ghcr.io/nokia/srlinux:latest"
},
"node2": {
"kind": "nokia_srlinux",
"image": "ghcr.io/nokia/srlinux:latest"
}
},
"links": [
{"endpoints": ["node1:e1-1", "node2:e1-1"]}
]
}
}
Multi-vendor lab:
"Deploy a 4-node lab:
- 2 x SR Linux switches (leaf1, leaf2)
- 1 x FRR router (spine1)
- 1 x Linux host (client1)
- leaf1 and leaf2 connected to spine1
- client1 connected to leaf1"
Spine-leaf fabric:
"Build a 2-spine, 4-leaf SR Linux fabric:
- Full mesh between spines and leaves
- iBGP between all nodes"
graceful: true when destroying labs for clean node shutdownCLAB_API_SERVER_URL, CLAB_API_USERNAME, CLAB_API_PASSWORD in ~/.openclaw/.env. If the API server runs in Docker, restart the container after creating the Linux userkind and image fields. Use listLabs to check for name conflictsinspectLab. Check node name is correctlistLabs. If graceful shutdown times out, retry without graceful: trueCLAB_API_SERVER_URL — ContainerLab API server URL (e.g., http://localhost:8080)CLAB_API_USERNAME — API username (default: netclaw)CLAB_API_PASSWORD — API passwordCLAB_MCP_SCRIPT — Path to the Python MCP server script (set by install.sh)MCP_CALL — Path to mcp-call.py wrapper (set by install.sh)tools
Zoom meeting intelligence — correlates a live or referenced Zoom meeting discussion against NetClaw's historical meeting record (via the official Zoom Meetings MCP) and today's actual network state. Use when someone in a Zoom meeting references a past discussion or incident ('didn't we have this issue before?'), or asks to search prior meetings for a topic. Does not itself recognize live in-meeting questions — that happens automatically inside zoom-rtms-mcp's own extractor (spec 118) before this skill is ever invoked.
tools
Manage Lantronix out-of-band (OOB) infrastructure via Percepxion central management platform: device inventory, serial port inspection via SLC CLI, firmware compliance, config management, security auditing, and closed-loop incident remediation. Use during outages, maintenance windows, compliance cycles, and AI-assisted automation workflows.
tools
Federate your NetClaw with other NetClaw operators over the BGP mesh — exchange capability inventories and ask your claw what a peer can do. (US1; remote invocation and chat land in later phases.)
tools
Track token consumption, enforce session budgets, and display cost for every NetClaw interaction.