项目简介

本项目是一个使用FastMCP框架构建的MCP服务器示例,它演示了如何使用FastAPI和Docker来部署提供特定功能的MCP服务。该示例包含了两个独立的MCP服务器:天气服务数学计算服务。这些服务器可以被LLM客户端(如Claude或自定义Agent)调用,以扩展LLM的能力。通过Docker容器化部署,MCP服务器可以方便地在本地或云端环境中运行,并提供远程访问能力,增强了安全性和可扩展性。

主要功能点

  • 天气服务 (Weather Server):
    • 提供 'get_weather' 工具:根据经纬度查询当前温度。
    • 提供 'get_coordinates' 工具:(示例中未实际实现坐标查询功能,仅返回工具信息)
  • 数学计算服务 (Math Server):
    • 提供 'add' 工具:执行加法运算。
    • 提供 'multiply' 工具:执行乘法运算。
  • FastAPI 集成: 使用FastAPI框架作为Web服务器,承载FastMCP服务器,并处理HTTP请求和SSE连接。
  • SSE 和 Stdio 传输协议支持: 支持通过 Server-Sent Events (SSE) 和标准输入输出 (Stdio) 两种方式与MCP客户端通信。
  • Docker 容器化部署: 通过 Docker 和 Docker Compose 部署MCP服务器,方便快捷,并提高安全性。
  • 远程访问能力: 部署在Docker容器中的MCP服务器可以通过网络远程访问,方便集成到云端或远程LLM应用中。
  • 本地模型示例: 提供了一个使用本地 Ollama 模型 (端口 11434) 的 Agent 示例,展示如何与MCP服务器交互。
  • MCP Inspector 集成: 支持使用 MCP Inspector 工具进行测试和调试,提供图形化界面,方便用户交互和验证MCP服务器的功能。

安装步骤

  1. 克隆仓库:

    git clone https://github.com/AdLibML/mcpserver.git
    cd mcpserver
  2. 安装依赖 (使用 Poetry):

    poetry install
  3. 创建 '.env' 文件: 在项目根目录下创建 '.env' 文件,并根据需要配置以下环境变量(示例):

    MATH_URL=http://localhost:5001/mcp/sse      # 数学服务 SSE 端点 (远程模式)
    WEATHER_URL=http://localhost:5000/mcp/sse   # 天气服务 SSE 端点 (远程模式)
    TRANSPORT=sse                               # 传输协议,可选 sse 或 stdio (远程模式建议sse)
    MODE=prod                                  # 运行模式,可选 prod 或 local (prod 为远程模式)
    PORT_MATH_SERVER=5001                       # 数学服务端口 (远程模式)
    PORT_WEATHER_SERVER=5000                    # 天气服务端口 (远程模式)
    # SMITHERY_API_KEY=your-api-key             # (可选) 其他服务API密钥

服务器配置

MCP客户端需要配置MCP服务器的连接信息才能使用其提供的工具。以下是根据仓库信息生成的 JSON 格式 服务器配置信息示例,用于 'agent.py' 中的 'server_params' 字典。

本地 Stdio 模式 (MODE=local):

{
  "math": {
    "command": "python",
    "args": ["/path/to/mcpserver/src/servers/math_server.py"],  // 请替换为 math_server.py 的实际路径
    "transport": "stdio"                                        // 使用 stdio 传输协议
  },
  "weather": {
    "command": "python",
    "args": ["/path/to/mcpserver/src/servers/weather_server.py"], // 请替换为 weather_server.py 的实际路径
    "transport": "stdio"                                       // 使用 stdio 传输协议
  }
}

参数注释:

  • 'server name': 服务器名称,例如 "math" 或 "weather",用于在客户端代码中引用。
  • 'command': 启动 MCP 服务器的命令,通常为 'python'。
  • 'args': 命令参数列表,包括 MCP 服务器脚本的路径。 请务必将 '/path/to/mcpserver/src/servers/math_server.py' 和 '/path/to/mcpserver/src/servers/weather_server.py' 替换为实际的文件路径。
  • 'transport': 传输协议,本地模式使用 'stdio'。

远程 SSE 模式 (MODE=prod 或默认):

{
  "math": {
    "command": "python",
    "url": "http://localhost:5001/mcp/sse",                   // 数学服务 SSE 端点 URL,可配置为远程服务器地址
    "transport": "sse"                                          // 使用 SSE 传输协议
  },
  "weather": {
    "command": "python",
    "url": "http://localhost:5000/mcp/sse",                  // 天气服务 SSE 端点 URL,可配置为远程服务器地址
    "transport": "sse"                                         // 使用 SSE 传输协议
  }
}

参数注释:

  • 'server name': 服务器名称,例如 "math" 或 "weather"。
  • 'command': 启动服务器的命令,这里可以随意填写,远程模式下实际不执行本地命令,仅作为占位符。
  • 'url': MCP 服务器的 SSE 端点 URL,客户端通过此 URL 与服务器建立 SSE 连接。 请确保 URL 与 '.env' 文件中的 'MATH_URL' 和 'WEATHER_URL' 配置一致,并根据实际部署情况修改 'localhost:5001' 和 'localhost:5000' 为服务器的 IP 地址或域名及端口。
  • 'transport': 传输协议,远程模式使用 'sse'。

重要提示:

  • 路径替换: 本地 Stdio 模式下,'args' 中的脚本路径需要根据实际文件位置进行修改。
  • 端口和URL配置: 远程 SSE 模式下,请确保 '.env' 文件中 'PORT_MATH_SERVER', 'PORT_WEATHER_SERVER', 'MATH_URL', 'WEATHER_URL' 等环境变量配置正确,并与 Docker Compose 或其他部署方式的端口映射和网络配置一致。
  • 运行模式: 通过设置 '.env' 文件中的 'MODE' 环境变量 ('local' 或 'prod') 来切换本地 Stdio 模式和远程 SSE 模式。

基本使用方法

  1. 启动 MCP 服务器 (Docker Compose 方式): 在项目根目录下,运行以下命令启动 Docker Compose,这将构建并启动天气和数学 MCP 服务器容器:

    docker-compose up --build

    查看日志确认服务已启动,例如数学服务应显示监听端口 '5001',天气服务监听端口 '5000'。

  2. 运行 Agent 示例: 修改 'agent.py' 文件中的 'server_params' 配置,根据需要选择本地 Stdio 模式或远程 SSE 模式,并更新路径或 URL 信息。 确保 '.env' 文件配置正确。 运行 Agent 示例脚本:

    python agent.py

    Agent 将连接到配置的 MCP 服务器,发送查询请求,并打印服务器返回的响应。

  3. 使用 MCP Inspector (可选): 可以使用 MCP Inspector 工具测试和调试 MCP 服务器。例如,测试数学服务:

    mcp dev ./src/servers/math_server.py

    MCP Inspector 将提供一个图形界面,方便用户与 MCP 服务器进行交互,发送请求和查看响应。

信息

分类

AI与计算