ENSP-MCP AI
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ENSP-MCP AIshow me R1's routing table"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ENSP-MCP
让 AI 通过 MCP 协议管理华为 eNSP 模拟网络设备,并提供拓扑可视化工具。
功能概览
MCP Server — 通过自然语言操作 eNSP 设备(CLI 执行、配置下发、配置保存、运行配置查看、网络诊断、健康检查、拓扑同步)
Topo Viewer — 浏览器拓扑可视化,支持上传
.topo/.xml/.json文件,自动生成topology.json并同步当前拓扑给 AICurrent Topology Context — AI 可通过
get_topology_context或ensp://topology/current直接读取当前网页上传拓扑,并优先把它作为当前会话的拓扑事实来源Prompt Layer — 内置
ensp_ops_playbook与ensp_senior_network_engineer两个 MCP Prompts,分别提供 topology-first 规则与资深网络工程师角色约束;若客户端不支持 MCP Prompts,可直接使用根目录prompts.md作为自定义提示词
Related MCP server: NetPilot-MCP
前置条件
Windows 10以上系统(eNSP 仅支持 Windows)
华为 eNSP 已安装并启动
Python 3.11–3.13(
.python-version默认选择 3.11.6)uv,用于创建虚拟环境和同步依赖
一个支持 MCP 的 AI 客户端(Claude Desktop / Claude Code / Cursor 等)
安装
当前运行依赖锁定为 FastMCP 4.0.11、MCP SDK 2.3.0 和 Pydantic 2.13.5。Python 要求为 3.11–3.13,默认版本为 3.11.6;开发依赖组记录了 uv 0.12.23。
依赖声明在 pyproject.toml,完整版本和下载校验信息记录在 uv.lock。requirements.txt 提供相同的直接运行依赖,推荐使用锁文件同步环境。
创建环境并启动
下载或克隆仓库后,在包含 pyproject.toml 的项目根目录打开 PowerShell,执行:
uv sync --locked
uv run --locked python -m ensp_mcp_server.serveruv sync --locked 根据 .python-version、pyproject.toml 和 uv.lock 创建或同步项目的 .venv。uv run 使用该虚拟环境运行服务,无需手动激活环境或全局安装 Python 依赖。虚拟环境不随源码发布。
协议兼容性
服务通过 stdio 支持新协议 2026-07-28,以及旧版握手协议 2024-11-05、2025-03-26、2025-06-18、2025-11-25。客户端与服务端协商共同支持的协议版本。
本地回归验证已覆盖 2026-07-28 与 2025-11-25 的 stdio 调用;FastMCP 3.4.0 / MCP SDK 1.30.0 客户端连接当前服务也已验证。测试脚本不随此仓库发布。其他列出的旧协议属于底层 SDK 的支持范围,不等于每个客户端都已逐一验证。
这里的兼容性指通信协议。服务源码当前按 FastMCP 4.0.11 / MCP SDK 2.3.0 运行,未实现降级到 FastMCP 3.x / MCP SDK 1.x 的运行环境兼容。服务提供 20 个工具、2 个资源和 2 个提示词。
依赖检查
在项目根目录完成依赖同步后,可以执行:
uv pip check --python .venv/Scripts/python.exe该命令检查已安装依赖是否兼容,不验证设备功能。
配置 MCP 客户端
先在项目根目录执行 uv sync --locked,创建 .venv。下面的 my/path 是演示项目目录,<项目根目录> 也是占位符,使用时替换为自己的实际项目目录。JSON 中的 Windows 路径可使用正斜杠,或将反斜杠写为 \\。
通用 stdio 配置
直接使用 uv 创建的虚拟环境中的 Python 启动服务:
{
"ensp-mcp": {
"type": "stdio",
"command": "my/path/.venv/Scripts/python.exe",
"args": [
"-m",
"ensp_mcp_server.server"
],
"cwd": "my/path"
}
}command 指向项目 .venv 中的解释器,cwd 指定包含 ensp_mcp_server 的项目根目录。使用 -m 启动时,必须确保项目根目录在模块搜索路径中,仅指定解释器路径并不能保证找到项目模块。
若客户端不支持 cwd,请在其界面设置服务工作目录为项目根目录;也可使用下面 Claude Code 示例中的 uv --directory 启动方式,由 uv 指定工作目录。若客户端不接受 type 字段,按其格式省略该字段。
Claude Code
使用命令行添加本地 stdio 服务:
claude mcp add --transport stdio ensp-mcp -- uv --directory "<项目根目录>" run --locked python -m ensp_mcp_server.server也可通过 Claude Code 支持的 MCP JSON 配置入口使用上面的通用配置。配置方式见 Claude Code 官方文档。
Claude Desktop、Cursor、Trae 等客户端
在客户端的本地 MCP 配置中设置解释器、启动参数和项目工作目录。Claude Desktop 的配置文件为 %APPDATA%\Claude\claude_desktop_config.json;其他客户端按自己的配置界面或文件格式填写。
如果界面只接受单个服务器对象,复制通用示例中 ensp-mcp 对应的对象;如果要求 mcpServers 结构,将整个示例对象放在 mcpServers 下。不要额外添加尾随逗号,并按客户端支持情况设置工作目录。
配置完成后重新加载该 MCP 服务。连接后应能列出本项目的工具;服务启动后,可直接访问随服务启动的 Web UI。
使用方式
1. 启动 eNSP 并运行设备
在 eNSP 中打开拓扑,启动所有设备,等待设备完成初始化。
2. 注册设备
有三种方式:
自动发现: 让 AI 执行 auto_discover。它首先查找 eNSP_Client.exe 进程及其 2000–2999 范围的本地控制台监听端口;如果进程枚举或端口关联不可用,则回退到当前网页上传拓扑生成的 topology.json,逐个 TCP 探测其中的 com_port。发现结果会合并到设备注册表,并保留拓扑中的设备名称。没有控制台端口的终端设备仍不会被发现。
手动注册: 在 eNSP 中右键设备 > 设置 > 查看串口号,然后让 AI 执行:
register_device(name="R1", port=2000)网页上传拓扑(主要推荐): 在 Web UI 上传 .topo 后,页面会自动生成 topology.json,并自动把拓扑设备同步进 MCP 注册表。
3. 开始使用
在 MCP 客户端连接服务后,先通过 get_topology_context 读取当前上传拓扑,或读取资源 ensp://topology/current,再使用自然语言提出操作目标。
如果客户端支持 MCP Prompts,建议启用 ensp_ops_playbook 与 ensp_senior_network_engineer;如果不支持,可直接使用项目根目录下的 prompts.md 作为自定义角色提示词。
"帮我看看 R1 的路由表"
"给 R1 和 R2 配置 OSPF"
"检查所有设备的健康状态"
"基于当前上传的拓扑检查各设备配置是否匹配"Topo Viewer 拓扑可视化
浏览器拓扑查看器,上传 .topo 文件即可渲染交互式网络图,并自动同步拓扑数据给 AI。
启动
uv run --locked python -m ensp_mcp_server.server上述命令在项目根目录执行。MCP 客户端已经启动服务时,可直接打开浏览器,无需另开一个相同服务实例:
http://127.0.0.1:18080/index.htmlAI 会优先通过读取当前网页生成的 topology.json、get_topology_context 或 ensp://topology/current 获取拓扑信息,而不是优先搜索本地 .topo 文件。
功能
上传
.topo/.xml/.json拓扑文件自动生成并保存
topology.json自动将拓扑中的设备同步进 MCP 注册表
终端输出面板展示连接、命令发送和回显内容
MCP 调用记录展示高层工具调用与异常信息
支持拓扑重新同步与一键清空
支持深色 / 浅色主题切换
支持终端字体大小调整
支持日志区拖拽调整高度
支持桌面端中等宽度与缩放场景下的布局优化
网页“一键清空”会删除当前拓扑快照,清除全部设备注册项并关闭相应活动控制台连接,其中包括手动注册项。再次使用前需要重新上传或注册设备。
MCP 工具列表
设备管理
工具 | 说明 |
| 注册 eNSP 设备(名称 + 端口) |
| 注销设备 |
| 列出所有已注册设备 |
| 自动发现并注册 eNSP 设备 |
| 将当前 |
CLI 与配置
工具 | 说明 |
| 执行单条查询/显示命令 |
| 使用当前拓扑同步后的设备名直接执行命令 |
| 自动进入 system-view,逐条下发配置;遇错停止并报告未执行命令 |
| 使用当前拓扑同步后的设备名下发配置 |
| 先校验全部批次,再按顺序下发;遇错停止后续设备 |
| 处理 Y/N 和默认文件名;收到保存成功回显和最终提示符才返回成功 |
| 查看运行配置(section 过滤需设备 VRP 支持;不支持时返回明确错误,可省略 section 获取完整配置) |
配置批次开始前会校验全部设备和命令。单设备及多设备批次遇到拒绝、超时或连接错误时停止后续配置,报告已确认、失败或结果未确认、未执行的部分,并尝试退出配置视图;已经生效的配置不会自动回滚。设备名与命令必须是非空单行字符串,配置列表必须非空。
注册、解析和注销设备名统一使用 casefold 匹配。再次注册同名设备时沿用原有名称并更新该条目,保留凭据;拓扑同步和自动发现也避免创建仅大小写不同的重复名称。
手动注册的控制台端口限 1–65535。拓扑中的非零控制台端口必须唯一;多个 PC/Client/Server 可使用端口 0,表示没有 CLI。无效拓扑上传或同步会在修改注册表前被拒绝;显式的 devices: [] 表示合法空拓扑。上传拓扑快照、注册表和同步清单使用原子文件替换,写入失败会恢复原状态。
save_config 会处理 Y/N 确认和带默认值的 cfg/zip 文件名提示。只有保存成功回显与其后的控制台提示符均出现时才确认成功;超时、断开或无法识别的交互会报错。报错不能证明保存一定没有生效,应检查实际状态后再决定后续操作。
multi_health_check 不指定设备时会检查全部注册项。若当前拓扑有端口 0 的终端,建议显式提供路由器或交换机名称,避免将“没有 CLI”误判为网络故障。
网络诊断
工具 | 说明 |
| 从设备发起 Ping |
| 从设备发起 Traceroute |
| 单设备健康检查(TCP + CLI) |
| 使用当前拓扑同步后的设备名进行健康检查 |
| 批量健康检查 |
拓扑发现
工具 | 说明 |
| 解析 eNSP |
| 搜索本地 |
| 获取当前网页上传拓扑的摘要上下文 |
MCP 资源
资源 URI | 说明 |
| 当前上传拓扑的上下文 |
| 当前设备注册列表 |
MCP Prompts
Prompt | 说明 |
| 拓扑优先的操作提示词,优先读取当前网页上传拓扑,再进行设备操作 |
| 资深网络工程师角色提示词,强调规划、配置、验证与故障排查 |
如果客户端不支持 MCP Prompts,可以复制根目录 prompts.md 中的提示词到客户端自定义指令。该文档不会因存在于仓库中而自动加载。
项目结构
eNSP-MCP/
├── .python-version # 默认 Python 3.11.6
├── pyproject.toml # Python 版本约束与依赖声明
├── uv.lock # uv 依赖锁文件
├── requirements.txt # 直接运行依赖
├── README.md # 安装与使用说明
├── index.html # 唯一前端入口
├── topo-viewer.css # Web UI 样式
├── topo-viewer.js # Web UI 逻辑
├── prompts.md # 客户端可直接粘贴的角色提示词
└── ensp_mcp_server/ # MCP Server 主包
├── __init__.py
├── server.py # MCP Server 入口 & 工具注册
├── web_ui.py # 本地 Web UI 服务
├── runtime.py # 运行时事件 / SSE
├── topology_context.py # 当前拓扑上下文与资源导出
├── prompts.py # ENSP 操作 Prompt 模板
├── config.py # 配置 & 设备注册表
├── console.py # Telnet 控制台连接
├── exceptions.py # 自定义异常
├── validation.py # 工具参数与拓扑校验
└── tools/
├── cli.py # CLI 执行 & 配置工具
└── topology.py # 拓扑发现与拓扑文件处理工具环境变量(可选)
变量 | 说明 | 默认值 |
| 日志级别 | WARNING |
项目未读取 ENSP_USERNAME / ENSP_PASSWORD 环境变量。注册或同步工具中的 username、password 参数目前只保存为设备元数据,控制台连接没有实现使用这些凭据自动登录。需要交互登录的设备不能仅靠填写这些字段完成连接。
本地数据与隐私
运行时生成的 devices.json、topology.json 和 topology_registry.json 保存在项目根目录,已列入 .gitignore。注册凭据以明文写入本地 JSON;不要将这些文件提交到公共仓库。.gitignore 不会取消已经被 Git 跟踪的文件。
设备配置、控制台回显和调用记录也可能包含密码、地址或其他敏感信息。分享截图、日志和配置前应检查并脱敏;客户端配置中只填写自己的路径和所需参数,仓库示例不需要包含真实凭据。
社区反馈
欢迎在 Issues 中留下你的想法或提出建议,一起完善这个项目。
License
MIT
Available Tools
20 toolsauto_discoverAuto DiscoverB
Auto-discover eNSP devices by scanning local ports.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 reveals the discovery mechanism (local port scanning) but says nothing about whether discovered devices are auto-registered, whether the scan can fail or be slow, or what happens when no devices respond.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the action and mechanism come first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description should explain what the scan returns (e.g., a list of discovered devices) and whether it mutates registration state. It leaves the agent unsure whether discovery is read-only reconnaissance or a state-changing registration step.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the baseline rule a 4 applies. There is nothing for the description to clarify about inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (auto-discover), a resource (eNSP devices), and the mechanism (scanning local ports), so the agent knows exactly what the tool does. It does not differentiate itself from siblings like discover_topology or register_device, which could also be read as device-discovery paths, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus register_device (manual registration) or discover_topology. The agent gets no trigger condition, no prerequisites, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_topologyDiscover TopologyA
Parse an eNSP .topo file, or summarize the current uploaded topology.json from the web UI when given that JSON path.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Full path to a .topo file, or to the uploaded topology.json snapshot |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It implies read-only parsing/summarization but does not state permissions, side effects, error behavior, or output shape, leaving significant gaps for 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single front-loaded sentence with no wasted words. Both operational modes are stated efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool the description is adequate for selection and invocation, but there is no output schema and the description does not explain what parsing returns or what the summary contains. That leaves the return behavior underspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameter is already documented. The description adds meaningful semantics by mapping the file_path value type to different behavior: .topo files are parsed, while the uploaded topology.json is summarized.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names specific verbs and resources: parsing an eNSP .topo file or summarizing a topology.json snapshot. It clearly distinguishes the two supported input modes, though it does not explicitly contrast itself with siblings like auto_discover or find_topo_files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states the condition for each mode: use .topo parsing when given a .topo file, and summarize when given the uploaded topology.json path. It does not mention when to prefer this over related discovery tools, but the usage context is still clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_cliExecute CliB
Execute a single display/query command on a device.
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | CLI command | |
| device_ip | Yes | Device name or IP |
TDQS
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 never states whether the command is restricted to non-mutating queries, what happens on an invalid or config-level command, timeout behavior, or how large output is handled — significant gaps for a tool that shells a CLI to a remote device.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, and the scope constraint ('single', 'display/query') comes first. It is arguably too terse for a command-execution tool, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description should explain the result shape, error signaling, or safety constraints for an arbitrary CLI execution tool. It supplies none of these, leaving the agent to guess at failure modes and output characteristics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (command, device_ip) are documented in the schema, so the baseline is 3. The description adds no syntax, format, or device-addressing detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Execute) and resource (a single display/query CLI command on a device), which the sibling list otherwise leaves ambiguous (mcp_execute, push_config). It does not name the sibling it is distinguished from, but the 'display/query' qualifier implicitly separates it from config-push tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Single' and 'display/query' imply read-only, one-command-at-a-time usage, but no explicit when-to-use guidance or exclusions versus mcp_execute or get_running_config are given. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_topo_filesFind Topo FilesB
Check whether the web UI already uploaded topology.json, and only then search for extra local .topo files if needed.
| Name | Required | Description | Default |
|---|---|---|---|
| search_dir | No | Optional search directory |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It does reveal a non-obvious behavioral trait — search is gated on prior web UI upload state — but says nothing about read-only safety, what happens when topology.json is absent, or what the result set looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with no padding, and the prerequisite check is front-loaded before the search action. The nested conditional makes it slightly harder to parse than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter lookup with no output schema and no annotations, the description explains the lookup conditions but not the return shape (paths? parsed topology? empty result semantics). It is minimally adequate but leaves the agent guessing about outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with search_dir already documented as an optional search directory. The description adds no extra meaning about the directory (defaults, scope, recursion), so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete action (check for the web-UI-uploaded topology.json, then search for local .topo files), so an agent can tell it is a topology file discovery tool. It does not differentiate itself from siblings like discover_topology or get_topology_context, and the conditional phrasing makes the headline purpose slightly murky.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an implicit condition for use ('only then search ... if needed'), which is more than nothing, but it never states when to prefer this over discover_topology or what to do if neither source exists. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_running_configGet Running ConfigC
Read the running configuration of a device.
| Name | Required | Description | Default |
|---|---|---|---|
| section | No | Optional section filter | |
| device_ip | Yes | Device name or IP |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Read' weakly implies a non-mutating operation, but nothing is said about required permissions, whether the device must be registered first, output size/truncation for large configs, or rate limits. That is a substantial gap for a device-facing read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no padding or redundancy. It is efficient, though its brevity borders on under-specification rather than optimal density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description should compensate by explaining what a running config read returns and any constraints, but it does not. An agent has no idea whether the result is truncated, paginated, or how the 'section' filter changes it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so device_ip and the optional 'section' filter are already documented in the schema. The description adds no format, syntax, or filtering semantics beyond the structured fields, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Read') and resource ('running configuration of a device'), which an agent can distinguish from push_config or save_config. However, it offers no explicit differentiation from siblings such as execute_cli or health_check, which also take a device and return device state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus alternatives like execute_cli or get_topology_context, and no prerequisites (reachability, credentials, device registration) are mentioned. The agent must infer the context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_topology_contextGet Topology ContextA
Preferred first step for topology-aware tasks. Read the latest topology uploaded from the web UI so the AI can understand current devices, links, and local ports.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does add real value by disclosing data provenance: the topology only reflects what was uploaded via the web UI, implying possible staleness. It does not state what happens when no topology exists, whether any permissions are required, or the shape/volume of the returned graph.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no waste, and the workflow positioning ('preferred first step') is front-loaded ahead of the data description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-argument read tool with no output schema, the description conveys the data source and the three entity types returned, which is close to sufficient. It leaves open the stale/empty-topology case, which an agent operating a topology workflow would benefit from knowing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly avoids inventing argument semantics that do not exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Read the latest topology') and names the payload it yields (devices, links, local ports), which separates it from discovery siblings. It stops short of naming discover_topology or find_topo_files explicitly, so an agent must still infer the boundary from 'latest topology uploaded from the web UI'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Preferred first step for topology-aware tasks' gives a clear trigger condition and positions the tool at the start of a workflow. It offers no explicit when-not guidance or named alternative (e.g., discover_topology, sync_topology_devices) for the case where no topology has been uploaded yet.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_checkHealth CheckC
Run a quick health check on one device.
| Name | Required | Description | Default |
|---|---|---|---|
| device_ip | Yes | Device name or IP |
TDQS
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, and it discloses almost nothing: no indication of what the check measures, whether device credentials/connectivity are required, how long "quick" takes, or whether the operation is read-only. Only a vague latency hint ("quick") is offered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the scope constraint front-loaded and no wasted words. It is efficient, though its brevity is partly under-specification rather than genuine conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and several near-duplicate sibling tools, the description should explain what a health check returns and how it differs from multi_health_check/mcp_health_check. None of that is present, leaving the agent unable to call it confidently or select it over alternatives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage ("Device name or IP"), so the schema already carries the semantics. The description adds nothing beyond "one device", which is why the baseline of 3 applies rather than a higher score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Run a quick health check") and scopes it to "one device", which implicitly separates it from the sibling multi_health_check. However, it never names the alternative tools (multi_health_check, mcp_health_check) or clarifies what distinguishes this variant from them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance. With three health-check siblings (health_check, mcp_health_check, multi_health_check) in the toolset, the agent gets no signal about which one to pick or under what conditions. "On one device" is the only hint, and it is never contrasted with the multi-device alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_devicesList DevicesB
List registered eNSP devices.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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, and it says nothing about whether the listing reflects a cached registry or queries live devices, whether authentication is required, or how large results are handled. The read-only nature is only weakly implied by the verb 'List'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler or redundancy, and the key concept (registered devices) is front-loaded. It is perhaps too terse to be maximally useful, but there is no wasted text to cut.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description should at least sketch what a listing contains (names, IDs, status, counts) and how it relates to discovery and registration tools. As written, the agent knows what the tool is called but not what it returns or when it beats its many siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4 and there is no parameter syntax for the description to compensate for. Nothing is missing on this dimension.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The phrase 'List registered eNSP devices' gives a clear verb (list) and a specific resource (registered eNSP devices), and 'registered' hints at a managed inventory rather than a live scan. It does not, however, differentiate itself from siblings like auto_discover, discover_topology, or sync_topology_devices, which an agent could easily confuse with a device listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no statement of prerequisites, and no pointer to alternatives. The word 'registered' is the only implicit signal distinguishing this from discovery tools such as auto_discover, leaving the agent to guess which sibling to call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mcp_executeMcp ExecuteC
Execute a single command on a topology-synced eNSP device by its name via local MCP console port.
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | CLI command | |
| device_ip | Yes | Topology device name or IP |
TDQS
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 never says whether the command mutates device state, what permissions or authentication the console port needs, whether execution is blocking, or what happens on failure/timeout — all material for an arbitrary-CLI-execution tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the verb, scope, and transport all land in one pass. It is appropriately sized, though brevity here partly reflects the missing guidance rather than disciplined editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations mean the description must explain behavior and results, and it does neither. For a tool that runs arbitrary CLI on a network device, an agent is left without return-format, error, or side-effect expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented ("CLI command", "Topology device name or IP"). The description adds only "by its name," which is arguably narrower than the schema's "name or IP" and contributes little beyond the structured fields — baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Execute a single command") plus the target scope ("topology-synced eNSP device") and transport ("via local MCP console port"). It does not, however, distinguish itself from the sibling execute_cli, which reads as functionally overlapping, so the agent cannot tell the two apart from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance and no named alternative. With siblings like execute_cli, push_config, and multi_device_push_config in the same namespace, the agent gets no signal about which tool to pick for a single command versus a batch or config push.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mcp_health_checkMcp Health CheckA
Check connectivity for a topology-synced eNSP device via local MCP console port.
| Name | Required | Description | Default |
|---|---|---|---|
| device_ip | Yes | Topology device name or IP |
TDQS
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 usefully discloses the transport (local MCP console port rather than IP-reachable ping), but never states that it is a read-only probe, what a failed check looks like, or whether it errors versus returning a status.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with no filler; the operative scope qualifier comes before the mechanism. Nothing needs trimming and nothing is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter probe with no output schema, the description covers what it does but not what the agent should expect back on success or failure. Adequate but leaves the result semantics to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter with 100% schema description coverage ('Topology device name or IP'), so the baseline is 3. The description adds only that the device should be topology-synced, which marginally narrows the accepted value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (check connectivity) and a scoped resource (a topology-synced eNSP device reached via the local MCP console port). The 'MCP console port' qualifier implicitly separates it from the plain health_check sibling, though it never names that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The scope constraints ('topology-synced', 'local MCP console port') imply when this tool applies, but there is no explicit statement of when to prefer it over health_check, multi_health_check, or ping_from_device. Usage must be inferred from the qualifiers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mcp_push_configMcp Push ConfigA
Push commands to a topology-synced device; stop on the first failure. Applied commands are not rolled back.
| Name | Required | Description | Default |
|---|---|---|---|
| commands | Yes | Configuration commands | |
| device_ip | Yes | Topology device name or IP |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose two genuinely important traits: execution halts on the first failing command, and applied commands are not rolled back. That is valuable irreversibility context. It still omits permission/auth requirements, whether commands run in configuration mode or are committed, and how this differs behaviorally from save_config or push_config.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short clauses, zero filler, and the most consequential fact (no rollback on failure) is placed where it will be read. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description covers the critical failure and reversibility semantics but leaves gaps around authentication, config-mode/commit behavior, and the distinction from the sibling config-push tools. Adequate but not complete for an agent deciding between several similarly named push tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters described ('Configuration commands', 'Topology device name or IP'), so the schema does the heavy lifting and a 3 is the baseline. The description adds one real semantic nuance — the commands array is applied sequentially and aborts on first failure — which the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (push), resource (commands), and target scope (a topology-synced device), which is far more than a restatement of the name. It implicitly separates this single-device tool from multi_device_push_config and push_config, but never names those siblings explicitly, so the differentiation is inferential rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'topology-synced device' implies a prerequisite (the device must already be in the synced topology), which is useful implied usage guidance. However, there is no explicit when-to-use/when-not, and no routing to the obvious alternatives (multi_device_push_config, push_config, mcp_execute) for different situations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
multi_device_push_configMulti Device Push ConfigA
Validate all batches, then push configuration sequentially. Stop remaining commands and devices on the first failure; no automatic rollback.
| Name | Required | Description | Default |
|---|---|---|---|
| devices | Yes | Device / command batches |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well on the critical failure model: validate-all-then-push-sequentially, halt remaining commands AND devices on first failure, and explicitly no automatic rollback. What is missing is auth/permission requirements, idempotency, and what validation actually rejects — meaningful gaps for a write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the most consequential fact (no rollback on failure) is placed at the end of the second sentence where it lands. Every clause adds operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nested-batch mutation tool with no annotations and no output schema, the description covers the essential behavioral contract (validation, sequencing, partial-failure handling, no rollback). It stops short of stating auth requirements or what a caller receives on success, but the core is complete enough to invoke safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter is documented in-schema as 'Device / command batches'. The description's references to 'batches', 'devices', and 'commands' are consistent with the schema but add no format, ordering, or size guidance beyond it, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource (push configuration) and the scope is implied as multi-device via 'remaining commands and devices' and the tool name. It is clear what the tool does, but it never explicitly contrasts itself with the single-device siblings push_config / mcp_push_config / execute_cli, so an agent must infer the multi-device distinction from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains execution semantics but gives no when-to-use guidance and names no alternatives, despite several overlapping siblings (push_config, mcp_push_config, execute_cli, mcp_execute). An agent cannot tell from this text when to pick multi_device_push_config over push_config for a batch of devices.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
multi_health_checkMulti Health CheckC
Run health checks for multiple devices.
| Name | Required | Description | Default |
|---|---|---|---|
| device_names | No | Optional device name list |
TDQS
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, and it discloses almost nothing: no auth/permission needs, no rate-limit or timeout behavior, no indication of what happens when device_names is omitted or empty, and no description of partial-failure handling across devices. Only the batching nature of the call is conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; nothing is wasted. Its brevity is appropriate, though it leaves no room for the scoping detail the tool needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description must carry everything, and it does not: it omits the semantics of the optional parameter, the expected result shape, and how per-device failures are reported. For a batch tool in a family with several near-identical siblings, that leaves too much unresolved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single device_names parameter, so the baseline is 3. The description adds no meaning beyond the schema — it does not explain whether omitting device_names means 'all devices' or 'no devices', which is the key ambiguity for an optional array parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Run health checks') and scopes it to 'multiple devices', which distinguishes it from the singular health_check and mcp_health_check siblings. However, it never defines what a health check entails or what 'multiple' means operationally.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The plurality implies bulk use, but the description never says when to pick this over health_check, mcp_health_check, or the push_config family, and gives no prerequisites or exclusions. An agent must infer the selection rule purely from the word 'multiple'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ping_from_devicePing From DeviceC
Run ping from a device.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Ping count | |
| device_ip | Yes | Device name or IP | |
| source_ip | No | Optional source IP | |
| target_ip | Yes | Ping target IP |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden: it does not say whether the call blocks for the duration of the ping, what happens on timeout, whether it needs SSH/credentials, or what the output looks like. 'Run ping' implies a network operation but discloses no operational traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the verb and resource front-loaded and zero filler. It is efficient, though the terseness borders on under-specification rather than deliberate brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A four-parameter network-diagnostic tool with no annotations and no output schema needs the description to explain behavior around blocking, failure modes, and result shape. None of that is present, leaving significant gaps for an agent invoking it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each of the four parameters (device_ip, target_ip, count, source_ip) is already documented in the schema. The description adds no semantics beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (ping) and resource (from a device), which is clear enough to distinguish from unrelated siblings like push_config or get_running_config. It does not, however, differentiate itself from the near-identical sibling traceroute_from_device.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus traceroute_from_device, execute_cli, or health_check, and no mention of prerequisites such as reachability or permissions. The agent gets no context for choosing 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.
push_configPush ConfigA
Push configuration commands sequentially; stop on the first failure and report unexecuted commands. Applied commands are not rolled back.
| Name | Required | Description | Default |
|---|---|---|---|
| commands | Yes | Configuration commands | |
| device_ip | Yes | Device name or IP |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses sequential execution, fail-fast with reporting of unexecuted commands, and critically that applied commands are NOT rolled back. That non-atomic, partial-failure semantics is exactly the kind of trait an agent needs. It stops short of covering authorization requirements or connection prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler; the fail-fast behavior is front-loaded immediately after the verb, and the no-rollback caveat follows. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter mutation tool with no annotations and no output schema, the description covers the critical execution semantics an agent must know before invoking it. It omits device access prerequisites and how results are surfaced, but those gaps are modest.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (device_ip, commands) are documented in the schema with validation constraints, so the schema does the heavy lifting. The description adds no format or meaning beyond it, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Push configuration commands') with execution semantics, so the operation is unambiguous. It does not, however, differentiate itself from overlapping siblings such as execute_cli, mcp_push_config, or multi_device_push_config, leaving the agent to infer scope from the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance and no named alternative, despite three closely related siblings (execute_cli, mcp_push_config, multi_device_push_config). The only contextual cue is the single device_ip parameter, which the agent must interpret on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_deviceRegister DeviceC
Register an eNSP device by name and TCP port.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Device name, e.g. R1 | |
| port | Yes | Local TCP port, e.g. 2000 | |
| password | No | Optional password | |
| username | No | Optional username |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does not meet it. It says nothing about whether registration is idempotent, whether it overwrites an existing entry for the same name, whether it actively connects to the port, or whether username/password are needed for authentication.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though the extreme brevity is partly the cause of the missing behavioral context rather than pure conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a state-mutating registration tool with four parameters, no annotations, and no output schema, the description is thin: it omits side effects, authentication requirements, error conditions (port in use, name collision), and the relationship to unregister_device. The schema covers inputs, but nothing covers behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, including examples (R1, 2000) for both required fields, so the schema does the heavy lifting. The description only restates name and TCP port and adds no semantics for the optional username/password beyond what the schema already documents, which is the baseline 3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ("Register") and resource ("eNSP device") plus the two key identifiers (name, TCP port), so the agent can distinguish it from unregister_device or list_devices. It stops short of stating what registration actually accomplishes (e.g., creating a tracked endpoint) or how it relates to the credential parameters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites (a device must presumably already be listening on that local port), and no mention of alternatives such as auto_discover or discover_topology that also add devices. The agent must infer all context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_configSave ConfigB
Save configuration, answering Y/N and accepting a default filename. Success requires a save completion message and final console prompt.
| Name | Required | Description | Default |
|---|---|---|---|
| device_ip | Yes | Device name or IP |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses interactive behavior (answering Y/N prompts) and a success condition (save completion message and final console prompt), but omits whether this is a persistent write, whether it can overwrite configuration, and what permissions are needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence that front-loads the action. It is appropriately sized for a one-parameter tool, though the phrasing around Y/N and default filename is somewhat terse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description gives some helpful success criteria but remains incomplete about what config is saved, whether the operation is persistent, and how the Y/N and filename interactions actually work.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single parameter device_ip is documented in the schema itself. The description adds no meaning beyond that and introduces 'default filename' without clarifying that it is not a parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource ('Save configuration') and adds interaction details, but does not differentiate from config-related siblings such as push_config or mcp_push_config.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no explicit when-to-use guidance, prerequisites, or comparison to alternatives like push_config. Usage is only implied by the name and the brief save description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_topology_devicesSync Topology DevicesC
Register devices from topology.json into the MCP device registry using their eNSP local console ports.
| Name | Required | Description | Default |
|---|---|---|---|
| password | No | Optional password to store with each device | |
| username | No | Optional username to store with each device | |
| file_path | No | Optional topology.json path |
TDQS
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 identifies the source and registry destination, but does not describe idempotency, duplicate handling, overwrite behavior, authentication/prerequisite requirements, or what happens when the file is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. The action, source file, target registry, and transport context are all stated efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation-like sync operation with no annotations and no output schema, the description is too thin. It omits prerequisites, duplicate/update behavior, and return semantics that an agent would need before invoking it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three optional parameters are already documented. The description adds context that file_path points to topology.json and credentials are stored per device, but does not add detailed semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action and resource: register devices from topology.json into the MCP device registry. The topology-file source and eNSP local console ports give useful scope, though it does not explicitly contrast with sibling tools like register_device or auto_discover.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no explicit guidance on when to use this tool versus register_device, auto_discover, discover_topology, or find_topo_files. Usage is only implied by the mention of topology.json.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
traceroute_from_deviceTraceroute From DeviceC
Run traceroute from a device.
| Name | Required | Description | Default |
|---|---|---|---|
| device_ip | Yes | Device name or IP | |
| source_ip | No | Optional source IP | |
| target_ip | Yes | Traceroute target IP |
TDQS
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, and it discloses almost nothing: no timeout/latency characteristics, no indication of whether the call is blocking, no note on what the hop-by-hop output contains, and no error behavior for unreachable devices. 'Run traceroute' only restates the operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler, which is efficient. It is arguably over-terse for a diagnostic tool, but nothing in it is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and no parameter detail in the description, an agent cannot tell what the call returns (hop list, latency, failure modes) or how long it may block. For a network operation with real latency, this leaves meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — device_ip, source_ip, and target_ip are each documented in the schema with required/optional status. The description adds no format, syntax, or constraint detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Run traceroute from a device'), and the network-diagnostic intent is immediately clear, especially against the analogous sibling ping_from_device. It does not explicitly differentiate itself from that sibling or from execute_cli, which could also run a traceroute, but the purpose itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus ping_from_device, health_check, or execute_cli, and no mention of prerequisites such as device reachability or required permissions. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unregister_deviceUnregister DeviceC
Remove a registered eNSP device.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Device name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. "Remove" implies a destructive mutation, but it never states whether the removal is reversible, whether it deletes stored configuration or only the registration entry, or what happens if the name does not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the verb and resource front-loaded and zero filler. It is efficient, though the brevity is partly a consequence of under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive tool with no annotations and no output schema, the description should explain the effect of removal and any error conditions. As written it gives the agent nothing beyond the name.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single "name" parameter is already documented in the schema, including its validation pattern. The description adds no extra meaning beyond that baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ("Remove") plus specific resource ("a registered eNSP device"), which is clearly the inverse of the sibling register_device. It does not explicitly name that sibling or the list_devices alternative, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this rather than register_device, list_devices, or sync_topology_devices, and no prerequisites (e.g. whether the device must be reachable or already present). The agent must infer the trigger condition from the name alone.
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.
20 tool updates
v0.2.0- First observed
auto_discover - First observed
discover_topology - First observed
execute_cli - First observed
find_topo_files - First observed
get_running_config - First observed
get_topology_context - First observed
health_check - First observed
list_devices - First observed
mcp_execute - First observed
mcp_health_check - First observed
mcp_push_config - First observed
multi_device_push_config - First observed
multi_health_check - First observed
ping_from_device - First observed
push_config - First observed
register_device - First observed
save_config - First observed
sync_topology_devices - First observed
traceroute_from_device - First observed
unregister_device
TDQS
Scored across 20 tools
Several tools are near-duplicates with only subtle target differences: execute_cli vs mcp_execute, push_config vs mcp_push_config, and health_check vs mcp_health_check. Topology tools such as discover_topology, find_topo_files, get_topology_context, and sync_topology_devices also overlap enough that an agent could easily choose the wrong one.
Most tools use snake_case verb_noun naming, but the set mixes plain names with mcp_ and multi_ prefixes, and health_check is noun-first rather than verb-first. The pattern is readable but not fully predictable across the whole server.
20 tools is on the heavy side for an eNSP device-management server, especially because several mcp_ variants duplicate their base counterparts. The scope is plausible, but the surface feels somewhat inflated by redundant topology-synced-device versions.
Core workflows are covered: device registration, discovery, CLI execution, configuration push/save, connectivity checks, and topology synchronization/context. Minor gaps remain, such as device metadata updates, broader batch CLI execution, topology editing, and explicit rollback support.
Maintenance
Related MCP Connectors
AI helper for choosing and speccing network & security products from Cisco, Arista, Juniper and more
Remote MCP for RunComfy: ComfyUI deployments, hosted models, LoRA training. 31 tools.
Protocol-native energy infrastructure orchestration for AI data centers. Provides 46 MCP tools across 8 grid protocols (IEC-61850, DNP3, Modbus, OCPP, OpenADR, IEEE 2030.5, IEC 60870-5-104, ICCP) with 5 core API primitives: connect, dispatch, settle, comply, and intel. Enables AI agents to programmatically interact with substations, grid interfaces, and energy assets for real-time workload-grid coordination.
Network hardware BOMs, built inside your AI assistant
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables AI-powered network engineering by providing natural language control over GNS3 network simulations. Supports creating projects, building network topologies, managing devices, controlling simulations, and analyzing network traffic through conversational AI interactions.4227MIT
- AlicenseNot gradedqualityFmaintenanceEnables large language models to manage network devices (Cisco, Huawei, H3C, Ruijie) via Telnet/SSH, supporting command execution, configuration, and diagnostics.15MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to automate management and configuration of Huawei eNSP virtual network devices via Telnet, supporting device discovery, command execution, status query, and network diagnostics.-
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with local H3C Cloud Lab network simulation environments, allowing discovery of projects, devices, and links, as well as execution of Comware CLI commands.1Apache 2.0