Ian Chou's Blog

MCP 工具撞名了怎麼辦? (Namespace Collision)

MCP 工具撞名了怎麼辦? (Namespace Collision)

這是一個非常敏銳且切中要害的問題!這在軟體架構中被稱為 「命名空間衝突 (Namespace Collision)」

答案是:會!如果不處理,絕對會撞名。

既然 MCP 允許你同時安裝 10 個不同的 Server,很有可能「Math Server」有一個 add (加法),而「Todo List Server」也有一個 add (新增代辦事項)。

這時候,身為「全能管家」的 Cursor (或 Claude Desktop) 必須介入解決,通常有兩種處理策略:


策略一:自動加上「前綴 (Prefixing)」— 最常見的做法

當 Cursor 發現兩個 Server 都有 add 時,它為了區分,會在產生給 AI 看的「菜單」上動手腳,強行修改工具名稱

它通常會把 Server 的名稱加進去變成「命名空間」。

1. 原始狀況 (衝突)

2. Cursor 修改後的對照表 (內部路由表)

Cursor 會自動把 Key 改掉,但 Value 指向原本正確的 Server:

修改後的工具名 (AI 看到的) 原始工具名 (Server 聽得懂的) 負責的 Server
math_add add ➡️ Math Pipe
todo_add add ➡️ Todo Pipe

3. AI 看到的 System Prompt

你可以使用以下工具:

  1. math_add: 計算數字加法...
  2. todo_add: 新增一項代辦事項...

4. 執行流程

  1. AI 說:「我要呼叫 math_add」。
  2. Cursor 收到請求,查表發現 math_add 對應的是 Math Server
  3. 關鍵一步:Cursor 在傳送訊號給 Math Server 時,會把名字還原成 add (因為 Math Server 只認得 add,不認得 math_add),或者 Math Server 設計時就允許這種寬容度。

策略二:依賴描述 (Description) 讓 AI 辨識

如果 Client 端實作比較懶,沒有自動改名,它可能會同時列出兩個 add,但依賴 Description 讓 AI 選擇。

工具清單:

  1. add: Calculate sum of two numbers. (from Math Server)
  2. add: Create a new task in database. (from Todo Server)

這時候 AI (LLM) 非常聰明,如果你問「幫我算 1+1」,它會去比對描述。
但在技術實作上這很危險,因為當 AI 回傳 Call Tool: "add" 時,Cursor 會不知道該找哪一個 Server。

所以,現代成熟的 MCP Client (如 Claude Desktop/Cursor) 幾乎都會採用策略一(自動加上 Server 名稱作為前綴),或者直接在 UI 上報錯,警告使用者有重複的工具名稱。


給開發者的建議 (Best Practice)

既然你知道 Host (Cursor) 可能會因為撞名而必須「改你工具的名字」,為了讓 AI 更精確地使用你的工具,最佳實務是我們自己在設計 MCP Server 時,就先把名字取好:

不好的命名 (太通用)

好的命名 (動詞+名詞 / 具體化)

這樣不僅避免了衝突,也能讓 AI 更容易從名字就猜到這個工具是用來幹嘛的,增加準確度。