Cursor 如何決定找哪個 MCP Server? (MCP 路由機制解析)
Cursor 如何決定找哪個 MCP Server? (MCP 路由機制解析)
這是一個非常核心的問題,觸及到了 MCP 架構中最聰明的設計部分!
直接回答:Cursor(作為應用程式本身)不需要具備 AI 推理能力來決定找誰。它靠的是「查表(Lookup Table)」。
但這張表是怎麼來的?是在初始化(Startup) 階段建立的。
整個過程可以分為三個階段:1. 點名報數(建立清單) -> 2. 遞菜單(告知 AI) -> 3. 查表派單(路由)。
第一階段:點名報數 (Initialization)
當你打開 Cursor 時,它會根據你的設定檔,啟動所有的 MCP Server。接著,它會對每一個 Server 做一件最重要的事情:詢問「你會做什麼?」
這在 MCP 協議中叫做 tools/list 請求。
-
Cursor 啟動 Math Server,問:「你有什麼工具?」
- Math Server 回答:「我有
{ name: "add", description: "加法" }」。 - Cursor 在心裡的小本本記下:"add" 這個功能屬於 "Math Server"。
- Math Server 回答:「我有
-
Cursor 啟動 Weather Server,問:「你有什麼工具?」
- Weather Server 回答:「我有
{ name: "get_weather", description: "查天氣" }」。 - Cursor 在心裡的小本本記下:"get_weather" 這個功能屬於 "Weather Server"。
- Weather Server 回答:「我有
此時,Cursor 擁有一張「絕對準確」的對照表:
| 工具名稱 (Key) | 負責的 Server (Value) | 描述 (給 AI 看的) |
|---|---|---|
| add | ➡️ Math Pipe (PID 5678) | 計算兩個數字的總和 |
| get_weather | ➡️ Weather Pipe (PID 9999) | 查詢指定城市的氣候 |
第二階段:遞菜單 (System Prompt Injection)
這一步是 AI 能知道要做什麼的關鍵。
當你開始跟 Cursor 的 AI 聊天時,Cursor 會把上面那張表裡的「工具名稱」和「描述」,偷偷塞進給 AI 的「系統提示詞 (System Prompt)」裡面。
AI 實際上看到的提示詞不只是你的問題,還包含了一段 Cursor 加進去的文字,長得像這樣:
[System Message]
你是一個有能力的助手。你可以使用以下工具來幫助使用者:
add: 計算兩個數字的總和。get_weather: 查詢指定城市的氣候。如果你需要使用工具,請輸出特定的 JSON 格式...
所以,是 AI(LLM 模型)看到了這份菜單,然後根據你的問題「我想算加法」,運用它的推理能力,決定要點 add 這道菜。
第三階段:查表派單 (Routing)
AI 決定好後,回傳:「我要呼叫 add」。
這時候回到 Cursor 的程式邏輯(非 AI 部分):
- Cursor 收到 AI 的請求:
Call Tool: "add"。 - Cursor 不需要思考,它直接打開第一階段建立的那本「小本本」。
- 查表發現:
add對應到Math Server。 - Cursor 直接把資料丟進
Math Server的管線。
總結
-
Cursor 怎麼知道找誰?
靠的是啟動時建立的 「工具名稱 <-> Server 對應表」。這是一個死板的、精確的程式邏輯(Map/Dictionary Lookup)。 -
Cursor 有 AI 能力嗎?
在這個環節中,Cursor 只是管理員。 -
AI 的工作:根據描述,決定「我要用哪把剪刀」(它只喊名字,例如 "add")。
-
Cursor 的工作:聽到名字後,去抽屜裡「拿出那把剪刀」(它知道 "add" 在哪個抽屜)。
這就是為什麼你在寫 MCP Server 程式碼時,name (工具名) 和 description (描述) 這麼重要:
name是給 Cursor 查表路由 用的 (Unique ID)。description是給 AI 閱讀理解 用的 (Semantic Meaning)。