Skip to main content
Glama

eNSP MCP

Tests License: MIT

给华为 eNSP 用的一站式 MCP:搭拓扑配设备在同一个工具集里完成。

An unofficial MCP server for building Huawei eNSP topologies and configuring lab devices through their console ports.

当前版本 1.2.0,共 16 个 MCP 工具。本版增加 eNSP/VirtualBox/镜像 启动前诊断、原生分区背景框和文字避让,并把防火墙默认选择改为 USG5500。 详见 更新记录开发及验收说明

拓扑侧全是离线的文件操作,不用开 eNSP;设备侧走 eNSP 的 console 端口, 要求 eNSP 已启动、目标设备已开机。

能干什么

  • 按型号加设备、按接口名连线,接口序号和 .topo 的 XML 细节都不用管

  • 自动分层布局,自动分配 console 端口,自动生成 MAC 和 AP 序列号

  • 用 eNSP 原生背景矩形和文字创建分区,自动给标题、设备名和分区留出间距

  • 交给 eNSP 之前检查拓扑结构,以及 VirtualBox、Hyper-V/VBS、模板机和镜像

  • 可选渲染 PNG 辅助预览;拓扑创建和验收不依赖预览图

  • 导出 Mermaid / draw.io / CSV,直接拿去写文档

  • telnet 进设备批量下发配置、读回实配做对比、跑 ping 和各种 display

Related MCP server: eNSP Automation MCP

安装

基本环境:Python 3.10 或更高版本。实际运行 eNSP 和连接设备需要 Windows 与 已安装的 eNSP;使用 AR、WLAN、NE/CE 或 USG6000V 时,还需要与 eNSP 版本 匹配的 VirtualBox、模板机或设备镜像。仓库不提供这些厂商软件。

git clone https://github.com/Heaxu/ensp-mcp.git
cd ensp-mcp
python -m pip install -e .

也可以从 GitHub Releases 下载 wheel 后安装:

python -m pip install .\ensp_mcp-1.2.0-py3-none-any.whl

在 MCP 客户端配置文件中注册:

{
  "mcpServers": {
    "ensp-mcp": {
      "command": "ensp-mcp"
    }
  }
}

也可以用 Python 解释器启动,便于切换虚拟环境:python -m ensp_mcp.server。 开发更新后要在客户端重启 MCP 服务,已运行的进程不会自动加载新源码。

环境自检:python -m ensp_mcp.doctor。给定拓扑并把运行前置条件作为退出状态: python -m ensp_mcp.doctor --topo lab.topo --strict-runtime。运行测试: python -B -m unittest discover -s tests -t . -v

典型流程

environment_check    先检查 eNSP、VirtualBox、模板机和镜像
list_models          看型号、接口和选择建议;普通防火墙默认 USG5500
topo_create          建一个空拓扑
topo_add_devices     批量加设备
topo_connect         批量连线
topo_layout          自动摆开;需要时生成分区背景和标题
topo_validate        检查
topo_render          (可选)出辅助预览图
  ↓ 在 eNSP 里打开,全选启动设备
device_push_config   灌配置
device_probe         ping 一下验证

工具

设备库

工具

干什么

list_models

列出 43 种型号、接口、默认选择和启动风险。给 topo_path 还能核对内置表和实际 eNSP 版本有没有出入

没有明确型号要求时,categoryDefaults 中的防火墙默认值是 USG5500。 显式传入 USG6000V 仍会严格按该型号创建,同时返回外部镜像和启动风险提示, 不会静默换成端口结构不同的型号。

拓扑

工具

干什么

topo_create

新建空 .topo

topo_inspect

读出设备、链路、每台设备的空闲接口和 console 端口

topo_add_devices

批量加设备,支持 count 批量克隆和终端 IP 预设

topo_connect

批量连线,接口可写名字也可省略让它自动挑空闲口

topo_remove

删设备或断连线

topo_layout

layered / tree / grid / ring 四种普通布局,也可按 zones 生成原生分区背景和标题

topo_validate

重名、接口越界、一口多连、console 冲突、孤立设备、图标/文字/分区碰撞和条件型号风险

topo_render

可选的 Pillow PNG 辅助示意图

topo_export

导出 Mermaid / draw.io / CSV

分区示例:

{
  "path": "D:/lab/campus.topo",
  "zones": [
    {"title": "总部核心区", "devices": ["Core1", "Core2", "FW1"], "color": "#E8F1FF"},
    {"title": "办公区", "devices": ["Access1", "PC1", "PC2"], "color": "#EAF8EE"}
  ]
}

分区布局使用 eNSP 原生 shape/txttip 字段,按设备名宽度计算单元格,并给 背景框、标题栏和相邻分区预留固定间距。未列出的设备默认进入“未分区”。 eNSP 的标注没有稳定 ID,因此拓扑已有手工图形或文字时默认拒绝覆盖;确实要 全部重建时显式传 replace_annotations=true。普通布局遇到已有标注也默认拒绝 移动设备,避免背景框留在旧坐标。

启动环境

工具

干什么

environment_check

只读检查 eNSP、VirtualBox 版本和硬件虚拟化、Hyper-V/VBS 冲突、Host-Only 网卡、AR/WLAN 基机、SVRP 与 USG6000V 镜像

