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
- Connect to the Slack MCP server at
https://mcp.slack.com/mcp (e.g. from Cursor).
- Call
slack_send_message_draft for a DM with message text A.
- Observe: success, includes a
draft_id (e.g. Dr…).
- Without deleting that draft, call
slack_send_message_draft again for the same channel with different message text B.
- 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
- When an attached draft already exists for
channel_id, return draft_already_exists (match the published tool schema).
- 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.
Summary
Calling
slack_send_message_drafta 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_existsfor this case and says only one attached draft is allowed per channel — but that error is not always returned.Steps to Reproduce
https://mcp.slack.com/mcp(e.g. from Cursor).slack_send_message_draftfor a DM with message text A.draft_id(e.g.Dr…).slack_send_message_draftagain for the same channel with different message text B.Observed
"Draft message is created") and a newwidget_id.draft_id(first call had one; second did not).Expected
draft_already_exists, ordraft_id).Silent success without replacing content is the worst of both: agents cannot detect the no-op.
Environment
https://mcp.slack.com/mcpplugin-slack-slack)slack_send_message_draftWhy 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
channel_id, returndraft_already_exists(match the published tool schema).Related
draft_already_exists— “A draft already exists for this channel (user should edit or delete the existing draft first)”slack_send_message_draftstrips newlines — draft renders as a single unbroken line #18 (slack_send_message_draftstrips newlines)