Manage Slack workspaces — send messages, manage channels, search conversations, handle files, create reminders, and automate team communication via the Slack API.
This skill uses ClawLink for hosted connection flows and credentials so you do not need to configure Slack API access yourself.
Step 1: InstallStep 2: Pair AccountStep 3: Connect Slack
_App-specific connection GIF coming soon_Run the install command in OpenClawSign in and approve the deviceOpen the dashboard and connect Slack
text
┌─────────────────┐ ┌──────────────┐ ┌──────────────────┐
│ OpenClaw │────▶│ ClawLink │────▶│ Slack Web API │
│ (User Chat) │ │ (OAuth) │ │ │
└─────────────────┘ └──────────────┘ └──────────────────┘
│ │ │
│ 1. Install Plugin │ │
│ 2. Pair Device │ │
│ 3. Connect Slack │ │
│ │ 4. Secure Token │
│ │ 5. Proxy Requests │
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ SKILL │ │ Dashboard│ │ Slack │
│ File │ │ Auth │ │ Workspace│
└──────────┘ └──────────┘ └──────────┘
Install the verified ClawLink plugin from ClawHub. After the user confirms, complete the full setup so ClawLink tools are visible in the next OpenClaw chat.
bash
openclaw plugins install clawhub:clawlink-plugin
openclaw config set tools.alsoAllow '["clawlink-plugin"]' --strict-json
openclaw gateway restart
Then tell the user: "OpenClaw has been restarted. Send /new as a standalone message to start a fresh chat, then ask for Slack again."
bash
# List all channels
clawlink_call_tool --tool "slack_list_all_channels" --params '{}'
# Send a message
clawlink_call_tool --tool "slack_send_message" --params '{"channel": "C0123456789", "text": "Hello from OpenClaw!"}'
# Find a user
clawlink_call_tool --tool "slack_find_user_by_email_address" --params '{"email": "colleague@company.com"}'
All Slack tool calls are authenticated automatically by ClawLink using the user's connected Slack workspace OAuth token.
No API token is required in chat. ClawLink stores the OAuth token securely and injects it into every Slack Web API request on the user's behalf.
clawlink_begin_pairing if it is not configured yet.clawlink_list_integrations to verify the connection is active.bash
clawlink_list_integrations
Response: Returns all connected integrations. Look for slack in the list.
bash
clawlink_list_tools --integration slack
Response: Returns the live tool catalog for Slack.
If Slack tools are missing or the connection shows an error:
clawlink_list_integrations to verifyclawlink_list_tools --integration slackToolDescriptionModeslack_send_messageSend a text message to a channel, DM, or MPDMWriteslack_send_thread_replyReply to a specific message threadWriteslack_schedule_messageSchedule a message for future deliveryWriteslack_delete_scheduled_messageDelete a pending scheduled messageWriteslack_list_scheduled_messagesList pending scheduled messages in a channelReadslack_deletes_a_message_from_a_chatDelete a message from a channel or DMWriteslack_update_messageUpdate an existing message's textWrite
ToolDescriptionModeslack_list_all_channelsList all channels in the workspaceReadslack_find_channelsSearch channels by name, topic, or purposeReadslack_create_channelCreate a new public or private channelWriteslack_archive_conversationArchive a channel (makes it read-only)Writeslack_rename_channelRename an existing channelWriteslack_set_channel_topicSet the topic/description of a channelWriteslack_set_channel_purposeSet the purpose of a channelWriteslack_invite_users_to_a_slack_channelInvite users to a channelWriteslack_join_an_existing_conversationJoin a channel you have access toWriteslack_leave_conversationLeave a channelWriteslack_close_dmClose a DM or MPDM conversationWrite
ToolDescriptionModeslack_fetch_conversation_historyGet messages from a channel (main timeline, not threads)Readslack_fetch_message_thread_from_a_conversationGet all replies in a specific threadReadslack_list_conversationsList conversations accessible to a userRead
ToolDescriptionModeslack_list_all_usersList all users in the workspaceReadslack_find_usersSearch users by name, email, or criteriaReadslack_find_user_by_email_addressLook up a user by their email addressReadslack_get_user_presenceGet a user's current presence (active/away)Readslack_get_user_dnd_statusGet a user's Do Not Disturb statusRead
ToolDescriptionModeslack_list_files_with_filters_in_slackList files shared in the workspaceReadslack_upload_file_to_channelUpload a file to a channelWriteslack_delete_filePermanently delete a fileWriteslack_download_slack_fileDownload file content and get a public URLRead
ToolDescriptionModeslack_add_reaction_to_an_itemAdd an emoji reaction to a messageWriteslack_remove_reaction_from_itemRemove a reaction from a messageWriteslack_fetch_item_reactionsGet all reactions on a messageRead
ToolDescriptionModeslack_create_a_reminderCreate a reminder at a specific timeWriteslack_list_remindersList all your remindersReadslack_get_reminderGet details of a specific reminderReadslack_complete_reminderMark a reminder as completeWriteslack_delete_reminderDelete a reminderWrite
ToolDescriptionModeslack_pin_itemPin a message to a channelWriteslack_list_pinned_itemsList all pinned items in a channelReadslack_remove_pinUnpin an item from a channelWriteslack_add_starStar a channel, file, or messageWriteslack_list_starred_itemsList your starred itemsReadslack_remove_starRemove a star from an itemWrite
ToolDescriptionModeslack_create_canvasCreate a new Slack Canvas documentWriteslack_edit_canvasEdit content in a CanvasWriteslack_delete_canvasDelete a Canvas permanentlyWriteslack_lookup_canvas_sectionsGet section IDs for targeted editingRead
ToolDescriptionModeslack_fetch_team_infoGet workspace metadata and settingsReadslack_invite_user_to_workspaceInvite a new user to the workspaceWriteslack_create_user_groupCreate a user group (subteam)Writeslack_list_user_groupsList all user groupsReadslack_disable_user_groupDisable a user groupWriteslack_enable_user_groupRe-enable a disabled user groupWriteslack_list_enterprise_teamsList all teams in an Enterprise Grid orgReadslack_read_audit_logsRead Enterprise Grid audit logsRead
ToolDescriptionModeslack_add_emojiAdd a custom emoji to the workspaceWriteslack_list_custom_emojisList all custom emojiReadslack_remove_emojiRemove a custom emoji (Enterprise Grid)Write
ToolDescriptionModeslack_get_call_infoGet details about a Slack callReadslack_end_callEnd an ongoing callWriteslack_add_call_participantsAdd participants to a callWriteslack_remove_call_participantsRemove participants from a callWrite
bash
clawlink_call_tool --tool "slack_send_message" \
--params '{
"channel": "C0123456789",
"text": "Deployment complete! Version 2.1.0 is live."
}'
bash
clawlink_call_tool --tool "slack_send_thread_reply" \
--params '{
"channel": "C0123456789",
"thread_ts": "1234567890.123456",
"text": "I will take care of this by end of day."
}'
bash
clawlink_call_tool --tool "slack_create_channel" \
--params '{
"name": "project-alpha",
"is_private": false
}'
bash
clawlink_call_tool --tool "slack_create_a_reminder" \
--params '{
"text": "Weekly team sync",
"time": "tomorrow at 10am"
}'
bash
clawlink_call_tool --tool "slack_find_user_by_email_address" \
--params '{
"email": "alex@company.com"
}'
bash
clawlink_call_tool --tool "slack_upload_file_to_channel" \
--params '{
"channel": "C0123456789",
"content": "File content here",
"filename": "report.csv",
"title": "Q1 Report"
}'
clawlink_list_integrations to confirm Slack is connected.clawlink_list_tools --integration slack to see the live catalog.clawlink_search_tools with a short query and integration slack.text
┌─────────────────────────────────────────────────────────────┐
│ READ OPERATIONS (Safe) │
│ list → get → search → find → call │
│ │
│ Example: Find channel → Get history → Show messages │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ WRITE OPERATIONS (Require Confirmation) │
│ describe → preview → confirm → call │
│ │
│ Example: Preview message → User approves → Send message │
└─────────────────────────────────────────────────────────────┘
clawlink_describe_tool first.whenToUse, askBefore, safeDefaults, examples, and followups to shape the call.clawlink_preview_tool first.clawlink_call_tool. Pass confirmation only after the preview matches the user's intent.slack_fetch_conversation_history returns messages from the main channel timeline only — threaded replies require slack_fetch_message_thread_from_a_conversation.slack_find_channels to resolve display names to IDs.D or G respectively.Retry-After headers.Status / ErrorMeaningTool not foundThe tool name does not exist in the current catalog. Verify with clawlink_list_tools --integration slack.Missing connectionSlack is not connected. Direct the user to https://claw-link.dev/dashboard?add=slack.channel_not_foundThe channel ID does not exist or the bot is not a member.user_not_foundThe user email or ID does not match any workspace member.not_authedThe OAuth token is invalid or has been revoked. Reconnect Slack.missing_scopeThe token lacks the required scope for this operation.message_not_foundThe message timestamp does not match any message in the channel.cant_update_messageOnly the message author or workspace admin can edit a message.is_archivedThe target channel has been archived.send_as_appThe message requires a bot token. The user may need to use a different connection method.Write rejectedUser did not confirm a write action. Always confirm before executing writes.
Check that the ClawLink plugin is installed: bash
openclaw plugins list
If the plugin is installed but tools are missing, tell the user to send /new as a standalone message to reload the catalog.
If a fresh chat does not help, run: bash
openclaw config set tools.alsoAllow '["clawlink-plugin"]' --strict-json
openclaw gateway restart
After restart, tell the user to send /new again and retry.
slack.clawlink_describe_tool to verify parameter names and types before calling.clawlink_preview_tool first.slack_find_channels before calling tools that require a channel ID.slack_fetch_conversation_history returns empty — the tool only fetches the main timeline, not threaded replies. Use slack_fetch_message_thread_from_a_conversation with the parent message's thread_ts.slack_find_channels returns empty — the channel may be private or the bot may not be a member. Use the channel ID directly if known.slack_list_all_users returns incomplete results — this may reflect guest account visibility settings, not a real absence.Powered by ClawLink — an integration hub for OpenClaw
