MCPTools doesn’t respect requires_confirmation_tools parameter - HITL not working

When using MCPTools with requires_confirmation_tools parameter, tools that should require confirmation are executed immediately without pausing for user approval. The HITL (Human-in-the-Loop) feature doesn’t work for MCP tools.
Version: Agno 2.2.3
Component: agno.tools.mcp.MCPTools

Root Cause:
MCPTools.build_tools() creates Function objects directly (line 288-295) but doesn’t set the requires_confirmation parameter.
When MCPTools registers tools, it bypasses Toolkit.register() which would normally set requires_confirmation=tool_name in self.requires_confirmation_tools (see Toolkit.register() line 131).
Instead, MCPTools directly creates Function objects and registers them in self.functions dict, missing the requires_confirmation flag entirely.

Steps to reproduce:

  1. Create MCPTools instance with requires_confirmation_tools:
    catalog_tools = MCPTools(
    transport=“streamable-http”,
    url=“https://example.com/mcp”,
    requires_confirmation_tools=[“update_data”]
    )
  2. Connect to MCP server:
    await catalog_tools.connect()
  3. Add tool to an Agent:
    agent = Agent(tools=[catalog_tools])
  4. Agent calls “update_data”
    Expected: Run pauses, RunPausedEvent emitted, tool.confirmed must be set to continueActual: Tool executes immediately without pause
    Toolkit.register() correctly sets requires_confirmation: agno/tools/toolkit.py:131
    MCPTools should match this behavior when registering MCP server tools

Let me know if there is another way around.

Hi @shubham, thanks for reaching out and supporting Agno. I’ve shared this with the team, we’re working through all queries one by one and will get back to you soon. If it’s urgent, please let us know. We appreciate your patience!

If someone could clarify on this, it would be great!

Hi @yuvi , I haven’t heard back from the team on this thread. Could you please help with an update?

Hey @shubham,
apologies for the delayed response. We’ve raised the PR for this issue here: https://github.com/agno-agi/agno/pull/5367
After checking with the team, it appears there are currently no alternative solutions or workarounds.