← Back to all apps

Slack

Collaborationby Slack
Launched May 6, 2026 on ChatGPT

Connect to Slack to share messages and create canvases directly to simplify collaboration and boost productivity. Search and retrieve messages, channels, threads, files, and users, giving Claude the context to streamline your work.

21ChatGPT Tools
11Claude Tools
SlackDeveloper
CollaborationCategory

Use Cases

productivitycommunication

Available Tools

Add a reaction to a message

slack_add_reaction
Full Description

Adds a reaction (emoji) to a Slack message.

Requires the channel_id and message_ts of the target message, plus the emoji name without colons (e.g. "thumbsup", "eyes", "white_check_mark"). Adding a duplicate reaction succeeds silently.

Parameters (3 required)
Required
channel_idstring

The ID of the channel containing the message

emojistring

Reaction (emoji) name without colons

message_tsstring

Timestamp of the message to react to

Create a canvas

slack_create_canvas
Full Description

Creates a Slack Canvas document from Canvas-flavored Markdown content. Return the canvas link to the user. Not available on free teams.

Use slack_read_canvas to read existing canvases. Use slack_update_canvas to edit an existing canvas.

Canvas Formatting Guidelines:

REQUIRED: Must be a non-empty string when updating canvas content. Only omit this field if you are updating ONLY the title.

The canvas content, formatted as Canvas-flavored Markdown.

