開發環境

本機系統:macOS 26 26.0.1 (25A362)
UV

  1. Homebrew 安裝 brew install uv ;
  2. 電腦上已有或者可通過uv安裝的全部版本 python 環境 uv python list;
    2.1 這條命令用於列出你係統上所有可通過 uv 安裝和管理的 Python 版本。列表中標記為 <download available> 的版本表示 uv 識別到該版本,但尚未下載到本地。標記為具體路徑(如 /opt/homebrew/bin/python3.11)的版本表示該版本已經安裝在你的系統上。
  3. uv 安裝指定版本 uv install 3.13 ;我這裏本地超時了,或者使用指定鏡像均可; 清華源單次生效安裝 UV_PYTHON_DOWNLOAD_BASE=https://mirrors.tuna.tsinghua.edu.cn/astral-sh/python-build-standalone/releases UV_HTTP_TIMEOUT=1200 uv python install 3.13 安裝完成以後根據提示進行環境變量的加載
Installed Python 3.13.9 in 2m 42s
 + cpython-3.13.9-macos-aarch64-none (python3.13)
warning: `/Users/xxx/.local/bin` is not on your PATH. To use installed Python executables, run `export PATH="/Users/xxx/.local/bin:$PATH"` or `uv python update-shell`.
zhangyun@zhangyundeMacBook-Air ~ % uv python update-shell
Created configuration file: /Users/xxx/.zshenv
  1. 初始化文件夾 ,新建並進入文件夾進行初始化
cd ../User/xxx/pyworkspace/newsMCPServer
uv init . -p 3.13

// 結果如下
Initialized project `newsmcpserver` at `/Users/xxx/pyworkspace/newsMCPServer`
  1. 安裝 MCP SDK(開發工具包)uv add "mcp[cli]"
  2. 使用 VScode 打開上述文件夾;VScode 開發 python 需要安裝如下兩個插件
  3. UV 初始化完成的文件夾目錄如下

MCPServerDemo

  1. 測試環境是否正常;如下正常輸出即可
  2. 打開 https://github.com/modelcontextprotocol/python-sdk 並複製 demo 代碼
"""
FastMCP quickstart example.

cd to the `examples/snippets/clients` directory and run:
    uv run server fastmcp_quickstart stdio
"""
# 固定寫法
from mcp.server.fastmcp import FastMCP
# 固定寫法
# Create an MCP server
mcp = FastMCP("Demo")


# Add an addition tool
@mcp.tool() # 聲明是一個mcp 的工具
def add(a: int, b: int) -> int: # 類型,告訴大模型傳入傳入的類型是什麼
    # 註釋必須寫,使用自然語言告訴大模型這個函數是做什麼的
    """Add two numbers""" 
    return a + b


# Add a dynamic greeting resource
# 僅提供類似於 GET 接口,獲取數據
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
    """Get a personalized greeting"""
    return f"Hello, {name}!"


# Add a prompt
@mcp.prompt()
def greet_user(name: str, style: str = "friendly") -> str:
    """Generate a greeting prompt"""
    styles = {
        "friendly": "Please write a warm, friendly greeting",
        "formal": "Please write a formal, professional greeting",
        "casual": "Please write a casual, relaxed greeting",
    }

    return f"{styles.get(style, styles['friendly'])} for someone named {name}."
# 最後加入這段本地啓動
if __name__ == "__main__":
    mcp.run(transport='stdio')

CherryStudio

下載地址 10 .使用 cherrystudio 接入本地 MCP 服務

第一次安裝,打開首頁以後點擊設置

python基礎28 -----python中sockserver模塊_#python


點擊 MCP

python基礎28 -----python中sockserver模塊_#python_02


和本人圖片中不一致則如下

python基礎28 -----python中sockserver模塊_#MCP_03

使用 cherrystudio 調試;安裝內置設置的 UV 環境

python基礎28 -----python中sockserver模塊_#MCP_04


配置本地 MCP 服務

python基礎28 -----python中sockserver模塊_#python_05


