Cisco SD-WAN MCP Server
Enables natural language automation of Cisco SD-WAN vManage, including device management, template deployment, policy configuration, monitoring, and software upgrades.
README
SD-WAN MCP Server
A FastMCP-based Model Context Protocol server for Cisco SD-WAN vManage automation
This package provides a modern FastMCP-based server for managing Cisco SD-WAN through vManage APIs, enabling AI assistants like Claude to automate SD-WAN operations through natural language.
β¨ Features
π₯οΈ Device Management
- List all SD-WAN devices with status
- Get detailed device information and statistics
- Monitor interface statistics and health
- View control connections, BFD sessions, and OMP peers
- Track CPU, memory, and system status
π Template Management
- List and browse device/feature templates
- Create new feature and device templates
- Update existing templates with validation
- Deploy templates to single or multiple devices
- Preview template configurations before deployment
- Get template input requirements and variables
- Detach templates from devices
π Monitoring & Health
- Real-time alarms and events
- System-wide and per-device statistics
- Interface health and performance metrics
- Device health monitoring (CPU, memory, connectivity)
- BFD session status and control connections
- DPI (Deep Packet Inspection) statistics
- Application usage and threat reports
- Network-wide connection statistics
π Policy Management
- Centralized and localized policy management
- Access control lists (ACLs) and prefix lists
- QoS maps and class maps
- Security policies and firewall rules
- SLA class definitions
- Route policies and redistribution
- Application-aware policies
- Site, VPN, and application lists
π¦ Software Management
- List available software images
- Schedule software upgrades
- Track upgrade status and progress
- Automated pre-upgrade validation
π Reports & Analytics
- Comprehensive device reports (summary, detailed, health)
- Interface utilization reports
- Transport statistics and path analysis
- Security threat reports
- Application usage analytics
- Custom time-based reporting
π‘οΈ Safety & Validation
- Confirmation Required: All destructive operations require explicit confirmation
- Pre-execution Validation: Checks device connectivity, template compatibility, dependencies
- Rate Limiting: Prevents rapid-fire operations (configurable cooldowns)
- Auto-backup: Optional automatic backups before deployments/upgrades
- Operation Audit Log: Track all destructive operations with timestamps
- SSL Verification: Configurable for self-signed certificates
π Performance & Architecture
- FastMCP Framework: Modern, efficient MCP implementation
- Async/Await: Non-blocking I/O for high performance
- Connection Pooling: Reusable HTTP connections to vManage
- Smart Caching: Optional caching for frequently accessed data
- UV Package Manager: Fast, reliable dependency management
π¦ Installation
Quick Start
# Clone the repository
git clone https://github.com/limtsi/sdwan_mcp.git
cd sdwan_mcp
# Install UV (if not already installed)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Install dependencies and create .venv automatically
uv sync
# Configure credentials
cp config.yaml.example config.yaml
# Edit config.yaml with your vManage details
# Run the server
python sdwan_fastmcp.py
Detailed Installation
For comprehensive installation instructions, including troubleshooting and Claude Desktop integration, see:
About UV
This project uses UV for fast, modern Python package management:
uv syncautomatically creates.venvand installs all dependencies frompyproject.toml- 10-100x faster than pip for dependency resolution
- Automatic virtual environment management (no manual activation needed)
- PEP 621 compliant with
pyproject.toml
Running the server:
- Simple:
python sdwan_fastmcp.py(UV manages .venv automatically) - Alternative:
uv run python sdwan_fastmcp.py(explicit UV environment)
Both methods work equally well!
βοΈ Configuration
Configure vManage access using either:
1. Environment Variables:
export VMANAGE_URL=https://10.78.54.101
export VMANAGE_USER=admin
export VMANAGE_PASS=your_password
2. Configuration File (config.yaml):
vmanage:
url: https://10.78.54.101
username: admin
password: your_password
verify_ssl: false
π Usage
1. Run as FastMCP server (recommended)
Simply run from the project directory:
python3 sdwan_fastmcp.py
Or use the virtual environment directly:
.venv/bin/python sdwan_fastmcp.py
Note: The .venv environment is managed by UV (via uv sync), but you run the server with standard Python commands.
2. Integrate with Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
macOS/Linux (Recommended):
{
"mcpServers": {
"sdwan": {
"command": "/Applications/MCP/sdwan/.venv/bin/python",
"args": ["/Applications/MCP/sdwan/sdwan_fastmcp.py"],
"env": {
"VMANAGE_URL": "https://10.78.54.101",
"VMANAGE_USER": "admin",
"VMANAGE_PASS": "your_password"
}
}
}
}
Windows:
{
"mcpServers": {
"sdwan": {
"command": "C:/path/to/sdwan/.venv/Scripts/python.exe",
"args": ["C:/path/to/sdwan/sdwan_fastmcp.py"],
"env": {
"VMANAGE_URL": "https://10.78.54.101",
"VMANAGE_USER": "admin",
"VMANAGE_PASS": "your_password"
}
}
}
}
Important: Use the direct path to .venv/bin/python (or .venv/Scripts/python.exe on Windows) for the most reliable configuration. Replace paths with your actual installation directory.
3. Use from Code
from sdwan_tools import SDWANTools
# Initialize tools
tools = SDWANTools()
# Get all devices
devices = await tools.handle_call("sdwan_get_devices", {})
# Deploy a template (with confirmation)
result = await tools.handle_call("sdwan_deploy_template", {
"template_id": "template-123",
"device_ids": ["device-456"],
"confirm": True
})
π οΈ Available Tools
The server provides 50+ tools organized by category:
Device Management
sdwan_get_devices- List all devicessdwan_get_device_status- Get device statussdwan_get_device_stats- Get device statisticssdwan_get_device_health- Comprehensive health metricssdwan_get_device_bfd_sessions- BFD session infosdwan_get_device_control_connections- Control connectionssdwan_get_device_omp_peers- OMP peer informationsdwan_get_device_cpu_usage- CPU utilizationsdwan_get_device_memory_usage- Memory utilizationsdwan_get_device_system_status- Overall system status
Template Management
sdwan_get_templates- List all templatessdwan_get_template_details- Template detailssdwan_create_feature_template- Create feature template β οΈsdwan_create_device_template- Create device template β οΈsdwan_update_feature_template- Update feature template β οΈsdwan_update_device_template- Update device template β οΈsdwan_delete_feature_template- Delete feature template β οΈsdwan_delete_device_template- Delete device template β οΈsdwan_deploy_template- Deploy to devices β οΈsdwan_detach_template- Detach from devices β οΈsdwan_get_template_preview- Preview configurationsdwan_get_template_inputs- Get required inputs
Monitoring & Alarms
sdwan_get_alarms- Get active alarmssdwan_get_events- Get system eventssdwan_get_interface_stats- Interface statisticssdwan_get_network_stats- Network-wide statisticssdwan_get_dpi_statistics- DPI statisticssdwan_get_connection_statistics- Connection stats
Reports
sdwan_get_device_report- Comprehensive device reportsdwan_get_interface_report- Interface reportsdwan_get_transport_report- Transport statisticssdwan_get_security_report- Security reportsdwan_get_app_usage_report- Application usagesdwan_get_threat_report- Threat analysis
Software Management
sdwan_get_software_images- List available imagessdwan_schedule_upgrade- Schedule upgrade β οΈsdwan_get_upgrade_status- Upgrade status
Policy Management
sdwan_get_centralized_policies- List centralized policiessdwan_get_localized_policies- List localized policiessdwan_create_centralized_policy- Create policy β οΈsdwan_update_centralized_policy- Update policy β οΈsdwan_delete_centralized_policy- Delete policy β οΈsdwan_activate_centralized_policy- Activate policy β οΈsdwan_deactivate_centralized_policy- Deactivate policy β οΈ- And 20+ more policy-related tools...
Generic API
sdwan_api_call- Make custom vManage API calls
β οΈ = Requires confirmation (confirm: true)
π Example Usage
Get All Devices
{
"name": "call_sdwan_tool",
"arguments": {
"tool_name": "sdwan_get_devices",
"arguments": {}
}
}
Deploy Template to Devices
{
"name": "call_sdwan_tool",
"arguments": {
"tool_name": "sdwan_deploy_template",
"arguments": {
"template_id": "abc-123",
"device_ids": ["device-1", "device-2"],
"parameters": {
"system_ip": "10.1.1.1",
"hostname": "edge-router-01"
},
"confirm": true
}
}
}
Get Device Health
{
"name": "call_sdwan_tool",
"arguments": {
"tool_name": "sdwan_get_device_health",
"arguments": {
"device_id": "device-123"
}
}
}
Schedule Software Upgrade
{
"name": "call_sdwan_tool",
"arguments": {
"tool_name": "sdwan_schedule_upgrade",
"arguments": {
"upgrade_data": {
"deviceIds": ["device-1", "device-2"],
"imageId": "image-xyz",
"reboot": true
},
"confirm": true
}
}
}
Natural Language with Claude
Once integrated with Claude Desktop, you can use natural language:
"Show me all SD-WAN devices that are currently down"
"Deploy the branch-template to all devices in the Seattle site"
"What are the current alarms in the network?"
"Schedule a software upgrade for all edge routers to version 20.9.2"
π‘οΈ Safety Features
Confirmation Requirements
All destructive operations require explicit confirmation:
# This will return a confirmation prompt
result = await tools.handle_call("sdwan_deploy_template", {
"template_id": "abc-123",
"device_ids": ["device-1"],
"confirm": False # or omit this field
})
# Response:
{
"requires_confirmation": true,
"operation": "deploy_template",
"template_id": "abc-123",
"device_count": 1,
"message": "Set confirm=true to deploy template"
}
# Actually deploy
result = await tools.handle_call("sdwan_deploy_template", {
"template_id": "abc-123",
"device_ids": ["device-1"],
"confirm": True # Explicit confirmation
})
Pre-execution Validation
The server validates operations before execution:
- Device connectivity checks
- Template compatibility verification
- Dependency validation
- Maintenance window awareness (configurable)
Rate Limiting
Prevents rapid operations that could impact the network:
- Template deployments: 5 minutes between operations
- Software upgrades: 1 hour between operations
- Delete operations: 2 minutes between operations
Configure in config.yaml:
safety:
rate_limits:
template_deploy: 300 # seconds
software_upgrade: 3600
delete_operations: 120
Audit Logging
All destructive operations are logged:
2025-10-15 10:30:45 - sdwan_safety - INFO - Operation: sdwan_deploy_template
2025-10-15 10:30:45 - sdwan_safety - INFO - User: admin
2025-10-15 10:30:45 - sdwan_safety - INFO - Details: {"template_id": "abc-123", "device_ids": ["device-1"]}
2025-10-15 10:30:45 - sdwan_safety - INFO - Status: SUCCESS
π§ Configuration Options
Basic Configuration
vmanage:
url: https://10.78.54.101
username: admin
password: your_password
verify_ssl: false
timeout: 30
max_retries: 3
Safety Configuration
safety:
enabled: true
require_confirmation: true
validation:
check_device_connectivity: true
check_template_compatibility: true
check_dependencies: true
rate_limits:
template_deploy: 300
software_upgrade: 3600
backup:
auto_backup_before_deploy: true
backup_retention_days: 30
Logging Configuration
logging:
level: INFO # DEBUG, INFO, WARNING, ERROR
audit_operations: true
audit_file: "sdwan_audit.log"
π€ Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
π License
This project is licensed under the MIT License - see the LICENSE file for details.
π Acknowledgments
- FastMCP - Modern MCP framework
- UV - Fast Python package manager
- Cisco SD-WAN - SD-WAN solution
- Model Context Protocol - MCP specification
π Support
- Issues: GitHub Issues
- Documentation: Installation Guide
- MCP Docs: Model Context Protocol
πΊοΈ Roadmap
- [ ] Add support for SD-WAN fabric discovery
- [ ] Implement advanced policy templates
- [ ] Add real-time event streaming
- [ ] Support for multi-tenant vManage
- [ ] Enhanced error recovery and retry logic
- [ ] CLI tool for standalone operations
- [ ] Web UI for configuration and monitoring
Built with β€οΈ for SD-WAN automation
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.