Skip to main content

Claude-Modeling-Labs MCP Server

A comprehensive, modular toolkit for interacting with Cisco Modeling Labs (CML) through the Model Context Protocol (MCP) interface. This server enables automated lab creation, topology management, device configuration, and network testing for educational and development purposes.

Features

Core Capabilities

  • Lab Management: Create, start, stop, and delete CML labs
  • Topology Building: Add routers, switches, and create network links
  • Device Configuration: Apply and retrieve device configurations
  • Console Access: Execute commands on network devices
  • Network Discovery: Inspect lab topologies, nodes, and interfaces

Key Benefits

  • Modular Architecture: Clean separation of concerns across handlers
  • Educational Focus: Perfect for networking students and instructors
  • Automation Ready: Designed for agentic AI tutoring systems
  • Windows Compatible: Modular design resolves previous Windows compatibility issues

Installation

Prerequisites

  • Python 3.8 or higher
  • Access to a Cisco Modeling Labs server
  • Valid CML credentials

Quick Start

  1. Clone or download this repository
  2. Install dependencies:
    pip install -r requirements.txt
    
  3. Run the MCP server:
    python claude_modeling_labs_modular.py
    

Development Installation

pip install -e .[dev]

Usage

Initialize Connection

# First, initialize the client with your CML server details
initialize_client(
    base_url="https://your-cml-server.com",
    username="your-username", 
    password="your-password",
    verify_ssl=True  # Set to False for self-signed certificates
)

Basic Lab Operations

# Create a new lab
lab = create_lab("My Network Lab", "Learning OSPF routing")

# Create network devices  
router1 = create_router(lab["lab_id"], "R1", x=100, y=100)
router2 = create_router(lab["lab_id"], "R2", x=300, y=100) 
switch1 = create_switch(lab["lab_id"], "SW1", x=200, y=200)

# Connect devices
link_nodes(lab["lab_id"], router1["node_id"], router2["node_id"])
link_nodes(lab["lab_id"], router1["node_id"], switch1["node_id"])

# Start the lab
start_lab(lab["lab_id"])
wait_for_lab_nodes(lab["lab_id"], timeout=120)

Device Configuration

# Apply configuration to a router
ospf_config = """
hostname Router1
interface GigabitEthernet0/0
 ip address 10.1.1.1 255.255.255.0
 no shutdown
router ospf 1
 network 10.1.1.0 0.0.0.255 area 0
"""
configure_node(lab["lab_id"], router1["node_id"], ospf_config)

# Retrieve current configuration
current_config = get_node_config(lab["lab_id"], router1["node_id"])

Console Commands

# Execute commands on devices
send_console_command(lab["lab_id"], router1["node_id"], "show ip route")
check_interfaces(lab["lab_id"], router1["node_id"])

# Send multiple commands
commands = [
    "show version",
    "show ip interface brief", 
    "show running-config"
]
send_multiple_commands(lab["lab_id"], router1["node_id"], commands)

Architecture

The modular design separates functionality into focused handlers:

src/
├── client/           # CML API authentication and HTTP client
├── handlers/         # Modular tool handlers
│   ├── lab_management.py    # Lab CRUD operations
│   ├── topology.py          # Node and link management  
│   ├── configuration.py     # Device configuration
│   └── console.py           # Console session management
├── utils/            # Common utilities and helpers
└── server.py         # Main MCP server entry point

Key Design Principles

  • Separation of Concerns: Each handler focuses on one aspect of CML management
  • Clean Dependencies: Minimal coupling between modules
  • Error Handling: Consistent error handling across all operations
  • Windows Compatibility: Modular structure avoids file size limitations

Available Tools

Lab Management

  • initialize_client() - Authenticate with CML server
  • list_labs() - List all available labs
  • create_lab() - Create a new lab
  • get_lab_details() - Get detailed lab information
  • delete_lab() - Delete a lab
  • start_lab() - Start lab execution
  • stop_lab() - Stop lab execution
  • wait_for_lab_nodes() - Wait for nodes to initialize
  • list_node_definitions() - List available device types

