eNSP-MCP

eNSP-MCP

MCP server for managing Huawei eNSP network simulation experiments, enabling topology management, Telnet device interaction, configuration deployment, and verification through natural language or API.

Category
访问服务器

README

eNSP-MCP

eNSP-MCP 是一个面向 Huawei eNSP 实验环境的 MCP(Model Context Protocol)服务。它把 eNSP 拓扑、设备 Telnet 管理、只读诊断、受控配置下发、配置看板和简单自然语言任务入口封装成 MCP 工具与 FastAPI 接口,方便大模型客户端或自动化脚本在实验拓扑上执行可审计的网络配置任务。

当前项目不内置真实 LLM。自然语言能力是规则版关键词匹配,主要用于把常见实验需求路由到已有配置草案生成器。

当前能力

  • 从当前实验目录或 TOPOLOGY_FILE 指定路径读取 .topo 文件,解析设备、接口、链路和 Telnet 端口。
  • 根据拓扑动态生成设备清单;可选合并 config/devices.yaml 中的连接参数。
  • 支持 Mock 模式和真实 eNSP Telnet 模式。默认是 Mock,设置 ENABLE_REAL_ENSP=true 后使用真实 Telnet。
  • 提供 MCP stdio 服务,默认暴露精简工具集,也可通过环境变量暴露完整调试工具。
  • 提供 FastAPI 接口和 HTML 配置看板:
    • /static/index.html:设备列表、当前配置、拓扑视图。
    • /static/nl-assistant.html:自然语言配置助手调试页。
  • 支持只读命令执行,命令必须通过 config/command_whitelist.yaml 白名单。
  • 支持受控配置草案和下发:
    • PC1/PC2 静态路由互通。
    • OSPF 最小配置。
    • VLAN 最小配置。
    • DHCP 地址分发。
    • 固定校园网实验:VRRP、MSTP、DHCP、Easy NAT。
  • 支持配置保存、最近部署备份预览、回滚提示和操作日志。
  • MCP 工具调用默认会尝试打开 HTML 配置看板,便于同步观察配置状态。

目录结构

backend/
  main.py                         FastAPI 入口和 HTTP API
  adapters/
    base_adapter.py               适配器抽象和数据结构
    mock_adapter.py               Mock 设备适配器
    ensp_adapter.py               真实 eNSP Telnet 适配器
    telnet_client.py              VRP Telnet 客户端
  mcp/
    server.py                     MCP stdio server
    tools.py                      MCP 工具注册与处理逻辑
    schemas.py                    MCP 工具输入 schema
  runtime/
    context.py                    API 层与 MCP 层共享服务实例
  services/
    device_service.py             设备清单、状态、诊断和适配器切换
    config_deploy_service.py      配置草案、下发、保存
    config_rollback_service.py    最近部署备份与回滚结果
    connectivity_analysis.py      PC 互通、OSPF、VLAN 分析
    dhcp_analysis.py              DHCP 分析
    dhcp_verification_service.py  DHCP 最终验证
    campus_lab_service.py         固定校园网实验执行器
    nl_intent_service.py          规则版自然语言意图解析
    log_service.py                内存操作日志
  static/
    index.html                    配置看板
    nl-assistant.html             自然语言助手页面
  topology/
    parser.py                     .topo XML 解析
    interface_mapping.py          eNSP 接口索引到接口名映射
    config.py                     拓扑和 devices.yaml 路径解析
    validator.py                  devices.yaml 与拓扑校验
config/
  command_whitelist.yaml          只读命令白名单
  devices.yaml                    可选连接参数示例
tests/                            单元测试
requirements.txt                  Python 依赖

本仓库不会上传本地 .topo、设备备份、运行日志、截图、缓存和虚拟环境。这些内容已在 .gitignore 中排除。

拓扑选择规则

项目没有内置默认拓扑。每次调用拓扑相关 API 或 MCP 工具时,都会动态解析当前拓扑:

  1. 如果设置了 TOPOLOGY_FILE,使用该 .topo 文件。
  2. 如果没有设置,当前工作目录下优先使用 <当前目录名>.topo
  3. 否则当前工作目录下必须只有一个 .topo 文件。
  4. 如果没有 .topo 或存在多个 .topo,工具会返回 TOPOLOGY_UNAVAILABLE

DEVICES_FILE 可指定连接参数文件。未指定时,会优先尝试使用拓扑目录旁的 config/devices.yaml;不存在或校验不通过时,再使用项目内的 config/devices.yaml。设备身份以 .topo 为主,devices.yaml 只作为 host、port、protocol、凭据环境变量等连接参数补充。

