Skip to main content
Glama
i-Nihal

Network MCP Server

by i-Nihal

Network MCP Server

Сервер протокола контекста модели (MCP), который позволяет агенту ИИ взаимодействовать с сетевым устройством Cisco IOS-XE через SSH. Написан на Python с использованием FastMCP и Netmiko.

Сервер предоставляет 7 инструментов (5 для чтения + 2 для записи), каждый из которых имеет строгую проверку входных данных и четкие описания, чтобы агент LLM мог обнаруживать и использовать их автономно.

Курс: Agent AI & Automation — Sheridan College Автор: Ahmed Инструктор: Sebastian


Содержание

  1. Лабораторная среда

  2. Установка

  3. Запуск сервера

  4. Инструменты

  5. Подключение к Claude Desktop

  6. Примеры взаимодействия

  7. Необходимые разрешения

  8. Заметки по безопасности

  9. Устранение неполадок


Лабораторная среда

Этот проект ориентирован на Always-On IOS-XE DevNet Sandbox от Cisco. Он бесплатный, общедоступный, не требует бронирования и всегда работает.

Настройка

Значение

Хост

sandbox-iosxe-latest-1.cisco.com

Порт

22 (SSH)

Имя пользователя

admin

Пароль

C1sco12345

Тип устройства

Cisco IOS-XE (Catalyst 8000v)

Справочная информация: Cisco DevNet — Always-On Sandboxes.

Быстрая проверка подключения с вашего компьютера:

ssh admin@sandbox-iosxe-latest-1.cisco.com
# password: C1sco12345

Вы должны увидеть приглашение Router# (или аналогичное). Если это работает, MCP-сервер тоже будет работать.

Песочница является общей. Пожалуйста, вносите небольшие и неразрушающие изменения (например, редактируйте только описания интерфейсов, не отключайте интерфейсы и не меняйте IP-адреса).


Установка

Требуется Python 3.10+.

# 1. Clone / copy the project
cd network-mcp-server

# 2. Create and activate a virtual environment (recommended)
python -m venv .venv
source .venv/bin/activate    # on Windows: .venv\Scripts\activate

# 3. Install dependencies
pip install -r requirements.txt

Зависимости:

  • mcp[cli] — MCP Python SDK (предоставляет FastMCP)

  • netmiko — библиотека SSH/CLI для различных вендоров

  • python-dotenv — загружает .env для локальной разработки


Запуск сервера

Вариант А — автономный (для локального тестирования)

cp .env.example .env
# edit .env if your lab uses different credentials

python server.py

Сервер работает через stdio, поэтому он ожидает сообщения MCP JSON-RPC на stdin. На практике вы не будете вызывать его вручную — вы подключите Claude Desktop (см. ниже) или CLI разработчика mcp.

Вариант Б — интерактивный инспектор разработки

mcp dev server.py

Это открывает инспектор MCP в вашем браузере, где вы можете просматривать список инструментов и вызывать их вручную.


Инструменты

Инструменты чтения

Инструмент

Описание

get_device_info

Имя хоста, модель, версия ПО, время работы, серийный номер. Парсит show version.

get_interfaces

Все интерфейсы со статусом, IP, описанием. Парсит show ip interface brief + show interfaces description.

get_routes

Таблица маршрутизации IPv4. Парсит show ip route в структурированные записи.

get_arp_table

Соответствия IP-MAC. Парсит show ip arp.

get_running_config

Полная текущая конфигурация или отдельный раздел (например, interface GigabitEthernet1). Принимает необязательный аргумент section.

Инструменты записи

Инструмент

Описание

configure_interface_description

Устанавливает описание на интерфейсе и проверяет, что изменение было применено, считывая его обратно. Аргументы: interface, description.

save_config

Выполняет copy running-config startup-config для сохранения изменений после перезагрузки.

Все выходные данные инструментов представляют собой строки JSON, чтобы LLM могла анализировать структурированные данные. Когда парсеры TextFSM библиотеки Netmiko не могут обработать вывод, сервер возвращает необработанный текст CLI внутри обертки {"raw": "..."}.


Подключение к Claude Desktop

  1. Найдите файл конфигурации Claude Desktop:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

    • Windows: %APPDATA%\Claude\claude_desktop_config.json

    • Linux: ~/.config/Claude/claude_desktop_config.json

  2. Объедините блок ниже с файлом (используйте полный абсолютный путь к вашему server.py):

