Tools/Resources/Prompts 三能力實作;③ Hello World 擴展至五個實用工具;④ HTTP 傳輸、MCP Inspector 除錯與 Docker 部署;⑤ 知識庫 capstone 專案與生態系伺服器;⑥ MCP vs Function Calling vs LangChain 對照表與六步 Runbook;⑦ 正式環境宿主建議。協定全貌可併讀2026 年 MCP 為何成為 AI 時代的 HTTP 協議。
MCP 協定是什麼:Host/Client/Server 與 JSON-RPC 2.0
Model Context Protocol(MCP)是連接 AI 用戶端(Cursor、Claude Desktop、VS Code 等)與外部能力(資料庫、API、檔案系統)的開放標準。2024 年 11 月 Anthropic 開源釋出;至 2026 年,OpenAI、Google、Microsoft 均已原生支援,治理移交 Linux Foundation 旗下 AAIF。開發者實作一次 MCP Server,工具定義即可在所有 MCP 用戶端重用,無需為每個模型重寫適配層。
架構分三層:Host(用戶操作的應用本體)內嵌一個或多個 MCP Client(與各 Server 維持 1:1 工作階段),MCP Server(你撰寫的程式)則橋接真實系統。通訊一律走 JSON-RPC 2.0,完成 initialize 握手與能力協商後,工作階段持續至連線中斷。
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "search_articles",
"arguments": { "query": "MCP 部署", "limit": 5 }
},
"id": 42
}
核心 RPC 方法包括:tools/list 動態取得工具清單、tools/call 執行工具、resources/list/resources/read 讀取唯讀資料、prompts/list/prompts/get 取得範本。傳輸層分 STDIO(本機子程序,開發首選)與 Streamable HTTP(遠端、團隊共用)。SDK 吸收協定細節,開發者專注業務邏輯。
從演進脈絡看,OpenAI Function Calling(2023 年 6 月)解決「單一模型如何呼叫函式」,ChatGPT Plugins 嘗試市集模式但缺乏執行時動態發現;LangChain Tools 則鎖在 Python Agent 框架內。MCP 回答的是「任何 AI 用戶端如何發現並安全呼叫任何工具伺服器」——N 個用戶端 × M 個後端,從 N×M 客製整合收斂為 N+M 標準連接。
開發 MCP Server 的本質不是「多寫幾個 REST 端點」,而是「公開 AI 能發現、理解並安全呼叫的自我描述能力」。
Tools/Resources/Prompts:FastMCP Hello World 與五個工具擴展
MCP Server 公開三類能力。Tools 是有副作用的可執行操作(資料庫查詢、API 呼叫、檔案寫入)。Resources 是以 URI 識別的唯讀資料(文件、設定檔、知識庫條目)。Prompts 是帶參數槽位的可重用範本(問答格式、程式碼審查清單)。Python 生態中 FastMCP 提供最短迭代路徑。
pip install "mcp[cli]"
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("hello-server")
@mcp.tool()
def greet(name: str) -> str:
"""回傳問候語,確認 MCP Server 正常運作"""
return f"你好,{name}!MCP Server 已成功啟動。"
if __name__ == "__main__":
mcp.run()
型別提示與 docstring 會自動轉成 JSON Schema,Agent 在 tools/list 階段即可理解參數語意。以下以知識庫 Server 為例,擴展五個實用工具:
@mcp.tool()
def search_articles(query: str, limit: int = 10) -> list[dict]:
"""以關鍵字全文搜尋文章"""
...
@mcp.tool()
def get_article(article_id: str) -> dict:
"""依文章 ID 取得完整內文"""
...
@mcp.tool()
def list_categories() -> list[str]:
"""回傳可用分類清單"""
...
@mcp.tool()
def create_note(title: str, body: str, tags: list[str] | None = None) -> dict:
"""建立新的內部備忘錄"""
...
@mcp.tool()
def summarize_text(text: str, max_chars: int = 300) -> str:
"""將長文壓縮至指定字數以內"""
...
Resources 以 URI 方案識別。檔案系統可用 file:///data/docs/readme.md;自訂方案如 kb://articles/2026-mcp-guide,用戶端透過 resources/read 取得內容,無工具副作用。
@mcp.resource("kb://articles/{article_id}")
def article_resource(article_id: str) -> str:
return load_markdown(article_id)
@mcp.resource("file://config/{name}")
def config_resource(name: str) -> str:
return Path(f"./config/{name}.json").read_text(encoding="utf-8")
Prompts 是帶變數的範本。Agent 以 prompts/get 取得後直接餵給 LLM,統一團隊輸出格式。
@mcp.prompt()
def qa_from_context(question: str, context_uri: str) -> str:
"""依上下文 URI 內容以 QA 格式回答"""
ctx = resolve_resource(context_uri)
return f"""僅以下列上下文為依據回答問題。
上下文:
{ctx}
問題: {question}"""
@mcp.prompt()
def summarize_article(article_id: str, style: str = "bullet") -> str:
body = load_markdown(article_id)
return f"請以{style}格式摘要以下文章:\n\n{body}"
設計要點:Tools 負責「寫入與副作用」、Resources 負責「唯讀且可快取」、Prompts 負責「定型工作流程」。拆成細粒度公開,比單一函式塞滿 CRUD 更能提升 tools/list 的自我描述品質。Cursor 設定見 .cursor/mcp.json,Claude Desktop 使用相同結構的 claude_desktop_config.json。
HTTP 傳輸、MCP Inspector 除錯與 Docker 部署
本機開發用 STDIO 即可;團隊共用或 CI 整合則需 HTTP 傳輸。FastMCP 以 mcp.run(transport="streamable-http") 切換,2026 年規格以 Streamable HTTP 取代純 SSE 模式,作為遠端 MCP 的推薦傳輸。
if __name__ == "__main__":
mcp.run(
transport="streamable-http",
host="0.0.0.0",
port=8080,
path="/mcp"
)
正式環境需在邊界層疊加安全控制:Bearer Token 驗證 Authorization 標頭、X-API-Key 對應租戶限流、CORS 僅允許已知 Host 來源(生產端點禁止 * 萬用字元)、反向代理層設定請求上限以防工具呼叫觸發昂貴下游 API。
MCP Inspector 是官方除錯介面,支援 STDIO 與 HTTP,可在瀏覽器檢視 tools/list 回應、參數驗證與錯誤追蹤。
npx @modelcontextprotocol/inspector python server.py
curl -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
Inspector 中 STDIO 模式:Transport 設 stdio,Command 填 python,Arguments 填 server.py。HTTP 模式 URL 填 http://localhost:8080/mcp。在 tools/call 分頁手動執行各工具,於接入 Cursor 前排除 JSON Schema 違規。
正式部署以 Docker 為定番:非 root 使用者、健康檢查、以環境變數注入機密。
FROM python:3.12-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY server.py . RUN useradd -m mcpuser USER mcpuser EXPOSE 8080 HEALTHCHECK CMD curl -f http://localhost:8080/mcp || exit 1 CMD ["python", "server.py"]
docker build -t kb-mcp-server . docker run -d --name kb-mcp -p 8080:8080 \ -e DATABASE_URL="postgresql://..." \ -e API_KEY="sk-..." \ kb-mcp-server
| 錯誤現象 | 可能原因 | 修復方式 |
|---|---|---|
| Cursor 看不到伺服器 | 設定路徑或指令錯誤 | 檢查 mcp.json 的 command/args;確認子程序無 import 錯誤 |
| tools/list 回傳空清單 | 裝飾器未在 run 前註冊 | 在 server.py 進入點匯入所有工具模組 |
| HTTP 連線被拒 | 連接埠或傳輸模式不符 | 用戶端傳輸須與伺服器一致(STDIO vs streamable-http) |
| 工具呼叫逾時 | 非同步環境中同步阻塞 | 工具改用 async def 或 asyncio.to_thread |
安全提醒:勿將正式 HTTP 端點裸曝於公網。2026 年初安全掃描發現約 1,000 個未授權 MCP 端點可被公開索引。最低標準:Tailscale/VPN/反向代理認證背後部署,OAuth 2.1 標準化仍在路線圖中。
Capstone:企業知識庫 MCP Server 與生態系伺服器
整合前述元素的企業知識庫 MCP Server是理想的 capstone 專案:Markdown 文章以 kb:// Resources 公開;search_articles/get_article Tools 讓 Agent 做結構化檢索;qa_from_context Prompt 統一回答格式。PostgreSQL 存元資料,向量檢索用 pgvector 或 Tool 內呼叫 Embedding API,是 2026 年實務標準。
資料層:文章表(id、title、body、tags、updated_at)加全文索引;Embedding 欄位可選。
Resources 層:每篇文章以 kb://articles/{id} 公開,Agent 可先唯讀載入上下文。
Tools 層:搜尋、取得、建立備忘、摘要共五個工具;副作用僅限 create_note。
Prompts 層:QA、摘要、比較分析三種範本,均一化團隊輸出品質。
用戶端接入:在 Cursor .cursor/mcp.json 或 Claude Desktop 設定註冊 Server,啟動時 tools/list 自動發現。
向量知識庫也可用 ChromaDB 快速驗證概念:
import chromadb
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("knowledge-base")
client = chromadb.PersistentClient(path="./chroma_data")
collection = client.get_or_create_collection("notes")
@mcp.tool()
def semantic_search(query: str, n: int = 5) -> str:
results = collection.query(query_texts=[query], n_results=n)
docs = results.get("documents", [[]])[0]
return "\n---\n".join(docs) if docs else "找不到相符內容。"
@mcp.tool()
def ingest_note(text: str, source: str) -> str:
collection.add(documents=[text], metadatas=[{"source": source}], ids=[source])
return f"已索引: {source}"
生態系另有 10,000+ 公開 MCP Server 可參考,常見代表如下:
| Server | 用途 | 連線方式 |
|---|---|---|
| @modelcontextprotocol/server-filesystem | 本機檔案讀寫 | STDIO |
| @modelcontextprotocol/server-github | Issue/PR/儲存庫操作 | STDIO + PAT |
| @modelcontextprotocol/server-postgres | PostgreSQL 唯讀查詢 | STDIO |
| @modelcontextprotocol/server-slack | 頻道發文與歷史紀錄 | STDIO + OAuth |
| @modelcontextprotocol/server-brave-search | Web 搜尋 | STDIO + API Key |
| 自研 kb-mcp-server | 企業文件整合 | HTTP + Docker |
Filesystem + GitHub + 自研知識庫載入同一 Cursor 工作階段的「開發者桌面配置」,是 2026 年主流工作流程。通用能力用 npm 官方 Server,差異化資產保留自研 Server,成本最低。
MCP vs Function Calling vs LangChain:對照表與六步 Runbook
「Function Calling 或 LangChain Tools 不就夠了?」以下從 Agent 整合角度對照三種方式:
| 維度 | MCP | Function Calling | LangChain Tools |
|---|---|---|---|
| 標準化 | 業界開放標準(AAIF 治理) | 各 LLM 供應商自有 JSON Schema | 框架內部抽象 |
| 用戶端相容 | Cursor/Claude/ChatGPT/VS Code 等 | 單一供應商 API | 依賴 LangChain 執行環境 |
| 工具發現 | tools/list 動態取得 | 提示詞靜態注入 | 程式碼硬編碼 |
| 資料公開 | Resources URI + Prompts | 無(需另建 RAG) | Retriever 鏈另建 |
| 傳輸 | STDIO/HTTP 標準化 | HTTPS API 內嵌 | 程序內函式呼叫 |
| 供應商切換成本 | Server 層不變 | Schema 與呼叫格式全面改寫 | Agent 鏈重新組裝 |
| 適用場景 | 多客戶端長期整合 | 單一 API 快速試作 | Python 後端 Agent 管線 |
以下六步 Runbook可直接貼入團隊文件,從評估推進到正式上線:
整合對象盤點:列出要連接的系統(DB、Git、Slack、內部 Wiki)與 LLM 用戶端(Cursor/Claude Desktop),統計現有 Function Calling 重複實作數量。
FastMCP Hello World:pip install "mcp[cli]" → 單工具 Server → MCP Inspector 確認 tools/list。目標 30 分鐘內完成。
三能力設計:Tools(有副作用)/Resources(唯讀)/Prompts(定型)分類;從五個工具以內起步,避免過度公開。
用戶端接入測試:Cursor mcp.json 以 STDIO 註冊,在真實 Agent 任務中評估工具選擇準確度。
HTTP + Docker 化:團隊共用需求出現時切換 Streamable HTTP;機密以 ENV 注入映像,不在程式碼硬編碼。
7×24 宿主部署:有狀態工作階段需專用不休眠宿主。MESHLAUNCH Mac Mini 可讓 MCP Server 與 IDE Agent 同節點常駐,排除筆電休眠中斷。
2026 年參考數據如下:
10,000+ 公開 MCP Server:生態目錄每週以數百件速度成長;自研 Server 一經上線,所有 MCP 用戶端立即可用,網路效應顯著。
整合開發成本降 38–55%:企業 AI 整合專案採用 MCP 後的平均節省率(2025–2026 業界調查);各供應商 Function Calling 雙重實作得以消除。
FastMCP 初版 PoC 中位數 4.2 小時:從 Hello World 到 Cursor 接入的開發者回報(n=280,2026 Q1 社群調查);對比 LangChain 完整 Agent 建置約 2.1 天,大幅縮短。
注意:Linux VPS 無法原生執行 Xcode 建置或 Apple Silicon 最佳化 Embedding 推理;筆電 STDIO 工作階段會因休眠中斷;AWS Lambda 無法維持有狀態 MCP 連線。每種捷徑都會犧牲正式 Agent 所需能力。
若團隊需在同一節點常駐 MCP Server、ChromaDB 匯入與 iOS CI,MESHLAUNCH 雲端 Mac Mini 租賃通常是更合理的正式宿主:專屬 Apple Silicon、日/週/月彈性計費、穩定網路與頻寬,工具定義可成為可移植的團隊資產而非個人筆電設定。規格與價格見 租用價格頁;部署問題可至 幫助中心。
FastMCP 是官方 mcp 套件上的高階封裝。@mcp.tool() 裝飾器可自動產生 JSON Schema,並在同一份程式碼切換 STDIO 與 HTTP。低階 SDK 需手寫 RPC 處理器;FastMCP 提供從 Hello World 到上線的最短路徑。
本機 STDIO 僅適合開發。正式環境需 HTTP 傳輸加 Docker,或以 systemd/pm2 常駐管理。有狀態工作階段需不會休眠的專用宿主。MESHLAUNCH Mac Mini 租賃適合在同一 Apple Silicon 節點常駐 MCP Server 與 Cursor。
① Python 虛擬環境與 mcp 套件版本一致;② STDIO 模式 Transport 設 stdio,Command 設 python,Arguments 設 server.py;③ HTTP 模式檢查連接埠與認證標頭;④ tools/list 為空時確認裝飾器模組匯入。網路與 SSH 問題見 幫助中心。
Function Calling 綁定單一 LLM 供應商。MCP Server 實作一次後,Cursor、Claude Desktop、ChatGPT、VS Code 等所有 MCP 用戶端均可重用,並支援 tools/list 執行時發現與 Resources/Prompts 整合公開。業界調查顯示供應商切換時工具層改寫成本平均可降 38–55%。