Give AI direct access to your network devices.
network-mcp
Give AI direct access to your network devices. 35 MCP tools, multi-vendor, one interface.
Stop writing Netmiko scripts. Connect Claude, ChatGPT, or any MCP-compatible AI to your routers, switches, and firewalls — and let it run show commands, check health, calculate subnets, discover topology, and manage configs through natural language.
You: "Check the health of all my devices"
Claude: [calls health_check_all] → 6 devices healthy, Switch-R2 has 2 interfaces down
What is this?
An MCP (Model Context Protocol) server that gives AI assistants real-time access to network devices. Built for network engineers who want to automate without writing boilerplate.
Supported platforms:
- Cisco IOS-XE (routers, switches)
- Nokia SR Linux
- FRRouting (FRR)
- Juniper Junos
- Aruba AOS-CX
- Linux hosts
Quick Start
1. Install
git clone https://github.com/E-Conners-Lab/MCP-DEMO-LAB.git
cd network-mcp
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
2. Configure devices
cp .env.example .env
# Edit .env with your device IPs and credentials
3. Try it instantly (no lab required)
# Demo mode returns realistic mock data — no devices needed
DEMO_MODE=true python network_mcp_server.py
4. Connect to Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"network": {
"command": "/path/to/network-mcp/.venv/bin/python",
"args": ["/path/to/network-mcp/network_mcp_server.py"]
}
}
}
Restart Claude Desktop. You now have 35 network tools available.
5. Try with a real lab (5 minutes)
# Spin up 2 FRR routers with containerlab
cd quickstart && sudo containerlab deploy -t topology.clab.yml
Tools
Device Operations
| Tool | Description |
|---|---|
get_devices |
List all devices in inventory |
send_command |
Run show commands on any device |
send_config |
Push configuration changes |
health_check |
Check device health (CPU, memory, interfaces) |
health_check_all |
Health check all devices in parallel |
backup_config |
Backup running configuration |
compare_configs |
Diff two config backups |
rollback_config |
Restore a previous config |
Network Intelligence
| Tool | Description |
|---|---|
discover_topology |
LLDP-based topology discovery |
get_routing_table |
View routing tables |
get_neighbors |
BGP/OSPF neighbor status |
get_arp_table |
ARP table lookup |
get_mac_table |
MAC address table |
ping_sweep |
Sweep a subnet for reachable hosts |
traceroute |
Trace path to destination |
Calculators (no devices needed)
| Tool | Description |
|---|---|
calculate_tunnel_mtu |
Optimal MTU/MSS for VPN tunnels |
calculate_subnet_info |
Subnet details from CIDR notation |
split_network |
VLSM subnet splitting |
convert_netmask |
CIDR to dotted decimal conversion |
SNMP & Monitoring
| Tool | Description |
|---|---|
snmp_get_oid |
SNMP GET for specific OIDs |
snmp_walk_oid |
SNMP WALK subtrees |
snmp_poll_metrics |
Poll interface/CPU/memory metrics |
NETCONF
| Tool | Description |
|---|---|
get_interfaces_netconf |
Interface data via NETCONF |
get_bgp_neighbors_netconf |
BGP state via NETCONF |
get_netconf_capabilities |
Device NETCONF capabilities |
Configuration Management
| Tool | Description |
|---|---|
compliance_check |
Check device against compliance templates |
full_network_test |
End-to-end network validation |
Architecture
┌─────────────────────────────────────────┐
│ AI Assistant (Claude, ChatGPT, etc.) │
└────────────────┬────────────────────────┘
│ MCP Protocol (stdio/SSE)
┌────────────────▼────────────────────────┐
│ network_mcp_server.py │
│ FastMCP server + tool registry │
└────────────────┬────────────────────────┘
│
┌────────────────▼────────────────────────┐
│ mcp_tools/ │
│ ├── device.py (9 tools) │
│ ├── calculators.py (6 tools) │
│ ├── topology.py (6 tools) │
│ ├── config.py (8 tools) │
│ ├── snmp.py (5 tools) │
│ ├── netconf.py (4 tools) │
│ ├── compliance.py (7 tools) │
│ └── ... (10 modules, 35 tools total) │
└────────────────┬────────────────────────┘
│
┌────────────────▼────────────────────────┐
│ core/ │
│ ├── connection.py (Netmiko/Scrapli) │
│ ├── parser.py (NTC/Genie) │
│ ├── mtu_calculator.py │
│ └── subnet_calculator.py │
└────────────────┬────────────────────────┘
│ SSH / NETCONF / S
Tools (27)
get_devicesList all devices in inventorysend_commandRun show commands on any devicesend_configPush configuration changeshealth_checkCheck device health (CPU, memory, interfaces)health_check_allHealth check all devices in parallelbackup_configBackup running configurationcompare_configsDiff two config backupsrollback_configRestore a previous configdiscover_topologyLLDP-based topology discoveryget_routing_tableView routing tablesget_neighborsBGP/OSPF neighbor statusget_arp_tableARP table lookupget_mac_tableMAC address tableping_sweepSweep a subnet for reachable hoststracerouteTrace path to destinationcalculate_tunnel_mtuOptimal MTU/MSS for VPN tunnelscalculate_subnet_infoSubnet details from CIDR notationsplit_networkVLSM subnet splittingconvert_netmaskCIDR to dotted decimal conversionsnmp_get_oidSNMP GET for specific OIDssnmp_walk_oidSNMP WALK subtreessnmp_poll_metricsPoll interface/CPU/memory metricsget_interfaces_netconfInterface data via NETCONFget_bgp_neighbors_netconfBGP state via NETCONFget_netconf_capabilitiesDevice NETCONF capabilitiescompliance_checkCheck device against compliance templatesfull_network_testEnd-to-end network validationEnvironment Variables
DEMO_MODESet to true to return realistic mock data without needing real devicesConfiguration
{"mcpServers": {"network": {"command": "/path/to/network-mcp/.venv/bin/python", "args": ["/path/to/network-mcp/network_mcp_server.py"]}}}