MCP

收藏备用!Python+FastMCP从零搭MCP服务器,打通大模型与网络自动化

MCP 与 FastMCP 简介

MCP(Model Context Protocol,模型上下文协议)是一个开源标准协议,旨在让大语言模型(LLM,如 Claude、DeepSeek、通义千问等)安全、标准化地访问外部工具、数据源和功能。它解决了大模型“有脑无手”的问题,让 AI 能执行真实操作,比如查询数据库、调用 API、控制设备等。

FastMCP 是一个高效的 Python 框架(GitHub: https://github.com/jlowin/fastmcp),基于官方 MCP Python SDK 构建,但更简洁、生产就绪。它用装饰器方式快速搭建 MCP 服务器,支持工具(Tools)、资源(Resources)、提示(Prompts)等核心功能,非常适合从零开始构建。

你的标题提到“打通大模型与网络自动化”,完美契合!我们可以用 FastMCP 搭建一个 MCP 服务器,暴露网络自动化工具(如 ping 设备、查询路由器状态、执行 SSH 命令等),然后大模型就能通过 MCP 调用这些工具,实现自动化运维。

从零搭建 MCP 服务器步骤

1. 安装 FastMCP

推荐使用 uv(更快)或 pip:

pip install fastmcp
# 或使用 uv
uv pip install fastmcp

2. 基本 MCP 服务器示例

创建一个文件 server.py

from fastmcp import FastMCP

mcp = FastMCP(name="NetworkAutomationServer", description="网络自动化工具服务器")

@mcp.tool()
def ping_device(host: str) -> str:
    """Ping 指定主机,检查连通性
    Args:
        host: 主机 IP 或域名,例如 192.168.1.1 或 example.com
    """
    import subprocess
    try:
        result = subprocess.run(["ping", "-c", "4", host], capture_output=True, text=True, timeout=10)
        return result.stdout if result.returncode == 0 else f"Ping 失败: {result.stderr}"
    except Exception as e:
        return f"错误: {str(e)}"

@mcp.tool()
def get_interface_status(device_ip: str, username: str, password: str) -> str:
    """通过 SSH 查询网络设备接口状态(示例使用 paramiko,需要安装 paramiko)
    Args:
        device_ip: 设备 IP
        username: SSH 用户名
        password: SSH 密码
    """
    try:
        import paramiko
        client = paramiko.SSHClient()
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        client.connect(device_ip, username=username, password=password)
        stdin, stdout, stderr = client.exec_command("show interfaces status")  # 以 Cisco 示例,实际根据设备调整
        output = stdout.read().decode()
        client.close()
        return output or "无输出"
    except Exception as e:
        return f"SSH 连接失败: {str(e)}"

if __name__ == "__main__":
    mcp.run(transport="http", port=8000)  # 用 HTTP/SSE 模式运行,便于远程访问
  • 运行服务器
  python server.py

服务器将在 http://localhost:8000/mcp 监听。

  • 说明
  • @mcp.tool():将函数暴露为工具,大模型可调用。
  • FastMCP 自动从类型提示和 docstring 生成工具描述和参数 schema。
  • 对于网络自动化,建议安装额外库:pip install paramiko(SSH)、pip install netmiko(更高级的网络设备自动化)。

3. 更高级的网络自动化示例(使用 netmiko)

netmiko 是网络自动化神器,支持 Cisco、Huawei、Juniper 等设备。

安装:

pip install netmiko

扩展工具:

@mcp.tool()
def run_command_on_device(device_ip: str, username: str, password: str, device_type: str, command: str) -> str:
    """在网络设备上执行命令
    Args:
        device_ip: 设备 IP
        username: 用户名
        password: 密码
        device_type: 设备类型,如 'cisco_ios', 'huawei', 'juniper'
        command: 要执行的命令,如 'show ip interface brief'
    """
    from netmiko import ConnectHandler
    try:
        device = {
            'device_type': device_type,
            'ip': device_ip,
            'username': username,
            'password': password,
        }
        with ConnectHandler(**device) as net_connect:
            output = net_connect.send_command(command)
        return output
    except Exception as e:
        return f"执行失败: {str(e)}"

4. 如何让大模型使用这个服务器

  • 支持 MCP 的客户端:Claude Desktop、Cursor、Cline、DeepSeek 等。
  • 在客户端设置中添加你的 MCP 服务器 URL(如 http://your-ip:8000/mcp)。
  • 然后问大模型:“帮我 ping 一下 8.8.8.8” 或 “查询路由器 192.168.1.1 的接口状态”,它就会自动调用你的工具!

5. 安全注意

  • 生产环境别明文传密码!可以用密钥认证,或在工具中集成密钥管理。
  • FastMCP 支持企业级认证(OAuth 等),详见文档。
  • 建议用 HTTPS 部署(结合 Nginx 或 Cloudflare)。

资源推荐

  • FastMCP 官方文档:https://gofastmcp.com/
  • GitHub 示例:https://github.com/jlowin/fastmcp
  • MCP 中文入门:https://github.com/liaokongVFX/MCP-Chinese-Getting-Started-Guide
  • 网络自动化库:netmiko 文档 https://ktbyers.github.io/netmiko/

这个搭建超级简单,从零到运行只需几分钟。收藏备用没错,玩起来超爽!如果需要更复杂的例子(如批量设备管理、结合数据库),随时问我~

分类: MCP
文章已创建 3383

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部