传入 path 后查看 readyForTopology 和每个 modelChecks[].blockers;还没建图时 也可传 models=["AR2220", "USG5500"] 预检计划型号。CLI 对应参数可重复写, 例如 python -m ensp_mcp.doctor --model AR2220 --model USG5500 --strict-runtime。 该检查不会启动虚拟机,不会关闭 Windows 功能,也不会注册或修改镜像。

eNSP 1.3.00.200T 优先使用经验证的 VirtualBox 5.2.x。VirtualBox 驱动处于 Running 并不能证明设备可启动:如果 Hyper-V/VBS 占用 AMD-V/VT-x,老版本 VirtualBox 仍会报 raw-mode 错误。诊断会把这种情况单独报为 VBOX_HYPERV_CONFLICT

USG6000V 是条件使用型号,通常要另行安装并注册 vfw_usg.vdi;只有实验明确 要求该型号或其独有能力时再选。一般防火墙实验优先 USG5500,它使用 eNSP 自带的本地模拟器和固件。NE40ECE6800CE12800 还依赖已注册的 SVRP 镜像。

设备配置

target 既接受设备名(如 Core1,需要配 topo_path),也接受 console 端口号(如 2002)。

工具

干什么

device_exec

执行任意命令并返回回显

device_push_config

灌整份配置,可以来自文本或 .cfg 文件

device_fetch_config

读回运行配置,可存盘,可和基线逐行对比

device_probe

ping / tracert / 接口状态 / ARP / MAC / 路由 / VLAN / OSPF

device_sessions

查看和关闭保持中的 console 连接

四个操作设备的工具都支持 usernamepasswordnew_password。 无需认证时省略;仅密码的 console 可只给 passwordnew_password 仅在 设备要求首次设置或修改密码时使用,不会主动触发改密。

执行结果。 检查返回的 ok、逐条 resultssaveStatusdevice_exec / device_push_config 默认 stop_on_error=true,遇错停止; 出错后不自动保存,也不自动回滚已生效的配置。超时或断线会关闭连接并报告 明确错误,不会自动重放命令。saveStatus.status=saved 才表示识别到保存成功。

整份配置。 device_push_config 支持以 # 分段的运行配置,每个分段 回到系统视图后再执行。device_fetch_config 的差异包含 unifiedDiff, 保留上下文、行顺序及重复项。

探测结果。 ping 结果中的 parsed.reachable 才表示是否连通;null 表示回显不足,不能判断。其他 display 查询目前返回原始回显。

几个说明

接口命名。 交换机从 1 开始(GigabitEthernet0/0/1),路由器和 AP 从 0 开始(GigabitEthernet0/0/0)。写 GE0/0/1Gi0/0/1GigabitEthernet0/0/1 都认,也可以直接写扁平序号。

console 端口。 eNSP 把有 console 的设备映射到本机 2000 起的 TCP 端口。 PC、Server、STA、Cloud、HUB 这些没有 console,只能在 eNSP 界面里双击配置。

Cloud。 它的接口是在 eNSP 界面里手工添加并绑定真实网卡的,.topo 里 接口数写作 0。连线时按序号给(0、1、2……),校验会提醒你去界面里补配置。

设备开关机。 eNSP 启动部分设备时会动态克隆 VirtualBox 模板机,实例名 不固定。MCP 先做只读预检,最终启动仍在 eNSP 界面完成;预检通过也不等同于 镜像已经完成真实启动验收。

文件格式。 eNSP 写出的 .topo 声明 encoding="UNICODE" 但实际是 UTF-8、CRLF 换行。本工具按同样的形态写回,读的时候两种编码都认。

编辑已有拓扑时保留标注、扩展属性和实际板卡 XML,使用原子写入;若文件在 读取后被其他程序修改,会拒绝覆盖并要求重新读取。避免同时在 eNSP 和 MCP 中保存同一文件。读取兼容 UTF-8、UTF-16 以及官方中文样例使用的 CP936/ GB18030。接口与线型校验不替代真实设备的启动和连通性验收。

topo_render 是 Pillow 生成的示意图,并非从 eNSP 导出的截图;它不验证真实 界面、镜像或启动状态。Mermaid/draw.io/CSV 导出主要表达设备和链路,不保证 原生分区标注的视觉等价。

小规模端到端验收

python examples/e2e_lab.py create --directory ./work/e2e-lab
# 在 eNSP 中打开生成的 acceptance.topo 并启动两台交换机
python examples/e2e_lab.py run --directory ./work/e2e-lab --apply
# 手动重启两台设备后,只读复验保存和连通性
python examples/e2e_lab.py run --directory ./work/e2e-lab

脚本会保留实际 MCP 结果和读回配置。自动测试的 Telnet 服务是协议测试桩, 不能替代真实 eNSP 设备测试,也不表示 43 种型号均已完成联调。

开源许可与声明

本项目代码采用 MIT License。项目是社区维护的非官方工具,与华为 及 eNSP 官方没有隶属或授权关系。Huawei、eNSP 及相关产品名称归各自权利人 所有。

仓库不包含 eNSP、VirtualBox、USG6000V/SVRP 镜像或其他厂商软件。请从合法 来源自行取得所需软件和镜像,并遵守相应许可。问题和改进建议可提交到 GitHub Issues

Available Tools

16 tools
device_execA

在已启动的 eNSP 设备 console 上逐条执行命令。

