2024 年末,MCP(Model Context Protocol)火了。各種技術文章蜂擁而至:"MCP 革命性突破!"、"AI 工具調用的未來!"、"不懂 MCP 就out了!"
但當你真正去了解時,會發現很多文章要麼是概念科普(講了半天不知道怎麼用),要麼是願景描繪(聽起來很美好但落不了地)。
這篇文章就是來破局的。 我們不講故事,只講本質:MCP 到底是什麼?它解決了什麼問題?和 Function Call 有什麼關係?該不該用?
一、MCP 到底是什麼?
1.1 一句話説清楚
MCP(Model Context Protocol,模型上下文協議) 是一套標準化的協議,用來規範 AI 應用如何調用外部工具和數據源。
聽起來還是有點抽象?我們換個説法:
想象你在開發一個 AI 助手,需要接入:
- 📍 地圖服務:查地址、規劃路線
- 🌤️ 天氣查詢:實時天氣、天氣預報
- 📊 數據庫:查用户數據、訂單信息
- 📧 郵件服務:發送通知
沒有 MCP 之前:每個服務都有自己的接口格式
- A 服務用 JSON-RPC
- B 服務用 REST API
- C 服務用 gRPC
- D 服務要自定義協議
你得分別研究每個 API 文檔,寫不同的適配代碼,維護多套調用邏輯。團隊協作時還要反覆對齊接口格式。
有了 MCP 之後:大家約定統一的"接口標準"
- 工具提供方按 MCP 協議暴露能力(MCP Server)
- AI 應用按 MCP 協議調用工具(MCP Client)
- 格式、認證、錯誤處理都有統一規範
類比理解:MCP 之於 AI 工具調用,就像 USB 之於數據傳輸。
- 沒有 USB 前:每個設備都有自己的接口(各種圓口、方口、扁口),亂七八糟
- 有了 USB 後:一個標準走天下,插上就能用
1.2 MCP 解決的核心問題
我們用一個實際場景説明:
場景:你在做一個智能客服系統,需要:
- 查詢用户訂單狀態(調用內部訂單系統 API)
- 查詢物流信息(調用順豐/京東物流 API)
- 查詢商品庫存(調用庫存系統 API)
- 發送客服消息(調用企業微信 API)
問題 1:接口格式不統一
// 訂單系統的接口
{
"action": "query_order",
"params": {"order_id": "12345"}
}
// 物流系統的接口
{
"method": "trackShipment",
"arguments": {"tracking_no": "SF123456"}
}
// 庫存系統的接口
POST /api/inventory/check
Body: {"sku": "PROD-001", "warehouse": "BJ"}
每個接口都不一樣,你得寫大量的適配代碼。
問題 2:AI 不知道該調用哪個工具
AI 收到用户問題"我的訂單什麼時候到?",需要判斷:
- 這個問題需要調用什麼工具?
- 需要哪些參數?
- 參數從用户的話裏怎麼提取?
沒有統一規範,每個開發者都自己定義,導致:
- 工具描述格式不一致
- 參數定義方式不一致
- AI 難以準確判斷
問題 3:團隊協作困難
- 前端開發者:後端接口怎麼調?參數格式是什麼?
- 後端開發者:AI 會傳什麼參數過來?怎麼處理?
- AI 工程師:工具列表怎麼維護?提示詞怎麼寫?
缺乏標準,溝通成本巨大。
MCP 的解決方案:
// 統一的 MCP 工具定義格式
{
"name": "query_order",
"description": "查詢訂單狀態",
"inputSchema": {
"type": "object",
"properties": {
"order_id": {
"type": "string",
"description": "訂單ID"
}
}
}
}
所有工具都按這個格式定義,AI 能統一處理,開發者能快速集成。
💡 Tip:MCP 不是銀彈,它只是把"調用外部工具"這件事標準化了。原有的問題(AI 判斷不準、參數提取錯誤)並沒有消失。
1.3 破除三個常見誤解
誤解 1:"MCP 是一種新的 AI 技術"
很多文章會説"MCP 提升了 AI 的工具調用能力",這是不準確的。
真相:MCP 底層用的還是傳統的 Function Call(工具調用)。
看一段 MCP 客户端的核心代碼:
// MCP 客户端決定使用哪個工具
const response = await openai.chat.completions.create({
model: "gpt-4",
messages: messages,
tools: this.tools // ← 這就是傳統的 Function Call 參數!
});
MCP 只是在 Function Call 外面包了一層標準化協議,沒有改變 AI 的判斷能力。
Function Call 原有的問題依然存在:
- ❌ 工具選擇不準確(工具太多時容易選錯)
- ❌ 參數提取錯誤(複雜參數容易提取不準)
- ❌ 多意圖識別困難(一個問題涉及多個工具)
結論:MCP 是協議標準化,不是技術突破。
誤解 2:"用了 MCP 就不用自己寫工具調用代碼了"
很多人以為 MCP 是什麼"開箱即用"的解決方案,裝上就能用。
真相:MCP 的工作流程和你自己實現 Function Call 幾乎一模一樣。
對比一下:
| 實現步驟 | 自己寫 Function Call | 使用 MCP |
|---|---|---|
| 1️⃣ 定義工具 | 寫工具描述 + 參數定義 | MCP Server 定義工具(還是要寫) |
| 2️⃣ AI 決策 | 調用 AI 的 Function Call | MCP Client 調用 AI(還是 Function Call) |
| 3️⃣ 執行工具 | 後端接收參數,調用真實 API | MCP Server 執行並返回(還是要實現) |
| 4️⃣ 生成回覆 | 把結果給 AI 生成回覆 | MCP Client 把結果給 AI(邏輯一樣) |
本質上是一樣的。
那 MCP 的價值在哪?答案是:生態標準化。
當大家都按同一套規則來:
- ✅ 工具能跨項目複用
- ✅ 團隊協作有統一規範
- ✅ 第三方工具能方便集成
- ✅ 降低學習和溝通成本
但如果你只是一個人開發,或者工具都是自己的內部 API,MCP 的價值就沒那麼大。
💡 Tip:把 MCP 理解成"工具調用的接口標準",就像 RESTful API 是 Web 服務的接口標準一樣。
誤解 3:"MCP 服務都是免費的"
看到各種 MCP Server(高德地圖、百度地圖、天氣服務),有人以為調用是免費的。
真相:API 調用成本最終還是要有人承擔。
以高德地圖 MCP 為例:
- 你通過 Cursor 調用高德地圖 MCP
- 高德的 MCP Server 收到請求後,會調用高德自己的地圖 API
- 這些 API 調用是計費的(按調用次數或配額)
有些大廠的 MCP 服務是免費的,但那是因為:
- 前期投入,吸引開發者
- 調用量有限制(超過就收費)
- 培養生態、獲取數據、佔領市場
天下沒有免費的午餐,只是誰付費、怎麼付費的問題。
如果你用 MCP 接入收費服務,要注意:
- ⚠️ 瞭解計費規則(按次數?按流量?按時長?)
- ⚠️ 設置調用限額(防止意外超支)
- ⚠️ 監控使用量(定期檢查賬單)
- ⚠️ 考慮緩存策略(減少重複調用)
1.4 MCP 的真正價值:生態話語權
既然 MCP 沒有技術創新,為什麼 Anthropic(Claude 的母公司)要大力推?
答案是:爭奪 AI 工具生態的話語權。
類比:USB 標準的故事
還記得 USB 標準是怎麼來的嗎?
1990 年代:
- 鍵盤用 PS/2 接口
- 鼠標用串口
- 打印機用並口
- 掃描儀用 SCSI 接口
- 每個設備都不一樣,亂七八糟
1996 年:
- Intel、微軟、IBM 等巨頭聯合推出 USB 標準
- 一個接口統一所有設備
- 誰制定標準,誰就掌握話語權
今天:
- USB 成為事實標準
- USB-IF(USB 標準化組織)掌握生態控制權
- 新技術(Type-C、USB4)都要通過他們認證
MCP 想做的就是 AI 領域的 USB
Anthropic 推 MCP 的真實意圖:
- 制定規則:讓大家按自己定的協議開發
- 佔領生態:所有工具提供商、AI 應用都接入 MCP
- 話語權:在未來的標準委員會中佔據關鍵位置
如果 MCP 真的成為行業共識:
- 所有模型的工具調用格式可能被統一
- Anthropic 在標準委員會的位置舉足輕重
- 能影響整個 AI 工具生態的走向
對開發者來説,MCP 的價值在於:
- ✅ 快速接入現成服務:不用研究 API 文檔,裝個 MCP Server 就行
- ✅ 團隊協作規範:統一配置格式,方便版本控制
- ✅ 參與生態建設:早期參與者能佔先機
- ✅ 降低集成成本:一次開發,到處運行
但也要認清:
- ⚠️ MCP 還在早期,規範可能變化
- ⚠️ 生態不夠成熟,可用工具有限
- ⚠️ 不是所有場景都適合用 MCP
- ⚠️ 核心業務邏輯建議自己掌控
二、MCP 的工作原理
理解了 MCP 是什麼,我們來看它具體是怎麼工作的。
2.1 核心工作流程
MCP 的工作流程分為三步,我們用一個實際例子説明:
場景:用户在 Cursor 中問 AI:"北京天安門的經緯度是多少?"
第 1 步:用户提問
┌─────────────────────┐
│ 用户 │
│ "北京天安門的經緯 │
│ 度是多少?" │
└──────────┬──────────┘
│
▼
第 2 步:MCP 客户端詢問 AI
┌─────────────────────┐
│ MCP 客户端 │
│ (Cursor) │
│ │
│ 把問題和可用工具 │
│ 列表發給 AI: │
│ - 地理編碼工具 │
│ - 路徑規劃工具 │
│ - 天氣查詢工具 │
└──────────┬──────────┘
│
▼
第 3 步:AI 決策
┌─────────────────────┐
│ AI 模型 │
│ (GPT-4/Claude) │
│ │
│ 分析後決定: │
│ ✓ 使用「地理編碼」 │
│ 工具 │
│ ✓ 參數: │
│ address= │
│ "北京天安門" │
└──────────┬──────────┘
│
▼
第 4 步:MCP 服務端執行
┌─────────────────────┐
│ MCP 服務端 │
│ (高德地圖 API) │
│ │
│ 收到請求後: │
│ 1. 調用高德地圖API │
│ 2. 獲取座標數據 │
│ 3. 返回結果: │
│ 116.397428, │
│ 39.90923 │
└──────────┬──────────┘
│
▼
第 5 步:AI 生成友好回覆
┌─────────────────────┐
│ 用户看到的回覆: │
│ │
│ "北京天安門的經緯 │
│ 度是: │
│ 經度:116.397428 │
│ 緯度:39.90923" │
└─────────────────────┘
關鍵點:
- MCP 客户端負責和 AI 模型通信(這部分用的是 Function Call)
- MCP 服務端負責真正執行工具邏輯(調用真實的 API)
- 中間的數據傳輸按照 MCP 協議標準進行
💡 Tip:MCP 沒有改變 AI 的決策過程,只是規範了"工具列表 → AI 決策 → 工具執行"這個流程的數據格式。
2.2 MCP 的三個核心概念
MCP 定義了三種能力類型,理解它們只需記住:給什麼、做什麼、怎麼做。
📦 Resources(資源)—— 給 AI "看"的東西
簡單説:只讀的數據源,AI 可以讀取但不能修改。
常見例子:
- 文件內容(代碼、文檔、配置)
- 數據庫記錄(用户數據、訂單信息)
- API 響應(第三方服務返回的數據)
使用場景:"分析一下這個文件有什麼問題" → AI 讀取文件內容(Resource)→ 分析並給出建議
🛠️ Tools(工具)—— AI 能"做"的事情
簡單説:可執行的函數,AI 調用後會產生實際效果。
常見例子:
- 查詢地理座標、規劃路線
- 發送郵件、創建日曆事件
- 讀寫數據庫、執行系統命令
使用場景:"幫我查北京的天氣" → AI 調用天氣查詢工具(Tool)→ 返回實時天氣數據
💬 Prompts(提示詞模板)—— 標準化的工作流
簡單説:預定義的對話模板,用户一鍵觸發常見任務。
常見例子:
- "代碼審查":自動分析性能、安全、可讀性
- "生成文檔":根據代碼自動生成 README
- "Bug 診斷":系統化排查問題
使用場景:用户選擇"代碼審查"模板 → 自動填充代碼 → AI 按模板執行審查流程
一句話區分:
| 概念 | 一句話説明 | 最常見用途 |
|---|---|---|
| Resources | AI 讀取的數據 | 讀取文件、查詢數據庫 |
| Tools | AI 執行的操作 | 調用外部 API(最常用) |
| Prompts | 用户觸發的模板 | 標準化工作流 |
💡 Tip:實際使用中 Tools 佔 90%,Resources 適合需要大量上下文的場景,Prompts 用於固定流程。
2.3 MCP 的傳輸方式
MCP 支持兩種主流傳輸方式(還有第三種 Streamable HTTP,但較少用),理解它們只需記住:本地還是遠程。
方式 1:STDIO —— 本地進程通信
簡單説:Cursor 啓動一個本地程序(如 Node.js 腳本),通過標準輸入輸出通信。
適用場景:
- 本地文件系統操作(讀寫文件、搜索代碼)
- 本地數據庫查詢(SQLite、本地 MySQL)
- 開發和調試自己的 MCP Server
優點:快、安全、不需要網絡
缺點:只能本地用,需要安裝依賴
典型配置:
{
"command": "node",
"args": ["/path/to/mcp-server.js"]
}
方式 2:SSE —— 遠程 HTTP 服務
簡單説:Cursor 通過網絡訪問遠程服務器(如高德地圖的雲端 API)。
適用場景:
- 第三方服務(地圖、天氣、翻譯)
- 企業內部 API(統一部署的工具)
- 生產環境(多人共享同一個服務)
優點:免安裝、可共享、易更新
缺點:需要網絡,有延遲
典型配置:
{
"url": "https://mcp.example.com/sse?key=your_key"
}
如何選擇?
| 你的需求 | 推薦方式 | 典型例子 |
|---|---|---|
| 讀寫本地文件 | STDIO | 文件搜索、代碼分析 |
| 查詢本地數據庫 | STDIO | SQLite、本地 PostgreSQL |
| 調用第三方 API | SSE | 高德地圖、天氣服務 |
| 團隊共享工具 | SSE | 企業內部 API、統一認證 |
💡 Tip:記住一句話:本地用 STDIO,遠程用 SSE。
寫在最後:看懂本質,少踩坑
讀到這裏,你應該已經明白:
MCP 不是什麼黑科技,它就是把 Function Call 包了一層標準化協議。
MCP 不會讓 AI 變聰明,該選錯工具還是會選錯,該提取錯參數還是會提取錯。
MCP 也不是免費午餐,API 調用成本該誰付還是誰付。
那為什麼還要了解 MCP?
因為它代表了一個趨勢:AI 工具生態的標準化。就像當年的 USB 標準,雖然技術上沒什麼創新,但統一了接口,讓整個生態繁榮起來。
給你三個建議
1. 不要盲目追新
看到 MCP 火了就覺得必須用,這是最大的誤區。如果你的項目:
- 工具就幾個,都是自己的 API
- 一個人開發,不需要團隊協作
- 對工具調用有深度定製需求
那自己實現 Function Call 可能更合適,掌控力更強,調試也更方便。
2. 也不要一棍子打死
如果你需要快速接入:
- 高德地圖、百度地圖這類現成服務
- 團隊共享的標準化工具
- 開源社區提供的 MCP Server
那 MCP 能幫你省不少事,不用研究每個 API 的文檔,裝上就能用。
3. 混合策略最務實
核心業務邏輯自己掌控,通用能力用 MCP 快速接入。
比如你做一個智能客服:
- 查訂單、查庫存 → 自己實現(核心業務)
- 地圖導航、天氣查詢 → 用 MCP(通用能力)
- 發郵件、發短信 → 用 MCP(標準化操作)
這樣既能保證核心競爭力,又能享受生態紅利。
最後一句話
MCP 是個好協議,但不要神化它。
技術永遠是為業務服務的。理解它的本質,看清它的邊界,在合適的場景用好它——這才是工程師該有的態度。
就像你不會因為 USB 出現了,就把所有設備都換成 USB 接口。有些場景該用雷電口還得用雷電口,有些場景乾脆直接焊線更可靠。
工具是死的,人是活的。別讓工具框住了思維。
參考資料
📖 官方文檔
- Anthropic MCP 協議規範
- Cursor MCP 文檔