claude-code - 💡(How to fix) Fix [FEATURE] Slack MCP: Support file uploads, Block Kit blocks on send_message, and unfurl control [1 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
anthropics/claude-code#52026Fetched 2026-04-23 07:38:31
View on GitHub
Comments
0
Participants
1
Timeline
3
Reactions
1
Author
Participants
Timeline (top)
labeled ×3

Fix Action

Fix / Workaround

  • Clipboard workaround: Claude can download a file locally and copy it to the user's system clipboard (e.g. via osascript on macOS), then the user manually pastes it into Slack. This works but defeats the purpose of an automated Slack integration.
  • Playwright browser automation: Navigate to Slack's web UI and upload through the browser. This requires the user to be authenticated in the Playwright browser session, which is fragile and complex.
  • Various URL formats tested: Giphy page URLs, direct media URLs (media.giphy.com, i.giphy.com), Tenor page URLs, Tenor direct media URLs, bare URLs, angle-bracket-wrapped URLs, Slack markdown link syntax — none render inline due to the unfurl_media: false default on bot messages.
RAW_BUFFERClick to expand / collapse

Preflight Checklist

  • I have searched existing requests and this feature hasn't been requested yet
  • This is a single feature request (not multiple features)

Problem Statement

The Slack MCP send_message tool can only send plain text. This makes it impossible for Claude to send any visual content via Slack — no images, no GIFs, no file attachments, no rich formatted messages.

Three gaps combine to cause this:

  1. No file upload tool — There is no tool wrapping Slack's files.uploadV2 API, so Claude cannot upload images, GIFs, or documents to channels or DMs.
  2. No Block Kit support on send_message — The tool only accepts a message (text) parameter with no blocks parameter, so Claude cannot send inline images via image blocks.
  3. No unfurl controlunfurl_media and unfurl_links parameters are not exposed. Bot-sent messages default to unfurl_media: false, so even direct image/GIF URLs (Giphy, Tenor, etc.) render as plain text links instead of inline previews.

Proposed Solution

Any combination of the following would resolve this:

  1. Add a files_upload tool — wrapping Slack's files.uploadV2 API, accepting a local file path and a channel/DM target. This is the most complete solution as it handles all file types.
  2. Add a blocks parameter to send_message — allowing Block Kit JSON, particularly image blocks with slack_file references (upload first, then embed).
  3. Expose unfurl_media and unfurl_links on send_message — even just setting unfurl_media: true by default would fix the simplest case of sharing image/GIF URLs.

The Slack docs describe the recommended workflow: upload a file via files.uploadV2, get the file ID, then reference it in an image block on chat.postMessage.

Alternative Solutions

  • Clipboard workaround: Claude can download a file locally and copy it to the user's system clipboard (e.g. via osascript on macOS), then the user manually pastes it into Slack. This works but defeats the purpose of an automated Slack integration.
  • Playwright browser automation: Navigate to Slack's web UI and upload through the browser. This requires the user to be authenticated in the Playwright browser session, which is fragile and complex.
  • Various URL formats tested: Giphy page URLs, direct media URLs (media.giphy.com, i.giphy.com), Tenor page URLs, Tenor direct media URLs, bare URLs, angle-bracket-wrapped URLs, Slack markdown link syntax — none render inline due to the unfurl_media: false default on bot messages.

Priority

High - Significant impact on productivity

Feature Category

MCP server integration

Use Case Example

  1. A colleague messages me on Slack: "claude told me to tell you to drink some water"
  2. I ask Claude to reply with a funny cat-drinking-water GIF
  3. Claude finds a GIF on Giphy/Tenor, but cannot send it — every URL format renders as plain text
  4. Claude downloads the GIF locally and tries to upload it, but there's no file upload tool
  5. The only option is Claude copying the GIF to my clipboard so I can manually paste it
  6. With files.uploadV2 support (or even just unfurl_media: true), Claude could have sent the GIF directly in one step

Additional Context

  • Related bug: #51720 — the reading-side equivalent of this gap. slack_read_channel / slack_read_thread drop Block Kit blocks and attachments from incoming messages. Together, these two issues mean the Slack MCP cannot read or write any rich content.
  • This also affects practical workflows like sharing screenshots, diagrams, build logs, CSV exports, or CI artifacts via Slack.
  • Slack's built-in GIF picker (powered by Tenor) sends GIFs as Block Kit image blocks — so even "native" Slack GIF behavior cannot be replicated through the MCP.

extent analysis

TL;DR

To fix the issue of Claude being unable to send visual content via Slack, add a files_upload tool wrapping Slack's files.uploadV2 API or add a blocks parameter to send_message to support Block Kit JSON.

Guidance

  • Implement a files_upload tool that accepts a local file path and a channel/DM target to handle all file types, following the recommended workflow described in the Slack docs.
  • Consider adding a blocks parameter to send_message to allow Block Kit JSON, particularly image blocks with slack_file references.
  • Expose unfurl_media and unfurl_links on send_message to enable inline previews of image/GIF URLs.
  • Prioritize this feature due to its significant impact on productivity and its relation to the existing bug #51720.

Example

No code snippet is provided as the issue focuses on the implementation of a new feature rather than fixing existing code.

Notes

The proposed solutions require integration with Slack's API, specifically the files.uploadV2 endpoint and Block Kit support. The unfurl_media and unfurl_links parameters should be exposed to enable inline previews.

Recommendation

Apply a workaround by implementing the files_upload tool or adding the blocks parameter to send_message, as these solutions directly address the gaps in the current implementation and align with Slack's recommended workflow.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING