Prisma SD-WAN MCP服务器
免责声明: 该项目是为教育和开源目的独立开发的个人作品。它不是Palo Alto Networks,股份有限公司或其任何附属公司的官方产品。所有商标、服务标志和公司名称均为其各自所有者的财产。
______________________________________________________________________
一个健壮的 模型上下文协议(MCP) 服务器 Palo Alto Networks Prisma SD-WAN.
此服务器弥合了AI代理(如Claude、Gemini或自定义LLM)与Prisma SD-WAN结构之间的差距。它支持对操作数据的安全、只读访问,允许代理通过自然语言执行库存审计、健康检查、拓扑分析和策略验证等任务。
目录
关于
Prisma SD-WAN MCP服务器将Prisma SASE API的复杂性抽象为清晰的语义工具,人工智能模型可以自主理解和调用这些工具。您的AI代理只是询问它需要什么,而不是导航REST端点、分页和令牌管理。
核心设计原则:
- 安全第一 …设计为 只读 界面。唯一的写入操作是
generate_site_config,生成本地YAML文件。不会向Prisma SD-WAN租户推送任何更改。 - 简化上下文 …原始API响应被解析并修剪到重要的字段,使LLM上下文窗口保持精简和集中。
- 多运输 …支持 工作室 (适用于Claude Desktop和本地客户端), 上海证券交易所 (用于远程/网络代理),以及 可流式传输的HTTP.
- 集装箱准备就绪 …带有生产就绪的Dockerfile,用于一致的部署。
- 自动重新身份验证 …透明地处理OAuth2令牌刷新。令牌持续15分钟;服务器在过期之前重新进行身份验证。
特性
| 类别 | 功能 |
|---|---|
| 站点管理 | 列出所有SD-WAN站点,检索单个站点的详细信息和配置 |
| 元素库存 | 查看ION设备、其状态、硬件详细信息和软件版本 |
| 网络拓扑 | 检索显示站点到站点连接的完整SD-WAN拓扑图 |
| 接口 | 检查每个站点和元素的LAN和WAN接口 |
| 路由 | 查询每个元素的BGP对等配置和静态路由 |
| 政策与安全 | 查看策略集定义和安全区域分配 |
| 事件和警报 | 查询最近的事件并检索按严重程度筛选的活动警报 |
| 应用程序 | 浏览整个结构中使用的应用程序定义 |
| 配置生成 | 从模板数据生成经过验证的站点配置YAML文件 |
先决条件
- Python 3.10+
- A. Prisma SASE租户 启用API访问
- A. 服务账号 至少具有只读权限
- 服务帐户凭据:
- 客户端ID - 客户端密钥 - TSG ID(租户服务组)
创建服务帐户
- 登录到 Prisma SASE门户网站
- 引导到 设置>身份和访问>服务帐户
- 使用创建新的服务帐户 Prisma SD-WAN 应用程序和只读角色
- 记下 客户端ID, 客户端密钥,和你的 TSG ID
安装
来自源头
git clone
cd prisma-sdwan
pip install fastmcp prisma-sase python-dotenv pyyaml jsonschema使用Docker
docker build -t prisma-sdwan-mcp .配置
环境变量
| 变量 | 描述 | 必填 |
|---|---|---|
PAN_CLIENT_ID | 服务帐户客户端ID(例如。, name@tsg.iam.panserviceaccount.com) | 是 |
PAN_CLIENT_SECRET | 服务帐户客户端密码 | 是 |
PAN_TSG_ID | 租户服务组ID | 是 |
PAN_REGION | API地区: americas 或 europe (默认值: americas) | 没有 |
.env文件
创建一个 .env 文件在 prisma-sdwan/ 目录:
PAN_CLIENT_ID=myaccount@1234567890.iam.panserviceaccount.com
PAN_CLIENT_SECRET=abc123-your-secret-here
PAN_TSG_ID=1234567890
PAN_REGION=americas安全说明: 永远不要承诺你的.env文件到版本控制。它已经包含在.gitignore.
用法
服务器支持三种传输模式,具体取决于AI客户端的连接方式。
标准模式(默认)
最适合本地集成,如Claude Desktop或基于CLI的MCP客户端。
python prisma_sdwan_mcp_server.py --transport stdioSSE模式
最适合远程或基于网络的AI代理。
python prisma_sdwan_mcp_server.py --transport sse --host 0.0.0.0 --port 8000流式HTTP模式
python prisma_sdwan_mcp_server.py --transport streamable-http --host 0.0.0.0 --port 8000码头工人
# Stdio mode (default)
docker run -i --rm \
-e PAN_CLIENT_ID=myaccount@tsg.iam.panserviceaccount.com \
-e PAN_CLIENT_SECRET=your-secret \
-e PAN_TSG_ID=1234567890 \
prisma-sdwan-mcp --transport stdio
# SSE mode with port mapping
docker run -d --rm \
-p 8000:8000 \
-e PAN_CLIENT_ID=myaccount@tsg.iam.panserviceaccount.com \
-e PAN_CLIENT_SECRET=your-secret \
-e PAN_TSG_ID=1234567890 \
prisma-sdwan-mcp --transport sse --host 0.0.0.0 --port 8000客户端集成
克劳德桌面
将以下内容添加到您的Claude Desktop MCP配置文件中:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json 窗户: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"prisma-sdwan": {
"command": "python",
"args": [
"/absolute/path/to/prisma_sdwan_mcp_server.py",
"--transport",
"stdio"
],
"env": {
"PAN_CLIENT_ID": "myaccount@tsg.iam.panserviceaccount.com",
"PAN_CLIENT_SECRET": "your-secret",
"PAN_TSG_ID": "1234567890"
}
}
}
}使用Docker:
{
"mcpServers": {
"prisma-sdwan": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "PAN_CLIENT_ID",
"-e", "PAN_CLIENT_SECRET",
"-e", "PAN_TSG_ID",
"prisma-sdwan-mcp",
"--transport", "stdio"
],
"env": {
"PAN_CLIENT_ID": "myaccount@tsg.iam.panserviceaccount.com",
"PAN_CLIENT_SECRET": "your-secret",
"PAN_TSG_ID": "1234567890"
}
}
}
}双子星命令行工具
添加到您的 settings.json:
{
"mcpServers": {
"prisma-sdwan": {
"command": "python",
"args": [
"/absolute/path/to/prisma_sdwan_mcp_server.py",
"--transport",
"stdio"
],
"env": {
"PAN_CLIENT_ID": "myaccount@tsg.iam.panserviceaccount.com",
"PAN_CLIENT_SECRET": "your-secret",
"PAN_TSG_ID": "1234567890"
}
}
}
}OpenCode/其他MCP客户端
任何兼容MCP的客户端都可以使用stdio传输进行连接。指向 prisma_sdwan_mcp_server.py 随着 --transport stdio 参数并提供所需的环境变量。
可用工具
所有工具都返回针对LLM消费优化的JSON格式数据。
| 工具名称 | 描述 | 参数 |
|---|---|---|
get_sites | 列出所有SD-WAN站点或按ID检索特定站点 | site_id (可选) |
get_elements | 列出所有ION设备元件或特定元件 | element_id (可选) |
get_machines | 硬件清单:机箱序列号、型号和机器详细信息 | machine_id (可选) |
get_interfaces | 站点中给定元素的LAN和WAN接口 | site_id, element_id |
get_wan_interfaces | 站点的广域网接口配置 | site_id |
get_policy_sets | SD-WAN策略集定义(路径、QoS、NAT规则) | 无 |
get_security_zones | 跨结构的安全区域定义 | 无 |
get_bgp_peers | 站点特定元素的BGP对等配置 | site_id, element_id |
get_static_routes | 元素的静态路由表 | site_id, element_id |
get_element_status | 离子元件的运行状态和健康状况 | element_id |
get_software_status | 软件版本、升级状态和映像详细信息 | element_id |
get_app_defs | 策略和报告中使用的应用程序定义 | 无 |
get_topology | 完整的SD-WAN任意网拓扑图(节点、链路和状态) | 无 |
get_events | 所有严重级别(严重、重大、轻微)的最近事件 | limit (可选,默认值:20) |
get_alarms | 激活的主要和关键警报 | limit (可选,默认值:20) |
generate_site_config | 生成经过验证的站点配置YAML文件 | site_id, elements, filename (可选), overwrite (可选) |
示例提示
连接后,尝试询问您的AI代理:
- *“显示SD-WAN结构中的所有站点。”*
- *“部署了哪些ION设备,它们运行的软件版本是什么?”*
- *“拉取DC West站点元素的BGP对等方。”*
- *“现在有任何关键警报吗?”*
- *“显示完整的网络拓扑。”*
- *“为站点ID 12345生成站点配置YAML。”*
- *“列出总部站点的所有广域网接口。”*
建筑
┌──────────────────┐ ┌──────────────────────┐ ┌─────────────────────┐
│ AI Agent │ MCP │ Prisma SD-WAN MCP │ REST │ Prisma SASE API │
│ (Claude, etc.) │◄──────►│ Server │◄──────►│ api.sase.palo... │
│ │ stdio/ │ prisma_sdwan_mcp_ │ HTTPS │ │
│ │ SSE │ server.py │ │ │
└──────────────────┘ └──────────────────────┘ └─────────────────────┘服务器充当翻译层:
- AI代理调用MCP工具(例如。,
get_sites) - 服务器将该调用映射到相应的Prisma SASE REST API端点
- 它自动处理身份验证、分页和错误恢复
- 响应被解析、简化,并作为干净的JSON返回
关键实施细节:
- 单文件架构 …所有的逻辑都存在
prisma_sdwan_mcp_server.py - OAuth2身份验证 通过
prisma_sase带有自动令牌刷新功能的SDK - 自动重新认证 401/403响应或令牌到期
- 配置验证 使用JSON模式(
schema.json)用于生成的YAML文件
故障排除
| 问题 | 可能原因 | 修复 |
|---|---|---|
Connection refused 或超时 | Prisma SASE API没有互联网连接 | 验证您是否可以访问 api.sase.paloaltonetworks.com 来自你的主人 |
Authentication failed | 凭据不正确 | 仔细检查 PAN_CLIENT_ID, PAN_CLIENT_SECRET,以及 PAN_TSG_ID |
403 Forbidden | 权限不足 | 确保服务帐户角色包括SD-WAN读取权限 |
Token expired 错误 | 不应该发生(自动刷新) | 如果持续存在,请重新启动服务器。令牌每15分钟自动刷新一次 |
ModuleNotFoundError: prisma_sase | 缺少依赖项 | 运行 pip install prisma-sase |
| 空响应 | 租户没有数据 | 验证您的TSG ID是否与具有活动SD-WAN站点的租户匹配 |
Region mismatch | 错误的API区域 | 设置 PAN_REGION=europe 如果您的租户在欧盟地区 |
调试日志记录
服务器日志会写入stderr。要捕获它们:
python prisma_sdwan_mcp_server.py --transport stdio 2>debug.log贡献
欢迎投稿!以下是如何开始:
- 分叉存储库
- 创建要素分支(
git checkout -b feature/my-new-tool) - 遵循现有的代码惯例(单文件架构,
@mcp.tool()图案) - 针对真实或模拟Prisma SASE租户进行测试
- 提交一份拉取请求,明确说明您的更改
添加新工具时:
- 把它们放进去
prisma_sdwan_mcp_server.py遵循@mcp.tool()装饰器模式 - 返回
json.dumps(data, indent=2)从每一个工具 - 保持对基本字段的响应精简,以提高LLM上下文效率
许可证
该项目根据 MIT许可证.
