一、设置环境使用Conda
要使用Conda进行环境管理,请按照以下步骤创建并激活一个独立的虚拟环境。这可以确保依赖隔离,并避免与系统Python冲突。假设你已经安装了Conda(如果没有,可从Anaconda或Miniconda官网下载)。
-
- 创建一个新的Conda环境,使用Python 3.12(MCP SDK支持Python 3.8+,但3.12是推荐的):
conda create -n mcp-server python=3.12 -
- 激活环境:
conda activate mcp-server -
- 在激活的环境中,通过pip安装官方MCP Python SDK(包括CLI支持):
pip install "mcp[cli]"注意:MCP SDK依赖于一些基础库(如Pydantic、Starlette等),pip会自动处理这些依赖。如果遇到兼容性问题,可以添加
pip install uv并使用uv工具来加速安装,但Conda环境本身已足够。 -
- 验证安装:运行
mcp --help检查CLI是否可用。如果成功,会显示MCP命令的帮助信息。
- 验证安装:运行
现在,你的Conda环境已准备好,用于开发和运行MCP服务器。
二、编写MCP服务器代码
以下使用官方MCP Python SDK(具体是FastMCP类)来创建一个简单的MCP服务器。这个服务器暴露了一个工具(获取当前时间)。它使用SSE(Server-Sent Events)作为传输协议,向网络上的其他客户端提供MCP服务能力。
SSE允许服务器单向推送实时事件到客户端(例如,浏览器或其它HTTP客户端),客户端可以通过EventSource API连接到服务器的SSE端点(默认/sse)。这使得其它网络客户端可以订阅MCP服务器的更新、工具执行结果或资源变化,而无需轮询。
将以下代码保存为mcp_server.py:
"""
一个简单的MCP服务器示例,使用官方Python SDK。
使用SSE传输协议,向客户端提供MCP服务。
运行:python mcp_server.py
客户端可以通过HTTP连接到 http://localhost:8000/sse 来订阅事件。
"""
from mcp.server.fastmcp import FastMCP
from datetime import datetime
# 创建MCP服务器实例
# name: 服务器名称
# json_response: 启用JSON响应格式,便于客户端解析
mcp = FastMCP(name="MyMCPDemo", json_response=True)
# 添加一个工具(tool):允许LLM或客户端执行动作
@mcp.tool()
def get_currentTime() -> str:
"""获取当前时间"""
return datetime.now.strftime("%Y-%m-%d %H:%M:%S")
# 运行服务器,使用SSE传输
# transport="sse":启用Server-Sent Events,客户端可通过 /sse 端点订阅
# host="0.0.0.0":监听所有网络接口,便于其它客户端访问
# port=8000:默认端口,可自定义
if __name__ == "__main__":
mcp.run(transport="sse", host="0.0.0.0", port=8000)
运行服务器
-
- 在激活的Conda环境中运行脚本:
python mcp_server.py -
- 服务器将启动在
http://0.0.0.0:8000,监听SSE连接。日志会显示服务器已就绪。
- 服务器将启动在
-
三、测试和客户端连接
-
• 本地测试:使用curl测试SSE端点:
curl http://localhost:8000/sse这会打开一个SSE流,服务器会推送心跳事件或MCP相关更新。
-
• 网络客户端连接:其它客户端(例如,浏览器中的JavaScript)可以使用EventSource API连接:
const eventSource = new EventSource('http://your-server-ip:8000/sse'); eventSource.onmessage = function(event) { console.log('Received MCP event:', event.data); };通过这个连接,客户端可以接收MCP服务器推送的实时事件,例如工具执行结果或资源更新通知。
四、在DIFY中使用
在“工具”-MCP-添加MCP 服务(HTTP)中配置相关参数即可:
五、扩展和注意事项
- • 安全性:在生产环境中,添加认证(如API密钥)到SSE端点。MCP SDK支持通过
settings配置。 - • 自定义SSE路径:默认SSE挂载在
/sse,可以通过mcp.settings.sse_path = "/custom-sse"修改。 - • 性能:SSE适合实时推送,但如果是高负载场景,考虑切换到
transport="streamable-http"(双向流)。 - • 依赖管理:如果需要额外库(如PIL for图像处理),在Conda环境中用
conda install pillow或pip install pillow添加。 - • 调试:使用
mcp --inspectCLI命令检查服务器配置,或集成到ASGI框架如Starlette以支持更多路由。
这个设置提供了完整的MCP服务能力,通过SSE实现网络客户端的实时访问。如果需要更复杂的工具/资源,或集成到现有应用,请根据具体需求扩展代码。
欢迎关注公众号,学习大模型开发与使用!