快速启动

以下命令以 Windows PowerShell 为例。

cd C:\Users\jmsgfc\.agents\mcps\ensp_mcp

# 建议使用 Python 3.10
py -3.10 -m pip install -r requirements.txt

# 指向当前实验拓扑
$env:TOPOLOGY_FILE = "C:\Users\jmsgfc\Desktop\work55\work55.topo"

# Mock 模式启动 API 和看板
$env:ENABLE_REAL_ENSP = "false"
py -3.10 -m uvicorn backend.main:app --host 127.0.0.1 --port 8000

浏览器打开:

http://127.0.0.1:8000/static/index.html

真实 eNSP 模式:

$env:TOPOLOGY_FILE = "C:\Users\jmsgfc\Desktop\work55\work55.topo"
$env:ENABLE_REAL_ENSP = "true"
py -3.10 -m uvicorn backend.main:app --host 127.0.0.1 --port 8000

真实 eNSP 的 PC 没有 Telnet 管理面,工具会跳过 PC 的 Telnet 连接检查;PC 地址验证主要依赖交换机 DHCP 租约、拓扑配置和必要的人工确认。

MCP 启动

MCP 服务入口:

cd C:\Users\jmsgfc\.agents\mcps\ensp_mcp
$env:TOPOLOGY_FILE = "C:\Users\jmsgfc\Desktop\work55\work55.topo"
$env:ENABLE_REAL_ENSP = "true"
py -3.10 -m backend.mcp.server

MCP 客户端配置示例:

{
  "mcpServers": {
    "ensp-mcp": {
      "command": "py",
      "args": ["-3.10", "-m", "backend.mcp.server"],
      "cwd": "C:\\Users\\jmsgfc\\.agents\\mcps\\ensp_mcp",
      "env": {
        "TOPOLOGY_FILE": "C:\\Users\\jmsgfc\\Desktop\\work55\\work55.topo",
        "ENABLE_REAL_ENSP": "true"
      }
    }
  }
}

默认情况下,每次调用非 open_config_board 的 MCP 工具时,backend.mcp.tools.call_tool() 会尝试打开或复用 HTML 配置看板。相关环境变量:

变量 默认值 作用
ENSP_MCP_AUTO_OPEN_BOARD true 是否在 MCP 工具调用时自动打开看板
ENSP_MCP_AUTO_OPEN_MODE browser browsereditornone
ENSP_MCP_BOARD_HOST 127.0.0.1 看板服务监听地址
ENSP_MCP_BOARD_PORT 8000 看板服务端口
ENSP_MCP_BOARD_PATH /static/index.html 默认打开页面
ENSP_MCP_EDITOR_COMMAND editor 模式下使用的编辑器命令

MCP 工具

默认工具 profile 是 compact,只暴露高频入口:

工具 作用
list_devices 从当前拓扑列出设备清单
open_config_board 启动并打开 HTML 配置看板
connect_devices 检查非 PC 设备 Telnet 连通性
run_command 执行白名单内只读 display/show 命令
execute_task 根据自然语言任务规划、下发、验证,可自动保存
verify_task 验证 dhcpospfpc_connectivity 或全部
execute_campus_lab 执行固定校园网实验配置、验证和保存
save_config 确认后保存路由器和交换机配置
rollback_config 确认后按最近备份执行回滚流程

设置完整工具 profile:

$env:ENSP_MCP_TOOL_PROFILE = "legacy"

完整工具表还包括:

get_device_status
run_show_command
get_topology_diagnostics
analyze_pc_connectivity
get_final_report
preview_pc_connectivity_config
apply_pc_connectivity_config
preview_save
apply_save
preview_rollback
apply_rollback
preview_ospf_config
apply_ospf_config
preview_vlan_config
apply_vlan_config
preview_dhcp_config
apply_dhcp_config
get_dhcp_final_report
plan_nl_request
execute_nl_request

plan_nl_request 支持识别 PC 互通、OSPF、VLAN、DHCP。execute_nl_request 当前只实际执行 PC 互通和 DHCP 两类请求。

FastAPI 接口

主要 HTTP 接口如下:

