MCP server for Cisco Modeling Labs (CML) providing tools to manage labs, nodes, interfaces, links, and network simulation artifacts
The server exposes 39 tools across 10 modules with consistent naming conventions (verb-first: list_, create_, delete_, get_, start_, stop_, etc.) and basic parameter schemas. However, tool descriptions are extremely sparse (1-3 words), parameter descriptions are entirely absent, and output schemas are not documented. The codebase shows proper modular organization and type hints in Python, but the MCP tool definitions lack the detail required for LLMs to reason about tool selection, parameter values, or result handling. The server relies on user/agent knowledge of CML internals rather than self-documenting interfaces. Schema completeness varies: input parameters have types (string, number) but no descriptions or constraints (enums, ranges, formats). The pattern of missing parameter descriptions violates the critical check that 'every parameter needs a description explaining what it controls' and directly causes 100% parameter description failure across all 39 tools.
Configure a node with initial configuration
Create an annotation in a lab
Create a new group in CML
Create a new lab in CML
Create a link between two interfaces
Create a new node in a lab
Create a new user in CML
Delete an annotation from a lab
CRITICAL: Tool descriptions are uniformly 1-3 words (e.g. 'Get system information', 'List all users in CML'). No rationale for tool selection, when to use vs alternatives, or expected behavior.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 38 | - | v1 |
Delete a group from CML
Delete a lab from CML
Delete a link from a lab
Delete a node from a lab
Delete a user from CML
Execute a CLI command on a node
Export a lab topology
Get details of a specific interface
Get details of a specific lab
Get details of a specific link
Get details of a specific node
Get details of a specific node definition
Download a packet capture file
Import a lab topology
List annotations in a lab
List all groups in CML
List interfaces on a node
List all labs in CML
List links in a lab
List available node definitions in CML
List nodes in a lab
List all users in CML
Start a lab in CML
Start a node in a lab
Start a packet capture on an interface
Stop a lab in CML
Stop a node in a lab
Stop a packet capture
Get system information
Get CML system version
Wipe a node to initial state
CRITICAL: Zero parameter descriptions across all 39 tools. Parameters like 'username', 'lab_id', 'node_definition', 'configuration', 'x', 'y' lack any explanation of format, constraints, or valid values. Rubric states: 'Every parameter needs a description explaining what it controls.'
Output schemas are not documented. Tool signatures show inputs only; there is no indication of what fields LLMs should expect in responses (e.g. does 'get_lab' return lab_id, status, created_at, nodes? Does 'list_users' return total_count, next_cursor?). This violates the critical check: 'Document the output schema.'
No enums or constraints declared for parameters that accept limited values. Examples: 'annotation_type' in create_annotation, 'resource_pool' in create_user, these likely have fixed options but are defined as bare strings. Rubric: 'When a parameter accepts one of a known set of values, declare it as an enum.'
No error handling guidance. Destructive tools (delete_*, wipe_node) and state-changing operations (start_*, stop_*) have no documented error scenarios, recovery actions, or confirmation mechanisms. Rubric: 'Error responses must tell the LLM what to do next.'
Numeric parameters (x, y in create_node, create_annotation) lack range constraints. No documentation of valid coordinate systems, bounds, or scale. LLMs cannot infer whether x/y are 0-1000, -360-360, or pixel coordinates.
No pagination support declared. List tools (list_users, list_groups, list_node_definitions, list_labs, list_nodes, list_interfaces, list_links, list_annotations) have no limit, offset, page, or cursor parameters. Rubric: 'Tools returning lists should accept page/offset and limit parameters and return a total count or next_cursor.'
Tool names 'start_lab' and 'stop_lab' are ambiguous about behavior, do they perform immediate state transitions or schedule them? Similar ambiguity for 'start_node', 'stop_node', 'start_packet_capture', 'stop_packet_capture'. Naming convention does not distinguish async/scheduled operations from synchronous ones.