{
  "mcpServers": {
    "network-mcp-server": {
      "command": "python",
      "args": ["/ABSOLUTE/PATH/TO/network-mcp-server/server.py"],
      "env": {
        "DEVICE_HOST": "sandbox-iosxe-latest-1.cisco.com",
        "DEVICE_PORT": "22",
        "DEVICE_USERNAME": "admin",
        "DEVICE_PASSWORD": "C1sco12345",
        "DEVICE_TYPE": "cisco_xe"
      }
    }
  }
}

Версия, готовая к копированию, находится в claude_desktop_config.example.json.

  1. Полностью закройте и перезапустите Claude Desktop. (Простого закрытия окна недостаточно — процесс MCP остается активным.)

  2. В новом чате нажмите на значок 🛠️ / инструментов. Вы должны увидеть network-mcp-server в списке с 7 инструментами.


Примеры взаимодействия

После подключения попробуйте следующие запросы:

"К какому устройству я подключен? Назови его имя хоста, модель и версию IOS." Агент вызовет get_device_info.

"Перечисли все интерфейсы, у которых в данный момент назначен IP-адрес." Агент вызовет get_interfaces и отфильтрует результаты.

"Покажи мне маршрут по умолчанию." Агент вызовет get_routes и выберет запись с сетью 0.0.0.0.

"Установи описание на GigabitEthernet2 'managed by MCP demo', затем подтверди, что изменение было применено." Агент вызовет configure_interface_description, затем (опционально) get_running_config с section='interface GigabitEthernet2' для проверки.

"Сохрани текущую конфигурацию в startup." Агент вызовет save_config.


Необходимые разрешения

MCP-серверу требуется:

  1. Исходящий сетевой доступ с хост-машины к SSH-порту устройства (по умолчанию TCP/22). В корпоративных сетях может потребоваться VPN или прокси.

  2. Учетная запись устройства с правами privileged exec — учетная запись admin в песочнице DevNet уже имеет этот уровень. Если вы используете собственное устройство, учетная запись должна иметь возможность входить в config t и выполнять write memory.

  3. Локальный доступ на чтение к файлу .env или эквивалентным переменным окружения, установленным Claude Desktop.

Серверу не требуются права root/администратора на вашей рабочей станции.


Заметки по безопасности

  • Учетные данные никогда не прописываются жестко. Они берутся из переменных окружения (DEVICE_USERNAME, DEVICE_PASSWORD). Если какая-либо обязательная переменная отсутствует, сервер отказывается подключаться и возвращает понятную ошибку.

  • .env игнорируется git. Вместо него предоставляется .env.example (с безопасными значениями песочницы DevNet).

  • Проверка входных данных для каждого инструмента. Имена интерфейсов, описания и фильтры разделов конфигурации проверяются регулярными выражениями перед отправкой в CLI устройства. Метасимволы оболочки (;, |, обратная кавычка, новая строка, нулевой байт) отклоняются.

  • Учетные данные никогда не передаются как аргументы инструментов. LLM не может прочитать, записать в лог или украсть их — она видит только выходные данные инструментов.

  • Инструменты записи включают проверку. configure_interface_description считывает конфигурацию после применения изменений и сообщает applied: true/false.

  • Область действия ограничена. Два инструмента записи могут только изменять описания интерфейсов и сохранять конфигурацию. Деструктивные операции (shutdown, изменение IP-адреса, удаление VLAN, erase startup-config) намеренно не представлены.


Устранение неполадок

"Missing required environment variable(s)" Вы забыли установить DEVICE_HOST / DEVICE_USERNAME / DEVICE_PASSWORD. Скопируйте .env.example в .env или установите их в блоке env в Claude Desktop.

"Authentication to failed" Проверьте пароль. Если вы изменили песочницу или используете другое устройство, убедитесь, что SSH включен и учетная запись имеет права privileged-exec.

"Connection to timed out" Исходящий сетевой доступ заблокирован. Попробуйте ssh admin@sandbox-iosxe-latest-1.cisco.com с той же машины. Если это тоже зависает, проблема в вашем брандмауэре/VPN.

Claude Desktop не показывает сервер после редактирования конфигурации Полностью закройте Claude Desktop (не просто закройте окно) и перезапустите его. На macOS: Cmd+Q. На Windows: щелкните правой кнопкой мыши по значку в трее → Quit.

Вызов инструмента возвращает необработанный текст вместо структурированного JSON Это означает, что шаблон TextFSM библиотеки Netmiko не совпал с выводом устройства (другая версия IOS, другая платформа). Сервер возвращает необработанный текст CLI в {"raw": "..."}. Агент все еще может анализировать его; просто он не структурирован.

-
security - not tested
F
license - not found
-
quality - not tested

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/i-Nihal/network-mcp-server'

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