Neta MCP 服务器(基于 FastMCP 的网络自动化后端)
使用说明内容(Markdown格式)
使用说明
项目简介
本仓库实现了一个基于 FastMCP 的 MCP 服务器,用于对多厂商网络设备进行上下文驱动的自动化操作。服务器暴露若干工具(如执行 show 命令、批量推送配置、获取网络意图、快照设备状态等),并通过 JSON-RPC 与 LLM 客户端通信,提供安全、可扩展的上下文服务。
主要功能点
- MCP 服务器核心:处理来自客户端的 JSON-RPC 请求,执行相应工具并返回结果。
- 资源与工具管理:通过 inventory.json(网络设备清单)管理资源,对设备执行命令、配置变更、快照等操作。
- 异步执行能力:使用 Scrapli 的异步接口实现对设备的并发操作,提升执行效率。
- 工具集合:
- run_show:对指定设备执行任意 show 命令并返回结果。
- push_config:对一个或多个设备推送配置命令,支持并发执行。
- get_intent:返回当前定义的网络意图(INTENT.json)。
- snapshot_state:对指定设备在给定配置文件下进行状态快照,并存储结果。
- 环境依赖与配置:通过 .env 文件提供设备登录凭据,Inventory 文件提供设备信息。
- 安全性与约束:对特定命令进行 forbiddance 过滤,避免潜在危险操作。
安装步骤
- 克隆本仓库到本地或服务器:git clone <仓库地址>,进入项目目录。
- 建立并激活 Python 虚拟环境(推荐)
- Python 3.8+ 环境
- python -m venv venv
- source venv/bin/activate(Linux/macOS)或 .\venv\Scripts\activate(Windows)
- 安装依赖(若仓库提供 requirements.txt,请执行以下命令;若无,请自行安装 FastMCP、 Scrapli、 Pydantic、 python-dotenv 等依赖):
- pip install fastmcp scrapli pydantic python-dotenv
- 配置凭证与清单文件
- 在项目根目录创建或编辑 .env,设置: ROUTER_USERNAME=你的设备用户名 ROUTER_PASSWORD=你的设备密码
- 确保 inventory 目录下存在 NETWORK.json,包含设备信息(host、platform、transport 等字段)。
- 启动 MCP 服务器
- 在项目根目录运行:python MCPServer.py
- 服务器启动后将监听客户端请求,等待 JSON-RPC 调用。
- 使用客户端对接
- 通过支持的 MCP 客户端向服务器发起请求,调用已注册的工具(如 run_show、push_config、get_intent、snapshot_state)。
- 客户端无需运行额外的服务器组件,只需要正确配置对接信息即可。
服务器配置
以下为 MCP 服务器对接端的配置示例(为 MCP 客户端准备的连接信息,请按实际环境使用一个可执行的命令来启动服务器;客户端无需此处的实现细节): { "server_name": "mcp_automation", "command": "python", "args": ["MCPServer.py"], "work_dir": "/path/to/netaimcp", "notes": "请确保服务器上已设置 ROUTER_USERNAME 与 ROUTER_PASSWORD 环境变量,用于设备 SSH 登录。FastMCP 将负责对客户端的 JSON-RPC 请求进行调度与响应。" }
字段说明:
- server_name: MCP 服务器在你的环境中的名称,示例为 mcp_automation,与代码中的 FastMCP 实例名称保持一致。
- command: 启动服务器的命令,一般为 Python 解释器。
- args: 启动命令的参数,通常包括要执行的入口脚本,如 MCPServer.py。
- work_dir: 服务器工作目录,确保脚本和所需的 inventory、intent、snapshots 等资源在可访问的路径下。
- notes: 额外说明,例如需要的环境变量、权限要求等。
基本使用方法
- 启动服务器后,客户端通过 MCP 协议对接并发送请求,服务器将返回对应的工具执行结果或状态信息。
- 常用工作流程:
- 指定设备执行 show 命令,获取设备状态信息。
- 对一组设备推送配置,完成集中化的变更管理。
- 获取网络意图,作为后续 LLM 决策的参考。
- 在变更前后对设备状态进行快照,便于回溯和对比。
- 安全性与错误处理:若请求中包含被禁止的命令(如 reload、format、delete 等),服务器会抛出错误以防止危险操作。