target 为设备名(配 topo_path)或端口号。view 为 keep/user/system。 username/password 用于需要登录的 console,只有密码的 console 可只给 password。 new_password 仅在设备要求初次设置或修改密码时使用;不主动修改已有密码。 stop_on_error 默认遇错停止;失败时不 save。confirm 为 Y/N/YES/NO。 返回 ok、逐条 results、errorCount、stoppedEarly 和 saveStatus;超时断线不会重试命令。

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNo127.0.0.1
saveNo
viewNokeep
targetYes
confirmNoY
commandsYes
passwordNo
usernameNo
topo_pathNo
new_passwordNo
stop_on_errorNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses behavior: executes commands one by one, returns ok/results/errorCount/stoppedEarly/saveStatus, and no retry on timeout. No annotations exist, so description carries full burden; side effects are not detailed but inherent to command execution.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is a compact bullet-like list of parameter meanings, directly relevant and without fluff. It effectively conveys the necessary information in a structured manner.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Provides output field names and some edge-case behavior, but lacks details on 'host', 'save' semantics, and the output schema structure is not fully elaborated. Gaps exist for full context, though core usage is covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Many parameters are explained (target, view, username/password, new_password, stop_on_error, confirm), but 'host' and 'save' are not described at all, and 'commands' is implied only. Schema coverage is partial, leaving clear gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it executes commands on a started eNSP device console, with a specific verb and resource. It does not explicitly compare to sibling tools like device_push_config, but the action is distinct enough from context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides parameter guidance (target, view, credentials, confirm, stop_on_error) and notes that timeout disconnection will not retry commands. However, it does not explicitly state when to prefer this tool over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

device_fetch_configA

读回运行配置;save_to 可保存 UTF-8 文件,compare_with 可与基线文件比较。

diff 同时提供 identical、onlyOnDevice、onlyInFile 和带上下文的 unifiedDiff, 保留行顺序及重复行。命令失败或超时不写出配置文件。登录参数与 device_exec 相同。

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNo127.0.0.1
targetYes
save_toNo
passwordNo
usernameNo
topo_pathNo
compare_withNo
new_passwordNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full behavioral disclosure. It does so by noting that on command failure or timeout no config file is written, and by detailing the diff output variants (identical, onlyOnDevice, onlyInFile, unifiedDiff with context, preserving line order and duplicates). This adds real behavioral context beyond what any schema would show. It does not mention permissions or side effects, but the failure/timeout note is a strong positive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences: the first states the core purpose and the two optional parameters, the second details the diff behavior, and the third notes failure behavior and the login-parameter reference. It is front-loaded and free of fluff, though the third sentence could be merged to reduce length slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 8 parameters and an output schema, the description covers the main operation, the diff output, and failure behavior, but leaves most parameter semantics to inference or a sibling reference. Since an output schema exists, return-value documentation is not required, but the lack of explanation for 6 parameters makes the tool only partially self-contained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but it only explains two of eight parameters: save_to (writes a UTF-8 file) and compare_with (compares with a baseline). The remaining parameters (host, target, username, password, topo_path, new_password) are not explained; the note that login parameters are same as device_exec is a reference, not an explanation. This leaves most parameter semantics undefined.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb-object pair ('读回运行配置' = read back running config), states the resource and core operation, and immediately adds optional save/compare capabilities that distinguish it from siblings like device_push_config (which pushes configs). This gives an agent a precise idea of the tool's role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (whenever you need to read a device's running config) but never states explicit alternatives or exclusions. It references device_exec for login parameters but does not say 'use this instead of X' or list conditions that would make another tool preferable. The guidance is adequate but not directive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

device_probeA

设备连通性和状态查询。action: ping/tracert/interfaces/arp/mac/route/vlan/ospf。

ping/tracert 需要 destination;ping count 为 1–100。ping 返回统计和 reachable, 无法解析时 reachable 为 null;其他查询返回 output 原文。ok 表示命令执行状态, ping 是否连通看 parsed.reachable。登录参数与 device_exec 相同。

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNo127.0.0.1
countNo
actionNoping
targetYes
passwordNo
usernameNo
topo_pathNo
destinationNo
new_passwordNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description explains response behavior: ping returns stats and reachable (null if parsing fails), other actions return raw output, and ok indicates command execution status. It also clarifies that connectivity is determined via parsed.reachable. This provides substantial transparency about expected outputs, though it doesn't address side effects or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, starting with the core purpose and action list, then adding conditions for ping/tracert and response interpretation. It's efficient but could be better structured with explicit sections, though it avoids unnecessary fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 9 parameters, no annotations, and 0% schema description coverage, the description is incomplete. It doesn't explain all parameters, doesn't provide usage examples or comparisons with siblings, and only partially describes returns. An agent would need to infer several aspects, making it insufficient for reliable invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has no descriptions (0% coverage), so the description must clarify parameters. It only explains destination (required for ping/tracert) and count (1-100), and mentions login params are same as device_exec. It leaves target, topo_path, and new_password unexplained, which is insufficient for an agent to correctly fill all parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly defines the tool as a device connectivity and status query tool, enumerating specific actions (ping, tracert, interfaces, etc.). This distinguishes it from sibling tools like device_exec which executes arbitrary commands, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a condition for ping/tracert requiring destination and mentions login parameters are shared with device_exec, but it doesn't explicitly state when to use this tool versus alternatives or provide exclusions. It implies usage for network diagnostics but leaves the decision to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

