> **Building with AI coding agents?** If you're using an AI coding agent, install the official Scalekit plugin. It gives your agent full awareness of the Scalekit API — reducing hallucinations and enabling faster, more accurate code generation.
>
> - **Claude Code**: `/plugin marketplace add scalekit-inc/claude-code-authstack` then `/plugin install <auth-type>@scalekit-auth-stack`
> - **GitHub Copilot CLI**: `copilot plugin marketplace add scalekit-inc/github-copilot-authstack` then `copilot plugin install <auth-type>@scalekit-auth-stack`
> - **Codex**: run the bash installer, restart, then open Plugin Directory and enable `<auth-type>`
> - **Skills CLI** (Windsurf, Cline, 40+ agents): `npx skills add scalekit-inc/skills --list` then `--skill <skill-name>`
>
> `<auth-type>` / `<skill-name>`: `agent-auth`, `full-stack-auth`, `mcp-auth`, `modular-sso`, `modular-scim` — [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Slack

<div class="grid grid-cols-5 gap-4 items-center">
 <div class="col-span-4">
  Connect to Slack workspace. Send Messages as Bots or on behalf of users
 </div>
 <div class="flex justify-center">
  <img src="https://cdn.scalekit.com/sk-connect/assets/provider-icons/slack.svg" width="64" height="64" alt="Slack logo" />
 </div>
</div>

Supports authentication: OAuth 2.0

## Set up the agent connector

<SetupSlackSection />

## Usage

<UsageSlackSection />

## Tool list

## `slack_add_reaction`

Add an emoji reaction to a message in Slack. Requires a valid Slack OAuth2 connection with reactions:write scope.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `channel` | string | Yes | Channel ID or channel name where the message exists |
| `name` | string | Yes | Emoji name to react with (without colons) |
| `timestamp` | string | Yes | Timestamp of the message to add reaction to |

## `slack_create_channel`

Creates a new public or private channel in a Slack workspace. Requires a valid Slack OAuth2 connection with channels:manage scope for public channels or groups:write scope for private channels.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `is_private` | boolean | No | Create a private channel instead of public |
| `name` | string | Yes | Name of the channel to create (without # prefix) |
| `team_id` | string | No | Encoded team ID to create channel in (if using org tokens) |

## `slack_delete_message`

Deletes a message from a Slack channel or direct message. Requires a valid Slack OAuth2 connection with chat:write scope.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `channel` | string | Yes | Channel ID, channel name (#general), or user ID for DM where the message was sent |
| `ts` | string | Yes | Timestamp of the message to delete |

## `slack_fetch_conversation_history`

Fetches conversation history from a Slack channel or direct message with pagination support. Requires a valid Slack OAuth2 connection with channels:history scope.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `channel` | string | Yes | Channel ID, channel name (#general), or user ID for DM |
| `cursor` | string | No | Paginate through collections by cursor for pagination |
| `latest` | string | No | End of time range of messages to include in results |
| `limit` | integer | No | Number of messages to return (1-1000, default 100) |
| `oldest` | string | No | Start of time range of messages to include in results |

## `slack_get_conversation_info`

Retrieve information about a Slack channel, including metadata, settings, and member count. Requires a valid Slack OAuth2 connection with channels:read scope.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `channel` | string | Yes | Channel ID, channel name (#general), or user ID for DM |
| `include_locale` | boolean | No | Set to true to include the locale for this conversation |
| `include_num_members` | boolean | No | Set to true to include the member count for the conversation |

## `slack_get_conversation_replies`

Retrieve replies to a specific message thread in a Slack channel or direct message. Requires a valid Slack OAuth2 connection with channels:history or groups:history scope.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `channel` | string | Yes | Channel ID, channel name (#general), or user ID for DM |
| `cursor` | string | No | Pagination cursor for retrieving next page of results |
| `inclusive` | boolean | No | Include messages with latest or oldest timestamp in results |
| `latest` | string | No | End of time range of messages to include in results |
| `limit` | integer | No | Number of messages to return (default 100, max 1000) |
| `oldest` | string | No | Start of time range of messages to include in results |
| `ts` | string | Yes | Timestamp of the parent message to get replies for |

## `slack_get_user_info`

Retrieves detailed information about a specific Slack user, including profile data, status, and workspace information. Requires a valid Slack OAuth2 connection with users:read scope.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `include_locale` | boolean | No | Set to true to include locale information for the user |
| `user` | string | Yes | User ID to get information about |

## `slack_get_user_presence`

Gets the current presence status of a Slack user (active, away, etc.). Indicates whether the user is currently online and available. Requires a valid Slack OAuth2 connection with users:read scope.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `user` | string | Yes | User ID to check presence for |

## `slack_invite_users_to_channel`

Invites one or more users to a Slack channel. Requires a valid Slack OAuth2 connection with channels:write scope for public channels or groups:write for private channels.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `channel` | string | Yes | Channel ID or channel name (#general) to invite users to |
| `users` | string | Yes | Comma-separated list of user IDs to invite to the channel |

## `slack_join_conversation`

Joins an existing Slack channel. The authenticated user will become a member of the channel. Requires a valid Slack OAuth2 connection with channels:write scope for public channels.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `channel` | string | Yes | Channel ID or channel name (#general) to join |

## `slack_leave_conversation`

Leaves a Slack channel. The authenticated user will be removed from the channel and will no longer receive messages from it. Requires a valid Slack OAuth2 connection with channels:write scope for public channels or groups:write for private channels.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `channel` | string | Yes | Channel ID or channel name (#general) to leave |

## `slack_list_channels`

List all public and private channels in a Slack workspace that the authenticated user has access to. Requires a valid Slack OAuth2 connection with channels:read, groups:read, mpim:read, and/or im:read scopes depending on conversation types needed.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `cursor` | string | No | Pagination cursor for retrieving next page of results |
| `exclude_archived` | boolean | No | Exclude archived channels from the list |
| `limit` | integer | No | Number of channels to return (default 100, max 1000) |
| `team_id` | string | No | Encoded team ID to list channels for (optional) |
| `types` | string | No | Mix and match channel types (public_channel, private_channel, mpim, im) |

## `slack_list_users`

Lists all users in a Slack workspace, including information about their status, profile, and presence. Requires a valid Slack OAuth2 connection with users:read scope.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `cursor` | string | No | Pagination cursor for fetching additional pages of users |
| `include_locale` | boolean | No | Set to true to include locale information for each user |
| `limit` | number | No | Number of users to return (1-1000) |
| `team_id` | string | No | Encoded team ID to list users for (if using org tokens) |

## `slack_lookup_user_by_email`

Find a user by their registered email address in a Slack workspace. Requires a valid Slack OAuth2 connection with users:read.email scope. Cannot be used by custom bot users.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `email` | string | Yes | Email address to search for users by |

## `slack_pin_message`

Pin a message to a Slack channel. Pinned messages are highlighted and easily accessible to channel members. Requires a valid Slack OAuth2 connection with pins:write scope.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `channel` | string | Yes | Channel ID or channel name where the message exists |
| `timestamp` | string | Yes | Timestamp of the message to pin |

## `slack_send_message`

Sends a message to a Slack channel or direct message. Requires a valid Slack OAuth2 connection with chat:write scope.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `attachments` | string | No | JSON-encoded array of attachment objects for additional message formatting |
| `blocks` | string | No | JSON-encoded array of Block Kit block elements for rich message formatting |
| `channel` | string | Yes | Channel ID, channel name (#general), or user ID for DM |
| `reply_broadcast` | boolean | No | Used in conjunction with thread_ts to broadcast reply to channel |
| `schema_version` | string | No | Optional schema version to use for tool execution |
| `text` | string | Yes | Message text content |
| `thread_ts` | string | No | Timestamp of parent message to reply in thread |
| `tool_version` | string | No | Optional tool version to use for execution |
| `unfurl_links` | boolean | No | Enable or disable link previews |
| `unfurl_media` | boolean | No | Enable or disable media link previews |

## `slack_set_user_status`

Set the user's custom status with text and emoji. This appears in their profile and can include an expiration time. Requires a valid Slack OAuth2 connection with users.profile:write scope.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `status_emoji` | string | No | Emoji to display with status (without colons) |
| `status_expiration` | integer | No | Unix timestamp when status should expire |
| `status_text` | string | No | Status text to display |

## `slack_update_message`

Updates/edits a previously sent message in a Slack channel or direct message. Requires a valid Slack OAuth2 connection with chat:write scope.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `attachments` | string | No | JSON-encoded array of attachment objects for additional message formatting |
| `blocks` | string | No | JSON-encoded array of Block Kit block elements for rich message formatting |
| `channel` | string | Yes | Channel ID, channel name (#general), or user ID for DM where the message was sent |
| `text` | string | No | New message text content |
| `ts` | string | Yes | Timestamp of the message to update |

---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
