Slack MCP connector
OAuth 2.1CommunicationCollaborationProductivityConnect to Slack MCP. Send and read messages, search channels and users, manage canvases, and react to messages across your Slack workspace.
Slack MCP connector
-
Install the SDK
Section titled “Install the SDK”Terminal window npm install @scalekit-sdk/nodeTerminal window pip install scalekit -
Set your credentials
Section titled “Set your credentials”Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret> -
Set up the connector
Section titled “Set up the connector”Register your Slack MCP credentials with Scalekit so it handles the token lifecycle. You do this once per environment.
Dashboard setup steps
Before connecting Slack MCP, enable the Model Context Protocol feature in your Slack app settings. This allows your Slack app to share context with LLMs and agents.
-
Enable MCP in your Slack app
- Go to api.slack.com/apps and open your app.
- In the left sidebar, under Features, click Agents & AI Apps.
- Under Model Context Protocol, toggle it on.

-
Connect in Scalekit
In Scalekit dashboard, go to AgentKit > Connections > Create Connection. Find Slack MCP and click Create.
-
-
Authorize and make your first call
Section titled “Authorize and make your first call”quickstart.ts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENV_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'slackmcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize Slack MCP:', link)process.stdout.write('Press Enter after authorizing...')await new Promise(r => process.stdin.once('data', r))// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'slackmcp_slack_create_conversation',toolInput: {},})console.log(result)quickstart.py import osfrom scalekit.client import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENV_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "slackmcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize Slack MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="slackmcp_slack_create_conversation",connection_name=connection_name,identifier=identifier,)print(result)
What you can do
Section titled “What you can do”Connect this agent connector to let your agent:
- Send messages — post to channels, DMs, and threads across your Slack workspace
- Read conversations — retrieve channel history, thread replies, and direct messages
- Search channels and users — find channels, team members, and public messages by keyword
- Manage canvases — create, read, and update Slack Canvas documents
- React to messages — add and retrieve emoji reactions on any message
- Schedule messages — deliver messages to channels at a specified future time
Common workflows
Section titled “Common workflows”Proxy API call
import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'
const scalekit = new ScalekitClient( process.env.SCALEKIT_ENV_URL, process.env.SCALEKIT_CLIENT_ID, process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actions
const connector = 'slackmcp'const identifier = 'user_123'
// Read a channel's message historyconst result = await actions.executeTool({ connector, identifier, toolName: 'slackmcp_slack_read_channel', toolInput: { channel_id: 'C01234567' },})console.log(result)from scalekit import ScalekitClientimport os
scalekit_client = ScalekitClient( os.environ['SCALEKIT_ENV_URL'], os.environ['SCALEKIT_CLIENT_ID'], os.environ['SCALEKIT_CLIENT_SECRET'],)
connector = 'slackmcp'identifier = 'user_123'
# Read a channel's message historyresult = scalekit_client.actions.execute_tool( connector=connector, identifier=identifier, tool_name='slackmcp_slack_read_channel', tool_input={'channel_id': 'C01234567'},)print(result)Tool list
Section titled “Tool list”Use the exact tool names from the Tool list below when you call execute_tool. If you’re not sure which name to use, list the tools available for the current user first.
slackmcp_slack_add_reaction#Add an emoji reaction to a Slack message. Requires the channel ID, message timestamp, and emoji name.3 params
Add an emoji reaction to a Slack message. Requires the channel ID, message timestamp, and emoji name.
channel_idstringrequiredID of the Slack channel. Get it from slack_search_channels.emojistringrequiredReaction (emoji) name without colonsmessage_tsstringrequiredTimestamp of the message. Get it from slack_read_channel or slack_read_thread.slackmcp_slack_create_canvas#Create a Slack Canvas document from Canvas-flavored Markdown content.2 params
Create a Slack Canvas document from Canvas-flavored Markdown content.
contentstringrequiredCanvas-flavored Markdown content for the canvas body.titlestringrequiredDisplay name shown at the top of the canvas.slackmcp_slack_create_conversation#Create a channel, DM, or group DM. Returns a channel ID for sending messages.3 params
Create a channel, DM, or group DM. Returns a channel ID for sending messages.
channel_namestringoptionalName for the new channel (lowercase, hyphens, max 80 chars). Omit to create a DM instead.is_privatebooleanoptionalIf true, creates a private channel. Only used with channel_name. Default: false.user_idsarrayoptionalSlack user IDs to invite. 1 ID = DM, 2–8 IDs = group DM, up to 1000 IDs for a channel.slackmcp_slack_get_reactions#Retrieve all emoji reactions on a specific Slack message.2 params
Retrieve all emoji reactions on a specific Slack message.
channel_idstringrequiredID of the Slack channel. Get it from slack_search_channels.message_tsstringrequiredTimestamp of the message. Get it from slack_read_channel or slack_read_thread.slackmcp_slack_list_channel_members#List members of a Slack channel, group, or group DM with profile details.6 params
List members of a Slack channel, group, or group DM with profile details.
channel_idstringrequiredID of the Slack channel. Get it from slack_search_channels.cursorstringoptionalPagination cursor from the previous response to fetch the next page.include_botsbooleanoptionalInclude bots and apps in the member list (default: false)include_deletedbooleanoptionalInclude deleted/deactivated users in the member list (default: false)limitintegeroptionalMaximum number of results to return per page.response_formatstringoptionalLevel of detail in the response. Accepted values: detailed, concise, ids_only.slackmcp_slack_read_canvas#Retrieve the Markdown content and section ID mapping of a Slack Canvas document.1 param
Retrieve the Markdown content and section ID mapping of a Slack Canvas document.
canvas_idstringrequiredID of the Slack canvas document. Get it from slack_search_public.slackmcp_slack_read_channel#Read messages from a Slack channel in reverse chronological order (newest first).6 params
Read messages from a Slack channel in reverse chronological order (newest first).
channel_idstringrequiredID of the Slack channel. Get it from slack_search_channels.cursorstringoptionalPagination cursor from the previous response to fetch the next page.lateststringoptionalOnly return messages before this Unix timestamp (e.g. 1640995200.000000).limitintegeroptionalMaximum number of results to return per page.oldeststringoptionalOnly return messages after this Unix timestamp (e.g. 1609459200.000000).response_formatstringoptionalLevel of detail in the response. Accepted values: detailed, concise, ids_only.slackmcp_slack_read_file#Read a Slack file's content by file ID. Returns text or base64-encoded content.1 param
Read a Slack file's content by file ID. Returns text or base64-encoded content.
file_idstringrequiredID of the Slack file. Get it from slack_search_public.slackmcp_slack_read_thread#Read all messages in a Slack thread — the parent message and its replies.7 params
Read all messages in a Slack thread — the parent message and its replies.
channel_idstringrequiredID of the Slack channel. Get it from slack_search_channels.message_tsstringrequiredTimestamp of the message. Get it from slack_read_channel or slack_read_thread.cursorstringoptionalPagination cursor from the previous response to fetch the next page.lateststringoptionalOnly return messages before this Unix timestamp (e.g. 1640995200.000000).limitintegeroptionalMaximum number of results to return per page.oldeststringoptionalOnly return messages after this Unix timestamp (e.g. 1609459200.000000).response_formatstringoptionalLevel of detail in the response. Accepted values: detailed, concise, ids_only.slackmcp_slack_read_user_profile#Retrieve detailed profile information for a Slack user including status and contact info.3 params
Retrieve detailed profile information for a Slack user including status and contact info.
include_localebooleanoptionalInclude user's locale information. Default: falseresponse_formatstringoptionalLevel of detail in the response. Accepted values: detailed, concise, ids_only.user_idstringoptionalID of the Slack user. Get it from slack_search_users.slackmcp_slack_schedule_message#Schedule a message for future delivery to a Slack channel at a specified Unix timestamp.5 params
Schedule a message for future delivery to a Slack channel at a specified Unix timestamp.
channel_idstringrequiredID of the Slack channel. Get it from slack_search_channels.messagestringrequiredMessage content to schedulepost_atintegerrequiredUnix timestamp (seconds) for when to send the scheduled message.reply_broadcastbooleanoptionalBroadcast thread reply to channelthread_tsstringoptionalTimestamp of the parent message to reply in a thread. Get it from slack_read_channel.slackmcp_slack_search_channels#Search for Slack channels by name or description and return channel IDs and metadata.6 params
Search for Slack channels by name or description and return channel IDs and metadata.
querystringrequiredSearch query string.channel_typesstringoptionalComma-separated channel types to filter. Accepted values: public_channel, private_channel, mpim, im.cursorstringoptionalPagination cursor from the previous response to fetch the next page.include_archivedbooleanoptionalInclude archived channels in the search resultslimitintegeroptionalMaximum number of results to return per page.response_formatstringoptionalLevel of detail in the response. Accepted values: detailed, concise, ids_only.slackmcp_slack_search_emojis#Search custom emojis available in this Slack workspace by name.1 param
Search custom emojis available in this Slack workspace by name.
querystringrequiredSearch query string.slackmcp_slack_search_public#Search messages and files in public Slack channels only.13 params
Search messages and files in public Slack channels only.
querystringrequiredSearch query string.afterstringoptionalOnly messages after this Unix timestamp (inclusive)beforestringoptionalOnly messages before this Unix timestamp (inclusive)content_typesstringoptionalComma-separated content types to search. Accepted values: messages, files.context_channel_idstringoptionalChannel ID to boost relevance of results from that channel.cursorstringoptionalPagination cursor from the previous response to fetch the next page.include_botsbooleanoptionalInclude bot messages (default: false)include_contextbooleanoptionalInclude surrounding context messages for each result. Defaults to true.limitintegeroptionalMaximum number of results to return per page.max_context_lengthintegeroptionalMax character length for each context message. Longer messages are truncated.response_formatstringoptionalLevel of detail in the response. Accepted values: detailed, concise, ids_only.sortstringoptionalSort by relevance or date (default: 'score'). Options: 'score', 'timestamp'sort_dirstringoptionalSort direction (default: 'desc'). Options: 'asc', 'desc'slackmcp_slack_search_public_and_private#Search messages and files across all Slack channels including private ones the user has access to.14 params
Search messages and files across all Slack channels including private ones the user has access to.
querystringrequiredSearch query string.afterstringoptionalOnly messages after this Unix timestamp (inclusive)beforestringoptionalOnly messages before this Unix timestamp (inclusive)channel_typesstringoptionalComma-separated channel types to filter. Accepted values: public_channel, private_channel, mpim, im.content_typesstringoptionalComma-separated content types to search. Accepted values: messages, files.context_channel_idstringoptionalChannel ID to boost relevance of results from that channel.cursorstringoptionalPagination cursor from the previous response to fetch the next page.include_botsbooleanoptionalInclude bot messages (default: false)include_contextbooleanoptionalInclude surrounding context messages for each result. Defaults to true.limitintegeroptionalMaximum number of results to return per page.max_context_lengthintegeroptionalMax character length for each context message. Longer messages are truncated.response_formatstringoptionalLevel of detail in the response. Accepted values: detailed, concise, ids_only.sortstringoptionalSort by relevance or date (default: 'score'). Options: 'score', 'timestamp'sort_dirstringoptionalSort direction (default: 'desc'). Options: 'asc', 'desc'slackmcp_slack_search_users#Search for Slack users by name, email, or profile attributes.4 params
Search for Slack users by name, email, or profile attributes.
querystringrequiredSearch query string.cursorstringoptionalPagination cursor from the previous response to fetch the next page.limitintegeroptionalMaximum number of results to return per page.response_formatstringoptionalLevel of detail in the response. Accepted values: detailed, concise, ids_only.slackmcp_slack_send_message#Send a message to a Slack channel or user. Use a user ID as channel_id to send a DM.5 params
Send a message to a Slack channel or user. Use a user ID as channel_id to send a DM.
channel_idstringrequiredID of the Slack channel. Get it from slack_search_channels.messagestringrequiredAdd a messagedraft_idstringoptionalID of a previously saved draft to delete after sending.reply_broadcastbooleanoptionalAlso send to conversationthread_tsstringoptionalTimestamp of the parent message to reply in a thread. Get it from slack_read_channel.slackmcp_slack_send_message_draft#Save a message as a draft in a Slack channel without sending it.3 params
Save a message as a draft in a Slack channel without sending it.
channel_idstringrequiredID of the Slack channel. Get it from slack_search_channels.messagestringrequiredThe message content in standard markdownthread_tsstringoptionalTimestamp of the parent message to reply in a thread. Get it from slack_read_channel.slackmcp_slack_update_canvas#Update an existing Slack Canvas document by appending, replacing, or deleting content.4 params
Update an existing Slack Canvas document by appending, replacing, or deleting content.
actionstringrequiredOne of "append", "prepend", or "replace". Defaults to "append"canvas_idstringrequiredID of the Slack canvas document. Get it from slack_search_public.contentstringrequiredCanvas-flavored Markdown content for the canvas body.section_idstringoptionalID of the canvas section to update. Get it from slack_read_canvas.