Connect your AI Agents to Slackbot in minutes

Available tools
create_canvas
Create a new standalone Slack canvas with optional title and markdown content. Returns the canvas ID.
edit_canvas
Write to or edit an existing Slack canvas by applying one or more change operations. Use 'insert_at_end' to append content, 'insert_at_start' to prepend, or 'replace'/'delete' with a section_id for targeted edits.
delete_canvas
Permanently delete a Slack canvas by ID. This action cannot be undone.
create_channel_canvas
Create a canvas linked to a Slack channel. The canvas appears in the channel's canvas tab. Provide an optional markdown body for the initial content.
list_channels
List channels in the workspace (public and private; direct messages are excluded by default). Returns a lean set of fields by default (id, name, is_private, is_archived, is_member, num_members, topic); request more via the 'fields' parameter. Paginate with cursor/page_info.
create_channel
Create a new channel
get_channel_info
Get information about a channel using Channel ID (not channel name)
join_channel
Join a channel
leave_channel
Leave a channel
archive_channel
Archive a channel
get_channel_members
Get members of a channel
invite_to_channel
Invite users to a channel
kick_from_channel
Remove a user from a channel
set_channel_topic
Set the topic for a channel
set_channel_purpose
Set the purpose for a channel
rename_channel
Rename a channel
get_file_info
Get information about a file
list_files
List files in the workspace, most recent first by default. sort (created|timestamp) and sort_dir (asc|desc) order the returned page only — Slack's files.list has no server-side sort, so non-default ordering is not globally consistent across pages. The uploader and channels are resolved to readable names (user_name, channel_names); raw IDs remain available in user and channels. Paginate with count/page.
delete_file
Delete a file
get_file_content
Get the content of a text file
revoke_file_public_url
Revoke public access to a file
post_message
Send a message to a Slack channel using Channel ID (not channel name)
update_message
Update an existing message in Slack
delete_message
Delete a message from Slack
get_message_permalink
Get a permanent link to a message
get_conversation_history
Get message history from a channel using Channel ID with enhanced timestamp filtering. For time windows: use Unix timestamps (oldest='1640995200.123456', latest='1640995300.123456') OR convenient parameters (days_ago=7, hours_ago=24, start_date='2023-12-01', end_date='2023-12-15'). Set inclusive=True to include boundary messages.
schedule_message
Schedule a message to be sent later
delete_scheduled_message
Delete a scheduled message
add_reaction
Add an emoji reaction to a message
remove_reaction
Remove an emoji reaction from a message
get_conversation_replies
Get all replies in a Slack thread. This tool MUST be called whenever you encounter a message with reply_count > 0 from get_conversation_history, search_messages, or any message-fetching tool to provide complete conversation context. When presenting results to users, always display username/display_name instead of user_id for better readability.
list_unread_direct_messages
Get all unread direct messages and group DMs with their message content. When presenting results to users, always display username/display_name instead of user_id for better readability.
list_unread_channel_messages
Get all unread messages from channels with their message content. Uses smart prioritization to check most recently active channels first. When presenting results to users, always display username/display_name instead of user_id for better readability.
list_scheduled_messages
List scheduled messages that haven't been sent yet
get_unread_messages_from_channel
Get all unread messages from a specific channel. Uses the channel's last_read timestamp to accurately identify unread messages. When presenting results to users, always display username/display_name instead of user_id for better readability.
get_unread_messages_from_user
Get all unread direct messages from a specific user. When presenting results to users, always display username/display_name instead of user_id for better readability.
post_message_by_name
Send a message to a person or channel by name instead of ID. Resolves display name, real name, username, or channel name to the correct ID and sends the message. Use this when you have a person's name but not their Slack user/channel ID.
list_pinned_messages
List all pinned messages and items in a channel
pin_message
Pin a message to a channel
unpin_message
Remove a pinned message from a channel
get_user_info
Get complete user information including workspace role, permissions, and profile
get_current_user
Resolve the authenticated user ('me'/'myself') to their Slack user ID and profile. Call this first whenever a request refers to the current user (e.g. 'send me a DM', 'message myself') to get the user_id to open a DM or post to.
list_users
List users in the workspace. Returns a lean set of fields by default (id, name, real_name, display_name, email, is_bot, deleted); request more via the 'fields' parameter. Paginate with cursor/page_info. Use lookup_user_by_email or search_users to find a specific person.
lookup_user_by_email
Look up a user by their email address
get_user_presence
Get a user's presence status
set_user_presence
Set your own presence status (auto or away)
get_users_conversations
Get conversations a user is a member of
validate_credential
Validate Slack credentials. Verifies credentials during setup.

