Skip to main content
Glama
ntunes

Netmiko MCP Server

by ntunes

Netmiko MCP Server

An MCP (Model Context Protocol) server for managing network devices via SSH using Netmiko. Features connection pooling, multi-vendor support, and concurrent operations.

Features

  • Command Execution: Run CLI commands on single or multiple devices

  • Configuration Management: Push configuration changes with optional save/rollback

  • Device Inventory: YAML-based device inventory with groups and tags

  • Connection Pooling: Efficient connection reuse with health checks

  • Multi-Vendor Support: Works with any device type supported by Netmiko

  • Concurrent Operations: Execute commands on multiple devices in parallel

  • TextFSM Parsing: Optional structured output parsing

Related MCP server: network-mcp

Installation

From Source

git clone https://github.com/ntunes/netmiko-mcp-server.git
cd netmiko-mcp-server
pip install -e .

With Docker

docker build -t netmiko-mcp .

Configuration

Device Inventory

Create a config/devices.yaml file with your device inventory:

defaults:
  timeout: 30
  fast_cli: true

credentials:
  production:
    username: "${NETMIKO_USERNAME}"
    password: "${NETMIKO_PASSWORD}"
    secret: "${NETMIKO_SECRET}"

groups:
  core_routers:
    - core-rtr-01
    - core-rtr-02

devices:
  core-rtr-01:
    host: "192.168.1.1"
    device_type: "cisco_ios"
    credential_profile: "production"
    tags:
      - core
      - production

  core-rtr-02:
    host: "192.168.1.2"
    device_type: "cisco_ios"
    credential_profile: "production"
    tags:
      - core
      - production

pool_settings:
  max_connections_per_device: 3
  connection_timeout: 300
  health_check_interval: 60

Environment Variables

Set credentials via environment variables:

export NETMIKO_USERNAME="admin"
export NETMIKO_PASSWORD="your_password"
export NETMIKO_SECRET="enable_secret"

Optionally set config file location:

export NETMIKO_MCP_CONFIG="/path/to/devices.yaml"

Usage

Running the Server

Stdio transport (for Claude Desktop):

python -m netmiko_mcp

Streamable HTTP transport:

python -m netmiko_mcp --transport streamable-http --port 8339

With Docker:

docker run -p 8339:8339 \
  -e NETMIKO_USERNAME=admin \
  -e NETMIKO_PASSWORD=secret \
  -v ./config/devices.yaml:/app/config/devices.yaml:ro \
  netmiko-mcp

With Docker Compose:

# Set credentials in .env or environment
export NETMIKO_USERNAME=admin
export NETMIKO_PASSWORD=secret

docker-compose up -d

Claude Desktop Configuration

Add to your Claude Desktop configuration:

For stdio transport:

{
  "mcpServers": {
    "netmiko": {
      "command": "python",
      "args": ["-m", "netmiko_mcp", "--config", "/path/to/devices.yaml"]
    }
  }
}

For HTTP transport:

{
  "mcpServers": {
    "netmiko": {
      "url": "http://localhost:8339/mcp"
    }
  }
}

MCP Tools

Command Execution

Tool

Description

send_command

Execute a single command on one device

send_command_parallel

Execute the same command on multiple devices concurrently

send_commands_sequence

Execute multiple commands sequentially on one device

Configuration

Tool

Description

send_config

Push configuration commands to one device

send_config_parallel

Push configuration to multiple devices concurrently

Inventory & Discovery

Tool

Description

list_devices

List all devices with optional tag/type filtering

get_device_info

Get detailed device information and connection status

list_groups

List all device groups and their members

test_connection

Test connectivity to a device

get_pool_status

Get connection pool statistics

get_device_types

List all device types in inventory

get_tags

List all tags used across devices

Examples

Execute a command:

Use send_command on device "core-rtr-01" with command "show version"

Execute on multiple devices:

Use send_command_parallel on devices ["@core_routers"] with command "show ip interface brief"

Push configuration:

Use send_config on device "core-rtr-01" with config_commands ["interface Loopback0", "description Test"] and save_config true

Supported Device Types

Any device type supported by Netmiko, including:

  • cisco_ios - Cisco IOS

  • cisco_xe - Cisco IOS-XE

  • cisco_xr - Cisco IOS-XR

  • cisco_nxos - Cisco NX-OS

  • arista_eos - Arista EOS

  • juniper_junos - Juniper JunOS

  • paloalto_panos - Palo Alto PAN-OS

  • hp_procurve - HP ProCurve

  • linux - Linux SSH

See Netmiko supported platforms for the full list.

Development

Install Development Dependencies

pip install -e ".[dev]"

Run Tests

pytest

Run Linting

ruff check src/ tests/
mypy src/

License

MIT

A
license - permissive license
-
quality - not tested
D
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ntunes/netmiko-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server