MCP 到底是什麼?一篇讀懂 Claude 的插件系統
本篇是「Claude 擴充生態三部曲」系列的第 1 / 1 篇。你可以從系列總覽開始閱讀,也可以直接接著看本文。
背景
常常有人問我:「Claude 可以連到外部工具嗎?可以查資料庫、呼叫 API、讀本機檔案嗎?」
答案是可以的,靠的就是 MCP——Model Context Protocol。
但每次我說出「MCP」這三個字,下一個問題幾乎都是「那是什麼」。這篇就從頭說清楚。
發現過程:Claude 為什麼不能直接呼叫 API?
先搞清楚問題本身。
假設你希望 Claude 能查今天的天氣,最直覺的想法是:讓 Claude 直接打一個 HTTP request 給氣象 API,拿到資料後回答你。
但有兩個問題:
安全性:Claude 是一個語言模型,不是一個可以任意執行代碼的程式。讓 AI 隨意呼叫外部服務,沒有任何控制機制,後果很難預測——它可能呼叫到你不想讓它碰的東西。
標準化:如果每個工具都有自己的呼叫方式,Claude 要怎麼「自動」知道每個工具的介面?你寫的工具是用 REST?GraphQL?還是自訂格式?模型沒辦法猜。
MCP 的出現,就是為了解決這兩件事。
它定義了一個標準的 client-server 協議:
- MCP Server:你寫的程式,負責暴露工具給 Claude 用
- MCP Client:Claude Desktop 或 Claude Code,負責呼叫你的工具
Claude 不是「自己去呼叫外部 API」,而是「透過 MCP 協議,呼叫你已經寫好、已經受控的工具」。這個設計讓整件事變得安全、可預期、而且可組合。
核心概念:用 USB 類比說清楚
我覺得最好的類比是 USB 標準。
MCP 就像 USB 規格
以前的電腦周邊設備,每家廠商都有自己的接頭——滑鼠有滑鼠的接頭,鍵盤有鍵盤的接頭,印表機又是另一種。USB 統一了這個標準之後,只要符合 USB 規格,插上去就能用,不管是哪家廠商做的裝置。
MCP 做的事情一模一樣:只要你的工具符合 MCP 規格,Claude 就知道怎麼用——不管你的工具是查天氣、讀資料庫、還是操作 Notion。
MCP Tool 就像 USB 插頭
每個 MCP tool 都有三樣東西:名稱、參數定義、回傳值。這就是「插頭的規格」。你定義好,Claude 自動知道什麼情況下該用哪個工具、要傳什麼參數進去。
Claude Desktop config 就像裝置管理員
Windows 的裝置管理員告訴作業系統:「這台電腦上有哪些 USB 裝置」。Claude Desktop 的 config 做一樣的事:告訴 Claude「這台機器上有哪些 MCP Server 可以用」。
具體數據:一個最小可用的 MCP Server
說了這麼多概念,來看實際程式碼長什麼樣子。
安裝
pip install mcp
最小 Server 範例
下面這個 server 只有一個工具——greet,輸入名字,回傳打招呼的字串。
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("my-first-server")
@mcp.tool()
def greet(name: str) -> str:
"""輸入名字,回傳打招呼的字串。"""
return f"哈囉,{name}!這是你的第一個 MCP 工具。"
if __name__ == "__main__":
mcp.run()
就這樣。10 行,一個可以被 Claude 呼叫的工具就存在了。
FastMCP 把 MCP 協議的底層細節全包起來,你只需要寫 @mcp.tool() decorator,剩下的它處理。
加進 Claude Desktop Config
找到這個檔案:~/Library/Application Support/Claude/claude_desktop_config.json
加入以下內容:
{
"mcpServers": {
"my-first-server": {
"command": "/usr/local/bin/python3",
"args": ["/path/to/your/server.py"]
}
}
}
注意 command 要填你系統實際的 Python 路徑(用 which python3 確認),args 填你的 server 檔案位置。
確認工具出現
完全重啟 Claude Desktop(不是關視窗再開,是從選單列 Quit 掉再重開)。
重開之後,直接問 Claude:「你現在有哪些工具?」
如果設定正確,它會列出你剛才定義的 greet 工具。然後你就可以說:「用 greet 工具,幫我打個招呼,名字是 Bobo」——Claude 會真的呼叫你的 Python function,回傳結果。
3 分鐘快速上手 Checklist
- 安裝:
pip install mcp - 寫 server:建立
.py檔,加上FastMCP和至少一個@mcp.tool() - 本機確認:直接跑
python3 server.py,沒有 error 代表可以啟動(它會等待 stdin,Ctrl+C 結束) - 確認 Python 路徑:
which python3(重要,多版本環境容易填錯) - 加 config:填進
claude_desktop_config.json - 完全重啟 Claude Desktop
- 驗證:問 Claude「你有哪些工具?」
反思
技術面:MCP 和傳統 REST API 的差異
傳統的 REST API 是你的 app 主動呼叫:你的程式在某個時機點,決定要打一個 HTTP request,拿到資料,再做後續處理。整個流程的控制權在你手上。
MCP 是Claude 主動呼叫:你定義好工具,Claude 根據對話情境,自己判斷什麼時候該用哪個工具、傳什麼參數。你不需要寫「呼叫工具的邏輯」,那是 Claude 的工作。
這個差異比看起來大。它意味著你不需要事先知道「使用者會問什麼」——只要工具定義清楚,Claude 自己會想辦法把對話和工具對應起來。
心態面:標準化協議為什麼重要
MCP 的設計目標是讓任何 LLM 都能用同一套工具——不只是 Claude。只要是支援 MCP 的客戶端,都可以呼叫你寫的 server。
這讓工具的投資報酬率變高:你做一次,可以被 Claude、被其他支援 MCP 的 AI agent 重複使用。生態系的邏輯就是這樣建立起來的。
有趣發現:MCP server 不需要對外開放
很多人第一次聽到「server」會直覺想到「要部署到雲端」、「要有 public IP」。
但 MCP server 完全可以跑在本機,甚至必須是本機——Claude Desktop 的 config 直接指向你的本機 Python 腳本,Claude 透過 stdio(標準輸入輸出)和 server 溝通,不需要任何 HTTP、不需要 port、不需要雲端。
你的工具,只跑在你的電腦上,只有你的 Claude 能用,資料不出你的機器。這對很多涉及私人資料的應用場景來說,是比任何雲端 API 更好的選擇。