Ian Chou's Blog

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 請求。

  1. Cursor 啟動 Math Server,問:「你有什麼工具?」

    • Math Server 回答:「我有 { name: "add", description: "加法" }」。
    • Cursor 在心裡的小本本記下:"add" 這個功能屬於 "Math Server"
  2. Cursor 啟動 Weather Server,問:「你有什麼工具?」

    • Weather Server 回答:「我有 { name: "get_weather", description: "查天氣" }」。
    • Cursor 在心裡的小本本記下:"get_weather" 這個功能屬於 "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]
你是一個有能力的助手。你可以使用以下工具來幫助使用者:

  1. add: 計算兩個數字的總和。
  2. get_weather: 查詢指定城市的氣候。

如果你需要使用工具,請輸出特定的 JSON 格式...

所以,是 AI(LLM 模型)看到了這份菜單,然後根據你的問題「我想算加法」,運用它的推理能力,決定要點 add 這道菜。


第三階段:查表派單 (Routing)

AI 決定好後,回傳:「我要呼叫 add」。

這時候回到 Cursor 的程式邏輯(非 AI 部分):

  1. Cursor 收到 AI 的請求:Call Tool: "add"
  2. Cursor 不需要思考,它直接打開第一階段建立的那本「小本本」。
  3. 查表發現:add 對應到 Math Server
  4. Cursor 直接把資料丟進 Math Server 的管線。

總結

這就是為什麼你在寫 MCP Server 程式碼時,name (工具名) 和 description (描述) 這麼重要: