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 过滤,避免潜在危险操作。

安装步骤

  1. 克隆本仓库到本地或服务器:git clone <仓库地址>,进入项目目录。
  2. 建立并激活 Python 虚拟环境(推荐)
    • Python 3.8+ 环境
    • python -m venv venv
    • source venv/bin/activate(Linux/macOS)或 .\venv\Scripts\activate(Windows)
  3. 安装依赖(若仓库提供 requirements.txt,请执行以下命令;若无,请自行安装 FastMCP、 Scrapli、 Pydantic、 python-dotenv 等依赖):
    • pip install fastmcp scrapli pydantic python-dotenv
  4. 配置凭证与清单文件
    • 在项目根目录创建或编辑 .env,设置: ROUTER_USERNAME=你的设备用户名 ROUTER_PASSWORD=你的设备密码
    • 确保 inventory 目录下存在 NETWORK.json,包含设备信息(host、platform、transport 等字段)。
  5. 启动 MCP 服务器
    • 在项目根目录运行:python MCPServer.py
    • 服务器启动后将监听客户端请求,等待 JSON-RPC 调用。
  6. 使用客户端对接
    • 通过支持的 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 等),服务器会抛出错误以防止危险操作。

服务器信息