device_push_configA

从文本或 UTF-8 .cfg 下发配置,config/config_file 必须且只能选一个。

自动进入系统视图,支持带 # 分段的 display current-configuration 配置文本, 分段时退出子视图再进入系统视图。默认遇错停止且不保存;不会自动回滚已生效配置。 username/password/new_password 与 device_exec 相同。save 默认 true。 CE 提示符标记存在未提交改动时,保存前先 commit;任何保存异常都返回失败状态。

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNo127.0.0.1
saveNo
configNo
targetYes
passwordNo
usernameNo
topo_pathNo
config_fileNo
new_passwordNo
stop_on_errorNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses key behaviors: automatic entry into system view, handling of #-segmented display current-configuration text with sub-view exit/re-entry, default stop-on-error and no-save behavior on errors, no automatic rollback, commit-before-save when CE prompt indicates uncommitted changes, and failure status on save exceptions. This is thorough, though it could clarify the interaction between the 'save' default and error-path behavior more explicitly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, using a few sentences to convey a wealth of information. It front-loads the core purpose and constraint, then follows with behavioral details. It is dense but not verbose, and each sentence adds value. The structure is logical, though it could benefit from bullet points for scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (10 parameters, no annotations) and an output schema that likely covers return format, the description covers most essential behaviors and the key config-file constraint. However, it omits explanations for several parameters and does not mention error handling specifics beyond save failures. It is adequate but not fully complete for an agent to call it confidently in all edge cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It clarifies the exclusivity of config/config_file, references device_exec for credential parameters, and states save's default. However, it does not explain host, target, topo_path, or stop_on_error beyond the implicit mention. While these may be inferable from names, the description fails to fully document all ten parameters, leaving gaps for an agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool pushes configuration from text or a UTF-8 .cfg file, with a precise constraint that config/config_file must be chosen exclusively. This distinguishes it from siblings like device_fetch_config (fetch) and device_exec (execute commands). The verb 'push' and resource are specific, making the purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions that username/password/new_password are the same as device_exec, hinting at shared context, but does not explicitly state when to use this tool versus device_exec or device_fetch_config. There are no clear exclusions or conditional routing cues, leaving the selection logic mostly to the agent's inference from the purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

device_sessionsA

查看或关闭 console 会话。action 为 list/close/close_all。

close 时 target 为端口号。后台每 30 秒回收空闲超过 5 分钟的连接; 服务退出时关闭所有连接。关闭操作等待该连接正在执行的命令结束。

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNo127.0.0.1
actionNolist
targetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full responsibility. It discloses background behavior (idle connections reclaimed every 30 seconds, closure on service exit) and that close operations wait for running commands to finish. This is valuable beyond the schema, though it omits potential error conditions or side effects on list operations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: a clear purpose sentence, then action details, target explanation, and background behavior. It is not overly verbose and each sentence adds value, though it could benefit from a line about host or a clearer action-target mapping.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core usage for list and close actions and explains the background lifecycle, which is helpful. However, it omits the host parameter, does not specify the behavior of close_all beyond its name, and relies on the output schema for return details. There are minor gaps that could confuse an agent when dealing with host-specific sessions or close_all semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains 'action' values and clarifies that 'target' is the port number for close, but it does not explain the 'host' parameter at all. It also leaves ambiguity about whether close_all requires a target. Partial coverage of the three parameters, with the most critical ones addressed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: to view or close console sessions, listing the specific actions (list/close/close_all). It names the resource (console sessions) and distinguishes this from sibling tools focused on topology or device configuration, so an agent can identify it accurately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for managing sessions but does not explicitly state when to choose this tool over alternatives like device_exec or topo_* tools. It provides action semantics but lacks explicit 'when not to use' guidance or conditions that would route the agent to a sibling. This is adequate but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

environment_checkA

只读检查 eNSP、VirtualBox、模板机和设备镜像,不启动或修改任何虚拟机。

检查结果的 readyForTopology=true 才表示这份拓扑的已知前置条件 已满足。检查会识别 VirtualBox 版本、Hyper-V/VBS 冲突、Host-Only 网卡、 AR/WLAN 基机、SVRP 镜像和 USG6000V 镜像/注册状态。

Args: path: 可选的 .topo。给出后按其中实际型号判断 readyForTopology。 models: 可选的计划型号列表;还没创建拓扑时可先检查,例如 ["AR2220", "USG5500"]。与 path 同时给出时合并检查。 ensp_home: 可选的 eNSP 安装目录;省略时从环境、注册表和常见目录查找。

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
modelsNo
ensp_homeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

由于没有注释,描述承担了行为披露责任。明确说明'只读'且'不启动或修改任何虚拟机',这是关键行为信息。但未说明错误处理、权限需求或失败时的表现,如检查失败是否抛出异常或返回何种状态。

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

结构清晰:开篇概述、解释结果含义、列出参数。内容均必要,无冗余,但描述略长(如检查项列举),可稍简化。整体信息密度高,排序合理。

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