其中參數行詳細命令:

–directory (文件路徑)

/Users/xxx/pyworkspace/newsMCPServer 項目路徑

run 固定

main.py 寫 demo 的文件

--directory
/Users/xxx/pyworkspace/newsMCPServer
run
main.py

配置完成以後點擊 cherrystudio 首頁;配置🔨,添加本地 MCP 服務,然後詢問測試;

python基礎28 -----python中sockserver模塊_#學習_06

MCPServer-SSE 模式

最後 main 方法切換成 sse 即可;

"""
FastMCP quickstart example.

cd to the `examples/snippets/clients` directory and run:
    uv run server fastmcp_quickstart stdio
"""
# 固定寫法
from mcp.server.fastmcp import FastMCP
# 固定寫法
# Create an MCP server
mcp = FastMCP("Demo")


# Add an addition tool
@mcp.tool() # 聲明是一個mcp 的工具
def add(a: int, b: int) -> int: # 類型,告訴大模型傳入傳入的類型是什麼
    # 註釋必須寫,使用自然語言告訴大模型這個函數是做什麼的
    """Add two numbers""" 
    return a + b


# Add a dynamic greeting resource
# 僅提供類似於 GET 接口,獲取數據
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
    """Get a personalized greeting"""
    return f"Hello, {name}!"


# Add a prompt
@mcp.prompt()
def greet_user(name: str, style: str = "friendly") -> str:
    """Generate a greeting prompt"""
    styles = {
        "friendly": "Please write a warm, friendly greeting",
        "formal": "Please write a formal, professional greeting",
        "casual": "Please write a casual, relaxed greeting",
    }

    return f"{styles.get(style, styles['friendly'])} for someone named {name}."

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

重新啓動項目 ,啓動成功如下

source /Users/xxx/pyworkspace/newsMCPServer/.venv/bin/activate
xxx@xxx-Air newsMCPServer % source /Users/xxxx/pyworkspace/newsMCPServer/.venv/bin/activate
(newsmcpserver) xxx@xxx-Air newsMCPServer % /Users/xxx/pyworkspace/newsMCPServer/.venv/bin/python /Users/xxx/pyworkspace/newsMCPServer/main.py
INFO:     Started server process [71566]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

配置一個 SSE 服務的地址,選擇 SSE 模式,配置地址;

python基礎28 -----python中sockserver模塊_#學習_07


切換 MCP 服務

python基礎28 -----python中sockserver模塊_#開發語言_08


啓動後服務輸出日誌

python基礎28 -----python中sockserver模塊_#MCP_09

MCP streamable-http 模式

與 SSE 修改一致

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

charrystudio配置如下,url 後綴換成 mcp

python基礎28 -----python中sockserver模塊_HTTP_10


測試步驟與原先一致,不贅述;

vscode 輸出如下

[11/14/25 11:14:14] INFO     Created new transport with session ID: a916b1805d0b4ab092625e0b4dc267a6                                                                                                                                          streamable_http_manager.py:233
INFO:     127.0.0.1:58478 - "POST /mcp HTTP/1.1" 200 OK
INFO:     127.0.0.1:58478 - "POST /mcp HTTP/1.1" 202 Accepted
INFO:     127.0.0.1:58478 - "GET /mcp HTTP/1.1" 200 OK
INFO:     127.0.0.1:58479 - "POST /mcp HTTP/1.1" 200 OK
                   INFO     Processing request of type ListToolsRequest                                                                                                                                                                                       server.py:674
INFO:     127.0.0.1:58479 - "POST /mcp HTTP/1.1" 200 OK
                   INFO     Processing request of type PingRequest                                                                                                                                                                                            server.py:674
INFO:     127.0.0.1:58479 - "POST /mcp HTTP/1.1" 200 OK
                   INFO     Processing request of type ListPromptsRequest                                                                                                                                                                                     server.py:674
INFO:     127.0.0.1:58479 - "POST /mcp HTTP/1.1" 200 OK
                   INFO     Processing request of type PingRequest                                                                                                                                                                                            server.py:674
