使用说明
项目简介
pyATS MCP Server 是一个 MCP 服务器的实现,它基于 Cisco pyATS 和 Genie 库,旨在通过标准化的 MCP 协议,将强大的网络自动化功能以工具的形式暴露给大型语言模型(LLM)客户端。该服务器不使用 HTTP 或 SSE,而是选择 STDIN/STDOUT 进行通信,使其非常适合安全性要求高、嵌入式、容器化或基于 LangGraph 的工具集成场景。
主要功能点
- 网络设备交互: 连接到 pyATS 测试床文件中定义的 Cisco IOS/NX-OS 设备。
- 命令执行: 安全地执行经过验证的 CLI 命令 (如 'show', 'ping'),并返回结构化(解析后)或原始输出。
- 配置变更: 允许在网络设备上执行受控的配置更改。
- 工具发现与调用: 通过 'tools/discover' 和 'tools/call' 方法暴露一组预定义的工具,方便 LLM 客户端发现和使用。
- 安全性: 具备输入验证机制,并阻止不安全的操作和命令注入。
- 多种运行模式: 支持持续 STDIO 模式和单次请求模式,适应不同的集成需求。
- Docker 支持: 提供 Docker 镜像,方便部署和容器化运行。
安装步骤
-
环境准备: 确保已安装 Python 3.6 或更高版本,并且已安装 'pyats' 和 'genie' 库。如果未安装,可以使用 pip 进行安装:
pip install pyats genie -
设置测试床文件路径: 需要配置 'PYATS_TESTBED_PATH' 环境变量,指向你的 pyATS 测试床描述文件 ('testbed.yaml') 的绝对路径。例如:
export PYATS_TESTBED_PATH=/absolute/path/to/testbed.yaml请将 '/absolute/path/to/testbed.yaml' 替换为你的实际测试床文件路径。测试床文件定义了要连接的网络设备信息。
-
运行服务器:
- 持续 STDIO 模式 (默认): 运行以下命令启动服务器,服务器将持续监听标准输入,处理 JSON-RPC 请求,并通过标准输出返回响应。
python3 pyats_mcp_server.py - 单次请求模式: 使用 '--oneshot' 参数运行服务器,服务器将处理单个 JSON-RPC 请求后退出。这种模式适用于 LangGraph 等工具集成场景。
python3 pyats_mcp_server.py --oneshot
- 持续 STDIO 模式 (默认): 运行以下命令启动服务器,服务器将持续监听标准输入,处理 JSON-RPC 请求,并通过标准输出返回响应。
服务器配置 (MCP 客户端)
MCP 客户端需要配置以下 JSON 格式信息以连接到 pyATS MCP 服务器。
{ "serverName": "pyats-mcp-server", "command": "python3", "args": ["pyats_mcp_server.py"] }
配置参数说明:
- 'serverName': 服务器名称,可以自定义,用于在客户端标识该服务器。例如: '"pyats-mcp-server"'。
- 'command': 启动 MCP 服务器的命令。这里是 'python3',假设 'python3' 命令在系统 PATH 环境变量中。
- 'args': 启动命令的参数列表。这里是 '["pyats_mcp_server.py"]',指向服务器脚本文件。
对于单次请求模式,MCP 客户端配置如下:
{ "serverName": "pyats-mcp-server-oneshot", "command": "python3", "args": ["pyats_mcp_server.py", "--oneshot"] }
配置参数说明:
- 'serverName': 服务器名称,例如: '"pyats-mcp-server-oneshot"'。
- 'command': 启动 MCP 服务器的命令,仍然是 'python3'。
- 'args': 启动命令的参数列表。这里增加了 '--oneshot' 参数,即 '["pyats_mcp_server.py", "--oneshot"]',指定服务器以单次请求模式运行。
注意: MCP 客户端需要将 JSON-RPC 请求通过标准输入 (stdin) 发送给 MCP 服务器,并从标准输出 (stdout) 读取 JSON-RPC 响应。具体实现方式取决于 MCP 客户端的类型和编程语言。
基本使用方法
-
发现工具 (tools/discover): 发送以下 JSON-RPC 请求到服务器的标准输入,以获取服务器提供的工具列表和工具的描述信息及输入参数 schema。
{"jsonrpc": "2.0", "id": 1, "method": "tools/discover"}服务器将在标准输出返回 JSON-RPC 响应,其中 'result' 字段包含工具列表。
-
调用工具 (tools/call): 发送以下 JSON-RPC 请求到服务器的标准输入,以调用指定的工具。
{ "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "run_show_command", "arguments": { "device_name": "router1", "command": "show ip interface brief" } } }请求参数说明:
- 'params.name': 要调用的工具名称,例如 '"run_show_command"'。
- 'params.arguments': 工具的参数,需要符合工具的 'inputSchema' 定义。例如 'run_show_command' 工具需要 'device_name' 和 'command' 参数。
服务器将在标准输出返回 JSON-RPC 响应,其中 'result' 字段包含工具执行结果,或 'error' 字段包含错误信息。
更多示例请求: 请参考仓库 'README.md' 文件中的 "Example Requests" 部分,了解更多工具调用示例。
信息
分类
开发者工具