工具较复杂(3个可选参数),有输出schema但未提供。描述覆盖了检查内容和结果判断,但未说明输出结构细节(如是否包含其他字段)或潜在错误场景。鉴于输出schema存在,不要求描述返回值,但描述未提及任何使用限制或前置条件,仍略有欠缺。

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

schema描述覆盖率为0%,描述必须补偿。描述对每个参数提供了详细语义:path指定.topo文件用于按实际型号判断,models为计划型号列表且可与path合并,ensp_home指定安装目录并说明省略时的查找逻辑。这远超schema本身。

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

描述明确指出这是一个只读环境检查工具,具体检查eNSP、VirtualBox、模板机和设备镜像,并列出检查项(VirtualBox版本、Hyper-V/VBS冲突等)。动词'检查'和资源明确,与兄弟工具(拓扑操作和设备操作)区分度高。

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

描述提到'还没创建拓扑时可先检查',并解释readyForTopology表示前置条件满足,暗示应在拓扑创建前使用。但未明确说明何时不使用或与其他工具(如topo_validate)的替代关系,仅有隐含的使用场景。

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_modelsA

列出 eNSP 支持的设备型号,以及每种型号的接口清单。

搭拓扑前先调这个,就知道有哪些型号可选、每个型号有几个口、口叫什么名字。 连线时 fromPort / toPort 填的就是这里的接口名。

Args: category: 只看某一类,可选 AR(路由器)、LSW(交换机)、WLAN(无线)、 FW(防火墙)、CLIENT(终端)、OTHER(其它)。留空看全部。 model: 只看某一个型号,例如 "S5700"。填了会连完整接口列表一起返回。 topo_path: 可选。给一份现成 .topo,会顺带核对内置型号表和这份文件 里实际写出的接口布局是否一致,用于确认 eNSP 版本差异。

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNo
categoryNo
topo_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden and does disclose the optional topo_path consistency-check behavior. It does not explicitly state that the operation is read-only, although the wording '列出' and '核对' strongly imply no mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with the main purpose, followed by usage context and parameter details. It avoids unnecessary verbosity while still conveying actionable guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple three-optional-parameter interface and no annotations, the description is complete enough for an agent to decide when to call the tool and what to expect. It also ties the output to the sibling topo_connect workflow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although the input schema has no parameter descriptions, the tool description compensates by explaining all three parameters: category values and blank behavior, model filtering and full-interface-list behavior, and topo_path validation behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool's purpose: listing eNSP-supported device models and their interface inventories. It also distinguishes the tool from sibling topology operations by positioning it as the pre-topology lookup for model and port names.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to call this before building a topology and that fromPort/toPort values in connection operations should use the interface names returned here. The parameter-specific guidance for category, model, and topo_path makes when and how to use the tool clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

topo_add_devicesA

往拓扑里批量加设备。

Args: path: .topo 文件路径。 devices: 设备列表,每项支持这些字段:

    - model(必填):型号,见 list_models。
    - name:设备名,省略则按 eNSP 习惯自动编号(S5700 叫 LSW1、
      AR2220 叫 AR1,重名自动往后排)。
    - count:一次加几台,默认 1;配合省略 name 可以批量生成。
    - x / y:画布坐标,省略则先堆在原点,之后跑 topo_layout 自动摆开。
    - settings:终端类设备的初始参数,PC/Server 可填
      {"ip": "...", "mask": "...", "gateway": "..."},
      AP 可填 {"mac": "...", "sn": "..."}。具体字段见
      list_models 返回的 settingsFields。

举例:[{"model": "S5700", "name": "Core", "count": 2},
      {"model": "PC", "settings": {"ip": "192.168.1.10"}}]

console 端口会自动从 2000 起顺序分配,不会和已有设备冲突。

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
devicesYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the transparency burden and does reveal important side effects: it adds devices batch-wise and auto-assigns console ports without conflicts. It does not mention failure modes, whether the topology file is modified/overwritten, idempotency, or what happens on invalid model/settings, so some behavioral aspects remain opaque.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description uses a clean Args list, bullet sub-fields, an example block, and a one-line port note. It is compact, scannable, and free of redundant filler, making it easy for an agent to extract the necessary information quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is largely self-contained: it defines all device fields, references list_models for model details, and mentions topo_layout for coordinate placement. It does not state what the function returns or explicitly reference sibling add/remove tools, but the included examples and port behavior make it sufficient for common use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although the JSON schema only has bare path and devices fields, the description fully documents the meaningful sub-fields (model, name, count, x/y, settings), marks model as required, gives defaults for name/count, and provides concrete examples. This goes well beyond the schema and removes ambiguity about the devices array's structure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and object: '批量加设备' (batch add devices) to a topology, and the parameter examples clarify the operation. It clearly distinguishes from siblings like topo_layout and list_models by focusing on the add action, so an agent can identify the tool's purpose without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides practical examples and a useful note about console-port auto-allocation from 2000 without conflicts. However, it never explicitly states when to prefer this tool over siblings such as topo_create or topo_remove, leaving some selection guidance implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

topo_connectA

批量连线。

Args: path: .topo 文件路径。 links: 链路列表,每项支持:

    - from / to(必填):两端设备名。
    - fromPort / toPort:接口名("GE0/0/1"、"GigabitEthernet0/0/1"
      都认)或接口序号。省略则自动挑该设备第一个空闲口。
    - lineType:线型,默认按接口类型自动判断(串口给 Serial,
      其余给 Copper)。也可显式写 Copper / Fiber / Serial。

