slackapi / slackapi/slack-skills-plugin

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

Open
#92 2 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

area:mcp bug
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

  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

  • 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_draft strips 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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.