MCP(Model Context Protocol)是讓 AI 應用連接外部工具與資料的開放標準,像「AI 界的 USB-C」:一次開發、處處可用,Claude、ChatGPT、Cursor 都支援,2026 年已是 AI 代理開發的必學基礎。
如果你在 2026 年還不知道 MCP,那你大概錯過了 AI 開發領域最重要的基礎建設之一。這個由 Anthropic 在 2024 年底開源的協定,只花了不到兩年就變成整個 AI 生態系的「共同語言」——OpenAI 在 2025 年 3 月宣布支援、Google Gemini 與 Microsoft Copilot 跟進、官方 Registry 已有近萬個伺服器記錄。這篇文章用最白話的方式,帶你從零搞懂 MCP:它解決什麼問題、架構長怎樣、三大原語是什麼,最後用 Python 實作第一個 MCP Server。
為什麼需要 MCP?先看 AI 整合的碎片化噩夢
在 MCP 出現之前,把 AI 模型接到外部系統是場噩夢。假設你的公司有三個 AI 平台(Claude、ChatGPT、Gemini)和三個系統(資料庫、CRM、檔案庫):
- 把 ChatGPT 接到 CRM?要寫一個 ChatGPT 專屬 plugin。
- 同一套功能搬到 Claude?全部重寫。
- Gemini 又是另一套做法。
這就是經典的 N×M 整合問題:每個「模型 × 工具」組合都要一套客製化 glue code(膠水程式碼)、schema、錯誤處理。系統越多,複雜度爆炸式成長,開發慢、bug 多、維護成本高。
MCP 的解法很簡單:把「模型」和「工具」中間的介面標準化。就像 USB-C 統一了充電與傳輸介面——不管哪個裝置,插上就能用。模型端只要支援 MCP,就能連接任何 MCP Server;工具端只要做成 MCP Server,就能服務任何支援 MCP 的 AI 應用。一次開發,多處複用,N×M 直接變成 N+M。
MCP 核心架構:Host / Client / Server 三層
flowchart LR
H[Host<br/>AI 應用<br/>Claude Desktop / Cursor / ChatGPT]
C1[MCP Client 1]
C2[MCP Client 2]
S1[MCP Server A<br/>本地 檔案系統<br/>stdio]
S2[MCP Server B<br/>本地 資料庫<br/>stdio]
S3[MCP Server C<br/>遠端 Sentry<br/>Streamable HTTP]
H --> C1
H --> C2
C1 <--> S1
C1 <--> S2
C2 <--> S3MCP 採用典型的 client-server 架構,三個角色各司其職:
| 角色 | 是什麼 | 職責 |
|---|---|---|
| Host(主機) | AI 應用本身,如 Claude Desktop、Claude Code、Cursor、ChatGPT | 啟動並管理多個 MCP Client,整合工具與資料,決定何時呼叫工具 |
| Client(客戶端) | Host 內部的連接元件 | 與每個 MCP Server 建立一對一的專屬連線,負責安全通訊、發送請求 |
| Server(伺服器) | 真正接觸資料與 API 的程式 | 向 AI 暴露 Tools / Resources / Prompts,執行模型的要求 |
一個 Host 可以同時連接多個 Server——本地 Server(如檔案系統、資料庫,走 stdio)與遠端 Server(如 Sentry、GitHub,走 Streamable HTTP)可以混用。所有訊息走 JSON-RPC 2.0 格式,不管底層用什麼傳輸方式,協定表面都一致。
三大核心原語:Tools / Resources / Prompts
MCP 定義了三種 Server 可以暴露給 AI 的「原語」(Primitives),理解這三個就掌握了 MCP 的精髓:
| 原語 | 是什麼 | 比喻 | 實際例子 |
|---|---|---|---|
| Tools(工具) | 模型可以執行的函數 | AI 的手 | 查詢資料庫、發送 API 請求、建立工單 |
| Resources(資源) | 模型可以讀取的資料 | AI 的眼睛 | 檔案內容、資料庫 schema、API 回應 |
| Prompts(提示模板) | 預先定義的互動工作流 | AI 的 SOP | 系統提示詞、few-shot 範例、標準作業流程 |
一個資料庫 MCP Server 的典型設計:用 Tools 讓模型執行 SQL 查詢、用 Resources 暴露資料庫 schema 給模型參考、用 Prompts 提供「如何用這些工具」的示範對話。Client 透過 tools/list、resources/list 等方法動態發現能力,所以 Server 的功能可以隨時擴充。
💡 2026-07-28 最新版規格還加入了客戶端原語:Elicitation(Server 主動向使用者追問資訊、請求確認,取代已棄用的 Sampling)。新版規格也棄用了舊的 Logging 原語,建議改用 stderr 或 OpenTelemetry。
傳輸方式:stdio vs Streamable HTTP
MCP 的傳輸層(Transport)決定 Server 與 Client 之間怎麼「講話」:
| 特性 | stdio | Streamable HTTP |
|---|---|---|
| 適用場景 | 本機開發、桌面應用、CLI | 遠端部署、SaaS 服務 |
| 運作方式 | 透過標準輸入/輸出流直接通訊 | HTTP POST + 可選 SSE 串流 |
| 網路開銷 | 零(同機器進程間) | 有(需 HTTPS) |
| 認證 | 不需要(本機信任) | OAuth 2.1 / Bearer token / API key |
| 典型連線數 | 一個 Client 對一個 Server | 多個 Client 對一個 Server |
Streamable HTTP 已取代舊版 HTTP+SSE 傳輸(2024-11-05 規格),但保持向下相容。實務上:本機開發一律用 stdio(Client 直接把 Server 當子進程啟動),要上線給多人用才部署 Streamable HTTP。
Python 實戰:15 行寫出第一個 MCP Server
理論講完,直接動手。用官方 MCP Python SDK v2(目前穩定版,支援 2026-07-28 規格,需 Python 3.10+):
# 安裝(含 CLI 工具)
pip install "mcp[cli]"
# 或用 uv
uv add "mcp[cli]"
建立 server.py,一個完整的 MCP Server 只要 15 行:
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}!"
用 @mcp.tool() 註冊工具、@mcp.resource() 註冊資源,就完成了!啟動並用官方 Inspector 除錯工具測試:
uv run mcp dev server.py
進階範例:SQLite 查詢工具
實務上更常見的用法是讓 AI 直接查資料庫。以下範例把 SQLite 查詢包成一個 tool:
import sqlite3
from mcp.server import MCPServer
mcp = MCPServer("SQLite Helper")
@mcp.tool()
def query_sales(sql: str) -> list:
"""Execute a read-only SQL query on the sales database."""
conn = sqlite3.connect("sales.db")
conn.row_factory = sqlite3.Row
cur = conn.execute(sql)
rows = [dict(r) for r in cur.fetchall()]
conn.close()
return rows
連到 Claude Code 與 Cursor
Server 寫好後,在 AI 工具的設定檔註冊即可:
Claude Code(~/.claude.json 或專案 .mcp.json):
{
"mcpServers": {
"sqlite": {
"command": "/path/to/venv/bin/python",
"args": ["/path/to/server.py"]
}
}
}
Cursor(~/.cursor/mcp.json):
{
"mcpServers": {
"sqlite": {
"command": "/path/to/venv/bin/python",
"args": ["/path/to/server.py"]
}
}
}
⚠️ 三個關鍵踩坑提醒:
- 一定要用絕對路徑指定 Python 直譯器與腳本位置,相對路徑在子進程啟動時常常找不到。
- stdio 模式下 log 一律寫 stderr,千萬不要
print()到 stdout——會破壞 JSON-RPC 訊息協定,讓 Client 直接斷線。 - 設定後 Cursor 會顯示綠色狀態點、Claude Desktop 會出現 tools 圖示,每次工具呼叫前都要使用者批准。
2026 生態系現況:MCP 已經不是「未來」
MCP 的採用數據在 2026 年已經非常扎實:
| 指標 | 數據 | 來源 |
|---|---|---|
| 企業生產環境採用率 | 41%(軟體業受訪者已 limited/broad production) | Stacklok《State of MCP in Software 2026》 |
| 官方 Registry 伺服器記錄 | 9,652 筆最新版、28,959 筆含歷史版本(2026-05 快照) | MCP Registry API |
| 每月 SDK 下載量 | 9,700 萬次以上(Python + TypeScript) | Anthropic 2025-12 生態系更新 |
| GitHub mcp-server 主題倉庫 | 15,926 個 | GitHub Search API |
各大平台支援現況:
| 平台 | MCP 支援 |
|---|---|
| Claude / Claude Desktop | 原生支援(MCP 發源地),官方參考伺服器齊全 |
| OpenAI / ChatGPT | 2025-03 起 Agents SDK、Responses API、ChatGPT 桌面版全面支援,並加入 MCP 指導委員會 |
| Google Gemini / Vertex AI | Gemini SDK 支援 MCP tools 自動呼叫循環 |
| Microsoft Copilot Studio | 可透過 Streamable 傳輸連接既有 MCP Server |
| GitHub | 官方 GitHub MCP Server(2025-04 公開預覽) |
| Vercel | AI SDK 內建 MCP client 路徑,支援部署 MCP Server |
企業部署的安全挑戰
工具能力越強,安全責任越大。MCP 的動態工具呼叫模型帶來幾個獨特威脅:
- 工具中毒(Tool Poisoning):攻擊者用惡意撰寫的工具描述誘騙模型做出不該做的事。
- 間接提示注入(Prompt Injection):惡意文件或網頁內容夾帶隱藏指令,讓代理在執行任務時「被劫持」——OpenAI 自己都承認這個問題「不太可能被徹底解決」。
企業部署建議遵循以下原則:
- 零信任(Zero Trust):Never trust, always verify。每個請求都重新驗證授權,不只登入時驗一次。
- 最小權限:Server 只暴露必要的工具。與其給「全資料庫管理」,不如給「query_sales_data」這種窄範圍、帶參數限制與速率限制的工具。
- 即時權限授予(JIT):不給常駐權限,需要時才發放短期、限時、限用途的存取憑證。
- 閘道集中管控:企業內所有 MCP 連線走單一閘道,統一執行 OAuth 2.1 認證、工具級 RBAC 與呼叫級審計日誌,才能滿足 SOC 2 / 合規稽核。
總結
MCP 之於 AI 代理,就像 USB-C 之於消費電子——它把「AI 連外部世界」這件事標準化了。對開發者來說,學會寫 MCP Server 等於拿到一張「一次開發、所有 AI 都能用」的入場券;對企業來說,MCP 是讓 AI 從聊天機器人升級為真正能做事之員工的關鍵基礎設施。
下一步可以從官方 Registry 找現成 Server 裝來玩,或參考我們先前介紹的 MCP Router 開源路由器,用一個 Server 同時代理多個後端工具;對 MCP 安全性有興趣的讀者,可以看這篇企業 API 整合 MCP 難度分析。
延伸閱讀
- 大腦思考大不同:Sequential Thinking MCP 與推理型大模型功能實現全解析 — 用 MCP 強化模型推理能力的實例
- MCP Router:模型上下文協定伺服器的開源路由器 — 單一入口管理多個 MCP Server
- 2026 年 SEO 怎麼做?用 Semrush MCP + ChatGPT 聊天完成網站稽核 — MCP 在行銷場景的實戰應用
- Agent Skills 完整教學:讓 Claude Code、Cursor 自動遵循工程紀律 — MCP 之外的另一種能力擴充方式
- DeepSeek Harness 開源登場:「一切皆插件」的 Agent 框架 — 插件化 Agent 架構的最新嘗試
