X_AGENT_TOOL_UNEXPOSED
Means
an agent lists a tool that is neither in-process nor an MCP-exposed action
Typical cause
an agent({ tools }) entry that is an action declaring no mcp block, or mcp: { expose: false }, and is not an inProcessTool(). Refused at declaration rather than filtered at the call, because a silently dropped tool is the worst of both: the declaration reads as if the model can call it, and the model is never offered it
Fix
inProcessTool({ name, description, input, execute }) for a tool only this agent may call; or add mcp: { expose: true } to the action to offer it to MCP clients too; or drop it from the agent's tools