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’surl_private, exactly as returned in a message’sfiles[]array byslack_get_message_threadorslack_read_messages. Must be anhttps://link on a Slack-hosted domain (slack.com,slack-edge.com, orslack-files.com).filename_hint(optional): overrides the filename otherwise derived from the response’sContent-Dispositionheader or the URL path.
Output
A structured result withfile_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_privatemissing, malformed, or not a Slack-hosted URL.- HTTP 403 from Slack — almost always a missing
files:readscope; the error message says to reconnect. - File storage unavailable, or no task context (the tool must run inside a task).