interactive_feedback
Ask the human user for interactive feedback through the Web UI.
Use this tool whenever you need a human decision, clarification, confirmation, plan approval, design review, or final sign-off before continuing — especially when the next step has multiple valid approaches, irreversible side effects, or significant trade-offs.
Behavior:
- Renders the resolved message (Markdown) and an optional list of options in a Web UI; the user submits text + selected options + optional images.
- The call blocks until the user submits, the auto-resubmit countdown expires, or the configured backend timeout is reached.
- On success, returns a list of MCP content blocks (text + image) that include the user reply, selected options, and an optional prompt suffix.
- On parameter validation failure, raises
ToolErrorso the agent can retry with corrected arguments. On service / task failure, returns a configurable resubmit prompt instructing the agent to call this tool again, instead of silently dropping the request.
Cross-tool compatibility:
summary/promptare accepted as aliases formessageso the samemcp.jsonconfig can target other feedback MCP variants without retraining the agent.optionsis an alias forpredefined_options.project_directory,submit_button_text,timeout,timeout_seconds,feedback_type,priority,language,tags,user_id,task_idare accepted but ignored. They prevent the first-call validation failures observed when an agent reuses arguments shaped for a different feedback MCP server.
Note: this function is not the MCP registration site itself; server.py wraps it with mcp.tool() to expose it to MCP clients.
R25.2: 函数体首行 `import httpx 让下面 except httpx.HTTPError 在运行时 解析符号——本工具被 MCP 客户端首次调用时一次性付 ~55 ms 加载费,而 MCP server cold-start 路径完全不会进入此函数(server.py` 顶层 import 时只是定义而已)。
R44 FastMCP 最佳实践:`ctx 关键字参数(FastMCP 自动注入)让本函数可以走 await _emit_ctx_info(ctx, ...) 把 task lifecycle 事件回送给 client (Cursor / Claude Desktop / ChatGPT Desktop)。client 收到后会在 chat sidebar 渲染一行进度日志,让人类用户能"看到工具确实在工作、正在等真人 回复",而不是猜"agent 是不是 hung 住了"。ctx 永远 keyword-only 且 默认 None,所以本工具被通过别的入口(pytest 直接调)调用时不会因为缺 ctx 而崩;具体安全语义见 _emit_ctx_info` 的 docstring。