MCP Server 開發入門(Python):用官方 SDK 寫第一個 MCP 伺服器並調試

想自己寫一個 MCP 伺服器?按 MCP 官方 Python SDK 文檔講清安裝命令、十幾行代碼定義一個工具和一個資源、用 mcp dev 打開 Inspector 調試、切換到 Streamable HTTP 運行,以及 v2 把 FastMCP 改名為 MCPServer 後舊教學要改的地方。

NNathaniel bigo··原創首發·AI 輔助撰寫
10 分鐘讀完
資料核對於 2026-10-11 · 依據官方文檔與公開資料整理 免費帳號 帳號
本文根據 MCP 官方 Python SDK 倉庫的 README、文檔首頁和《Migration Guide》整理,資料核對於 2026-10-11。MCP 是什麼見《MCP 是什麼》。文中代碼取自官方 README,沒有在本機運行驗證。

適用於誰

  • 搜「mcp server 開發」「mcp server 開發 python」「mcp server 開發教學」「fastmcp 教學」的人;
  • 已經會給 Claude Code、Cursor 配別人的 MCP 伺服器,想把公司內部的接口或腳本也接進來的人;
  • 照着舊教學寫 from mcp.server.fastmcp import FastMCP,升級後發現對不上的人。

結論先說

  1. 官方 Python SDK 的包名是 mcp,安裝時帶上 cli 附加項:pip install "mcp[cli]",需要 Python 3.10 及以上。
  2. 十幾行代碼就是一個伺服器:創建一個 MCPServer 實例,用 @mcp.tool() 裝飾函數就是工具,用 @mcp.resource(...) 就是資源。函數的類型標註和文檔字符串會成為給模型看的參數定義和說明。
  3. 調試用 mcp dev server.py,它會啟動伺服器並打開 MCP Inspector。
  4. v2 改了類名:FastMCP 已改名為 MCPServer,導入路徑也變了。裝飾器的用法和 v1 相同。
  5. stdio 伺服器絕不能往標準輸出打印東西,日誌要寫到標準錯誤。這是協議規定,也是新手最常見的故障原因。

一、三個基本概念

一個 MCP 伺服器可以向客戶端提供三類東西:

類型是什麼例子
工具(Tools)模型可以調用的函數查訂單、發消息、跑一段計算
資源(Resources)客戶端可以按 URI 讀取的只讀內容某個文件、某條記錄
提示(Prompts)伺服器提供的可複用提示模板一套固定的代碼審查提問

入門階段只需要工具。

二、安裝

官方給出兩種方式:

bash
uv add "mcp[cli]"
bash
pip install "mcp[cli]"

cli 附加項提供 mcp 命令行;不需要命令行時裝普通的 mcp 即可。

另外,調試用的 Inspector 是一個 Node.js 程序,官方文檔提醒需要 npx 在你的 PATH 裏,也就是要先裝好 Node.js。

三、寫第一個伺服器

新建 server.py,下面是官方 README 的快速上手示例:

python
from mcp.server import MCPServer

mcp = MCPServer("Demo")


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


@mcp.resource("greeting://{name}")
def greeting(name: str) -> str:
    """Greet someone by name."""
    return f"Hello, {name}!"

逐行看:

  • MCPServer("Demo"):創建伺服器,Demo 是它的名稱;
  • @mcp.tool():把下面的函數註冊為工具。a: int, b: int 這些類型標註決定了工具的參數定義,三引號裏的文檔字符串是給模型看的工具說明;
  • @mcp.resource("greeting://{name}"):註冊一個帶模板的資源,{name} 會作為參數傳給函數。

工具說明要寫給模型看。模型只憑名稱和說明決定何時調用、怎麼填參數,「Add two numbers.」這種一句話對簡單工具夠用;實際業務裏的工具要寫清它做什麼、參數的含義和取值範圍。

四、調試

bash
uv run mcp dev server.py

這條命令啟動伺服器並打開 MCP Inspector,一個在瀏覽器裏運行的調試介面。打開終端裏打印出來的地址,官方文檔給的驗證步驟是:

  • 在 Tools 裏調用 add,填 a=1、b=2,應當得到 3;
  • 在 Resources 裏讀取 greeting://World,應當得到 Hello, World!。

先在 Inspector 裏把工具調通,再接進真正的客戶端。這樣出問題時能分清是伺服器的問題還是客戶端配置的問題。Inspector 的詳細用法見《MCP Inspector 怎麼用》。

五、兩種運行方式

MCP 定義了兩種標準傳輸方式,區別見《MCP 的 stdio、SSE 和 Streamable HTTP 有什麼區別》。簡單說:

  • stdio:客戶端把你的伺服器當作子進程啟動,通過標準輸入輸出通信。本機自用的伺服器用這種;
  • Streamable HTTP:伺服器作為獨立的 HTTP 服務運行,客戶端通過網址連接。要給多人用、或部署在別的機器上時用這種。

