Authentication
The plugin uses OAuth 2.0 with thechannels:read, chat:write, and groups:read scopes. To connect a user’s Slack workspace, redirect them to the login endpoint:
YOUR_USER_ID is the identifier your application uses to track users. It is stored alongside the encrypted token so Toolshed can retrieve the right credentials at tool invocation time.Connecting a user
Initiate the OAuth flow
Send the user to the login URL. In a web app this is typically a redirect; in a CLI you can open it in the browser.
User authorizes in Slack
Slack presents the standard OAuth consent screen. The user approves the requested scopes for their workspace.
Disconnecting
To revoke and remove a user’s Slack connection, send:Available tools
The Slack plugin exposes two tools.slack.channels.list is a read-only lookup and is safe to auto-approve by MCP clients. slack.messages.post is marked destructive and requires explicit user confirmation via the MCP elicitation flow before any message is sent.
slack.channels.list — List Channels
slack.channels.list — List Channels
Lists Slack channels visible to the authenticated user. This includes public channels and private groups the user is a member of, up to the specified limit. The tool uses the
Returns:An object with a
Example invocation:
channels:read and groups:read scopes granted during OAuth.Parameters:| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
limit | integer | No | 50 | Maximum number of channels to return (must be positive) |
channels array. Each channel contains:| Field | Type | Description |
|---|---|---|
id | string | Slack channel ID (e.g. C012AB3CD) |
name | string | Channel name without the # prefix |
topic | string | Channel topic text |
memberCount | number | Number of members in the channel |
slack.messages.post — Post Message
slack.messages.post — Post Message
Posts a message to a Slack channel. You can address the channel by its Slack channel ID or by name. Optionally supply a thread timestamp (
Returns:
Example invocation:Example reply in a thread:
threadTs) to post as a reply in an existing thread rather than creating a new top-level message.This tool is marked destructive — Toolshed will pause and present the user with a confirmation prompt showing the channel and a preview of the message text before sending. If the user declines or cancels, the operation is aborted and nothing is posted.Parameters:| Parameter | Type | Required | Description |
|---|---|---|---|
channel | string | Yes | Channel ID (e.g. C012AB3CD) or channel name (e.g. general) |
text | string | Yes | Message text to post (Slack mrkdwn formatting supported) |
threadTs | string | No | Thread timestamp to reply to. Omit to post a new top-level message |
| Field | Type | Description |
|---|---|---|
ts | string | Timestamp of the posted message, usable as a future threadTs |
channel | string | Channel ID the message was posted to |