integration · slack

Claude + Slack — drop-in bot, no boilerplate.

Slack's Web API is hundreds of methods spread across docs. wmcp.sh ingests them and your agent gets clean MCP tools — chat.postMessage, conversations.history, users.lookupByEmail, all the standard surface. Connect once at the dashboard; the worker handles OAuth refresh and token injection.

Last updated 2026-05-28 · works with Claude, OpenAI, LangChain, and any MCP client

vs. the alternatives

Capability@slack/bolt SDKComposio Slackwmcp.sh
Setup timeInstall bolt + manage tokensComposio platform + per-customer OAuthSign in to Slack once
Method coverageReflects current SDK versionCurated common methodsEvery Web API method
Multi-workspaceYou wire installation flowComposio managesPer-wmcp-user OAuth in vault
MCP shapeWrap each method yourselfAuto-mappedNative MCP tools
Realtime / RTMYes (sockets)Webhook → workflowWebhook in roadmap; not v0
CostFree SDK + your hostingPlatform tierFree 100/day + $29/mo Pro

Tools your agent calls

All MCP-shaped — consumed directly by Claude tool_use, OpenAI function-calling, or LangChain.

ToolTypeReturns
chat.postMessageLive actionMessage ts + channel
chat.updateLive actionUpdated message
conversations.listLive actionChannel list (public + private)
conversations.historyLive actionChannel message history
conversations.createLive actionNew channel
users.listLive actionWorkspace user directory
users.lookupByEmailLive actionUser by email
reactions.addLive actionOK + reaction

Python — Slack bot powered by Claude

from wmcp import WmcpClient
from wmcp.anthropic import to_anthropic_tools, execute_tool_use
from anthropic import Anthropic

client = WmcpClient(api_key="webmcp_live_…")
spec   = "https://api.slack.com/specs/openapi/v2/slack_web.json"
tools  = [t for t in client.tools(spec)
          if t.name in {"chat_postMessage", "conversations_list", "users_lookupByEmail"}]

anthropic = Anthropic()
msg = anthropic.messages.create(
    model="claude-opus-4-7",
    max_tokens=1024,
    tools=to_anthropic_tools(tools),
    messages=[{"role": "user",
               "content": "DM the #eng channel: 'deploy starting at 3pm PT'."}],
)

for block in msg.content:
    if block.type == "tool_use":
        # Worker injects your connected Slack OAuth token
        result = execute_tool_use(client, spec, block.model_dump())
        print(result)

Frequently asked

Which Slack scopes does wmcp.sh request?
chat:write, channels:read, channels:history, users:read. Sufficient for posting, reading public channel history, and looking up users. Configure your own Slack app for tighter or broader scope.
Can it post into private channels?
Yes, but the bot/user has to be a member of that channel — Slack permission model. Default scopes don't include groups:write; add it in your Slack app config and re-OAuth if needed.
How are Slack webhooks (event subscriptions) handled?
Out of scope for v0. wmcp.sh covers the request-side API. If you need to receive Slack events, set up a separate Cloudflare Worker or Pipedream flow and have it call wmcp.sh tools in response. Native event handling is on the roadmap.
Multi-workspace support?
Yes — each wmcp.sh user connects their own Slack workspace via the dashboard. The worker stores tokens per (wmcp_user_id, provider_id) so an agent acting on behalf of user A vs user B hits the right workspace automatically.
Slack rate limits?
Slack rate-limits per method tier (Tier 1: ~1/min, Tier 4: ~100/min). wmcp.sh respects 429 responses and surfaces them to your agent without retrying — you decide back-off strategy per use case.

SaaS agent-readiness

Slack-as-an-integration is the SaaS pattern at scale. If you're a SaaS founder, see how to be recommendable, signupable, and usable to agents.

→ /agent-ready/saas  ·  cornerstone  ·  done-for-you ($499+)

Need this done for you?

Skip the wiring — we build, deploy, and monitor.

Custom adapter + hosted MCP at mcp.yourbrand.com + verified badge. From $499 one-time setup.

See /managed → Submit (free)