mcpField
E
EOS MCP

EOS MCP

本地服务
github.com/shigechika云与基础设施0今天更新

关于 EOS MCP

EOS MCP 是通过 eAPI 操作 Arista EOS 设备的 MCP 服务,面向网络运维人员及 AI 助手。它提供设备信息、命令执行、配置处理和技术支持数据收集,并以配置会话和默认试运行控制写操作。

主要功能

  1. 01读取设备信息和运行配置
  2. 02在单台或多台设备上运行命令
  3. 03比较配置与回滚检查点的差异
  4. 04暂存、确认或中止配置会话
  5. 05收集技术支持数据并生成每日摘要

适用场景

  1. 01检查带标签设备组的版本和运行状况
  2. 02应用配置前审查配置差异
  3. 03通过技术支持输出排查设备问题

MCP 相关

向兼容 MCP 的客户端提供 Arista EOS 设备操作工具,并通过 eAPI 访问已配置的设备。配置会话工具支持试运行和定时提交。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"shigechika-eos": {
"command": "uvx",
"args": [
"eos-mcp"
]
}
}
}
启动命令uvx eos-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypieos-mcp1.4.0

工具

17

收录的工具列表 · 更新于 2 周前

参数类型必填说明
config_pathstring否

详细介绍

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

配置文件的查找顺序:

  1. EOS_MCP_CONFIG 环境变量
  2. ./config.ini(当前目录)
  3. ~/.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_sessionconfigure session <name> commit——完成待处理的提交计时器会话,该会话由 push_config 启动与 push_config 相同的 EOS 账户权限要求。
abort_config_sessionconfigure 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

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。