Skip to main content
Glama

cisco-iosxe-mcp

Сервер MCP, который предоставляет устройства Cisco IOS-XE в качестве инструментов, которые может вызывать LLM-клиент. Именованные оперативные чтения, а также путь изменения конфигурации, который показывает точный список команд, применяет его под configure terminal revert timer, проверяет, что устройство все еще отвечает на новой сессии, и только затем подтверждает.

Он общается по MCP через Streamable HTTP, поэтому работает как собственный сервис в сети, а не как локальный подпроцесс одного клиента. Транспорт к устройству — это CLI IOS-XE через SSH, с помощью scrapli.

Создан для universal-network-director, многопротокольного сетевого менеджера с чат-управлением и шлюзом одобрения человека для каждой записи — но это автономный MCP-сервер и работает с любым MCP-клиентом.

Не аффилирован, не одобрен и не поддерживается Cisco Systems, Inc. «Cisco» и «IOS-XE» являются товарными знаками соответствующих владельцев и используются здесь только для описания того, с чем общается это программное обеспечение.


Модель безопасности

Двухшаговая, той же формы, что и путь Junos — с одним честным отличием, которое вы должны понять перед использованием.

Шаг 1 — предпросмотр показывает список команд, а не diff

preview_config_change возвращает точные команды, которые будут отправлены, устройство, на которое они пойдут, и текущее состояние строк, которые они затрагивают. Вы одобряете это.

Это слабее, чем Junos show | compare. Junos загружает кандидатскую конфигурацию, и устройство вычисляет реальный diff; у IOS-XE нет кандидатской конфигурации, поэтому нечего просить устройство сравнивать. Предпросмотр здесь — это изменение как написано, проверенное на соответствие текущей конфигурации — а не собственный отчет устройства о том, что получится. Читайте команды, а не только сводку.

Шаг 2 — применение под таймером отката

write_apply_config_block принимает только идентификатор предпросмотра — он не может применить то, что не было предпросмотрено. Команды вводятся под configure terminal revert timer <n>: действуют немедленно, но IOS-XE автоматически откатывает конфигурацию, если configure confirm не поступит вовремя. Затем этот сервер переподключается по новой SSH-сессии, чтобы доказать, что устройство все еще доступно, и подтверждает только в этом случае. Заблокируйте себя — и устройство отменяет изменение.

Необходимое условие для устройства, которого нет у Junos: функция archive IOS должна быть настроена (archive / path ...), иначе у таймера отката нет точки отката, и страховочная сеть молча отсутствует. get_archive_status сообщает об этом для каждого устройства, а write_apply_config_block отказывается, когда она отсутствует, вместо того чтобы применять без защиты.

Намеренно нет инструмента для произвольных команд. Каждое оперативное чтение выполняет команду, построенную из фиксированного шаблона плюс проверенные аргументы. Единственное место, где модель свободно составляет текст — блок конфигурации — заблокировано, показано человеку дословно и применяется под таймером отката.


Related MCP server: Itential MCP Server

Прочтите это, прежде чем направлять на production

Три из девятнадцати инструментов изменяют состояние, и этот сервер не спрашивает перед их выполнением. Префикс write_ — это соглашение, чтобы ваш клиент мог их блокировать.

Инструмент

Что делает

Риск

write_apply_config_block

Применяет предпросмотренный список команд

Что бы ни говорили команды. Под таймером отката с проверкой доступности — но только если настроен archive.

write_save_config

Копирует running-config в startup-config

Не записывает новую конфигурацию — делает текущую устойчивой к перезагрузке, включая изменения, о которых вы еще думали.

write_reload_device

Перезагружает устройство, опционально с задержкой

Выводит устройство из строя. Не отменяемо. Несохраненная конфигурация теряется; сохраненная конфигурация возвращается.

Обратите внимание на асимметрию, которую кодирует префикс: write_ означает «человек должен это одобрить», а не «это редактирует конфигурацию». write_save_config не добавляет никакой конфигурации и блокируется, потому что сделать изменение постоянным — это решение, которое кто-то должен принять обдуманно.

