Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Slack MCP connector

OAuth 2.1CommunicationCollaborationProductivity

Connect to Slack MCP. Send and read messages, search channels and users, manage canvases, and react to messages across your Slack workspace.

Slack MCP connector

  1. Terminal window
    npm install @scalekit-sdk/node

    Full SDK reference: Node.js | Python

  2. Add your Scalekit credentials to your .env file. 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>
  3. 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.

    1. 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.

      Enable Model Context Protocol in Slack API dashboard

    2. Connect in Scalekit

      In Scalekit dashboard, go to AgentKit > Connections > Create Connection. Find Slack MCP and click Create.

  4. 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.actions
    const connector = 'slackmcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { 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 call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'slackmcp_slack_create_conversation',
    toolInput: {},
    })
    console.log(result)

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

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 history
const result = await actions.executeTool({
connector,
identifier,
toolName: 'slackmcp_slack_read_channel',
toolInput: { channel_id: 'C01234567' },
})
console.log(result)

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.

NameTypeRequiredDescription
channel_idstringrequiredID of the Slack channel. Get it from slack_search_channels.
emojistringrequiredReaction (emoji) name without colons
message_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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
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).

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
include_localebooleanoptionalInclude user's locale information. Default: false
response_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.

NameTypeRequiredDescription
channel_idstringrequiredID of the Slack channel. Get it from slack_search_channels.
messagestringrequiredMessage content to schedule
post_atintegerrequiredUnix timestamp (seconds) for when to send the scheduled message.
reply_broadcastbooleanoptionalBroadcast thread reply to channel
thread_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.

NameTypeRequiredDescription
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 results
limitintegeroptionalMaximum 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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
channel_idstringrequiredID of the Slack channel. Get it from slack_search_channels.
messagestringrequiredAdd a message
draft_idstringoptionalID of a previously saved draft to delete after sending.
reply_broadcastbooleanoptionalAlso send to conversation
thread_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.

NameTypeRequiredDescription
channel_idstringrequiredID of the Slack channel. Get it from slack_search_channels.
messagestringrequiredThe message content in standard markdown
thread_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.

NameTypeRequiredDescription
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.