Slack Automation via Rube MCP
Selective Reading Rule
Start with:
references/senior-master-standard.md
references/usage-routing.md
references/quality-checklist.md
Then load only the inherited docs, scripts, assets, or examples that match the user's actual task.
Automate Slack workspace operations including messaging, search, channel management, and reaction workflows through Composio's Slack toolkit.
Prerequisites
- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)
- Active Slack connection via
RUBE_MANAGE_CONNECTIONS with toolkit slack
- Always call
RUBE_SEARCH_TOOLS first to get current tool schemas
Setup
Get Rube MCP: Add https://rube.app/mcp as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.
- Verify Rube MCP is available by confirming
RUBE_SEARCH_TOOLS responds
- Call
RUBE_MANAGE_CONNECTIONS with toolkit slack
- If connection is not ACTIVE, follow the returned auth link to complete Slack OAuth
- Confirm connection status shows ACTIVE before running any workflows
Core Workflows
1. Send Messages to Channels
When to use: User wants to post a message to a Slack channel or DM
Tool sequence:
SLACK_FIND_CHANNELS - Resolve channel name to channel ID [Prerequisite]
SLACK_LIST_ALL_CHANNELS - Fallback if FIND_CHANNELS returns empty/ambiguous results [Fallback]
SLACK_FIND_USERS - Resolve user for DMs or @mentions [Optional]
SLACK_OPEN_DM - Open/reuse a DM channel if messaging a user directly [Optional]
SLACK_SEND_MESSAGE - Post the message with resolved channel ID [Required]
SLACK_UPDATES_A_SLACK_MESSAGE - Edit the posted message if corrections needed [Optional]
Key parameters:
channel: Channel ID or name (without '#' prefix)
markdown_text: Preferred field for formatted messages (supports headers, bold, italic, code blocks)
text: Raw text fallback (deprecated in favor of markdown_text)
thread_ts: Timestamp of parent message to reply in a thread
blocks: Block Kit layout blocks (deprecated, use markdown_text)
Pitfalls:
SLACK_FIND_CHANNELS requires query param; missing it errors with "Invalid request data provided"
SLACK_SEND_MESSAGE requires valid channel plus one of markdown_text/text/blocks/attachments
- Invalid block payloads return error=invalid_blocks (max 50 blocks)
- Replies become top-level posts if
thread_ts is omitted
- Persist
response.data.channel and response.data.message.ts from SEND_MESSAGE for edit/thread operations
2. Search Messages and Conversations
When to use: User wants to find specific messages across the workspace
Tool sequence:
SLACK_FIND_CHANNELS - Resolve channel for scoped search with in:#channel [Optional]
SLACK_FIND_USERS - Resolve user for author filter with from:@user [Optional]
SLACK_SEARCH_MESSAGES - Run keyword search across accessible conversations [Required]
SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION - Expand threads for relevant hits [Required]
Key parameters:
query: Search string supporting modifiers (in:#channel, from:@user, before:YYYY-MM-DD, after:YYYY-MM-DD, has:link, has:file)
count: Results per page (max 100), or total with auto_paginate=true
sort: 'score' (relevance) or 'timestamp' (chronological)
sort_dir: 'asc' or 'desc'
Pitfalls:
- Validation fails if
query is missing/empty
ok=true can still mean no hits (response.data.messages.total=0)
- Matches are under
response.data.messages.matches (sometimes also response.data_preview.messages.matches)
match.text may be empty/truncated; key info can appear in matches[].attachments[]
- Thread expansion via FETCH_MESSAGE_THREAD can truncate when
response.data.has_more=true; paginate via response_metadata.next_cursor
3. Manage Channels and Users
When to use: User wants to list channels, users, or workspace info
Tool sequence:
SLACK_FETCH_TEAM_INFO - Validate connectivity and get workspace identity [Required]
SLACK_LIST_ALL_CHANNELS - Enumerate public channels [Required]
SLACK_LIST_CONVERSATIONS - Include private channels and DMs [Optional]
SLACK_LIST_ALL_USERS - List workspace members [Required]
SLACK_RETRIEVE_CONVERSATION_INFORMATION - Get detailed channel metadata [Optional]
SLACK_LIST_USER_GROUPS_FOR_TEAM_WITH_OPTIONS - List user groups [Optional]
Key parameters:
cursor: Pagination cursor from response_metadata.next_cursor
limit: Results per page (default varies; set explicitly for large workspaces)
types: Channel types filter ('public_channel', 'private_channel', 'im', 'mpim')
Pitfalls:
- Workspace metadata is nested under
response.data.team, not top-level
SLACK_LIST_ALL_CHANNELS returns public channels only; use SLACK_LIST_CONVERSATIONS for private/IM coverage
SLACK_LIST_ALL_USERS can hit HTTP 429 rate limits; honor Retry-After header
- Always paginate via
response_metadata.next_cursor until empty; de-duplicate by id
4. React to and Thread Messages
When to use: User wants to add reactions or manage threaded conversations
Tool sequence:
SLACK_SEARCH_MESSAGES or SLACK_FETCH_CONVERSATION_HISTORY - Find the target message [Prerequisite]
SLACK_ADD_REACTION_TO_AN_ITEM - Add an emoji reaction [Required]
SLACK_FETCH_ITEM_REACTIONS - List reactions on a message [Optional]
SLACK_REMOVE_REACTION_FROM_ITEM - Remove a reaction [Optional]
SLACK_SEND_MESSAGE - Reply in thread using thread_ts [Optional]
SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION - Read full thread [Optional]
Key parameters:
channel: Channel ID where the message lives
timestamp / ts: Message timestamp (unique identifier like '1234567890.123456')
name: Emoji name without colons (e.g., 'thumbsup', 'wave::skin-tone-3')
thread_ts: Parent message timestamp for threaded replies
Pitfalls:
- Reactions require exact channel ID + message timestamp pair
- Emoji names use Slack's naming convention without colons
SLACK_FETCH_CONVERSATION_HISTORY only returns main channel timeline, NOT threaded replies
- Use
SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION with parent's thread_ts to get thread replies
5. Schedule Messages
When to use: User wants to schedule a message for future delivery
Tool sequence:
SLACK_FIND_CHANNELS - Resolve channel ID [Prerequisite]
SLACK_SCHEDULE_MESSAGE - Schedule the message with post_at timestamp [Required]
Key parameters:
channel: Resolved channel ID
post_at: Unix timestamp for delivery (up to 120 days in advance)
text / blocks: Message content
Pitfalls:
- Scheduling is limited to 120 days in advance
post_at must be a Unix timestamp, not ISO 8601
Common Patterns
ID Resolution
Always resolve display names to IDs before operations:
- Channel name -> Channel ID:
SLACK_FIND_CHANNELS with query param
- User name -> User ID:
SLACK_FIND_USERS with search_query or email
- DM channel:
SLACK_OPEN_DM with resolved user IDs
Pagination
Most list endpoints use cursor-based pagination:
- Follow
response_metadata.next_cursor until empty
- Set explicit
limit values (e.g., 100-200) for reliable paging
- De-duplicate results by
id across pages
Message Formatting
- Prefer
markdown_text over text or blocks for formatted messages
- Use
<@USER_ID> format to mention users (not @username)
- Use
\n for line breaks in markdown_text
Known Pitfalls
- Channel resolution:
SLACK_FIND_CHANNELS can return empty results if channel is private and bot hasn't been invited
- Rate limits:
SLACK_LIST_ALL_USERS and other list endpoints can hit HTTP 429; honor Retry-After header
- Nested responses: Results may be nested under
response.data.results[0].response.data in wrapped executions
- Thread vs channel:
SLACK_FETCH_CONVERSATION_HISTORY returns main timeline only; use SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION for thread replies
- Message editing: Requires both
channel and original message ts; persist these from SEND_MESSAGE response
- Search delays: Recently posted messages may not appear in search results immediately
- Scope limitations: Missing OAuth scopes can cause 403 errors; check with
SLACK_GET_APP_PERMISSION_SCOPES
Quick Reference
| Task |
Tool Slug |
Key Params |
| Find channels |
SLACK_FIND_CHANNELS |
query |
| List all channels |
SLACK_LIST_ALL_CHANNELS |
limit, cursor, types |
| Send message |
SLACK_SEND_MESSAGE |
channel, markdown_text |
| Edit message |
SLACK_UPDATES_A_SLACK_MESSAGE |
channel, ts, markdown_text |
| Search messages |
SLACK_SEARCH_MESSAGES |
query, count, sort |
| Get thread |
SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION |
channel, ts |
| Add reaction |
SLACK_ADD_REACTION_TO_AN_ITEM |
channel, name, timestamp |
| Find users |
SLACK_FIND_USERS |
search_query or email |
| List users |
SLACK_LIST_ALL_USERS |
limit, cursor |
| Open DM |
SLACK_OPEN_DM |
user IDs |
| Schedule message |
SLACK_SCHEDULE_MESSAGE |
channel, post_at, text |
| Get channel info |
SLACK_RETRIEVE_CONVERSATION_INFORMATION |
channel ID |
| Channel history |
SLACK_FETCH_CONVERSATION_HISTORY |
channel, oldest, latest |
| Workspace info |
SLACK_FETCH_TEAM_INFO |
(none) |
When to Use
This skill is applicable to execute the workflow or actions described in the overview.
Limitations
- Use this skill only when the task clearly matches the scope described above.
- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.
1---2name: slack-automation3description: ALWAYS use this when the request matches Slack Automation: Automate Slack workspace operations including messaging, search, channel management, and reaction workflows through Composio's Slack toolkit.4---56# Slack Automation via Rube MCP78## Selective Reading Rule910Start with:1112- `references/senior-master-standard.md`13- `references/usage-routing.md`14- `references/quality-checklist.md`1516Then load only the inherited docs, scripts, assets, or examples that match the user's actual task.1718Automate Slack workspace operations including messaging, search, channel management, and reaction workflows through Composio's Slack toolkit.1920## Prerequisites2122- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)23- Active Slack connection via `RUBE_MANAGE_CONNECTIONS` with toolkit `slack`24- Always call `RUBE_SEARCH_TOOLS` first to get current tool schemas2526## Setup2728**Get Rube MCP**: Add `https://rube.app/mcp` as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.29301. Verify Rube MCP is available by confirming `RUBE_SEARCH_TOOLS` responds312. Call `RUBE_MANAGE_CONNECTIONS` with toolkit `slack`323. If connection is not ACTIVE, follow the returned auth link to complete Slack OAuth334. Confirm connection status shows ACTIVE before running any workflows3435## Core Workflows3637### 1. Send Messages to Channels3839**When to use**: User wants to post a message to a Slack channel or DM4041**Tool sequence**:421. `SLACK_FIND_CHANNELS` - Resolve channel name to channel ID [Prerequisite]432. `SLACK_LIST_ALL_CHANNELS` - Fallback if FIND_CHANNELS returns empty/ambiguous results [Fallback]443. `SLACK_FIND_USERS` - Resolve user for DMs or @mentions [Optional]454. `SLACK_OPEN_DM` - Open/reuse a DM channel if messaging a user directly [Optional]465. `SLACK_SEND_MESSAGE` - Post the message with resolved channel ID [Required]476. `SLACK_UPDATES_A_SLACK_MESSAGE` - Edit the posted message if corrections needed [Optional]4849**Key parameters**:50- `channel`: Channel ID or name (without '#' prefix)51- `markdown_text`: Preferred field for formatted messages (supports headers, bold, italic, code blocks)52- `text`: Raw text fallback (deprecated in favor of markdown_text)53- `thread_ts`: Timestamp of parent message to reply in a thread54- `blocks`: Block Kit layout blocks (deprecated, use markdown_text)5556**Pitfalls**:57- `SLACK_FIND_CHANNELS` requires `query` param; missing it errors with "Invalid request data provided"58- `SLACK_SEND_MESSAGE` requires valid channel plus one of markdown_text/text/blocks/attachments59- Invalid block payloads return error=invalid_blocks (max 50 blocks)60- Replies become top-level posts if `thread_ts` is omitted61- Persist `response.data.channel` and `response.data.message.ts` from SEND_MESSAGE for edit/thread operations6263### 2. Search Messages and Conversations6465**When to use**: User wants to find specific messages across the workspace6667**Tool sequence**:681. `SLACK_FIND_CHANNELS` - Resolve channel for scoped search with `in:#channel` [Optional]692. `SLACK_FIND_USERS` - Resolve user for author filter with `from:@user` [Optional]703. `SLACK_SEARCH_MESSAGES` - Run keyword search across accessible conversations [Required]714. `SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION` - Expand threads for relevant hits [Required]7273**Key parameters**:74- `query`: Search string supporting modifiers (`in:#channel`, `from:@user`, `before:YYYY-MM-DD`, `after:YYYY-MM-DD`, `has:link`, `has:file`)75- `count`: Results per page (max 100), or total with auto_paginate=true76- `sort`: 'score' (relevance) or 'timestamp' (chronological)77- `sort_dir`: 'asc' or 'desc'7879**Pitfalls**:80- Validation fails if `query` is missing/empty81- `ok=true` can still mean no hits (`response.data.messages.total=0`)82- Matches are under `response.data.messages.matches` (sometimes also `response.data_preview.messages.matches`)83- `match.text` may be empty/truncated; key info can appear in `matches[].attachments[]`84- Thread expansion via FETCH_MESSAGE_THREAD can truncate when `response.data.has_more=true`; paginate via `response_metadata.next_cursor`8586### 3. Manage Channels and Users8788**When to use**: User wants to list channels, users, or workspace info8990**Tool sequence**:911. `SLACK_FETCH_TEAM_INFO` - Validate connectivity and get workspace identity [Required]922. `SLACK_LIST_ALL_CHANNELS` - Enumerate public channels [Required]933. `SLACK_LIST_CONVERSATIONS` - Include private channels and DMs [Optional]944. `SLACK_LIST_ALL_USERS` - List workspace members [Required]955. `SLACK_RETRIEVE_CONVERSATION_INFORMATION` - Get detailed channel metadata [Optional]966. `SLACK_LIST_USER_GROUPS_FOR_TEAM_WITH_OPTIONS` - List user groups [Optional]9798**Key parameters**:99- `cursor`: Pagination cursor from `response_metadata.next_cursor`100- `limit`: Results per page (default varies; set explicitly for large workspaces)101- `types`: Channel types filter ('public_channel', 'private_channel', 'im', 'mpim')102103**Pitfalls**:104- Workspace metadata is nested under `response.data.team`, not top-level105- `SLACK_LIST_ALL_CHANNELS` returns public channels only; use `SLACK_LIST_CONVERSATIONS` for private/IM coverage106- `SLACK_LIST_ALL_USERS` can hit HTTP 429 rate limits; honor Retry-After header107- Always paginate via `response_metadata.next_cursor` until empty; de-duplicate by `id`108109### 4. React to and Thread Messages110111**When to use**: User wants to add reactions or manage threaded conversations112113**Tool sequence**:1141. `SLACK_SEARCH_MESSAGES` or `SLACK_FETCH_CONVERSATION_HISTORY` - Find the target message [Prerequisite]1152. `SLACK_ADD_REACTION_TO_AN_ITEM` - Add an emoji reaction [Required]1163. `SLACK_FETCH_ITEM_REACTIONS` - List reactions on a message [Optional]1174. `SLACK_REMOVE_REACTION_FROM_ITEM` - Remove a reaction [Optional]1185. `SLACK_SEND_MESSAGE` - Reply in thread using `thread_ts` [Optional]1196. `SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION` - Read full thread [Optional]120121**Key parameters**:122- `channel`: Channel ID where the message lives123- `timestamp` / `ts`: Message timestamp (unique identifier like '1234567890.123456')124- `name`: Emoji name without colons (e.g., 'thumbsup', 'wave::skin-tone-3')125- `thread_ts`: Parent message timestamp for threaded replies126127**Pitfalls**:128- Reactions require exact channel ID + message timestamp pair129- Emoji names use Slack's naming convention without colons130- `SLACK_FETCH_CONVERSATION_HISTORY` only returns main channel timeline, NOT threaded replies131- Use `SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION` with parent's `thread_ts` to get thread replies132133### 5. Schedule Messages134135**When to use**: User wants to schedule a message for future delivery136137**Tool sequence**:1381. `SLACK_FIND_CHANNELS` - Resolve channel ID [Prerequisite]1392. `SLACK_SCHEDULE_MESSAGE` - Schedule the message with `post_at` timestamp [Required]140141**Key parameters**:142- `channel`: Resolved channel ID143- `post_at`: Unix timestamp for delivery (up to 120 days in advance)144- `text` / `blocks`: Message content145146**Pitfalls**:147- Scheduling is limited to 120 days in advance148- `post_at` must be a Unix timestamp, not ISO 8601149150## Common Patterns151152### ID Resolution153Always resolve display names to IDs before operations:154- **Channel name -> Channel ID**: `SLACK_FIND_CHANNELS` with `query` param155- **User name -> User ID**: `SLACK_FIND_USERS` with `search_query` or `email`156- **DM channel**: `SLACK_OPEN_DM` with resolved user IDs157158### Pagination159Most list endpoints use cursor-based pagination:160- Follow `response_metadata.next_cursor` until empty161- Set explicit `limit` values (e.g., 100-200) for reliable paging162- De-duplicate results by `id` across pages163164### Message Formatting165- Prefer `markdown_text` over `text` or `blocks` for formatted messages166- Use `<@USER_ID>` format to mention users (not @username)167- Use `\n` for line breaks in markdown_text168169## Known Pitfalls170171- **Channel resolution**: `SLACK_FIND_CHANNELS` can return empty results if channel is private and bot hasn't been invited172- **Rate limits**: `SLACK_LIST_ALL_USERS` and other list endpoints can hit HTTP 429; honor Retry-After header173- **Nested responses**: Results may be nested under `response.data.results[0].response.data` in wrapped executions174- **Thread vs channel**: `SLACK_FETCH_CONVERSATION_HISTORY` returns main timeline only; use `SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION` for thread replies175- **Message editing**: Requires both `channel` and original message `ts`; persist these from SEND_MESSAGE response176- **Search delays**: Recently posted messages may not appear in search results immediately177- **Scope limitations**: Missing OAuth scopes can cause 403 errors; check with `SLACK_GET_APP_PERMISSION_SCOPES`178179## Quick Reference180181| Task | Tool Slug | Key Params |182|------|-----------|------------|183| Find channels | `SLACK_FIND_CHANNELS` | `query` |184| List all channels | `SLACK_LIST_ALL_CHANNELS` | `limit`, `cursor`, `types` |185| Send message | `SLACK_SEND_MESSAGE` | `channel`, `markdown_text` |186| Edit message | `SLACK_UPDATES_A_SLACK_MESSAGE` | `channel`, `ts`, `markdown_text` |187| Search messages | `SLACK_SEARCH_MESSAGES` | `query`, `count`, `sort` |188| Get thread | `SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION` | `channel`, `ts` |189| Add reaction | `SLACK_ADD_REACTION_TO_AN_ITEM` | `channel`, `name`, `timestamp` |190| Find users | `SLACK_FIND_USERS` | `search_query` or `email` |191| List users | `SLACK_LIST_ALL_USERS` | `limit`, `cursor` |192| Open DM | `SLACK_OPEN_DM` | user IDs |193| Schedule message | `SLACK_SCHEDULE_MESSAGE` | `channel`, `post_at`, `text` |194| Get channel info | `SLACK_RETRIEVE_CONVERSATION_INFORMATION` | channel ID |195| Channel history | `SLACK_FETCH_CONVERSATION_HISTORY` | `channel`, `oldest`, `latest` |196| Workspace info | `SLACK_FETCH_TEAM_INFO` | (none) |197198## When to Use199This skill is applicable to execute the workflow or actions described in the overview.200201## Limitations202- Use this skill only when the task clearly matches the scope described above.203- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.204- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.