Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the Slack MCP server

Vendor MCP
Open markdown

The Slack MCP connector routes your AI agent's tool calls to Slack's own MCP server through Scalekit. Each user signs in to Slack once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 19 tools.

Tools
19
What they doRead · write · destructive
12 · 6 · 112 read6 write1 destructive
Users sign in with
OAuth app
Scalekit's or your own

What you can do

  • 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

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    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. Create the Slack MCP connection

    In AgentKit > Connections, create a Slack MCP connection. The name you give it is the connection_name your code passes. See Configure connections.

    Scalekit credentials are available for Slack, so you don't need to register an OAuth app. To show your own app on the consent screen, use your own credentials instead.

    Use your own OAuth app

    Slack serves Model Context Protocol (MCP) traffic only to apps that have its MCP server turned on. Enable MCP access on the Slack app whose client ID and secret you use for the connection, then create the connection in Scalekit.

    1. Enable MCP access in your Slack app

      • Go to api.slack.com/apps and open the app whose Client ID and Client Secret you configure on the Slack MCP connection. MCP access applies per app, so enabling it on any other app has no effect on the connection.
      • In the left sidebar, under Features, click Agents & AI Apps. Some workspaces label this item Agents.
      • Turn on Slack Model Context Protocol (MCP) Server.

      Turn on the Slack Model Context Protocol (MCP) Server toggle in the Slack app portal

    2. Connect in Scalekit

      In Scalekit dashboard, go to AgentKit > Connections > Create Connection. Find Slack MCP and click Create. Enter the Client ID and Client Secret of the same Slack app, then click Save.

  4. Authorize a user and make your first call

    quickstart.mts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    import { createInterface } from 'node:readline/promises'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENVIRONMENT_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)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'slackmcp_slack_read_user_profile',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • slackmcp_slack_get_reactionsRetrieve all emoji reactions on a specific Slack message.Read-only

    Slack Get Reactions

    Retrieve all emoji reactions on a specific Slack message.

    Inputs

    channel_idstringrequired
    ID of the Slack channel. Get it from slack_search_channels.
    message_tsstringrequired
    Timestamp of the message. Get it from slack_read_channel or slack_read_thread.
  • slackmcp_slack_list_channel_membersList members of a Slack channel, group, or group DM with profile details.Read-only

    Slack List Channel Members

    List members of a Slack channel, group, or group DM with profile details.

    Inputs

    channel_idstringrequired
    ID of the Slack channel. Get it from slack_search_channels.
    cursorstring
    Pagination cursor from the previous response to fetch the next page.
    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
    Maximum number of results to return per page.
    response_formatstring
    Level of detail in the response. Accepted values: detailed, concise, ids_only.
  • slackmcp_slack_read_canvasRetrieve the Markdown content and section ID mapping of a Slack Canvas document.Read-only

    Slack Read Canvas

    Retrieve the Markdown content and section ID mapping of a Slack Canvas document.

    Inputs

    canvas_idstringrequired
    ID of the Slack canvas document. Get it from slack_search_public.
  • slackmcp_slack_read_channelRead messages from a Slack channel in reverse chronological order (newest first).Read-only

    Slack Read Channel

    Read messages from a Slack channel in reverse chronological order (newest first).

    Inputs

    channel_idstringrequired
    ID of the Slack channel. Get it from slack_search_channels.
    cursorstring
    Pagination cursor from the previous response to fetch the next page.
    lateststring
    Only return messages before this Unix timestamp (e.g. 1640995200.000000).
    limitinteger
    Maximum number of results to return per page.
    oldeststring
    Only return messages after this Unix timestamp (e.g. 1609459200.000000).
    response_formatstring
    Level of detail in the response. Accepted values: detailed, concise, ids_only.
  • slackmcp_slack_read_fileRead a Slack file's content by file ID.Read-only

    Slack Read File

    Read a Slack file's content by file ID. Returns text or base64-encoded content.

    Inputs

    file_idstringrequired
    ID of the Slack file. Get it from slack_search_public.
  • slackmcp_slack_read_threadRead all messages in a Slack thread — the parent message and its replies.Read-only

    Slack Read Thread

    Read all messages in a Slack thread — the parent message and its replies.

    Inputs

    channel_idstringrequired
    ID of the Slack channel. Get it from slack_search_channels.
    message_tsstringrequired
    Timestamp of the message. Get it from slack_read_channel or slack_read_thread.
    cursorstring
    Pagination cursor from the previous response to fetch the next page.
    lateststring
    Only return messages before this Unix timestamp (e.g. 1640995200.000000).
    limitinteger
    Maximum number of results to return per page.
    oldeststring
    Only return messages after this Unix timestamp (e.g. 1609459200.000000).
    response_formatstring
    Level of detail in the response. Accepted values: detailed, concise, ids_only.
  • slackmcp_slack_read_user_profileRetrieve detailed profile information for a Slack user including status and contact info.Read-only

    Slack Read User Profile

    Retrieve detailed profile information for a Slack user including status and contact info.

    Inputs

    include_localeboolean
    Include user's locale information. Default: false
    response_formatstring
    Level of detail in the response. Accepted values: detailed, concise, ids_only.
    user_idstring
    ID of the Slack user. Get it from slack_search_users.
  • slackmcp_slack_search_channelsSearch for Slack channels by name or description and return channel IDs and metadata.Read-only

    Slack Search Channels

    Search for Slack channels by name or description and return channel IDs and metadata.

    Inputs

    querystringrequired
    Search query string.
    channel_typesstring
    Comma-separated channel types to filter. Accepted values: public_channel, private_channel, mpim, im.
    cursorstring
    Pagination cursor from the previous response to fetch the next page.
    include_archivedboolean
    Include archived channels in the search results
    limitinteger
    Maximum number of results to return per page.
    response_formatstring
    Level of detail in the response. Accepted values: detailed, concise, ids_only.

Workflows

Proxy API call

import { ScalekitClient } from '@scalekit-sdk/node'
import 'dotenv/config'
const scalekit = new ScalekitClient(
process.env.SCALEKIT_ENVIRONMENT_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)