How to set up Merge Agent Handler
In an mcp.json file, add the configuration below, and restart Cursor.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5 "headers": {
6 "Authorization": "Bearer yMt*****"
7 }
8 }
9 }
10}
11Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.
Make sure Claude is using the Node v20+.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "yMt*****"
14 }
15 }
16 }
17}Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "<ah-production-access-key>"
14 }
15 }
16 }
17 }In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".
You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.
Learn more in the official documentation ↗
1{
2 "inputs": [
3 {
4 "type": "promptString",
5 "id": "agent-handler-auth",
6 "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7 "password": true
8 }
9 ],
10 "servers": {
11 "agent-handler": {
12 "type": "stdio",
13 "command": "npx",
14 "args": [
15 "-y",
16 "mcp-remote@latest",
17 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18 "--header",
19 "Authorization: Bearer ${input:agent-handler-auth}"
20 ]
21 }
22 }
23}FAQs on using Merge's Slackbot MCP server
FAQs on using Merge's Slackbot MCP server
What is a Slackbot MCP?
It's an MCP server that lets your agents access data and functionality from Slackbot via tools. Your agents can invoke these tools to post a message as the bot, reply in a thread, react to a message, open a direct message with a user, and more.
Slack offers an official MCP server, but it's built for user-scoped actions, not a bot user. For Slackbot's bot-scoped surface, posting and reacting as the bot itself, you can use a third-party platform instead, like Merge Agent Handler.
How can I use the Slackbot MCP server?
The use cases naturally depend on the agent you've built, but here are a few common ones:
- Automated incident alerts: When a monitoring system fires a critical alert, an agent has the bot post directly to the on-call channel with severity, service name, and a link to the runbook, so the team sees it the moment it happens
- Thread-based triage: When a customer question lands in a support channel, an agent reads the thread, drafts a suggested reply, and posts it under the bot's identity for a human to approve or edit before it goes out
- Status update bots: On a schedule or after a deploy finishes, an agent has the bot post a status update to a channel, then edits that same message in place as the state changes instead of spamming new posts
- Approval workflow bots: When a request needs sign-off, an agent has the bot post the request with reaction options, waits for a reviewer to react, and moves the workflow forward based on which emoji was added
What are popular tools for Slackbot's MCP server?
Here are some of the most commonly used tools:
post_message: posts a message to a channel or thread under the bot's identity. It's the tool most bot workflows reach for first, whether that's an alert, a digest, or a reply
post_message_by_name: posts to a channel identified by its display name instead of its ID. This saves a lookup step when the agent already knows which channel it's targeting
update_message: edits a message the bot already sent, for example refreshing a status line after a deploy finishes. The thread stays clean instead of filling up with duplicate posts
add_reaction: adds an emoji reaction to a message. Bots use this to acknowledge a request or signal approval without writing a full reply
get_conversation_replies: fetches every reply in a thread. A triage bot needs this to read the full back-and-forth before deciding what to post next
schedule_message: queues a message to post at a future time. Useful for reminders, recurring digests, or announcements timed to a specific hour
What makes Merge Agent Handler's Slackbot MCP server better than alternative Slackbot MCP servers?
Here's what sets Merge Agent Handler's Slackbot MCP server apart from building or using an alternative:
- Enterprise-grade security and DLP: Merge Agent Handler includes built-in data loss prevention controls that let you block or redact sensitive fields before they reach an agent. For Slackbot, this means you can prevent private channel content or direct message contents from being exposed even when the agent has broad read access
- Managed authentication and credentials: Merge stores and refreshes Slackbot credentials on your behalf. You never expose raw API keys or OAuth tokens to an agent or manage token rotation manually
- Real-time observability and audit trail: Every tool call made against Slackbot is logged with timestamp, tool name, input parameters, and response metadata. You can audit exactly what an agent read or wrote without instrumenting anything yourself
- Tool Packs and controlled access: Tool Packs let you bundle specific Slackbot tools with tools from other connectors into a single MCP endpoint, scoped to a specific use case. An agent gets exactly the tools it needs, nothing more
How can I start using Merge Agent Handler's Slackbot MCP server?
You can take the following steps:
1. Create or log into your Merge Agent Handler account.
2. Install the Merge CLI by running pipx install merge-api, then run merge configure to link the CLI to your Merge account and merge login to authenticate your session.
3. Register the Agent Handler MCP server with Claude Code by running claude mcp add --transport http agent-handler https://ah-api.merge.dev/mcp, then open Claude Code and run /mcp to confirm agent-handler appears with a connected status.
4. Select agent-handler from the MCP list. This opens a browser window where you select which integrations to authenticate. Choose Slackbot and complete the auth flow. Merge stores and manages the credentials going forward.
5. Open a Claude Code session and start querying Slackbot directly. The first time you use a Slackbot tool, a Magic Link may appear to complete connector authentication.
If you want to connect Merge Agent Handler's Slackbot MCP with internal or customer-facing agentic products, you can follow the steps in our docs.
Can employees use Merge Agent Handler to connect their AI tools to Slackbot?
Yes, Agent Handler for Employees lets your employees connect Claude, ChatGPT, Microsoft Copilot, Cursor, and other MCP-compatible AI tools to Slackbot without bypassing IT governance.
IT can provision access by role or group via SCIM. An IT support engineer, for example, gets Slackbot access to post incident updates, Jira access to open tickets, and PagerDuty access to escalate alerts, while a marketing coordinator gets Slackbot access to schedule campaign announcements, Asana access to update campaign tasks, and Google Drive access to pull creative assets.
Every tool call an employee's AI makes to Slackbot is also inspected against your DLP rules and logged to a searchable audit trail, giving security teams full visibility into what data was accessed and by whom.
Ready to try it out?
Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now

