举例:[{"from": "Core1", "to": "Core2", "fromPort": "GE0/0/1",
       "toPort": "GE0/0/1"},
      {"from": "Core1", "to": "PC1"}]

一个接口只能连一条线,重复占用会直接报错并指出是哪个口。

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
linksYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It transparently states that omitted ports auto-select the first free one, line type defaults based on interface type, and duplicate interface usage raises an explicit error naming the offending port. This is exemplary behavioral transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with bullet points and an example, front-loaded with the purpose. It is a bit lengthy but every sentence adds value, explaining defaults and error behavior. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers all necessary aspects for an agent to call the tool correctly: parameter semantics, defaults, error handling, and a practical example. Even though an output schema exists, the input description is fully self-sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by explaining both parameters in detail. It describes the path parameter, the structure of links with required and optional fields, accepted port formats, defaults, and provides a concrete example. This exceeds what a schema could convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool performs batch connection of links in a topology file ('批量连线'), and the detailed explanation of links and their fields distinguishes it from sibling tools like topo_create, topo_layout, or topo_inspect. The purpose is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a comprehensive example and explains how optional fields behave (auto port selection, auto line type detection), making it clear when and how to use it. It doesn't explicitly mention when not to use it or alternatives, but the context of sibling tools makes the intended usage evident.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

topo_createB

新建一个空的 .topo 文件。

Args: path: 要写到哪,例如 "D:/work/campus.topo"。 overwrite: 目标已存在时是否覆盖,默认不覆盖。

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
overwriteNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It mentions the overwrite parameter and its default behavior, but does not explain what happens if the file already exists and overwrite is false (error or skip), nor does it describe success/failure outcomes or any side effects. For a file-creation tool, this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with the purpose stated in the first sentence and parameter details following in a structured list. It is front-loaded and contains no filler. Minor redundancy in saying 'empty' but it adds clarity. Overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema, the description does not explain what the tool returns (e.g., success indicator, file path). It also omits error handling, permission requirements, or edge cases like invalid paths. For a simple creation tool, this is incomplete; an agent would need to guess expected outcomes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It provides clear explanations for both parameters: path specifies the destination and overwrite controls overwriting behavior with a default. This adds meaning beyond the bare schema definitions, though it could be slightly more detailed (e.g., path format validation).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates a new empty .topo file, using a specific verb ('新建' meaning create) and resource. This distinguishes it from sibling tools like topo_add_devices or topo_connect, which modify existing topology, and topo_inspect which reads. The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. The description only states what it does, not when it should be invoked. There is no mention of prerequisites, exclusions, or alternative tools, leaving the agent to infer usage from the action itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

topo_exportA

把拓扑导成写文档用得上的格式。

Args: path: .topo 文件路径。 format: mermaid(流程图源码)、drawio(可导入 draw.io)、 csv(设备表 + 接口连接表)。 out_path: 输出文件路径,省略则只把内容返回、不落盘。 csv 会写成两个文件,分别加 _devices / _links 后缀。

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
formatNomermaid
out_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses that omitting out_path returns content instead of writing to disk, and that CSV output produces two files with suffixes. However, it doesn't mention permissions, side effects, or whether the operation is read-only. Since this tool writes files, it's a potentially mutating action, and the description should note any requirements (e.g., write access).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and organized into three bullet-like lines for the arguments. It front-loads the main purpose and then details parameters efficiently. No wasted words, though it could be slightly more structured with a brief example.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is an output schema (not shown) which likely describes return values, so the description needn't cover that. The description covers parameter semantics and file-writing behavior. It lacks error scenarios or edge cases (e.g., what happens if format is invalid), but for a simple export tool, this is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description is the only source of parameter meaning. It fully explains path (file path), format (with values and their meanings), and out_path (output file path, optional, with CSV splitting behavior). This is exemplary compensation for the sparse schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: exporting a topology into document-ready formats. It lists three concrete formats (mermaid, drawio, csv) and specifies what each yields. This distinguishes it from sibling tools like topo_inspect or topo_render, which are inspection/rendering rather than export.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what each format is for (flowchart source, draw.io import, CSV device/link tables) and how out_path behaves (omitting it returns content instead of writing). It doesn't explicitly say when to prefer this tool over siblings, but the export intent is clear enough that an agent would know to use it for output generation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

topo_inspectA

读一份 .topo,返回设备清单、链路清单和每台设备的空闲接口。

每台设备会带上 consolePort,那就是 device_* 工具要用的端口号。

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly indicates a read-only operation ('读') and describes the returned data, but it does not explicitly state that no modification occurs, nor does it cover edge cases like missing files or error behavior. The note about consolePort adds useful context for downstream usage, but the description is not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with zero waste. The primary action and outputs are stated first, and the second sentence adds a crucial, actionable detail (consolePort mapping) without redundancy. It is concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that the tool has an output schema (not shown) and a single parameter, the description provides enough context for correct invocation: it explains what is read and what is returned, and even how to interpret a key field (consolePort). It does not mention error conditions or file prerequisites, but those are not essential for an inspection tool with a simple interface.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has zero description coverage for the single 'path' parameter, so the description must compensate. It does so by specifying that the path points to a '.topo' file, which clarifies the expected format. This is sufficient for an agent to understand the parameter's meaning, though it doesn't elaborate on path resolution or validation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('读' = read), the resource (a .topo file), and the specific outputs (device list, link list, free interfaces per device). It also distinguishes itself from sibling tools like topo_create or topo_layout by focusing on inspection, and even ties its output to device_* tools via consolePort, making its role unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use this tool: to inspect a .topo file and retrieve device/link/interface data. It also hints at how to use the output with device_* tools via consolePort, which gives practical usage guidance. However, it does not explicitly state when not to use it or mention alternatives, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

topo_layoutA

自动排布设备坐标,不用手工填 x/y。

Args: path: .topo 文件路径。 mode: 布局方式。

    - layered(默认):按连线关系自动分层,出口在上、终端在下,
      最贴近常见的园区网拓扑图。
    - tree:从 root 出发按层级展开。
    - grid:网格铺开,适合还没连线的时候。
    - ring:环形,适合环网。
groups: 只在 layered 下有效。手工指定每一层放哪些设备,
    例如 [["Internet"], ["AR1"], ["Core1","Core2"]]。
    没列进去的设备会自动补到最后一层。
root: 只在 tree 下有效,指定树根设备名。省略则挑连线最多的那台。
columns: 只在 grid 下有效,每行几台。省略则自动取平方根。
zones: 可选的分区列表。每项包含 title(或 name)、devices,可选
    color(#RRGGBB)和 columns。给了 zones 后会使用分区布局,
    mode/groups/root/columns 不再参与排布。
replace_annotations: 拓扑已有背景图形或文字时,是否明确清空并按 zones
    重建。默认拒绝覆盖,因为 eNSP 标注没有稳定 ID,无法可靠区分手工项。
include_unassigned: zones 未包含的设备是否自动放入“未分区”背景框,默认是。
zone_columns: 整体画布每行放几个分区;0 表示自动。
allow_annotation_desync: 普通布局遇到已有标注时是否仍移动设备。默认否,
    避免背景框和文字留在旧位置;仅在确认标注无需同步时才设为 true。
ParametersJSON Schema
NameRequiredDescriptionDefault
modeNolayered
pathYes
rootNo
zonesNo
groupsNo
columnsNo
zone_columnsNo
include_unassignedNo
replace_annotationsNo
allow_annotation_desyncNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses key behavioral traits: default mode is layered, defaults for missing parameters (root picks most connected device, columns uses square root), zones override other layout params, replace_annotations defaults to false to avoid overwriting due to unstable eNSP annotation IDs, include_unassigned defaults true, and allow_annotation_desync defaults false. It also explains why certain defaults exist (annotation ID instability). However, it doesn't explicitly state what happens to existing device positions when layout is applied (does it move all devices? only some?) or whether it returns any success/failure info, though the output schema may cover that. Slight gap but not a contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is comprehensive but well-organized: starts with a one-line purpose, then breaks down each parameter with clear formatting (indented bullets and lists). It is longer than necessary for a simple tool but given the 10-parameter complexity, the structure is appropriate. It front-loads the core purpose and then details parameters in logical order. No redundant sentences, but could be slightly tightened (e.g., mode list could be more compact). Still, it earns high marks for structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a complex tool with 10 parameters, 0% schema description coverage, and no annotations. The description covers every parameter, all modes, interactions, defaults, and safety concerns (annotation handling). It addresses edge cases (unassigned devices, annotation desync, default refusal to overwrite). Given the complexity, the description is remarkably complete – an agent can confidently select the right parameters and understand the tool's behavior without needing external info. The output schema exists, so return values are likely covered there.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must fully compensate. It does: each parameter gets a detailed explanation of its effect, valid values (mode enum with descriptions), constraints (only in certain modes), defaults, and examples (groups example). It also explains interaction between parameters (zones override mode/groups/root/columns). The description adds substantial meaning beyond the bare schema types, making it easy for an agent to know exactly what to pass.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool automates device coordinate layout, avoiding manual x/y entry. It explicitly contrasts with manual placement and names the resource (.topo file). The verb '排布' (arrange/layout) plus '设备坐标' (device coordinates) and the distinction from manual entry make the purpose specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides extensive usage guidance: it explains each mode with concrete scenarios (layered for typical campus networks, tree from root, grid for pre-connection, ring for ring networks), clarifies parameter applicability (groups only in layered, root only in tree, columns only in grid), and gives explicit when-not-to-use guidance (e.g., 'avoid overwriting annotations unless needed'). It even warns about annotation desync and default refusal, covering both when and when-not to use specific flags.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

topo_removeA

删设备或删连线。

Args: path: .topo 文件路径。 devices: 要删的设备名列表,删设备会连带删掉它身上所有的线。 links: 要断开的链路,每项 {"from": "A", "to": "B"}。

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
linksNo
devicesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description must carry the full burden. It discloses a key side effect: deleting a device also deletes all its associated links. It does not mention other effects like confirmation or rollback, but the main destructive behavior is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, starting with the core action, then listing parameter meanings in a clear bullet-like format. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple destructive tool, the description covers the main action, parameter meanings, and a crucial side effect. It does not detail return values or error handling, but these are likely secondary given the tool's scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides no descriptions, so the description adds meaning. It explains `devices` as names whose deletion cascades to links, `links` as pairs to disconnect, and `path` as a .topo file path. This covers all three parameters even though it is brief.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool removes devices or links, which is a clear verb-resource pair. It does not name sibling tools for contrast, but the intent is unambiguous in the context of topology editing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for deletion/disconnection but does not explicitly contrast with `topo_add_devices` or `topo_connect`. The cascade behavior gives some context, but clear when-to-use vs. alternatives is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

topo_renderA

可选:把拓扑画成辅助 PNG,不用开 eNSP 就能粗看布局。

PNG 不是 eNSP 原生界面,也不能证明 VirtualBox、镜像或设备能启动; 正常建图和验收流程不依赖它。

Args: path: .topo 文件路径。 out_path: 图片输出路径,省略则和 .topo 同名同目录,扩展名换成 .png。 scale: 缩放比例,设备多、连线挤的时候调大到 1.5 左右。 show_ports: 是否在连线两端标出接口名,默认标。

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
scaleNo
out_pathNo
show_portsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It transparently states limitations ('PNG is not eNSP native, cannot prove devices start') and provides practical guidance on the 'scale' parameter. It doesn't describe error handling or file creation behavior, but covers the core behavioral aspects relevant to an agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with the core purpose. Each sentence adds value: purpose, limitations, and parameter explanations. It's slightly verbose but not wasteful, and the structure (purpose → limitations → args) is logical.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple render tool with 4 parameters, the description covers purpose, usage context, parameter semantics, and key limitations. It doesn't detail the output format beyond 'PNG' but that's sufficient given the output schema exists. The description is complete enough for an agent to decide when and how to use it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must fully compensate. It explains all four parameters: 'path' (file path), 'out_path' (default same name and directory with .png extension), 'scale' (increase to ~1.5 when crowded), and 'show_ports' (whether to mark interface names, default on). This adds significant meaning beyond the bare schema and includes usage hints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'draw the topology as an auxiliary PNG' with a specific verb and resource. It distinguishes itself from siblings by noting it's not eNSP native and not for validation, so an agent can immediately understand its scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: it's optional, for quick visual inspection without opening eNSP, and explicitly states that normal diagram creation and acceptance processes do not depend on it. While it doesn't name alternative sibling tools, it effectively implies when to use it (for rough layout preview) and when not (for validation).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

topo_validateA

检查拓扑有没有问题,建议在交给 eNSP 打开之前跑一次。

errors 会让 eNSP 打开异常或链路失效,必须改;warnings 只是提醒。 查的内容包括:设备重名、接口序号越界、一个口接了多条线、 console 端口冲突、孤立设备、图标/文字/背景框重叠,以及条件型号风险。

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses the scope of validation (specific check list) and severity interpretation. It implies read-only behavior (validation) but does not explicitly state it makes no modifications or require file format details. Still, it provides meaningful behavioral context beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: first sentence gives usage recommendation, second explains error/warning severity, third lists specific checks. No filler, front-loaded with the key recommendation, and every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is an output schema, return format is covered. The description explains when to use, what is checked, and severity. The only gap is the meaning of 'path' parameter, which is a single required field. Overall, it is nearly complete for a validation tool with a simple parameter list.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for the only parameter 'path'. The description does not explain what 'path' refers to (e.g., file path, directory, format). With zero schema description and no clarification, the agent cannot infer the correct value format, so this dimension is poorly served.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool validates a topology for problems before opening in eNSP, and lists specific checks (duplicate names, interface range, multi-connections, console conflicts, isolated devices, overlaps, model risks). This distinguishes it from siblings like topo_inspect or topo_layout by its validation role and pre-eNSP usage context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly recommends running before opening in eNSP and distinguishes errors (must fix) from warnings (reminders). This gives clear when-to-use context. However, it does not mention when not to use it or point to alternatives like topo_inspect for detailed inspection, leaving room for improvement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 16 tool updatesv1.2.0
    • First observeddevice_exec
    • First observeddevice_fetch_config
    • First observeddevice_probe
    • First observeddevice_push_config
    • First observeddevice_sessions
    • First observedenvironment_check
    • First observedlist_models
    • First observedtopo_add_devices
    • First observedtopo_connect
    • First observedtopo_create
    • First observedtopo_export
    • First observedtopo_inspect
    • First observedtopo_layout
    • First observedtopo_remove
    • First observedtopo_render
    • First observedtopo_validate

TDQS

A3.9/5.0

Scored across 16 tools

Disambiguation5/5

Each tool targets a distinct concern: topology file creation/layout/inspection/editing/validation/export versus device command/config/status/session operations. Potential overlaps like device_exec and device_push_config are clearly separated by purpose and usage.

Naming Consistency4/5

The topo_* and device_* prefixes create a strong overall pattern, and the verbs are consistent. list_models and environment_check break the prefix convention slightly, though their names are still clear and predictable.

Tool Count4/5

16 tools is slightly above the ideal range, but the count is justified by two clear subdomains: topology construction and device interaction. Every tool appears non-redundant and earns its place in the workflow.

Completeness4/5

The toolset covers the full topology lifecycle from creation to validation/export and pairs it with device command, config, query, and session management. Minor gaps like no explicit start/stop control or post-creation device setting update exist, but these fall outside the MCP's apparent scope.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers