该项目实现了一个模型上下文协议(MCP)服务器,该服务器封装了Cisco pyATS和Genie的功能。它通过使用JSON-RPC 2.0协议在STDIO上实现了与网络设备的结构化、模型驱动交互。
🚨 本服务器不使用HTTP或SSE。所有通信均通过STDIN/STDOUT(标准输入/输出)进行,使其非常适合安全、嵌入式、容器化或基于LangGraph工具集成。
🔧 功能概述
🚀 使用方法
export PYATS_TESTBED_PATH=/绝对路径/到/testbed.yaml
连续STDIO模式(默认)
python3 pyats_mcp_server.py
启动一个长时间运行的过程,从stdin读取JSON-RPC请求,并将响应写入stdout。
一次性模式
echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/discover"}' | python3 pyats_mcp_server.py --oneshot
处理单个JSON-RPC请求并退出。
📦 Docker支持
构建容器
docker build -t pyats-mcp-server .
运行容器(STDIO模式)
docker run -i --rm \
-e PYATS_TESTBED_PATH=/app/testbed.yaml \
-v /你的测试床文件夹:/app \
pyats-mcp-server
🧠 可用的MCP工具
工具 描述
run_show_command 安全执行show命令,可选解析
run_ping_command 执行ping测试并返回解析或原始结果
apply_configuration 应用安全配置命令(支持多行)
learn_config 获取运行配置(show run brief)
learn_logging 获取系统日志(show logging last 250)
所有输入都使用Pydantic模式进行验证,确保安全性和一致性。
🤖 LangGraph集成
在您的LangGraph管道中添加MCP服务器作为工具节点,如下所示:
("pyats-mcp", ["python3", "pyats_mcp_server.py", "--oneshot"], "tools/discover", "tools/call")
名称:pyats-mcp
命令:python3 pyats_mcp_server.py --oneshot
发现方法:tools/discover
调用方法:tools/call
基于STDIO的通信确保了与LangGraph工具调用模型的紧密集成,无需打开HTTP端口或暴露REST端点。
📜 示例请求
发现工具
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/discover"
}
运行Show命令
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "run_show_command",
"arguments": {
"device_name": "router1",
"command": "show ip interface brief"
}
}
}
🔒 安全特性
📁 项目结构
.
├── pyats_mcp_server.py # 包含JSON-RPC和pyATS集成的MCP服务器
├── Dockerfile # Docker容器定义
├── testbed.yaml # pyATS测试床(用户提供的)
└── README.md # 本文件
📥 MCP服务器配置示例(通过Docker的pyATS MCP)
要作为容器运行带有STDIO集成的pyATS MCP服务器,请像这样配置您的mcpServers:
{
"mcpServers": {
"pyats": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"PYATS_TESTBED_PATH",
"-v",
"/绝对路径/到/testbed/文件夹:/app",
"pyats-mcp-server"
],
"env": {
"PYATS_TESTBED_PATH": "/app/testbed.yaml"
}
}
}
}
{
"servers": {
"pyats": {
"type": "stdio",
"command": "python3",
"args": [
"-u",
"/Users/johncapobianco/pyATS_MCP/pyats_mcp_server.py"
],
"env": {
"PYATS_TESTBED_PATH": "/Users/johncapobianco/pyATS_MCP/testbed.yaml"
}
}
}
🧾 解释: command: 使用Docker启动容器化的pyATS MCP服务器
args:
-i: 保持STDIN打开用于通信
--rm: 执行后自动删除容器
-e: 注入环境变量PYATS_TESTBED_PATH
-v: 将本地测试床目录挂载到容器中
pyats-mcp-server: Docker镜像名称
env:
设置容器内测试床文件的路径(/app/testbed.yaml)
✍️ 作者
John Capobianco
产品营销倡导者,Selector AI
作者,《自动化您的网络》
如果您希望添加以下内容,请告知我:
我很乐意帮忙!