Skip to content

slack_send_message_draft returns success when a draft already exists (should error draft_already_exists) #92

Description

@TomZaiger

Summary

Calling slack_send_message_draft a second time for the same DM/channel (when an attached draft already exists) can return a successful response that looks like a new draft was created, but the existing draft text is not replaced. Agents then believe they edited the draft when nothing changed.

The tool schema documents draft_already_exists for this case and says only one attached draft is allowed per channel — but that error is not always returned.

Steps to Reproduce

  1. Connect to the Slack MCP server at https://mcp.slack.com/mcp (e.g. from Cursor).
  2. Call slack_send_message_draft for a DM with message text A.
    • Observe: success, includes a draft_id (e.g. Dr…).
  3. Without deleting that draft, call slack_send_message_draft again for the same channel with different message text B.
  4. Open Drafts in the Slack client.

Observed

  • Second call returns success ("Draft message is created") and a new widget_id.
  • Second call often omits draft_id (first call had one; second did not).
  • The draft in Slack still contains text A — text B was never applied.

Expected

  • Second call should fail with documented error draft_already_exists, or
  • Clearly document and implement replace-in-place semantics (update the existing draft to text B and return its draft_id).

Silent success without replacing content is the worst of both: agents cannot detect the no-op.

Environment

  • MCP Server: https://mcp.slack.com/mcp
  • Client: Cursor IDE (Slack plugin / plugin-slack-slack)
  • Tool: slack_send_message_draft
  • Date observed: 2026-07-14

Why it matters

AI agents revise draft wording often (tone, typos, user feedback). Today the only safe revise path is: user deletes the draft in the Slack UI → agent creates a new one. A false success makes agents report “updated” while the user still sees the old text.

Suggested fix

  1. When an attached draft already exists for channel_id, return draft_already_exists (match the published tool schema).
  2. Optionally add a dedicated update tool (see companion feature request) so revise-without-send is possible without manual delete.

Related

This repository is the public Slack-maintained surface for the hosted MCP server. The fix requires a change on mcp.slack.com.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions