Skip to main content
Downloads the bytes behind a Slack file attachment’s url_private link and registers the result as a task file. Off by default. slack_get_message_thread and slack_read_messages surface a message’s files[] array (id, name, mimetype, size, url_private) but never the file’s content. Use this tool whenever a Slack message has an attachment you actually need to read — a screenshot, PDF, spreadsheet, etc. — then feed the result’s storage_url to structured_data_extraction or document_classification.

Authentication and enablement

Requires a workspace Slack integration (mcp:slack) with the files:read bot scope. The bot token is injected automatically. Enable the tool and bind Slack. A workspace that connected Slack before files:read was added to the app will get a clear “reconnect the Slack integration” error on first use — the fix is to reconnect from the integration settings so the new scope is granted.

Inputs

  • url_private (required): the file’s url_private, exactly as returned in a message’s files[] array by slack_get_message_thread or slack_read_messages. Must be an https:// link on a Slack-hosted domain (slack.com, slack-edge.com, or slack-files.com).
  • filename_hint (optional): overrides the filename otherwise derived from the response’s Content-Disposition header or the URL path.

Output

A structured result with file_id, file_name, storage_url (pass this to a data-extraction tool), mime_type, and file_size. Storage goes through FileStorageService.UploadFile, so the filename is sanitized into a tenant-scoped key, the size cap is enforced, and an S3 audit event is emitted. A files row is registered so the result is visible like any other task file.

Limits and side effects

  • Files larger than 50 MB are rejected.
  • An empty downloaded body is treated as an error rather than stored.
  • Read-only against Slack — no message or file state is modified.

Expected errors

  • Missing Slack bot token (integration not connected).
  • url_private missing, malformed, or not a Slack-hosted URL.
  • HTTP 403 from Slack — almost always a missing files:read scope; the error message says to reconnect.
  • File storage unavailable, or no task context (the tool must run inside a task).