cancel_reload намеренно не заблокирован — это действие по восстановлению, и требование цикла одобрения для остановки ожидаемой перезагрузки — неправильный компромисс.

Ограничьте учетную запись устройства только чтением, если вы специально не намерены, чтобы записи работали. Этот контроль находится на устройстве, а не в этом коде.

Конечная точка MCP не имеет аутентификации

Этот сервер предоставляет свои инструменты любому, кто может достичь его порта. Нет токена, нет аутентификации клиента, нет TLS на стороне MCP.

MCP_HOST по умолчанию равен 127.0.0.1 по этой причине. Образ контейнера устанавливает 0.0.0.0, потому что должен, что означает, что публикация порта контейнера открывает неаутентифицированный путь к вашим маршрутизаторам на этом интерфейсе. Держите его во внутренней сети с клиентом или завершите TLS и аутентификацию перед ним.


Инвентаризация устройств

Учетные данные устройств хранятся в JSON-файле, смонтированном только для чтения в контейнер — никогда не встроены в образ, никогда не зафиксированы. Он содержит учетные данные SSH в открытом виде, поэтому chmod 600 и владейте им от uid, под которым работает контейнер.

Той же формы, что и инвентаризация шлюза Junos, так что нужно выучить один формат, плюс опциональный enable_password:

{
  "csr-lab": {
    "ip": "192.0.2.53",
    "port": 22,
    "username": "automation",
    "auth": { "type": "password", "password": "..." }
  }
}

enable_password читается только в том случае, если устройству это действительно нужно — учетная запись, уже имеющая привилегию 15, оказывается на # и не требует дополнительного повышения.

Используйте другой файл, чем у шлюза Junos. Раздельные контейнеры, содержащие раздельные учетные данные, — это причина, по которой серверы вообще разделены: ошибка в этом не может достичь ваших брандмауэров.

UID контейнера. Образ намеренно создает запись passwd для uid-1000. Транспорт system scrapli выполняет бинарник ssh, а OpenSSH отказывается работать, когда у вызывающего uid нет записи в /etc/passwd — симптомом является вводящее в заблуждение «EOF reading from transport», а не что-то, называющее причину.

Запуск

docker build -t cisco-iosxe-mcp .
docker run --rm \
  -v "$PWD/secrets/devices.json:/app/config/devices.json:ro" \
  --user 1000:1000 \
  -p 127.0.0.1:8004:8004 \
  cisco-iosxe-mcp

Переменная

По умолчанию

Значение

CISCO_DEVICES_FILE

/app/config/devices.json

Путь к инвентаризации устройств

CISCO_PREVIEW_TTL

1800

Секунд, в течение которых предпросмотр применим

MCP_HOST

127.0.0.1

Адрес привязки (образ устанавливает 0.0.0.0)

MCP_PORT

8004

Порт привязки

Тесты

docker run --rm cisco-iosxe-mcp python test_arg_validation.py
docker run --rm cisco-iosxe-mcp python test_reload.py

Оба офлайн — без контакта с устройством, без необходимости в учетных данных. test_reload.py воспроизводит точные байты, которые реальное устройство IOS-XE отправило для reload in 5, reload cancel и подсказок подтверждения, включая случай, когда подсказка сохранения никогда не появляется.

Справочник по инструментам

TOOLS.md содержит поинструментный справочник: аргументы, что каждый возвращает, какие требуют одобрения и обоснование дизайна шлюза.

Лицензия

Apache-2.0. См. LICENSE.

A
license - permissive license
-
quality - not tested
C
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.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.

  • MCP server for Pentest-Tools.com: run scans, manage findings and reports via your preffered LLM.

  • MCP server providing access to the Scorecard API to evaluate and optimize LLM systems.

View all MCP Connectors

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/anderson-jason573/cisco-iosxe-mcp'

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