项目简介
本项目是一个使用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服务器的功能。
安装步骤
-
克隆仓库:
git clone https://github.com/AdLibML/mcpserver.git cd mcpserver -
安装依赖 (使用 Poetry):
poetry install -
创建 '.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 模式。
基本使用方法
-
启动 MCP 服务器 (Docker Compose 方式): 在项目根目录下,运行以下命令启动 Docker Compose,这将构建并启动天气和数学 MCP 服务器容器:
docker-compose up --build查看日志确认服务已启动,例如数学服务应显示监听端口 '5001',天气服务监听端口 '5000'。
-
运行 Agent 示例: 修改 'agent.py' 文件中的 'server_params' 配置,根据需要选择本地 Stdio 模式或远程 SSE 模式,并更新路径或 URL 信息。 确保 '.env' 文件配置正确。 运行 Agent 示例脚本:
python agent.pyAgent 将连接到配置的 MCP 服务器,发送查询请求,并打印服务器返回的响应。
-
使用 MCP Inspector (可选): 可以使用 MCP Inspector 工具测试和调试 MCP 服务器。例如,测试数学服务:
mcp dev ./src/servers/math_server.pyMCP Inspector 将提供一个图形界面,方便用户与 MCP 服务器进行交互,发送请求和查看响应。
信息
分类
AI与计算