用 Streamable HTTP 運行的官方命令:

bash
uv run mcp run server.py --transport streamable-http

官方 README 接着給了一個客戶端示例,用來驗證伺服器可以被調用:

python
import asyncio

from mcp import Client


async def main() -> None:
    async with Client("http://localhost:8000/mcp") as client:
        result = await client.call_tool("add", {"a": 1, "b": 2})
        print(result.structured_content)  # {'result': 3}


asyncio.run(main())

官方說明:給 Client 傳一個網址就表示用 Streamable HTTP;它也可以啟動本地的 stdio 子進程。

六、接進客戶端

SDK 的命令行還有一個 mcp install 子命令,具體用法以官方文檔為準。

七、從 v1 升級:FastMCP 改名了

網上大量教學是按 v1 寫的。官方《Migration Guide》裏和入門相關的幾條:

項目v1v2
類名FastMCPMCPServer
導入from mcp.server.fastmcp import FastMCPfrom mcp.server.mcpserver import MCPServer, Context
裝飾器@mcp.tool()、@mcp.resource()、@mcp.prompt()相同,官方說明參數和處理函數的簽名與 v1 一致
傳輸方式的取值"stdio"、"sse"、"streamable-http"

遷移指南列了全部不兼容的改動,升級已有項目前通讀一遍。v1.x 的文檔官方另行保留。

八、寫伺服器時的幾條規矩

1. stdio 伺服器不要 print。 協議規定:伺服器不得向標準輸出寫入任何不是合法 MCP 消息的內容;日誌可以寫到標準錯誤。在工具函數里隨手 print() 一句調試資訊,就會破壞通信,表現為客戶端連不上或者莫名斷開。

2. 工具要小而明確。 一個工具做一件事,參數用明確的類型;可選值有限時用枚舉,而不是讓模型自由填字符串。

3. 報錯訊息寫給模型看。 工具失敗時返回「哪裏不對、期望什麼」,模型才能自己修正後重試。

4. 密鑰走環境變量。 不要寫進代碼,客戶端配置裏用各自的 env 傳入。

5. HTTP 服務要考慮安全。 協議對 Streamable HTTP 的要求包括:校驗 Origin 請求頭、本地服務綁定到 127.0.0.1 而不是所有網卡、為連接實現鑑權。要對外提供服務時,這三條都要落實。

常見問題

Q:必須用 uv 嗎?

不是。官方同時給了 pip install 的寫法;文檔裏的命令以 uv run 開頭,是因為它用 uv 管理項目環境。用 pip 時在已激活的虛擬環境裏直接運行 mcp dev server.py。

Q:FastMCP 還能用嗎?

官方 SDK 的 v2 裏這個類已改名為 MCPServer。繼續用 v1 的寫法就要把依賴固定在 v1.x 版本。

Q:用 TypeScript 可以嗎?

可以,MCP 官方也有 TypeScript 等語言的 SDK,本文沒有覆蓋。

Q:客戶端裏看不到我的工具?

先用 Inspector 確認伺服器本身正常;再看客戶端的日誌。stdio 伺服器重點查兩件事:啟動命令和路徑是否是絕對路徑、代碼裏有沒有往標準輸出打印內容。

參考資料

  • MCP Python SDK(官方倉庫):https://github.com/modelcontextprotocol/python-sdk
  • SDK 文檔首頁:https://github.com/modelcontextprotocol/python-sdk/blob/main/docs/index.md
  • Migration Guide(v1 → v2):https://github.com/modelcontextprotocol/python-sdk/blob/main/docs/migration.md
  • mcp(PyPI):https://pypi.org/project/mcp/
  • Transports(MCP 規範):https://modelcontextprotocol.io/specification/2025-11-25/basic/transports
需要開通或續費?Claude Pro 充值 →

Nathaniel 的更多內容

  1. 01

    AI 學習路線:零基礎從哪開始,6 個階段、每階段該讀哪幾篇教學(2026)

    AI 學習路線怎麼走?給零基礎的人一條循序漸進的路徑:先選一個助手用順,再學提問,再用進日常工作,按需學做圖做影片,守住私隱與版權,最後進階自動化和編程。每個階段都配了本站對應的教學。

    其他 AI 工具0
  2. 02

    AI 瀏覽器有哪些:Perplexity Comet、Opera Neon、Dia、Brave Leo 與 Edge Copilot 的官方說法對照

    AI 瀏覽器有哪些?按官方頁面整理 Perplexity Comet、Opera Neon、Dia、Brave Leo 和 Edge 裏的 Copilot:官方自述的定位、支持的平台、免費還是訂閱,以及 Gemini、Claude 的 Chrome 方案和已停用的 ChatGPT Atlas。

    其他 AI 工具0
  3. 03

    即夢國際版 Dreamina 是什麼:官方站入口、能生成什麼、免費積分和模型(2026)

    即夢國際版 Dreamina 是什麼?官方站是 dreamina.capcut.com,是一個圖片、影片和數字人一體的 AI 創作平台。按官方首頁和 FAQ 講:能生成什麼、免費用戶每天 120 積分、列出的 Seedance 與 Seedream 模型,以及和國內即夢怎麼區分。

    其他 AI 工具0
  4. 04

    Kimi K3 Coding Plan 是什麼、怎麼用:Kimi Code 會員、模型 ID、套餐價格和額度規則

    Kimi K3 Coding Plan 是什麼?按 Kimi 官方文檔核對:官方現在叫 Kimi Code,是 Kimi 會員權益裏的編程服務,Plus 及以上才有;講 K3 等模型 ID、國內新套餐價格、三種客戶端、第三方工具接入和額度規則。

    Kimi0
  5. 05

    DeepSeek V4 Pro 和 Flash 的區別與 API 價格:官方價格頁逐項對照(高峰與空閒時段)

    DeepSeek V4 Pro 和 Flash 有什麼區別、API 怎麼收費?按 DeepSeek 官方價格頁(2026-10-19 查詢)列出兩個模型的版本、上下文、圖像理解、並發和每百萬 token 價格,說明高峰與空閒時段的計費差別和舊模型名怎麼處理。

    其他 AI 工具0
  6. 06

    GPT-6 Pro(Astra)怎麼用、哪些套餐有:怎麼選到 Pro 檔、用量限制和 Pro 三檔價格

    GPT-6 Pro(Astra)怎麼用、哪些套餐有?按 OpenAI 幫助中心核對:聊天裏 Pro 檔給 Pro 100、Pro 200、Business 和 Enterprise;Plus 在 Work 和 Codex 裏含 Astra。講怎麼選到、用量上限和官方 Pro 價格。

    ChatGPT0

同產品的其他教學

  1. 01

    Claude Pro 和 Max 的區別:用量、價格、Fable 模型和每月 API 額度怎麼選

    Claude Pro 和 Max 有什麼區別?按官方定價頁和幫助中心核對:Max 有 5x、20x 兩檔用量,Pro 與 Max 在價格、Fable 模型、每月 API 額度和計費週期上的差別,以及什麼情況下 Pro 夠用、什麼情況下該升 Max。

    Claude0
  2. 02

    Claude 登入不了、用不了、打不開怎麼辦:按官方幫助中心逐條排查

    Claude 無法登入、無法使用、無法打開怎麼辦?按官方幫助中心的順序排查:收不到登入電郵、登入報錯、Google 登入出問題、系統繁忙、額度用完、官方故障,以及所在地區是否在官方支持名單裏。

    Claude0
  3. 03

    Claude 怎麼註冊:官方註冊流程、手機驗證要求,以及提示無法註冊時官方怎麼說

    Claude 怎麼註冊?打開 claude.ai,用 Google 或電郵登入連結創建帳號,再用支持地區的手機號收短訊驗證碼。講清官方的註冊條件、手機驗證的限制,以及收不到驗證碼、號碼被用過多次時官方的處理辦法。

    Claude0
  4. 04

    Claude 怎麼用:新手入門,從打開聊天到寫出第一個好問題

    Claude 怎麼用?按官方幫助中心整理的新手路徑:在網頁、桌面版或手機 App 打開聊天,像對同事一樣寫需求,用輸入框的「+」和「/」找功能,點模型名換模型,免費版有每 5 小時重置的上限。

    Claude0
  5. 05

    Claude 怎麼設定成中文:介面語言、回答語言和語音語言分別怎麼設

    Claude 怎麼設定中文?官方幫助中心列出的 11 種介面語言裏目前沒有中文,但 Claude 會用你提問的語言回答,直接用中文問即可;想固定用中文,可在設定的 Instructions for Claude 裏寫一句。語音模式的語言要單獨選。

    Claude0
  6. 06

    AI圖片放大與高清修復:Midjourney、ChatGPT、Gemini 怎麼出高解像度圖

    AI 生成的圖不夠清晰,想打印或做大圖怎麼辦?本文按官方文檔講清 Midjourney 的 Subtle / Creative 放大和 HD 直出、Gemini 與 ChatGPT 的解像度選項、Flow 的影片放大,以及「AI 放大會編造細節」的注意事項。

    Gemini其他 AI 工具0

0 條評論

登入 後參與評論

還沒有評論,來搶沙發~