Python 搭建MCP Server:Stdio、SSE、Streamable HTTP

半兽人 发表于: 2025-07-11   最后更新时间: 2025-12-02 13:57:22  
{{totalSubscript}} 订阅, 113 游览

准备:创建MCP项目

建议使用 uv 来管理 Python 项目。

如果尚未创建由 uv 管理的项目,先创建一个:

uv init mcp-server-demo
cd mcp-server-demo

然后将 MCP 添加到您的项目依赖项中:

uv add "mcp[cli]"

或者,对使用 pip 安装依赖项的项目:

pip install "mcp[cli]"

运行独立的 MCP 开发工具,使用 uv 运行 mcp 命令:

uv run mcp

一、基于 Stdio 的 MCP Server

# server.py
from mcp.server.fastmcp import FastMCP

# Create an MCP server
mcp = FastMCP("Demo")


# Add an addition tool
@mcp.tool()
def sum(a: int, b: int) -> int:
    """Add two numbers"""
    return a + b


# Add a dynamic greeting resource
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
    """Get a personalized greeting"""
    return f"Hello, {name}!"

if __name__ == "__main__":
    mcp.run(transport='stdio')

使用MCP Inspector进行测试:

uv run mcp dev server.py

运行后,输出如下,同时会自动打开一个页面:

% uv run mcp dev server.py
Starting MCP inspector...
⚙️ Proxy server listening on localhost:6277
🔑 Session token: 68095421e4aac67184654f4c9316f21d9eefaa4a3fd04d632a4e7f2695d55194
   Use this token to authenticate requests or set DANGEROUSLY_OMIT_AUTH=true to disable auth

基于程序的位置调整:

Command:uv
Arguments:run server.py

效果如下:

screenshot

二、基于 SSE 的 MCP Server

只要把transport改为sse即可,如:

if __name__ == "__main__":
    mcp.run(transport='sse')

运行:

# uv run server.py
INFO:     Started server process [99990]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

基于运行的地址调整:

Type:SSE
URL:http://127.0.0.1:8000/sse

效果如下

Python SSE

三、基于 Streamable HTTP 的 MCP Server

注意:在生产环境中,Streamable HTTP 正在取代服务器发送事件(SSE)传输协议。

同样的,只要把transport改为streamable-http即可,如:

if __name__ == "__main__":
    mcp.run(transport='streamable-http')

运行:

 % uv run server.py
INFO:     Started server process [236]
INFO:     Waiting for application startup.
[07/11/25 16:39:29] INFO     StreamableHTTP session manager started                                     streamable_http_manager.py:111
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

基于程序的位置调整:

Type:Streamable HTTP
URL:http://127.0.0.1:8000/mcp

效果如下:

MCP Streamable

参考:

https://github.com/modelcontextprotocol/python-sdk
https://zhuanlan.zhihu.com/p/1888176780495525558
https://github.com/liaokongVFX/MCP-Chinese-Getting-Started-Guide

MCP
更新于 2025-12-02

查看MCP更多相关的文章或提一个关于MCP的问题,也可以与我们一起分享文章