Sdwan Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Sdwan Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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.
# 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.pyFor comprehensive installation instructions, including troubleshooting and Claude Desktop integration, see:
📖 [INSTALLATION_GUIDE.md](INSTALLATION_GUIDE.md)
This project uses UV for fast, modern Python package management:
uv sync automatically creates .venv and installs all dependencies from pyproject.tomlpyproject.tomlRunning the server:
python sdwan_fastmcp.py (UV manages .venv automatically)uv run python sdwan_fastmcp.py (explicit UV environment)Both methods work equally well!
Configure vManage access using either:
1. Environment Variables:
export VMANAGE_URL=https://10.78.54.101
export VMANAGE_USER=admin
export VMANAGE_PASS=your_password2. Configuration File (config.yaml):
vmanage:
url: https://10.78.54.101
username: admin
password: your_password
verify_ssl: falseSimply run from the project directory:
python3 sdwan_fastmcp.pyOr use the virtual environment directly:
.venv/bin/python sdwan_fastmcp.pyNote: The .venv environment is managed by UV (via uv sync), but you run the server with standard Python commands.
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.
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
})The server provides 50+ tools organized by category:
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 statussdwan_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 inputssdwan_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 statssdwan_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 analysissdwan_get_software_images - List available imagessdwan_schedule_upgrade - Schedule upgrade ⚠️sdwan_get_upgrade_status - Upgrade statussdwan_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 ⚠️sdwan_api_call - Make custom vManage API calls⚠️ = Requires confirmation (`confirm: true`)
{
"name": "call_sdwan_tool",
"arguments": {
"tool_name": "sdwan_get_devices",
"arguments": {}
}
}{
"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
}
}
}{
"name": "call_sdwan_tool",
"arguments": {
"tool_name": "sdwan_get_device_health",
"arguments": {
"device_id": "device-123"
}
}
}{
"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
}
}
}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"
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
})The server validates operations before execution:
Prevents rapid operations that could impact the network:
Configure in config.yaml:
safety:
rate_limits:
template_deploy: 300 # seconds
software_upgrade: 3600
delete_operations: 120All 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: SUCCESSvmanage:
url: https://10.78.54.101
username: admin
password: your_password
verify_ssl: false
timeout: 30
max_retries: 3safety:
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: 30logging:
level: INFO # DEBUG, INFO, WARNING, ERROR
audit_operations: true
audit_file: "sdwan_audit.log"Contributions are welcome! Please feel free to submit a Pull Request.
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)This project is licensed under the MIT License - see the LICENSE file for details.
Built with ❤️ for SD-WAN automation
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.