# How to connect Slack to OpenClaw (no API keys)

> 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.

Web version: https://claw-link.dev/openclaw/slack

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.

**Start here:** install the ClawLink plugin (`openclaw plugins install clawhub:clawlink-plugin`), pair it in the browser, then connect the app in the ClawLink dashboard. The interactive install prompt is on the web version of this page: https://claw-link.dev/openclaw/slack

## Setup

It takes three steps to connect OpenClaw to Slack.

1. **Install ClawLink** — add the plugin to OpenClaw once.
2. **Connect Slack** — one-click OAuth in the ClawLink dashboard.
3. **Use it from chat** — ask OpenClaw in plain English.

**Alternative for any agent (no plugin needed):** if the OpenClaw plugin route isn't available or doesn't work, any AI agent with shell access can use the ClawLink CLI instead:

```bash
npx -y @useclawlink/cli login          # sign in via browser — no API key to paste
npx -y @useclawlink/cli connect slack  # connect Slack (browser OAuth)
npx -y @useclawlink/cli actions slack  # list available actions
npx -y @useclawlink/cli run slack <action> --input '<json>'  # execute (add --confirm for writes)
```

### 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:

```bash
openclaw plugins install clawhub:clawlink-plugin
```

Then 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](https://claw-link.dev/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:

```bash
npx -y @useclawlink/cli login
```

`login` 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](https://claw-link.dev/learn/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](https://claw-link.dev/learn/what-is-an-mcp-server), with [hosted auth](https://claw-link.dev/learn/oauth-for-ai-agents) and nothing to run or maintain yourself. Using Hermes instead? The [Hermes Slack integration](https://claw-link.dev/hermes/slack) 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 |

## Example prompts

**Catch up on a channel**

> 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.

**Search across the workspace**

> 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.

**Reply in the right thread**

> 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.

**Schedule an update instead of sending now**

> 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_channels` and `slack_list_all_channels` resolve a name to a `C…` id. A prompt that passes `#general` directly is the usual source of `channel_not_found`.
- **Threads need the parent timestamp.** `slack_fetch_message_thread_from_a_conversation` returns the `ts` that 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_address` and `slack_find_users` return the `U…` ids that mention and invite calls expect.
- **`slack_schedule_message` is 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_history` walks one channel the account belongs to; `slack_search_messages` spans 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](https://claw-link.dev/hub/composio-alternatives) comparison.

### 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:

```text
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:

```text
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.

### 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.

## Related

- [Connect SendGrid](https://claw-link.dev/openclaw/sendgrid) — Deliver transactional and marketing emails
- [Dialpad tools](https://claw-link.dev/openclaw/dialpad) — Business phone, messaging, and video conferencing
- [OpenClaw Discord Bot integration](https://claw-link.dev/openclaw/discord-bot) — Automate Discord server actions with bot-specific permissions