INFO:     127.0.0.1:58479 - "POST /mcp HTTP/1.1" 200 OK
                   INFO     Processing request of type ListResourcesRequest                                                                                                                                                                                   server.py:674
INFO:     127.0.0.1:58479 - "POST /mcp HTTP/1.1" 200 OK
                   INFO     Processing request of type PingRequest                                                                                                                                                                                            server.py:674
INFO:     127.0.0.1:58479 - "POST /mcp HTTP/1.1" 200 OK
                   INFO     Processing request of type PingRequest                                                                                                                                                                                            server.py:674
INFO:     127.0.0.1:58479 - "POST /mcp HTTP/1.1" 200 OK
[11/14/25 11:14:16] INFO     Processing request of type PingRequest                                                                                                                                                                                            server.py:674
INFO:     127.0.0.1:58594 - "POST /mcp HTTP/1.1" 200 OK
[11/14/25 11:14:57] INFO     Processing request of type PingRequest                                                                                                                                                                                            server.py:674
INFO:     127.0.0.1:58594 - "POST /mcp HTTP/1.1" 200 OK
                   INFO     Processing request of type CallToolRequest                                                                                                                                                                                        server.py:674
INFO:     127.0.0.1:59024 - "POST /mcp HTTP/1.1" 200 OK
[11/14/25 11:16:46] INFO     Processing request of type PingRequest                                                                                                                                                                                            server.py:674
INFO:     127.0.0.1:59024 - "POST /mcp HTTP/1.1" 200 OK
[11/14/25 11:16:48] INFO     Processing request of type PingRequest                                                                                                                                                                                            server.py:674

三種傳輸機制之間的區別

特性維度

Stdio (標準輸入/輸出)

HTTP + SSE (已棄用)

Streamable HTTP (推薦)

通信方式

雙向管道通信

客户端POST + 服務端SSE推送(雙通道)

統一端點,支持POST/GET,可按需升級為SSE流

連接模式

本地進程間通信

長連接(服務器需維持)

靈活連接,支持短連接與按需長連接

適用場景

本地腳本、CLI工具、容器內調試

舊版遠程MCP服務器(已被棄用)

遠程服務、雲原生、Serverless、多客户端併發

核心優勢

簡單、安全、低延遲

實現服務端主動推送

無狀態設計、高兼容性、支持斷線重連、資源消耗低

主要侷限

無法跨網絡通信

連接不可恢復、服務器資源壓力大、基礎設施兼容性挑戰

作為最新標準,部分客户端庫的支持可能仍在完善中

💡 如何選擇傳輸機制

瞭解了基本區別後,你可以根據以下決策思路來選擇最適合你項目的傳輸機制。

  1. 🔧 開發本地工具或進行調試
    如果你的MCP客户端和服務器運行在同一台機器上,例如在本地開發環境或一個Docker容器中,stdio
  2. 🌐 構建遠程服務或雲原生應用
    對於所有需要跨網絡通信的場景,你都應該選擇 Streamable HTTP
  • 新項目:務必直接採用 Streamable HTTP,這是官方當前和未來的發展方向。
  • 現有項目:如果你還在使用舊的 HTTP+SSE,建議制定計劃遷移到 Streamable HTTP,以享受其在性能、資源消耗和兼容性方面帶來的好處。
  1. ⚠️ 關於SSE的特別説明
    需要注意的是,SSE 不再作為獨立的傳輸機制使用。在最新的MCP規範中,它已經被標記為“已棄用”,並由 Streamable HTTP 取代。不過,SSE 的技術本身並未消失,而是作為一項可選能力被整合到了 Streamable HTTP 內部,用於處理需要流式推送的場景。

🚀 拓展與提醒

  • 關注協議演進:MCP是一個快速發展的協議。從最初的stdioHTTP+SSE,再到統一的Streamable HTTP,其演進方向清晰地指向更簡化、更靈活、與雲基礎設施更兼容的設計。保持對官方文檔的關注是很重要的。