You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Bug]: Slack draft widget’s Send button fails with “This app cannot call that tool” #17829
I searched existing issues and did not find a duplicate.
I included enough detail to reproduce or investigate the problem.
Area
apps/desktop
Steps to reproduce
Open T3 Code Nightly and start a conversation with the Codex provider.
Enable the Slack app connector.
Ask the agent: “Create a Slack draft in my channel saying ‘Test message.’”
Wait for the inline Slack draft card with its Send button.
Click the card’s Send button.
Observe “Failed to send” with: {"code":-32000,"message":"This app cannot call that tool."}
Additional Context: Sending through chat by typing “send it” succeeded. The card continued showing its Send button afterward. Whether prior chat approval is necessary to trigger this failure hasn’t been confirmed.
Expected behavior
Clicking Send on the Slack draft card posts the message to the selected channel and displays a success confirmation.
Actual behavior
Clicking Send shows “Failed to send” with error -32000: "This app cannot call that tool." The draft card does not confirm delivery.
Slack draft widget displayed:
Failed to send
{"code":-32000,"message":"This app cannot call that tool."}
Draft creation through slack_send_message_draft succeeded.
The widget’s Send action failed with the error above.
Agent-side sending through slack_send_message succeeded.
Typing “send it” in the conversation allowed the agent to send the draft successfully and return a Slack message link. The original draft card still displayed its Send button afterward.
Thanks for the clear repro. Here's where that error comes from (checked against main @ 98beed1a). I haven't reproduced it with a live Slack connector, so the cause below is a hypothesis.
Where the refusal happens
When the card calls a tool, McpAppFrame.tsx (around line 329; mobile has the same check in McpAppWebView.tsx) asks the server for toolInfo first. If callable is false, it throws "This app cannot call that tool." before any approval prompt appears. The server repeats the same check in McpAppRequests.callTool and returns tool-not-callable.
McpAppRequests.toolInfo sets callable to tool !== undefined && mcpAppToolCallableByApp(tool._meta). It looks the tool up with findTool, which lists the app's server tools (listTools({ server: app.server })) and matches on an exact tool.name === name.
On Codex, listTools calls mcpServerStatus/list with serverName: app.server and detail: "toolsAndAuthOnly", then returns that server entry's tools.
So callable is false for one of two reasons:
The tool isn't found. The name the widget sends doesn't match any tool Codex lists for app.server. With a Codex app connector, the card's server is likely Codex's built-in codex_apps server, not a server named "slack". Its tools may be listed under a different name than the one the widget calls, or mcpServerStatus/list may not return connector tools at all for that detail level. Either way the lookup comes back undefined. This fits the fact that the agent's own slack_send_message call works, since Codex resolves that name internally.
The tool hides itself from apps._meta.ui.visibility on Slack's send tool may not include "app". mcpAppToolCallableByApp treats that as not callable, as the spec requires.
I can't tell which one it is from the code alone. The quickest check is to log what listTools returns for the card's app.server and compare it with the name the widget asks for.
The stale Send button is a separate issue. The card is a static app render, and nothing tells it that the agent later sent the draft through chat. That part may be expected behavior unless the connector's app polls for state.
Related:#16992 and #16991 are other MCP App rendering bugs with connector apps. The open PRs #17040, #17026, #17027 and #17235 cover sizing, color scheme, cookies and HTML-render answers. None of them touches the callable check, so none of them should fix this.
Activity
juliusmarminge commentedon Oct 10, 2026
Note
Grok responding on behalf of Julius.
Thanks for the clear repro. Here's where that error comes from (checked against
main@98beed1a). I haven't reproduced it with a live Slack connector, so the cause below is a hypothesis.Where the refusal happens
McpAppFrame.tsx(around line 329; mobile has the same check inMcpAppWebView.tsx) asks the server fortoolInfofirst. Ifcallableis false, it throws"This app cannot call that tool."before any approval prompt appears. The server repeats the same check inMcpAppRequests.callTooland returnstool-not-callable.McpAppRequests.toolInfosetscallabletotool !== undefined && mcpAppToolCallableByApp(tool._meta). It looks the tool up withfindTool, which lists the app's server tools (listTools({ server: app.server })) and matches on an exacttool.name === name.listToolscallsmcpServerStatus/listwithserverName: app.serveranddetail: "toolsAndAuthOnly", then returns that server entry'stools.So
callableis false for one of two reasons:app.server. With a Codex app connector, the card's server is likely Codex's built-incodex_appsserver, not a server named "slack". Its tools may be listed under a different name than the one the widget calls, ormcpServerStatus/listmay not return connector tools at all for that detail level. Either way the lookup comes backundefined. This fits the fact that the agent's ownslack_send_messagecall works, since Codex resolves that name internally._meta.ui.visibilityon Slack's send tool may not include"app".mcpAppToolCallableByApptreats that as not callable, as the spec requires.I can't tell which one it is from the code alone. The quickest check is to log what
listToolsreturns for the card'sapp.serverand compare it with thenamethe widget asks for.The stale Send button is a separate issue. The card is a static app render, and nothing tells it that the agent later sent the draft through chat. That part may be expected behavior unless the connector's app polls for state.
Related: #16992 and #16991 are other MCP App rendering bugs with connector apps. The open PRs #17040, #17026, #17027 and #17235 cover sizing, color scheme, cookies and HTML-render answers. None of them touches the
callablecheck, so none of them should fix this.