Canvas-flavored Markdown is different from Slack message formatting. When creating content for Canvases, adhere to the following Canvas-only rules:

  • The content should be formatted as standard Markdown, including headers, lists, links, checklists, tables, and other Markdown formatting.
  • When writing user IDs, you should format them as: ![](@U15CTCJ83) where U15CTCJ83 is the user\'s Slack ID.
  • When user references are used in their own line, they will render as larger cards, if referenced inline they will render as special text.
  • When writing channel IDs, you should format them as: ![](#C15CTCJ83) where C15CTCJ83 is the channel\'s Slack ID. Always use the channel\'s ID, NEVER use the channel name.
  • NEVER output a channel as <#C1234567890> or a user as <@U1234567890>, even when part of a text quote, instead use the format above.
  • Links should be formatted as: [link text](https://example.com). Do not surround the link in angle brackets.
  • IMPORTANT: Only use these URL schemes in links: http://, https://, mailto:, tel:, ftp://, slack://, or relative paths starting with /. Other schemes like javascript:, data:, file: will be automatically removed from the canvas.
  • Images should be formatted as: ![alt text](https://example.com/image.png)
  • Image syntax must appear only in a top-level, stand-alone line. Images are not supported in other elements
  • Salesforce records should be formatted as: ![](ssr:<org_id>/<record_id>) where <org_id> is the Salesforce org ID and <record_id> is the Salesforce record ID, the org ID and record ID should be the full IDs which would be 18 characters long. Example: ![](ssr:70Dj038B0WJ0ACNCSD/X01j50VP066SCCIPDJ)
  • Salesforce records syntax must appear only in a top-level, stand-alone line. Salesforce records are not supported in other elements
  • Quoted text should be formatted as: > This is quoted text, but you should only use quotes on their own line.
  • Slack-style emojis are supported, e.g. :tada: or :wave:
    • Use only ATX headings #, ##, ###. NEVER use deeper headings ####-######.
    • Do not place headings inside list items.
    • In list items, allow only paragraphs with inline formatting.
    • Thematic breaks (---, ***, ___) are only allowed at the top level.
  • When nesting lists, do not mix list types:
    • Numbered lists can only contain nested numbered lists, and cannot contain nested bulleted lists
    • Bulleted lists can only contain nested bulleted lists, and cannot contain nested numbered lists
    • Code blocks are not allowed inside list items.
    • If a table cell contains multi-line content, <br> can be used, e.g. 'line one<br>line two'
    • The title provided through the title field will be used as the title of the canvas. Do not include the title in the content section.

<example1>

Headers

Status

:large_green_circle: On Track

Goal

The channel to coordinate the build, testing, and launch of Platypus

:people_hugging:Stakeholders

![](@U071CCRCVFH)

![](@UQSSGHV0Q)

:books:Resources

  • Project Plan
  • Google Drive

:slack:Related channels

  • ![](#C073UAJRW4R)
  • Project Channel
  • ![](#C084UBTRX4J) - [GTM Channel](https://gtm.wiki.com)

</example1> <example2> |Message|User Author| |---|---| |[Here is the python guide](https://team.slack.com/archives/C016VCYCL74/p1727122965001469)|![](@U071CCRCVFH)| |[The Java guide isn\'t ready](https://team.slack.com/archives/C016VCYCL74/p1727122965001469)|![](@UQSSGHV0Q)|\n\n

Python Guide\n

Step 1\n

print("Hello, world!")

\n\n </example2>

  • When a layout is requested use the ::: {.layout} as the starting delimiter and ::: as the ending delimiter of the full layout. Then each column should be wrapped in ::: {.column} as the starting delimiter and ::: as the ending delimiter. There can only be up to 3 columns in a layout and tables and callouts are not supported in layouts or columns.
  • Callouts should be formatted with ::: {.callout} as the starting delimiter and ::: as the ending delimiter in markdown. Use them to highlight important information, such as warnings, important prerequisites, and notices.
  • Do not use tables within callouts and callouts cannot be nested within other elements.

<example_markdown_with_callout> ::: {.callout} This is a callout ::: </example_markdown_with_callout>

  • In block quotes, ONLY use: plain text paragraphs with inline formatting. No headings, lists, code blocks, or nested quotes.
  • Code blocks are allowed only at the top level (not inside block quotes or list items).

CRITICAL RESTRICTIONS

  • Canvas Nesting Rules (MUST FOLLOW):
    • In list items, ONLY use: plain text paragraphs with inline formatting (bold, italic, inline code, links).
    • Code blocks, block quotes, and headings must always be separated from lists by blank lines.
    • In layouts no tables or callouts are supported.- Layouts are not supported in tables or callouts.

<example_correct_usage>

  • Item with inline code formatting
  • Item with bold text and [links](https://example.com)

</example_correct_usage>

<example_blocks_and_quotes_outside_lists>

code block at top level
  • List item one
  • List item two

> Block quote at top level

Heading at top level

</example_blocks_and_quotes_outside_lists>

WHEN CITING SOURCES:

  • When your content references information from web search results or other sources, you MUST include inline citation links using the [[N]](url) format throughout the content, exactly as you would in a chat response.
  • Place citations inline next to the claims they support, e.g. "Shaidorov won gold [[7]](https://en.wikipedia.org/wiki/...)"
  • Do NOT collapse all sources into a single "Source:" line at the bottom. Each fact should be cited where it appears.
  • The citation links will be automatically enriched with page titles for readability.
  • Format date headings and key dates (including due dates, deadlines, milestones) as ![](slack_date:YYYY-MM-DD) ONLY. Never append day names or date text.

Examples of appropriate usage of date formatting in your output:

Correct usage: <example_date_heading_correct>

![](slack_date:2025-12-16)

</example_date_heading_correct>

Incorrect usage (has day name and date text): <example_date_heading_incorrect>

![](slack_date:2025-12-16) December 16th

  • Monday

</example_date_heading_incorrect>- User Profile Cards: To display a user's profile card as a standalone section (not inline), use the format ![](@user_id) where user_id is the Slack user ID. CRITICAL: Use parentheses () around @user_id, NOT angle brackets <>. Example: ![](@U0TDAU873). Profile cards should be on their own line and will render as larger cards with user information.

Examples of appropriate usage of user profile cards in your output:

Correct usage (standalone profile card on its own line): <example_user_profile_card_correct>

Team Members

![](@U0TDAU873)

![](@U12345678) </example_user_profile_card_correct>- Slack Files: ONLY for files with URLs matching *.slack.com/files/*, ALWAYS embed using ![](file_reference). For standalone display (card): place on its own line. For inline reference (clickable text): embed directly in paragraph like "The ![](https://example.slack.com/files/U123/F456/doc.pdf) contains...". Do not use this syntax for non-Slack files.

Parameters (2 required)
Required
contentstring

The content of the canvas, formatted as Canvas-flavored Markdown. Follow the Canvas Formatting Guidelines in the tool description for the full syntax reference.

titlestring

Concise but descriptive name for the canvas. Do not include the title in the content section.

Create conversation

slack_create_conversation
Full Description

Create a channel, DM, or group DM. Returns a channel_id for use with slack_send_message, slack_send_message_draft, or slack_schedule_message. If a user asks to message people and no channel exists, use this tool only if the user allows it.

Two modes:

  • Channel: provide channel_name (optionally is_private, user_ids to invite)
  • DM/MPDM: provide only user_ids (1 user=DM, 2-8 users=group DM, caller auto-included)

Args: channel_name (Optional[str]): Channel name (lowercase, hyphens, max 80 chars). Auto-sanitized. is_private (Optional[bool]): Private channel. Only with channel_name. Default: false. user_ids (Optional[list[str]]): For DM/MPDM: max 8 user IDs. For channel invite: up to 1000.

Examples: DM: slack_create_conversation(user_ids=["U123"]) Group DM: slack_create_conversation(user_ids=["U123","U456"]) Channel: slack_create_conversation(channel_name="project-x") Channel+invite: slack_create_conversation(channel_name="project-x", user_ids=["U123","U456"])

Note: If inviting users to a channel fails, ask the user to manually add them via the Slack UI — there is no separate invite tool available.

Errors: invalid_arguments, user_not_found, name_taken, restricted_action, cannot_dm_bot, too_many_users

Parameters (0 required, 3 optional)
Optional
channel_namestring

Name for the new channel. If provided, creates a channel instead of a DM/MPDM. Lowercase, no spaces (use hyphens), max 80 chars.

is_privateboolean

If true, creates a private channel. Only used with channel_name. Default: false.

user_idsarray

User IDs. For DM/MPDM (no channel_name): 1=DM, 2-8=group DM. For channel creation: users to invite (up to 1000).

Slack Delete Message

slack_delete_message
Full Description

Deletes an existing Slack message sent by the current user. This is destructive and cannot be undone. Requires channel_id and message_id of the target message. For DMs, channel_id must be the DM conversation ID (D...), not the user_id. Use slack_read_channel, slack_read_thread, slack_search_public, or slack_search_public_and_private to find them. Use slack_edit_message to update a message instead of deleting it.

Parameters (2 required)
Required
channel_idstring

Channel ID where the message lives. For DMs, use the DM conversation ID (for example, D1234567890), not the user_id.

message_idstring

Timestamp ID of the message to delete (for example, "1234567890.123456").

Slack Edit Message

slack_edit_message
Full Description

Edits an existing Slack message sent by the current user. Return the updated message ID to the user. For ordinary Slack messages, use markdown_text. Use blocks only when editing a structured block message, and optionally include text as the notification fallback. markdown_text cannot be combined with blocks or text. link_names and parse map directly to Slack's chat.update behavior. reply_broadcast is only for broadcasting an existing thread reply and cannot be combined with content updates. Requires channel_id and message_id of the target message. For DMs, channel_id must be the DM conversation ID (D...), not the user_id. Use slack_read_channel, slack_read_thread, slack_search_public, or slack_search_public_and_private to find them. To send a new message instead, use slack_send_message.

Parameters (3 required)
Required
channel_idstring

Channel ID where the message lives. For DMs, use the DM conversation ID (for example, D1234567890), not the user_id.

messageobject

Updated message content. For ordinary Slack messages, use markdown_text. Use blocks only when editing a structured block message, and optionally include text as the notification fallback. reply_broadcast is broadcast-only and cannot be combined with content update fields. link_names and parse map directly to Slack chat.update.

message_idstring

Timestamp ID of the message to edit (for example, "1234567890.123456").

Get reactions on a message

slack_get_reactions
Full Description

Retrieves all reactions (emoji) on a specific Slack message. Read-only.

Requires channel_id and message_ts of the target message. Returns each reaction's emoji name, count, and the users who reacted (with display names and user IDs). Up to 50 users are shown per reaction. The count is always accurate even if the user list is truncated. Messages can have up to 50 unique emoji reactions. If no reactions exist, returns a "no reactions" message.

Use slack_read_channel or slack_read_thread to find channel_id and message_ts. Use slack_add_reaction to add a reaction.

Parameters (2 required)
Required
channel_idstring

The ID of the channel containing the message

message_tsstring

Timestamp of the message to get reactions for

List channel members

slack_list_channel_members
Full Description

Lists members of a Slack channel, group, or group DM (MPIM). Returns profile details or just user IDs. Does not support DMs.

Formats: 'detailed' (default) = full profile, 'concise' = @username + display name, 'ids_only' = user IDs only (fastest, skip profile fetch). Filters out deleted users and bots by default (use include_deleted/include_bots to include) for 'detailed' and 'concise' formats. 'ids_only' returns all member IDs without filtering (no profile data is fetched). Returns up to 30 members per page (limit is capped at 30). Use cursor from pagination_info to fetch next page.

Use slack_search_channels to find a channel ID first. Use slack_search_users to find users across the workspace. Use slack_read_user_profile for detailed info on a specific user.

Parameters (1 required, 5 optional)
Required
channel_idstring

ID of the channel to list members from

Optional
cursorstring

Pagination cursor from previous response

include_botsboolean

Include bots and apps in the member list (default: false)

include_deletedboolean

Include deleted/deactivated users in the member list (default: false)

limitinteger

Number of members to return per page (default: 30, max: 30)

response_formatstring

Level of detail (default: 'detailed'). Options: 'detailed', 'concise', 'ids_only'

Read a canvas

slack_read_canvas
Full Description

Retrieves the markdown content and section ID mapping of a Slack Canvas document. Read-only.

Use slack_create_canvas to create new canvases. Use slack_search_public to find canvases by name or content. Use slack_update_canvas to edit canvas content.

Parameters (1 required)
Required
canvas_idstring

The id of the canvas

Read channel messages

slack_read_channel
Full Description

Reads messages from a Slack channel in reverse chronological order (newest first). To read DM history, use a user_id as channel_id. Read-only.

Use slack_read_thread with message_ts to read thread replies. Use slack_search_channels to find a channel ID by name. Use slack_search_public to search across channels. If 'channel_not_found', try slack_search_channels first.

Parameters (1 required, 5 optional)
Required
channel_idstring

ID of the Channel, private group, or IM channel to fetch history for. Can also be a user_id to read DM history.

Optional
cursorstring

Paginate through collections of data by setting the cursor parameter to a next_cursor attribute returned by a previous request

lateststring

End of time range of messages to include in results (timestamp)

limitinteger

Number of messages to return, between 1 and 100. Default value is 100.

oldeststring

Start of time range of messages to include in results (timestamp)

response_formatstring

Level of detail (default: 'detailed'). Options: 'detailed', 'concise'

Slack Read File

slack_read_file
Full Description

Reads a Slack file while materializing binary bytes as a file reference. This wraps Slack's public MCP file reader. Text file contents may be returned inline. Binary file contents are uploaded through connector file-reference transport and returned as file_uri, so raw base64 payloads are not exposed in the model-visible tool result.

Parameters (1 required)
Required
file_idstring

Slack file ID to read, for example F0ABC12345.

Read thread messages

slack_read_thread
Full Description

Reads messages from a specific Slack thread (parent message + all replies). Read-only.

Requires channel_id and message_ts of the parent message. Use slack_search_public or slack_read_channel to find these values. Use slack_search_public with "is:thread" to find threads by content. Use slack_send_message with thread_ts to reply to a thread.

Parameters (2 required, 5 optional)
Required
channel_idstring

Channel, private group, or IM channel to fetch thread replies for

message_tsstring

Timestamp of the parent message (e.g. "1234567890.123456"). Must be a string in Slack ts format with a decimal point.

Optional
cursorstring

Paginate through collections of data by setting the cursor parameter to a next_cursor attribute returned by a previous request

lateststring

End of time range of messages to include in results. Slack ts format string (e.g. "1234567890.123456").

limitinteger

Number of messages to return, between 1 and 1000. Default value is 100.

oldeststring

Start of time range of messages to include in results. Slack ts format string (e.g. "1234567890.123456").

response_formatstring

Level of detail (default: 'detailed'). Options: 'detailed', 'concise'

Read user profile

slack_read_user_profile
Full Description

Retrieves detailed profile information for a Slack user: contact info, status, timezone, organization, and role. Read-only. Defaults to current user if user_id not provided.

Use slack_search_users to find a user ID by name or email.

Parameters (0 required, 3 optional)
Optional
include_localeboolean

Include user's locale information. Default: false

response_formatstring

Level of detail in response. 'detailed' includes all fields, 'concise' shows essential info. Default: detailed'

user_idstring

Slack user ID to look up (e.g., 'U0ABC12345'). Defaults to current user if not provided

Schedule message

slack_schedule_message
Full Description

Schedules a message for future delivery to a Slack channel. Does NOT send immediately — use slack_send_message for that.

post_at must be a Unix timestamp at least 2 minutes in the future, max 120 days out. Message is markdown formatted. Once scheduled, cannot be edited via API — user should use "Drafts and sent" in Slack UI.

Thread replies: provide thread_ts and optionally reply_broadcast=true. Cannot schedule in externally shared (Slack Connect) channels.

Use slack_search_channels to find channel IDs, slack_search_users to find user IDs (usable as channel_id for DMs).

Parameters (3 required, 2 optional)
Required
channel_idstring

Channel where message will be scheduled

messagestring

Message content to schedule

post_atinteger

Unix timestamp when message should be sent (2 min future minimum, 120 days max)

Optional
reply_broadcastboolean

Broadcast thread reply to channel

thread_tsstring

Message timestamp to reply to (for thread replies)

Search channels

slack_search_channels
Full Description

Search for Slack channels by name or description. Returns channel names, IDs, topics, purposes, and archive status.

Query tips: use terms matching channel names/descriptions (e.g., "engineering", "project alpha"). Names are typically lowercase with hyphens.

Use slack_read_channel to read messages from a known channel. Use slack_search_public to search message content across channels.

Parameters (1 required, 5 optional)
Required
querystring

Search query for finding channels

Optional
channel_typesstring

Comma-separated list of channel types to include in the search. Defaults to public_channel. Mix and match channel types by providing a comma-separated list of any combination of public_channel, private_channel. Example: public_channel,private_channel; Second Example: public_channel

cursorstring

The cursor returned by the API. Leave this blank for the first request, and use this to get the next page of results

include_archivedboolean

Include archived channels in the search results

limitinteger

Number of results to return, up to a max of 20. Defaults to 20.

response_formatstring

Level of detail (default: 'detailed'). Options: 'detailed', 'concise'

Search emojis

slack_search_emojis
Full Description

Search custom emojis available in this workspace by name. Useful for discovering workspace-specific emojis related to a topic, or checking if a custom emoji exists when unsure. Standard Unicode emojis (e.g., :thumbsup:, :heart:) are always available and don't need to be searched.

A query is required. Supports comma-separated terms to search for multiple emojis at once (e.g., "partyblob,shipit,taco"). Each term is matched as a case-insensitive substring against emoji names. Returns up to 200 results. Alias emojis point to another emoji (e.g., :shipit: is an alias for :squirrel:).

Parameters (1 required)
Required
querystring

Search emoji names by case-insensitive substring match. Supports comma-separated terms (e.g., "party,wave,rocket").

Search public messages and files

slack_search_public
Full Description

Searches for messages, files in public Slack channels ONLY.

slack_search_public does NOT generally require user consent for use, whereas you should request and wait for user consent to use slack_search_public_and_private.


query should include keywords or natural language question with search modifiers.

Search modifiers: in:channel-name / in:<#C123456> / -in:channel Channel filter in:<@U123456> / in:@username DM filter from:<@U123456> / from:username Author filter (angle brackets are literal for IDs) to:<@U123456> / to:me Recipient filter creator:@user Canvas creator filter is:thread / is:saved / has:pin / has:link / has:file Content filters has::emoji: / hasmy::emoji: Reaction filters before:YYYY-MM-DD / after:YYYY-MM-DD / on:YYYY-MM-DD / during:month Date filters "exact phrase" / -word / * (wildcard, min 3 chars) Text matching

File search: use content_types="files" with type: filter (images, documents, pdfs, spreadsheets, presentations, canvases, lists, emails, audio, videos). All standard modifiers work with file searches.

Search types: 1. Natural language — Semantic search is not available for this user. 2. Keyword — exact matches, space-separated = AND, no boolean operators (AND/OR/NOT).

Use slack_read_thread for thread details, slack_read_canvas for canvas content, slack_read_channel for surrounding messages.

Strategy: break into multiple small searches, use modifiers to narrow, try keyword then semantic (or vice versa), broaden if 0 results.


Examples: Use query="What's our holiday schedule? in:#general" query="bug report after:2024-01-08" sort="timestamp" query="from:<@Jane Doe> in:dev bug report"

Additional parameters: include_context (Optional[bool]) Include surrounding context messages for each result (default: true). Set to false to reduce response size. max_context_length (Optional[int]) Max character length for each context message. Longer messages are truncated.

Parameters (1 required, 12 optional)
Required
querystring

Search query (e.g., 'bug report', 'from:<@Jane> in:dev')

Optional
afterstring

Only messages after this Unix timestamp (inclusive)

beforestring

Only messages before this Unix timestamp (inclusive)

content_typesstring

Content types to include, a comma-separated list of any combination of messages, files. Here's more info about the content types: messages: Slack messages from public channels accessible to the acting user files: Files of all types accessible to the acting user

context_channel_idstring

Context channel ID to support boosting the search results for a channel when applicable

cursorstring

The cursor returned by the API. Leave this blank for the first request, and use this to get the next page of results

include_botsboolean

Include bot messages (default: false)

include_contextboolean

Include surrounding context messages for each result (default: true). Set to false to reduce response size.

limitinteger

Number of results to return, up to a max of 20. Defaults to 20.

max_context_lengthinteger

Max character length for each context message. Longer messages are truncated.

response_formatstring

Level of detail (default: 'detailed'). Options: 'detailed', 'concise'

sortstring

Sort by relevance or date (default: 'score'). Options: 'score', 'timestamp'

sort_dirstring

Sort direction (default: 'desc'). Options: 'asc', 'desc'

Search messages and files

slack_search_public_and_private
Full Description

Searches for messages, files in ALL Slack channels, including public channels, private channels, DMs, and group DMs.


query should include keywords or natural language question with search modifiers.

Search modifiers: in:channel-name / in:<#C123456> / -in:channel Channel filter in:<@U123456> / in:@username DM filter from:<@U123456> / from:username Author filter (angle brackets are literal for IDs) to:<@U123456> / to:me Recipient filter creator:@user Canvas creator filter is:thread / is:saved / has:pin / has:link / has:file Content filters has::emoji: / hasmy::emoji: Reaction filters before:YYYY-MM-DD / after:YYYY-MM-DD / on:YYYY-MM-DD / during:month Date filters "exact phrase" / -word / * (wildcard, min 3 chars) Text matching

File search: use content_types="files" with type: filter (images, documents, pdfs, spreadsheets, presentations, canvases, lists, emails, audio, videos). All standard modifiers work with file searches.

Search types: 1. Natural language — Semantic search is not available for this user. 2. Keyword — exact matches, space-separated = AND, no boolean operators (AND/OR/NOT).

Use slack_read_thread for thread details, slack_read_canvas for canvas content, slack_read_channel for surrounding messages.

Strategy: break into multiple small searches, use modifiers to narrow, try keyword then semantic (or vice versa), broaden if 0 results.


Examples: Use (with user consent) query="What's our holiday schedule? in:#general" query="bug report after:2024-01-08" sort="timestamp" query="from:<@Jane Doe> in:dev bug report"

Additional parameters: include_context (Optional[bool]) Include surrounding context messages for each result (default: true). Set to false to reduce response size. max_context_length (Optional[int]) Max character length for each context message. Longer messages are truncated.

Parameters (1 required, 13 optional)
Required
querystring

Search query using Slack's search syntax (e.g., 'in:#general from:@user important')

Optional
afterstring

Only messages after this Unix timestamp (inclusive)

beforestring

Only messages before this Unix timestamp (inclusive)

channel_typesstring

Comma-separated list of channel types to include in the search. Defaults to 'public_channel,private_channel,mpim,im' (all channel types including private channels, group DMs, and DMs). Mix and match channel types by providing a comma-separated list of any combination of `public_channel`, `private_channel`, `mpim`, `im`

content_typesstring

Content types to include, a comma-separated list of any combination of messages, files. Here's more info about the content types: messages: Slack messages from channels accessible to the acting user files: Files of all types accessible to the acting user

context_channel_idstring

Context channel ID to support boosting the search results for a channel when applicable

cursorstring

The cursor returned by the API. Leave this blank for the first request, and use this to get the next page of results

include_botsboolean

Include bot messages (default: false)

include_contextboolean

Include surrounding context messages for each result (default: true). Set to false to reduce response size.

limitinteger

Number of results to return, up to a max of 20. Defaults to 20.

max_context_lengthinteger

Max character length for each context message. Longer messages are truncated.

response_formatstring

Level of detail (default: 'detailed'). Options: 'detailed', 'concise'

sortstring

Sort by relevance or date (default: 'score'). Options: 'score', 'timestamp'

sort_dirstring

Sort direction (default: 'desc'). Options: 'asc', 'desc'

Search users

slack_search_users
Full Description

Search for Slack users by name, email, or profile attributes (department, role, title).

Query syntax: full names ("John Smith"), partial names ("John"), emails ("john@company.com"), departments/roles ("engineering"), combinations ("John engineering"), exclusions ("engineering -intern"). Space-separated terms = AND.

Use slack_read_user_profile for detailed info on a known user ID. Use slack_search_public with from: filter to find messages by a user.

Parameters (1 required, 3 optional)
Required
querystring

Search query for finding users. Accepts names, email address, and other attributes in profile Examples: - "John Smith" - exact name match - john@company - find users with john@company in email - engineering -intern - users with "engineering" but not "intern" in profile

Optional
cursorstring

The cursor returned by the API. Leave this blank for the first request, and use this to get the next page of results

limitinteger

Number of results to return, up to a max of 20. Defaults to 20.

response_formatstring

Level of detail (default: 'detailed'). Options: 'detailed', 'concise'

Send message

slack_send_message
Full Description

Sends a message to a Slack channel or user. To DM a user, use their user_id as channel_id. Return the message link to the user.

Message uses standard markdown (bold, _italic_, code, ~~strikethrough~~, >blockquotes, lists, links, code blocks, tables, headers). Limited to 5000 chars per text element. Tables use standard Markdown syntax with | as column delimiters. Do NOT escape the structural | characters that form the table borders and column separators. Only escape | as \| when a literal pipe character appears inside a cell value. Code blocks can include a language specifier (e.g.

,

js,

```bash) for syntax highlighting and copy functionality. Do not include sensitive info in link query params. Cannot post to externally shared (Slack Connect) channels.

Thread replies: set thread_ts to parent message timestamp, reply_broadcast=true to also post to channel.

Use slack_search_channels to find channel IDs, slack_search_users to find user IDs. If user has not reviewed the message, use slack_send_message_draft instead.

Parameters (2 required, 3 optional)
Required
channel_idstring

ID of the Channel

messagestring

Add a message

Optional
draft_idstring

ID of the draft to delete after sending

reply_broadcastboolean

Also send to conversation

thread_tsstring

Provide another message's ts value to make this message a reply

Create a draft message

slack_send_message_draft
Full Description

Creates a draft message in a Slack channel. The draft is saved to the user's "Drafts & Sent" in Slack without sending it.

When to Use

  • User wants to prepare a message without sending it immediately
  • User needs to compose a message for later review or sending
  • User wants to draft a message to a specific channel

When NOT to Use

  • User wants to send a message immediately (use slack_send_message instead)
  • User wants to schedule a message (use slack_send_message with scheduling)
  • User wants to create drafts in multiple channels (call this tool multiple times)
  • Channel is externally shared (Slack Connect channel) - drafts in externally shared channels are not supported

Input Parameters:

  • channel_id: Single channel ID where the draft should be created
  • message: The draft message content using standard markdown. Supports bold, _italic_, code, ~strikethrough~, >blockquotes, lists, links, and code blocks.
  • thread_ts (optional): Timestamp of the parent message to create a draft reply in a thread (e.g., "1234567890.123456")

Output:

Returns channel_link - a Slack web client URL (e.g., https://app.slack.com/client/T123/C456) that opens the channel in the web app where the draft was created.

Finding value for channel_id input:

  • Use slack_search_users tool to find user ID for DMs, then use their user_id as the channel_id

Error Codes:

  • channel_not_found: Invalid channel ID or user does not have access to the channel
  • draft_already_exists: A draft already exists for this channel (user should edit or delete the existing draft first)
  • failed_to_create_draft: Draft creation failed for an unknown reason
  • mcp_externally_shared_channel_restricted: Cannot create drafts in externally shared channels (Slack Connect channels)

Notes:

  • Drafts are created as attached drafts (linked to the specific channel)
  • User must have write access to the channel
  • Only one attached draft is allowed per channel - if a draft already exists, you'll get an error
Parameters (2 required, 1 optional)
Required
channel_idstring

Channel to create draft in

messagestring

The message content in standard markdown

Optional
thread_tsstring

Timestamp of the parent message to create a draft reply in a thread

Update a canvas from an AI response

slack_update_canvas
Full Description

Updates an existing Slack Canvas document with markdown content. Supports appending, prepending, or replacing content.

CRITICAL WARNING

Using action=replace WITHOUT providing a section_id will OVERWRITE THE ENTIRE CANVAS content. This is destructive and irreversible. You MUST call slack_read_canvas first to retrieve section IDs, then pass the appropriate section_id to replace only the target section.

Action Behavior

With section_id:
  • append: Adds new content to the END of the specified section's block (inserted after the last content under that section, just before the next header section)
  • prepend: Inserts new content immediately AFTER the targeted element. If the section_id is a header, content appears after the header line but before the section's existing body content. If the section_id is a non-header element (paragraph, list, table, etc.), content is inserted directly after that element.
  • replace: Replaces ONLY the specified section's content block (safe)

Important: The section_id_mapping contains IDs for ALL content elements — headers (#, ##, ###), paragraphs, lists, tables, and callouts — not just header sections. For best results with append/prepend, target a header section_id to insert within that section's block.

Without section_id:
  • append: Adds content to the END of the canvas (after the last section)
  • prepend: Inserts content after the canvas title but before existing body content (the title is preserved)
  • replace: ⚠️ REPLACES THE ENTIRE CANVAS — avoid unless user explicitly wants full replacement

Args:

canvas_id (str, required): ID of the canvas to update (e.g., "F1234567890") action (str, required): One of "append", "prepend", or "replace". Defaults to "append" content (str, required): Markdown-formatted content to insert or replace section_id (Optional[str]): Section ID from slack_read_canvas. Can reference any content element (header, paragraph, list, table, callout). For append/prepend, targeting a header section_id is recommended as it operates on the header's content block. append inserts after the last content in that section's block (before the next header); prepend inserts immediately after the targeted element; replace overwrites the section's block. STRONGLY RECOMMENDED for replace action to avoid overwriting the entire canvas.

Returns:

canvas_id (str): ID of the updated canvas canvas_url (str): URL link to the updated canvas — always share this with the user section_id_mapping (dict): Updated mapping of section IDs to their markdown content after the edit. Each key is a section ID string (e.g., "temp:C:abc123") and each value is the markdown content of that element. Contains IDs for ALL content elements (headers, paragraphs, lists, tables, callouts), not just headers. Use these section IDs in subsequent slack_update_canvas calls to target specific sections, enabling multi-step editing workflows without needing to call slack_read_canvas again between edits.

When to Use

  • User wants to add content to an existing canvas (append/prepend)
  • User wants to update a specific section of a canvas (replace with section_id)
  • User wants to rewrite an entire canvas (replace without section_id — only if explicitly requested)

When NOT to Use

  • User wants to create a new canvas (use slack_create_canvas instead)
  • User wants to read a canvas (use slack_read_canvas instead)
  • User only wants to send a simple message (use slack_send_message instead)

Recommended Workflow for Editing a Section

1. Call slack_read_canvas with the canvas_id to get content and section IDs 2. Identify the target section_id from the section_id_mapping 3. Call slack_update_canvas with action=replace and the section_id

Examples

Append to the end of a canvas (no section_id): slack_update_canvas(canvas_id="F0123ABC456", action="append", content="

New Section

Here is the appended content.")

Append to the end of a specific section: slack_update_canvas(canvas_id="F0123ABC456", action="append", section_id="temp:C:abc123", content="

New Section

This content is added at the end of the specified section.")

Replace a specific section (safe — only that section is changed): slack_update_canvas(canvas_id="F0123ABC456", action="replace", section_id="temp:C:abc123", content="

Updated Section

This replaces only the targeted section.")

Prepend within a specific section (inserts right after the section header, before existing body content): slack_update_canvas(canvas_id="F0123ABC456", action="prepend", section_id="temp:C:abc123", content="This paragraph appears right after the section header, before the section's existing body content.")

Error Codes:

  • not_supported_free_team: Canvas operations not supported on free teams
  • canvas_not_found: Invalid canvas_id or user lacks access
  • invalid_content: Content format is invalid
  • permission_denied: User lacks permission to edit this canvas
  • section_not_found: The provided section_id does not exist in the canvas

Canvas Formatting Guidelines:

REQUIRED: Must be a non-empty string when updating canvas content. Only omit this field if you are updating ONLY the title.

The canvas content, formatted as Canvas-flavored Markdown.

Canvas-flavored Markdown is different from Slack message formatting. When creating content for Canvases, adhere to the following Canvas-only rules:

  • The content should be formatted as standard Markdown, including headers, lists, links, checklists, tables, and other Markdown formatting.
  • When writing user IDs, you should format them as: ![](@U15CTCJ83) where U15CTCJ83 is the user\'s Slack ID.
  • When user references are used in their own line, they will render as larger cards, if referenced inline they will render as special text.
  • When writing channel IDs, you should format them as: ![](#C15CTCJ83) where C15CTCJ83 is the channel\'s Slack ID. Always use the channel\'s ID, NEVER use the channel name.
  • NEVER output a channel as <#C1234567890> or a user as <@U1234567890>, even when part of a text quote, instead use the format above.
  • Links should be formatted as: [link text](https://example.com). Do not surround the link in angle brackets.
  • IMPORTANT: Only use these URL schemes in links: http://, https://, mailto:, tel:, ftp://, slack://, or relative paths starting with /. Other schemes like javascript:, data:, file: will be automatically removed from the canvas.
  • Images should be formatted as: ![alt text](https://example.com/image.png)
  • Image syntax must appear only in a top-level, stand-alone line. Images are not supported in other elements
  • Salesforce records should be formatted as: ![](ssr:<org_id>/<record_id>) where <org_id> is the Salesforce org ID and <record_id> is the Salesforce record ID, the org ID and record ID should be the full IDs which would be 18 characters long. Example: ![](ssr:70Dj038B0WJ0ACNCSD/X01j50VP066SCCIPDJ)
  • Salesforce records syntax must appear only in a top-level, stand-alone line. Salesforce records are not supported in other elements
  • Quoted text should be formatted as: > This is quoted text, but you should only use quotes on their own line.
  • Slack-style emojis are supported, e.g. :tada: or :wave:
    • Use only ATX headings #, ##, ###. NEVER use deeper headings ####-######.
    • Do not place headings inside list items.
    • In list items, allow only paragraphs with inline formatting.
    • Thematic breaks (---, ***, ___) are only allowed at the top level.
  • When nesting lists, do not mix list types:
    • Numbered lists can only contain nested numbered lists, and cannot contain nested bulleted lists
    • Bulleted lists can only contain nested bulleted lists, and cannot contain nested numbered lists
    • Code blocks are not allowed inside list items.
    • If a table cell contains multi-line content, <br> can be used, e.g. 'line one<br>line two'
    • The title provided through the title field will be used as the title of the canvas. Do not include the title in the content section.

<example1>

Headers

Status

:large_green_circle: On Track

Goal

The channel to coordinate the build, testing, and launch of Platypus

:people_hugging:Stakeholders

![](@U071CCRCVFH)

![](@UQSSGHV0Q)

:books:Resources

  • Project Plan
  • Google Drive

:slack:Related channels

  • ![](#C073UAJRW4R)
  • Project Channel
  • ![](#C084UBTRX4J) - [GTM Channel](https://gtm.wiki.com)

</example1> <example2> |Message|User Author| |---|---| |[Here is the python guide](https://team.slack.com/archives/C016VCYCL74/p1727122965001469)|![](@U071CCRCVFH)| |[The Java guide isn\'t ready](https://team.slack.com/archives/C016VCYCL74/p1727122965001469)|![](@UQSSGHV0Q)|\n\n

Python Guide\n

Step 1\n

print("Hello, world!")

\n\n </example2>

  • When a layout is requested use the ::: {.layout} as the starting delimiter and ::: as the ending delimiter of the full layout. Then each column should be wrapped in ::: {.column} as the starting delimiter and ::: as the ending delimiter. There can only be up to 3 columns in a layout and tables and callouts are not supported in layouts or columns.
  • Callouts should be formatted with ::: {.callout} as the starting delimiter and ::: as the ending delimiter in markdown. Use them to highlight important information, such as warnings, important prerequisites, and notices.
  • Do not use tables within callouts and callouts cannot be nested within other elements.

<example_markdown_with_callout> ::: {.callout} This is a callout ::: </example_markdown_with_callout>

  • In block quotes, ONLY use: plain text paragraphs with inline formatting. No headings, lists, code blocks, or nested quotes.
  • Code blocks are allowed only at the top level (not inside block quotes or list items).

CRITICAL RESTRICTIONS

  • Canvas Nesting Rules (MUST FOLLOW):
    • In list items, ONLY use: plain text paragraphs with inline formatting (bold, italic, inline code, links).
    • Code blocks, block quotes, and headings must always be separated from lists by blank lines.
    • In layouts no tables or callouts are supported.- Layouts are not supported in tables or callouts.

<example_correct_usage>

  • Item with inline code formatting
  • Item with bold text and [links](https://example.com)

</example_correct_usage>

<example_blocks_and_quotes_outside_lists>

code block at top level
  • List item one
  • List item two

> Block quote at top level

Heading at top level

</example_blocks_and_quotes_outside_lists>

WHEN CITING SOURCES:

  • When your content references information from web search results or other sources, you MUST include inline citation links using the [[N]](url) format throughout the content, exactly as you would in a chat response.
  • Place citations inline next to the claims they support, e.g. "Shaidorov won gold [[7]](https://en.wikipedia.org/wiki/...)"
  • Do NOT collapse all sources into a single "Source:" line at the bottom. Each fact should be cited where it appears.
  • The citation links will be automatically enriched with page titles for readability.
  • Format date headings and key dates (including due dates, deadlines, milestones) as ![](slack_date:YYYY-MM-DD) ONLY. Never append day names or date text.

Examples of appropriate usage of date formatting in your output:

Correct usage: <example_date_heading_correct>

![](slack_date:2025-12-16)

</example_date_heading_correct>

Incorrect usage (has day name and date text): <example_date_heading_incorrect>

![](slack_date:2025-12-16) December 16th

  • Monday

</example_date_heading_incorrect>- User Profile Cards: To display a user's profile card as a standalone section (not inline), use the format ![](@user_id) where user_id is the Slack user ID. CRITICAL: Use parentheses () around @user_id, NOT angle brackets <>. Example: ![](@U0TDAU873). Profile cards should be on their own line and will render as larger cards with user information.

Examples of appropriate usage of user profile cards in your output:

Correct usage (standalone profile card on its own line): <example_user_profile_card_correct>

Team Members

![](@U0TDAU873)

![](@U12345678) </example_user_profile_card_correct>- Slack Files: ONLY for files with URLs matching *.slack.com/files/*, ALWAYS embed using ![](file_reference). For standalone display (card): place on its own line. For inline reference (clickable text): embed directly in paragraph like "The ![](https://example.slack.com/files/U123/F456/doc.pdf) contains...". Do not use this syntax for non-Slack files.

What NOT to Expect:

Does NOT create new canvases (use slack_create_canvas) Does NOT support setting canvas permissions or sharing Does NOT support deleting a canvas

Parameters (3 required, 1 optional)
Required
actionstring

One of "append", "prepend", or "replace". Defaults to "append"

canvas_idstring

ID of the canvas to update (e.g., "F1234567890")

contentstring

The content of the canvas, formatted as Canvas-flavored Markdown. Follow the Canvas Formatting Guidelines in the tool description for the full syntax reference.

Optional
section_idstring

Section ID from slack_read_canvas. CRITICAL: If you use action=replace without providing a section_id, the ENTIRE canvas content will be overwritten.