关于 EOS MCP
EOS MCP 是通过 eAPI 操作 Arista EOS 设备的 MCP 服务,面向网络运维人员及 AI 助手。它提供设备信息、命令执行、配置处理和技术支持数据收集,并以配置会话和默认试运行控制写操作。
主要功能
- 01读取设备信息和运行配置
- 02在单台或多台设备上运行命令
- 03比较配置与回滚检查点的差异
- 04暂存、确认或中止配置会话
- 05收集技术支持数据并生成每日摘要
适用场景
- 01检查带标签设备组的版本和运行状况
- 02应用配置前审查配置差异
- 03通过技术支持输出排查设备问题
MCP 相关
向兼容 MCP 的客户端提供 Arista EOS 设备操作工具,并通过 eAPI 访问已配置的设备。配置会话工具支持试运行和定时提交。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
17收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| config_path | string | 否 |
详细介绍
eos-mcp
English | 日本語
通过 eAPI 执行 Arista EOS 设备操作的 MCP 服务。
向兼容 MCP 的 AI 助手提供 EOS show 命令、运行配置获取、配置推送 (通过带提交计时器的 configure session)以及 tech-support 收集功能。
文档:https://shigechika.github.io/eos-mcp/
安装
pip install eos-mcp
配置
将 config.ini.example 复制到 ~/.config/eos-mcp/config.ini 并填写凭据:
[DEFAULT]
username = admin
password = yourpassword
transport = https
verify = false
[switch1.example.com]
tags = main,dc1
[switch2.example.com]
tags = main,dc1
配置文件的查找顺序:
EOS_MCP_CONFIG环境变量./config.ini(当前目录)~/.config/eos-mcp/config.ini
(单个 MCP 工具调用也可以通过 config_path
参数覆盖路径。)
写入操作
以下三个工具通过受保护的路径更改设备状态:
| 工具 | API 调用 | 限制条件 |
|---|---|---|
push_config | 打开 configure session <name>,暂存 config_lines,然后执行 show session-config diffs + abort(dry_run=True,默认值)或 commit timer HH:MM:SS(dry_run=False)——eAPI JSON-RPC Command API | 由 eAPI 账户自身的 EOS 权限级别控制:该账户必须能够进入 configure session 模式(实际上需要 privilege 15 / enable 访问权限)。默认值 dry_run=True 表示意外调用时,如果未显式设置 dry_run=False,只会显示差异并中止。 |
confirm_config_session | configure session <name> commit——完成待处理的提交计时器会话,该会话由 push_config 启动 | 与 push_config 相同的 EOS 账户权限要求。 |
abort_config_session | configure session <name> abort——丢弃待处理的会话 | 与 push_config 相同的 EOS 账户权限要求。 |
为设备的 config.ini 账户设置权限较低、仅可执行 show 命令的角色,
这三个工具就会在 EOS API 处执行失败,而不会写入;该设备的所有
只读工具仍可正常工作。
run_command、run_commands、run_command_batch 和
run_commands_batch 并不限制为 show ... 命令,尽管文档将它们描述并归类为命令执行工具。服务不会验证或列入白名单命令文本——命令会原样传递给 eAPI Command
API——因此,这些工具可以执行任意 enable 模式下的 EOS 命令,包括
configure terminal ... 或 reload,作用于任何已配置的设备(单台主机,或通过 _batch 变体中的 tags 面向整个设备集群)。
这些操作受与 push_config 相同的 EOS 账户权限控制,但没有
push_config 的 dry_run / 提交计时器安全网——在决定设备 config.ini 账户应具有何种权限时,务必记住这是一条实际存在的第二写入路径。
用法
Claude Code(插件)
此仓库同时也是一个单插件市场,因此 Claude Code 可以为你 安装该服务:
/plugin marketplace add shigechika/eos-mcp
/plugin install eos-mcp@eos-mcp
该插件会启动 uvx eos-mcp,并读取 EOS_MCP_CONFIG,该变量与配置中所述相同。如果不设置该变量,服务会按正常的查找顺序查找(./config.ini,
然后是 ~/.config/eos-mcp/config.ini)。/plugin install 只会接入
服务进程——它无法创建 config.ini 文件或其中保存的各设备
eAPI 凭据;在运行插件的机器上必须事先存在该文件,否则除
health_check 之外的任何工具都无法成功运行。
运行 Claude Code 的进程的 PATH 中必须包含 uvx——登录
shell 通常会包含它,但通过 GUI 启动的应用可能没有;如果插件无法启动,请在系统范围内安装
uv。
Claude Code(手动配置)
在 .mcp.json 中:
{
"mcpServers": {
"eos-mcp": {
"type": "stdio",
"command": "eos-mcp"
}
}
}
只有当 config.ini 不在上述默认查找位置时,才添加 "env": { "EOS_MCP_CONFIG": "..." }。
Claude Desktop
将相同条目添加到 claude_desktop_config.json。
Codex
codex mcp add eos-mcp -- eos-mcp
只有当 config.ini 不在上述默认查找位置时,才添加 --env EOS_MCP_CONFIG=...(位于 -- 之前)。
其他任何能够启动 stdio 服务的 MCP 客户端也使用相同方式:将
eos-mcp 指定为命令即可。
从 shell 运行
# Verify config and list devices
eos-mcp --check
# Test connectivity to a specific host
eos-mcp --check --check-host switch1.example.com
# Start MCP server (stdio transport)
eos-mcp
工具
| 工具 | 描述 |
|---|---|
health_check | 报告服务版本和配置状态(轻量级;不会连接设备) |
get_router_list | 列出已注册设备(可选标签筛选) |
get_device_facts | 返回一台设备的结构化信息(型号、序列号、EOS 版本、运行时间、内存) |
get_device_facts_batch | 并行返回多台设备的信息 |
get_version | 返回 EOS 版本字符串(快速连通性检查) |
run_command | 在一台设备上运行单条特权模式命令 |
run_commands | 在一台设备上运行多条特权模式命令 |
run_command_batch | 并行在多台设备上运行一条特权模式命令 |
run_commands_batch | 并行在多台设备上运行多条特权模式命令 |
get_config | 获取运行配置 |
get_config_diff | 显示与回滚检查点的配置差异 |
list_config_sessions | 列出配置会话及其状态 |
push_config | 通过配置会话推送配置(默认 dry_run=True) |
confirm_config_session | 确认待处理的提交计时器会话 |
abort_config_session | 中止待处理的会话 |
collect_tech_support | 收集 show tech-support 输出 |
daily_brief | 检查多台设备的运行状况(环境、errdisabled、运行时间、MLAG、近期 syslog 警报) |
开发
实时冒烟测试
单元测试会根据固定样例检查逻辑,但无法发现工具是否已停止返回真实数据。scripts/smoke_test.py 会针对已配置的设备运行每个已注册的工具,并在返回空结果、格式错误或错误答案时失败:
# uses the same inventory file as the server (EOS_MCP_CONFIG)
uv run python scripts/smoke_test.py
uv run python scripts/smoke_test.py --only facts --traceback
- 只读。 按名称跳过
push_config、confirm_config_session和abort_config_session,并通过测试强制执行此规则。collect_tech_support也会跳过——它不会更改任何内容,但要耗费数分钟设备 CPU,且没有断言会读取其答案。运行命令的工具会使用show version进行测试:它们通常接受特权模式命令,而冒烟测试绝不能输入可能产生实际影响的命令。 - 报告中不包含有效载荷。 仅包含工具名称和状态;错误文本也会脱敏,因为此处的每条错误都带有其来源设备的名称,而有效载荷是配置信息。
- 规范中不包含特定环境的信息。 每主机工具所需的设备会在运行时从已配置的设备清单中发现,若清单为空则跳过。两项测试确保这一点:一项拒绝将这些参数写成字面值,另一项禁止文件中出现任何类似地址的内容,因为此仓库是公开的。
- 每项探测都会拒绝这些工具返回的
Error (<host>): ...行(而不是抛出错误)——否则无法连接的设备会被视为调用成功。 - CI 会强制执行成本较低的部分:如果某个已注册工具没有探测规范,构建就会失败(
tests/test_smoke_probes.py),因此添加工具时必须考虑“我们如何知道它能正常工作?”。 scripts/smoke_harness.py是执行引擎,不包含 EOS 相关知识:它在共用此引擎的各个服务间保持完全一致,因此只需修复一次引擎错误,然后同步该文件,而不是只修改此副本。
要求
- Python >= 3.10
- 已启用 eAPI 的 Arista EOS(
management api http-commands) - 可通过网络访问目标设备的 443 端口(HTTPS)
许可证
Apache-2.0
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。