方法 路径 作用
GET /api/topology/graph 返回拓扑图数据
GET /api/devices 设备列表
GET /api/devices/{device_id}/status 单设备状态
POST /api/devices/{device_id}/commands/run 执行白名单只读命令
GET /api/devices/{device_id}/current-config 读取当前配置
GET /api/health/ensp 检查真实 eNSP 前置条件
GET /api/devices/{device_id}/diagnostics 单设备诊断
GET /api/diagnostics 全拓扑诊断
GET /api/analysis/pc-connectivity PC1/PC2 互通分析
GET /api/verification/pc-connectivity-summary PC1/PC2 互通验证摘要
GET /api/config/pc-connectivity/preview 静态路由草案
POST /api/config/pc-connectivity/apply 下发静态路由草案
GET /api/analysis/ospf OSPF 分析
GET /api/config/ospf/preview OSPF 草案
POST /api/config/ospf/apply 下发 OSPF 草案
GET /api/analysis/vlan VLAN 分析
GET /api/config/vlan/preview VLAN 草案
POST /api/config/vlan/apply 下发 VLAN 草案
GET /api/analysis/dhcp DHCP 分析
GET /api/config/dhcp/preview DHCP 草案
POST /api/config/dhcp/apply 下发 DHCP 草案
GET /api/config/save/preview 预览将保存的设备
POST /api/config/save/apply 保存配置
GET /api/config/rollback/preview 预览回滚
POST /api/config/rollback/apply 执行回滚流程
GET /api/verification/final-report PC 互通最终报告
GET /api/verification/dhcp-final DHCP 最终报告
GET /api/logs 内存操作日志
POST /api/nl/plan 自然语言任务规划

安全边界

  • 只读命令必须通过 config/command_whitelist.yaml。默认仅允许 displayshow,并显式阻断 system-viewundoresetrebootsavedelete 等危险命令。
  • 通用配置命令不会直接暴露给用户。配置下发只能来自内部草案生成器。
  • apply_*saverollback 等写操作需要显式传入 confirmed=true
  • 大多数写操作还要求 ENABLE_REAL_ENSP=true,否则会被拒绝。
  • 配置下发前会尝试备份设备当前配置,备份文件保存在项目根目录的 backups/,该目录不会上传到 Git。
  • 回滚能力基于最近部署前备份和适配器恢复接口。真实 VRP 配置恢复存在管理面覆盖风险,失败时会返回明确的人工恢复提示。
  • eNSP 实验环境支持无账号密码直登;如果设备需要账号密码,应在 devices.yaml 中填写环境变量名,再通过环境变量提供真实值,不要写入仓库。

典型任务

列出当前拓扑设备:

from backend.mcp.tools import call_tool

print(call_tool("list_devices"))

打开配置看板:

call_tool("open_config_board", {"open_mode": "browser"})

只读命令:

call_tool("run_command", {
    "device_id": "<device-id>",
    "command": "display ip interface brief"
})

规划并执行 PC1/PC2 互通:

call_tool("execute_task", {
    "request": "配置 PC1 和 PC2 能够通信",
    "mode": "apply_and_verify",
    "confirmed": True,
    "save_on_success": True
})

规划并执行 DHCP:

call_tool("execute_task", {
    "request": "配置 PC4 PC5 PC6 通过 DHCP 自动获取 IP 地址",
    "mode": "apply_and_verify",
    "confirmed": True,
    "save_on_success": True
})

仅验证:

call_tool("verify_task", {"task": "all"})

固定校园网实验

execute_campus_lab 是一个独立的固定场景执行器,目标是当前拓扑中的校园网实验:

  • VRRP
  • MSTP
  • DHCP
  • Easy NAT
  • 验证成功后可自动保存

使用方式:

call_tool("execute_campus_lab", {
    "mode": "apply_and_verify",
    "confirmed": True,
    "save_on_success": True
})

该工具依赖当前拓扑中的设备命名、链路和接口符合 campus_lab_service.py 的固定预期;不适合作为任意拓扑的通用配置器。

测试

cd C:\Users\jmsgfc\.agents\mcps\ensp_mcp
py -3.10 -m pytest

注意:当前测试集中有拓扑路径相关用例,项目根目录如果残留本地 .topo 文件,可能影响部分测试结果。仓库通过 .gitignore 排除了 .topo,建议把实验拓扑放在独立实验目录,或通过 TOPOLOGY_FILE 指定。

当前限制

  • 自然语言解析是规则版关键词匹配,不是真实 LLM。
  • 规则版自然语言执行入口只执行 PC 互通和 DHCP;OSPF/VLAN 可以预览和通过专用工具下发。
  • DHCP 的真实 PC 侧状态无法直接通过 Telnet 读取,真实验证主要依赖交换机侧信息和拓扑配置。
  • OSPF、VLAN、DHCP 草案是面向当前实验拓扑的最小闭环,不是任意网络设计器。
  • config/devices.yaml 是连接参数示例,不能替代 .topo 拓扑本身。
  • 运行时日志、备份和截图都是本地状态,不属于仓库源代码。

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选