Skip to main content
Glama

cisco-iosxe-mcp

一个 MCP 服务器,将 Cisco IOS-XE 设备作为工具暴露给 LLM 客户端调用。提供命名的操作读取,以及一条配置变更路径:显示精确的命令列表,在 configure terminal revert timer 下应用它,验证设备在一个新的会话中仍能响应,然后才确认。

它通过 Streamable HTTP 使用 MCP 通信,因此它作为自己的服务在网络上运行,而不是某个客户端的本地子进程。到设备的传输是通过 SSH 的 IOS-XE CLI,经由 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 没有候选配置,因此没有可让设备进行 diff 的对象。此处的预览是所写形式的变更,与当前配置核对——而不是设备自己会对结果作何描述。请阅读命令,而不只是摘要。

步骤 2 — 在回滚定时器下应用

write_apply_config_block 只接受预览 ID——它不能应用任何未经预览的内容。命令在 configure terminal revert timer <n> 下进入:立即生效,但 IOS-XE 会自动回滚配置,除非及时收到 configure confirm。然后本服务器会在新的 SSH 会话上重新连接,以证明设备仍然可达,并且只有可达时才确认。如果把自己锁在外面,设备会撤销变更。

Junos 所没有的设备前置条件: 必须配置 IOS archive 功能(archive / path ...),否则回滚定时器没有回滚点,安全网会悄然缺失。get_archive_status 会按设备报告这一点,并且在缺失时 write_apply_config_block 会拒绝应用,而不是无保护地应用。

故意没有提供自由格式的命令工具。 每次操作读取都运行由固定模板加已验证参数构建的命令。模型唯一自由编写文本的地方——配置块——受到门禁,原样展示给人类,并在回滚定时器下应用。


Related MCP server: Itential MCP Server

在把此服务器指向生产环境之前,请阅读以下内容

十九个工具中有三个会改变状态,而本服务器在执行它们之前不会询问。 write_ 前缀是一种约定,以便你的客户端能够对它们进行门禁。

工具

作用

风险

write_apply_config_block

应用已预览的命令列表

命令要求什么,就是什么。 位于带有可达性验证的回滚定时器之后——但仅在配置了 archive 的情况下。

write_save_config

将 running-config 复制到 startup-config

不写入任何新配置——它使当前配置在重新加载后仍然存在,包括你仍在考虑中的更改。

write_reload_device

重启设备,可选择在延迟后执行

使设备宕机。不可回滚。 未保存的配置将丢失;已保存的配置会恢复。

注意前缀编码的不对称性:write_ 表示“必须有人类批准此事”,而不是“这会编辑配置”。 write_save_config 完全不添加配置,它之所以受到门禁,是因为让变更永久生效是一个应该由某人慎重做出的决定。

cancel_reload 有意不受门禁——它是一种恢复操作,如果要求通过审批往返来阻止待执行的重启,那是错误的权衡。

将设备账户的权限范围设为只读,除非你确实打算让写入生效。该控制权位于设备上,而不是在这段代码中。

MCP 端点没有身份验证

本服务器将工具暴露给任何能访问其端口的人。MCP 一侧没有令牌、没有客户端认证、没有 TLS。

因此 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 网关不同的文件。 分离的容器持有分离的凭据,这正是服务器被拆分的全部原因:此服务器中的 bug 无法触及你的防火墙。

容器 uid。 该镜像特意创建了一个 uid-1000 的 passwd 条目。scrapli 的 system 传输会执行 ssh 二进制文件,而当调用方的 uid 没有对应的 /etc/passwd 条目时,OpenSSH 拒绝运行——其症状是令人困惑的“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 5reload 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