Topology Management

  • get_lab_nodes() - List nodes in a lab
  • add_node() - Add a device to a lab
  • create_router() - Create a router (iosv)
  • create_switch() - Create a switch (iosvl2)
  • get_node_interfaces() - List node interfaces
  • get_physical_interfaces() - Get physical interfaces only
  • create_interface() - Create new interface on a node
  • get_lab_links() - List all links in a lab
  • create_link_v3() - Create link between specific interfaces
  • link_nodes() - Automatically link two nodes
  • delete_link() - Remove a link
  • get_lab_topology() - Get complete topology summary

Configuration Management

  • configure_node() - Apply configuration to a device
  • get_node_config() - Retrieve device configuration

Console Operations

  • open_console_session() - Open console access to device
  • close_console_session() - Close console session
  • send_console_command() - Execute single command
  • send_multiple_commands() - Execute multiple commands
  • check_interfaces() - Check interface status
  • get_diagnostic_recommendations() - Get troubleshooting suggestions

Educational Use Cases

This toolkit is designed to support networking education through:

Automated Lab Creation

  • Dynamic topology generation based on learning objectives
  • Pre-configured scenarios for specific networking concepts
  • Rapid iteration and experimentation

AI-Powered Tutoring

  • Agentic systems can create custom labs for individual students
  • Real-time guidance and troubleshooting assistance
  • Adaptive learning paths based on student progress

Curriculum Integration

  • Support for various networking topics (OSPF, BGP, VLAN, STP, etc.)
  • Scalable from basic connectivity to complex enterprise scenarios
  • Integration with existing learning management systems

Contributing

This project follows a modular architecture to support easy extension and maintenance:

  1. Adding New Tools: Create new functions in the appropriate handler module
  2. New Handler Categories: Add new handler files and register them in server.py
  3. Testing: Each module can be tested independently
  4. Documentation: Update both code comments and this README

License

MIT License - see LICENSE file for details.

Support

For issues, questions, or contributions, please refer to the project repository or documentation.


Version: 2.0.0
Authors: Claude AI Assistant
Purpose: Educational networking automation and AI-powered tutoring

Metadata

Release files for claude-cml-toolkit 2.0.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for claude-cml-toolkit 2.0.8
File Size Uploaded
claude_cml_toolkit-2.0.8.tar.gz 17.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for claude-cml-toolkit 2.0.8
File Interpreter ABI Platform
claude_cml_toolkit-2.0.8-py3-none-any.whl Python 3 none any Details

Total release size: 36.1 kB

Release files / claude_cml_toolkit-2.0.8.tar.gz

Download URL claude_cml_toolkit-2.0.8.tar.gz
Size 17.4 kB
Tags Source
SHA-256 checksum
How to use checksums
d2ba91573dde573bc2a7413b3c531b252348ff33865f6637bd714a97008d5072
BLAKE2b-256 checksum
How to use checksums
8b6e243cfdbf3401ba1d2e65db06d1561a8e26f1206965370e0d8f15878fd9f8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.4

Release files / claude_cml_toolkit-2.0.8-py3-none-any.whl

Download URL claude_cml_toolkit-2.0.8-py3-none-any.whl
Size 18.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fc52402e1ceeaad5da7b4e747f08c0b938caa48c4ff24a4f412d68214c6bf2b0
BLAKE2b-256 checksum
How to use checksums
bffc245da7b0b86c90e31ace37369ea035dc76324cd375753da691ab24fc9ed2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.4

Release history Release notifications | RSS feed

This release

2.0.8 This release

2 release files

2.0.7

2 release files

2.0.6

2 release files

2.0.5

2 release files

2.0.4

2 release files

2.0.3

2 release files

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page