slackapi / slackapi/slack-skills-plugin
`slack_send_message_draft` returns success when a draft already exists (should error `draft_already_exists`)
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 132
- Forks
- 34
- Avg merge
- 1d 6h
- Merged PRs (30d)
- 16
Description
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_draftfor a DM with message text A.- Observe: success, includes a
draft_id(e.g.Dr…).
- Observe: success, includes a
- Without deleting that draft, call
slack_send_message_draftagain 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 newwidget_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, returndraft_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
- Tool schema documents:
draft_already_exists— “A draft already exists for this channel (user should edit or delete the existing draft first)” - Only one attached draft per channel (tool notes)
- Sibling draft bug: #18 (
slack_send_message_draftstrips newlines)
This repository is the public Slack-maintained surface for the hosted MCP server. The fix requires a change on
mcp.slack.com.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the behavior with slack_send_message_draft against https://mcp.slack.com/mcp, using the documented draft_already_exists response as the expected result. No repository file or local entry point is identified; the issue says the required change is on the hosted MCP server. Done means a second call either returns draft_already_exists or clearly implements replacement and returns the existing draft_id.
Written by the indexing model from the issue text.
Assessment
- Domain
- api, backend
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100