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. 原始狀況 (衝突)
- Math Server:
{ name: "add" } - Todo Server:
{ name: "add" }
2. Cursor 修改後的對照表 (內部路由表)
Cursor 會自動把 Key 改掉,但 Value 指向原本正確的 Server:
| 修改後的工具名 (AI 看到的) | 原始工具名 (Server 聽得懂的) | 負責的 Server |
|---|---|---|
| math_add | add |
➡️ Math Pipe |
| todo_add | add |
➡️ Todo Pipe |
3. AI 看到的 System Prompt
你可以使用以下工具:
math_add: 計算數字加法...todo_add: 新增一項代辦事項...
4. 執行流程
- AI 說:「我要呼叫
math_add」。 - Cursor 收到請求,查表發現
math_add對應的是 Math Server。 - 關鍵一步:Cursor 在傳送訊號給 Math Server 時,會把名字還原成
add(因為 Math Server 只認得add,不認得math_add),或者 Math Server 設計時就允許這種寬容度。
策略二:依賴描述 (Description) 讓 AI 辨識
如果 Client 端實作比較懶,沒有自動改名,它可能會同時列出兩個 add,但依賴 Description 讓 AI 選擇。
工具清單:
add: Calculate sum of two numbers. (from Math Server)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 時,就先把名字取好:
❌ 不好的命名 (太通用):
addgetrunsearch
✅ 好的命名 (動詞+名詞 / 具體化):
math_add_numbers(雖然長,但絕不會撞)todo_create_taskweather_get_currentgit_commit_changes
這樣不僅避免了衝突,也能讓 AI 更容易從名字就猜到這個工具是用來幹嘛的,增加準確度。
- ← Previous
stdin 到底是什麼 Port? (Stdio vs TCP/IP) - Next →
MCP Tools 通知機制:與 Resources 的差異解析