fix: 防止 MCP 工具调用失败后的 SearchExtraTools/ExecuteExtraTool 死循环

This commit is contained in:
claude-code-best
2026-05-19 15:25:11 +08:00
parent 27b665ac79
commit 27b334aceb
2 changed files with 11 additions and 1 deletions

View File

@@ -15,5 +15,12 @@ Inputs:
- tool_name: The exact name of the target tool (string)
- params: The parameters to pass to the target tool (object)
If the tool is not found, an error message will be returned suggesting to use SearchExtraTools to discover available tools.`
If the tool is not found, an error message will be returned suggesting to use SearchExtraTools to discover available tools.
FAILURE HANDLING — CRITICAL:
If ExecuteExtraTool returns an error (missing parameters, validation error, permission denied, tool not found, or any other failure), you MUST:
1. Stop immediately — do NOT retry the same tool.
2. Do NOT call SearchExtraTools again for the same tool name.
3. Inform the user about the failure and suggest alternatives.
Never enter a SearchExtraTools → ExecuteExtraTool retry loop for the same tool.`
}

View File

@@ -27,6 +27,9 @@ const PROMPT_TAIL = ` Returns matching tool names.
IMPORTANT: ExecuteExtraTool is always available in your tool list. After this search returns tool names, you MUST call ExecuteExtraTool with {"tool_name": "<returned_name>", "params": {...}} to invoke the deferred tool. This is the ONLY way to execute deferred tools — do not read source code or analyze whether the tool is callable, just use ExecuteExtraTool directly.
FAILURE RETRY POLICY:
If ExecuteExtraTool fails for a tool, do NOT search for that same tool again. Searching again will not fix the failure — it will only repeat the same error in a loop. Stop immediately and inform the user about the failure.
Query forms:
- "select:CronCreate,Snip" — fetch these exact tools by name
- "discover:schedule cron job" — pure discovery, returns tool info (name, description) without loading. Use when you want to understand available tools before deciding which to invoke.