Skip to content

[Bug]: Slack draft widget’s Send button fails with “This app cannot call that tool” #17829

Open

Description

@aromanarguello

Before submitting

  • 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

  1. Open T3 Code Nightly and start a conversation with the Codex provider.
  2. Enable the Slack app connector.
  3. Ask the agent: “Create a Slack draft in my channel saying ‘Test message.’”
  4. Wait for the inline Slack draft card with its Send button.
  5. Click the card’s Send button.
  6. 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.

Impact

Minor bug or occasional failure

Version or commit

0.0.46-nightly.20261009.2886

Environment

macOS 26.5.1 (build 25F80) T3 Code Nightly desktop app Provider: Codex Integration: Slack app connector

Logs or stack traces

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.

Screenshots, recordings, or supporting files

Screenshot 2026-10-10 at 10.14.15 AM.png

Workaround

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.

Activity

  1. added
    bugSomething is broken or behaving incorrectly.
    needs-triageIssue needs maintainer review and initial categorization.
    on Oct 10, 2026
  2. juliusmarminge commented on Oct 10, 2026

    @juliusmarminge
    Member

    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

    • 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:

    1. 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.
    2. 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.

  3. added
    via-triageFiled through npx t3 triage
    and removed
    needs-triageIssue needs maintainer review and initial categorization.
    on Oct 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething is broken or behaving incorrectly.via-triageFiled through npx t3 triage

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions