How to connect Slack to OpenClaw
Connect Slack to OpenClaw with ClawLink in one click — 145 tools your AI agent can call from chat via hosted OAuth. No API keys, no manual setup.


Post messages and browse Slack channels. Once connected, OpenClaw can read and act on Slack from chat — pairing, token refresh, and tool wiring handled for you.
The usual route to Slack access for OpenClaw is an MCP server you configure and keep running, plus your own OAuth app or API keys. ClawLink gives OpenClaw a more practical Slack setup: install one ClawHub skill, connect Slack in the browser, and OpenClaw can call real Slack actions from any chat surface with no auth, token refresh, or tool wiring to build yourself.
Copy this prompt into OpenClaw, or open the Slack skill on ClawHub.
Before installing anything, inspect the ClawHub skill metadata and setup requirements.
If the skill asks you to install a third-party package or CLI, verify its source, maintainer, and package contents before running the install command.
Install the skill "Slack" (hith3sh/slack-messaging) from ClawHub only after those checks pass.
Skill page: https://clawhub.ai/hith3sh/slack-messaging
Keep the work scoped to this skill only.
After install, help me finish setup from verified skill metadata.
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.Setup
It takes three steps to connect OpenClaw to Slack.
1Install the plugin
Paste the setup prompt into OpenClaw, or install from the terminal and ask OpenClaw to pair:
openclaw plugins install clawhub:clawlink-plugin- 2
Connect Slack
One-click OAuth in the dashboard.
- 3
Use it from chat
Ask OpenClaw: "What can you do with Slack?"
Install by command
The setup prompt above does all of this in one paste. By hand, it is one install command plus a browser approval:
openclaw plugins install clawhub:clawlink-pluginThen ask OpenClaw to set up ClawLink. It starts browser pairing and prints an approval link — open it, approve the device, return to the chat, and say done. Finally, connect Slack in the ClawLink dashboard — a one-click OAuth approval, no API keys.
Verify the connection by asking OpenClaw:
Find the #<channel> channel with slack_find_channels, pull the last day of messages with slack_fetch_conversation_history, and give me a summary plus anything addressed to me that still needs a reply.
Using a different agent?
The OpenClaw plugin is one client of ClawLink's MCP server. Claude Code, Cursor, Codex, or any agent that can run a shell command pairs with the same ClawLink account through the CLI:
npx -y @useclawlink/cli loginlogin opens the same browser approval and stores a credential locally. Once Slack is connected in the dashboard, that agent calls the same 145 Slack tools over MCP. Full setup for MCP clients and shell agents: connect apps to any AI agent.
Slack MCP for OpenClaw
Looking for a Slack MCP server for OpenClaw? ClawLink connects Slack to OpenClaw and exposes 145 Slack tools your agent can call over MCP, with hosted auth and nothing to run or maintain yourself. Using Hermes instead? The Hermes Slack integration works the same way.
The standard route to Slack in an agent is a project of its own: create a Slack app, choose bot scopes, enable Socket Mode, install it to the workspace, then keep an xoxb- token and often an xapp- token somewhere your agent can read them. ClawLink replaces all of it with Slack's OAuth screen — you approve the workspace once in the browser and OpenClaw can call the 145 Slack tools below. This is also different from the no-code and Slack-AI options search results suggest: those run the automation on someone else's platform and hand you a builder, whereas here the tools are called directly by your own agent, in your own chat, with the workspace access you approved.
What the OpenClaw Slack integration can do
145 Slack tools are ready for OpenClaw once the account is connected. The 30 below are the ones people reach for most; your agent can call all 145.
30 of 145 Slack tools for OpenClaw
| Tool | What it does |
|---|---|
Add reaction to an item slack_add_reaction_to_an_item | Add an emoji reaction to a Slack message |
Archive conversation slack_archive_conversation | Archive a Slack conversation |
Create a reminder slack_create_a_reminder | Create a Slack reminder |
Create channel slack_create_channel | Create a new Slack channel |
Deletes a message from a chat slack_deletes_a_message_from_a_chat | Delete a message from a Slack conversation |
Download slack file slack_download_slack_file | Download a file from Slack |
Fetch conversation history slack_fetch_conversation_history | Fetch message history from a Slack conversation |
Fetch message thread from a conversation slack_fetch_message_thread_from_a_conversation | Fetch a message thread from a Slack conversation |
Find channels slack_find_channels | Find Slack channels by name |
Find user by email address slack_find_user_by_email_address | Find a Slack user by email address |
Find users slack_find_users | Search for Slack users |
Get bot user slack_get_bot_user | Get the bot user identity in Slack |
Invite user to channel slack_invite_user_to_channel | Invite a user to a Slack channel |
Join an existing conversation slack_join_an_existing_conversation | Join an existing Slack conversation |
Leave conversation slack_leave_conversation | Leave a Slack conversation |
List all channels slack_list_all_channels | List all Slack channels |
List all users slack_list_all_users | List all Slack users in the workspace |
List conversations slack_list_conversations | List Slack conversations |
List files with filters in slack slack_list_files_with_filters_in_slack | List Slack files with filters |
List pinned items slack_list_pinned_items | List pinned items in a Slack channel |
List reminders slack_list_reminders | List Slack reminders |
List scheduled messages slack_list_scheduled_messages | List scheduled messages in Slack |
List user groups slack_list_user_groups | List Slack user groups |
Pin item slack_pin_item | Pin an item in a Slack channel |
Remove reaction from item slack_remove_reaction_from_item | Remove an emoji reaction from a Slack message |
Retrieve conversation information slack_retrieve_conversation_information | Retrieve information about a Slack conversation |
Retrieve conversation members list slack_retrieve_conversation_members_list | Retrieve members of a Slack conversation |
Retrieve user profile information slack_retrieve_user_profile_information | Retrieve a Slack user's profile |
Schedule message slack_schedule_message | Schedule a message to be sent later |
Search messages slack_search_messages | Search Slack messages |
Try it: find the Slack tool you need
Browse the 30 Slack tools
Click any tool to see exactly what OpenClaw can do and copy a ready-to-use prompt.
Example prompts
Find the #<channel> channel with slack_find_channels, pull the last day of messages with slack_fetch_conversation_history, and give me a summary plus anything addressed to me that still needs a reply.
Use slack_search_messages for "<term>" over the last 30 days, group the results by channel, and tell me who the main participants were. Do not post anything.
In #<channel>, find the thread started by <person> about "<topic>" using slack_fetch_message_thread_from_a_conversation, draft a reply for me to approve, and only then post it into that same thread.
Draft a status update for #<channel> from the notes above, show it to me, and once I approve use slack_schedule_message to post it at 9am tomorrow in my timezone.
How the Slack tools take their arguments
Details from the manifest that decide whether a Slack prompt works on the first try.
- Channels are addressed by id, not by name.
slack_find_channelsandslack_list_all_channelsresolve a name to aC…id. A prompt that passes#generaldirectly is the usual source ofchannel_not_found. - Threads need the parent timestamp.
slack_fetch_message_thread_from_a_conversationreturns thetsthat a threaded reply must carry. Without it, a reply becomes a new channel message. - People are resolved by email or lookup, not by display name.
slack_find_user_by_email_addressandslack_find_usersreturn theU…ids that mention and invite calls expect. slack_schedule_messageis the safe write. It gives you a reviewable gap between the agent composing something and the workspace seeing it, which is worth using for anything customer-facing.- Reading history and searching are different tools with different reach.
slack_fetch_conversation_historywalks one channel the account belongs to;slack_search_messagesspans everything the account can see. Ask for the second when you do not know where something was said.
ClawLink vs. building it yourself
The alternative to ClawLink is usually manual OAuth app setup plus your own token handling, permission troubleshooting, and tool plumbing for OpenClaw. That is fine if you want to build and maintain the integration yourself. Most teams just want Slack working from chat.
| Manual | ClawLink | |
|---|---|---|
| Connection flow | Register a Slack app, configure redirect URLs, manage consent details, and reconnect users when auth settings drift. | Users connect Slack through the hosted browser flow and ClawLink keeps the token lifecycle out of your app code. |
| Ongoing maintenance | You own refresh logic, permission debugging, environment config, and every provider-specific edge case for Slack. | ClawLink handles the repetitive integration plumbing so your team can focus on the workflow instead of the infrastructure. |
| Agent usability | You still need to expose the right Slack actions to the runtime in a format your agent can reliably use. | 145 tools for Slack are already exposed through ClawLink, so the agent can read and act from chat immediately. |
ClawLink vs. Composio
Composio also exposes Slack to AI agents. It is developer infrastructure: Python and TypeScript SDKs, an MCP server, and a catalog past 1,000 apps, aimed at teams shipping agent products. ClawLink is built for OpenClaw users instead. You install the plugin once, connect Slack in the browser, and the 145 tools above work from chat. There is no SDK, no config file, and no API key handling. Choosing between them? Read the full Composio alternatives comparison.
Troubleshooting
OpenClaw installed the Slack skill but can't call the tools
The ClawHub skill teaches OpenClaw about Slack, but the calls run through the ClawLink plugin and your connected account. Make sure Slack is connected in the dashboard, then start a fresh chat so OpenClaw reloads the tool catalog. If OpenClaw runs as a persistent gateway, restart it so the new tools register.
Connection succeeds but no tools appear
Reconnect Slack from the dashboard, then start a fresh chat if the runtime still has the old tool catalog loaded.
"Tool schema not loaded yet" error when calling Slack tools
Slack tool schemas load on demand the first time a tool runs and are cached after that, so this error usually clears on its own: wait a few seconds and retry the same request. If every Slack call keeps failing with it in a fresh chat, reconnect from the dashboard, and contact support if it still persists — that pattern points to a configuration problem on our side, not something you can fix by reconnecting again.
Slack returns 403 or "permission denied" on one action while others work
Two usual causes. The connected account may not have access to the specific workspace, inbox, store, or project in the request — check that first. If access looks right, the agent may have sent a placeholder value (like "YOUR_ID" or an example id from documentation) instead of a real one: ask it to run a list or search tool first, then retry the action with a real id from those results. Most failures at this stage are one of these two, not ClawLink bugs.
Slack returns "missing_scope" or 403 on one action while other Slack tools work
The error name is Slack's and it means the installed authorization does not carry the permission that one call needs. On a self-built app the documented fix is to add the scope in your app configuration and reinstall to the workspace, because Slack does not grant new scopes to an existing install — that reinstall step is what most search results are describing. On a hosted connection you do not own the app configuration, so the equivalent action is to reconnect from the ClawLink dashboard, which runs the install again and picks up the full permission set. Before doing that, rule out the cheaper cause: a write to a private channel the connected account is not a member of fails even with correct scopes, and inviting the account in Slack fixes it without touching the connection.
Ask the agent to diagnose it:
Call slack_get_bot_user and slack_list_all_channels, tell me which workspace and account you are connected as and which channels you can actually see. Then quote the exact error string from the failed call."channel_not_found" when the channel is right there in my sidebar
Two causes, and neither is a broken connection. The first is membership: private channels are only visible to members, so the agent cannot see one it was never invited to, and inviting the connected account in Slack resolves it immediately. The second is the identifier — Slack tools take channel ids like C0123456789, not the display name, and an agent that passes #general or a name lifted from an example gets channel_not_found rather than a helpful error. Ask it to resolve the name first with slack_find_channels and then use the id from that result.
Ask the agent to diagnose it:
Use slack_find_channels to look up the channel by name and show me the exact channel id you get back. Then retry the failed call with that id.Slack messages send as the wrong identity, or replies land outside the thread
Sending identity follows the connection: messages post through the authorization you approved, so if a workspace has several ClawLink connections the one marked default is the one used unless the prompt names another. Threading is a separate and more common mistake. A reply belongs in a thread only if the call carries the parent message's timestamp, so an agent that posts without one starts a new message in the channel instead. Ask it to fetch the thread with slack_fetch_message_thread_from_a_conversation first and reply using the ts it returns.
OAuth finished in the browser but the account is still missing
Try reconnecting Slack and complete the consent flow in the same browser session. Partial OAuth approvals or switching accounts mid-flow can leave the connection incomplete.
FAQ
Is there a OpenClaw Slack integration?
Yes. ClawLink is the fastest way to connect OpenClaw to Slack: link your Slack account once in the browser and OpenClaw can call the Slack API through 145 ready-made tools — no custom code or token handling.
How do I add Slack to OpenClaw with ClawLink?
Paste the setup prompt from this page into OpenClaw. It installs the ClawLink Slack skill from ClawHub, then you click Connect in the dashboard to authorize Slack. OpenClaw calls the tools from the next message — no config files or API keys to manage.
How long does it take to connect Slack to OpenClaw?
About two minutes. Sign in, click Connect next to Slack in the dashboard, authenticate, and OpenClaw can use it from the next chat message.
Why use ClawLink instead of wiring Slack up myself?
The alternative to ClawLink is usually manual OAuth app setup plus your own token handling, permission troubleshooting, and tool plumbing for OpenClaw. That is fine if you want to build and maintain the integration yourself. Most teams just want Slack working from chat.
Do I need to create a Slack app or collect xoxb tokens?
No. Connecting through ClawLink uses Slack's OAuth install flow, so you pick the workspace, review the permissions on Slack's own screen, and approve. There is no app to create in api.slack.com, no bot token or app-level token to copy, and nothing to add to openclaw.json. The practical difference shows up later: a token pasted into a config file keeps working until someone remembers to revoke it, whereas a workspace admin removing the app cuts access immediately.
How is this different from a no-code platform or Slack's own AI features?
Those are different products for a different job. A no-code platform runs workflows on its own infrastructure and gives you a builder to configure them; Slack's built-in AI works inside Slack. This integration gives your agent the Slack API as tools, so the reasoning happens wherever OpenClaw runs and the agent decides which calls to make in response to what you asked. That matters when the work spans several systems — searching Slack, then filing an issue, then replying — because there is no workflow to pre-define.
Which channels can the agent see?
Public channels in the workspace you connected, plus private channels the connected account is a member of. Slack scopes access to membership, so a private channel nobody invited you to is invisible to the agent as well, and the fix is to invite the account to the channel in Slack rather than to change anything in ClawLink. This is the most common cause of an agent reporting that a channel does not exist when you can see it perfectly well in your own sidebar.
Is it safe to connect Slack to an AI agent?
The connection is Slack's own OAuth install, so the permissions are named on Slack's approval screen, the agent never handles your password, and a workspace admin can revoke the app at any time from Slack's side while you can disconnect from the ClawLink dashboard. Two practical cautions matter more than the mechanism. First, the agent inherits your reach: it can read what you can read, so connect the account whose access you intend it to have. Second, message content is untrusted input — an agent asked to act on whatever it finds in a channel is acting on text anyone in that channel can write, so keep a human in the loop for anything that sends, deletes, or invites.
OpenClaw installed the Slack skill but can't call the tools
The ClawHub skill teaches OpenClaw about Slack, but the calls run through the ClawLink plugin and your connected account. Make sure Slack is connected in the dashboard, then start a fresh chat so OpenClaw reloads the tool catalog. If OpenClaw runs as a persistent gateway, restart it so the new tools register.