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.