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
| Capability | @slack/bolt SDK | Composio Slack | wmcp.sh |
|---|---|---|---|
| Setup time | Install bolt + manage tokens | Composio platform + per-customer OAuth | Sign in to Slack once |
| Method coverage | Reflects current SDK version | Curated common methods | Every Web API method |
| Multi-workspace | You wire installation flow | Composio manages | Per-wmcp-user OAuth in vault |
| MCP shape | Wrap each method yourself | Auto-mapped | Native MCP tools |
| Realtime / RTM | Yes (sockets) | Webhook → workflow | Webhook in roadmap; not v0 |
| Cost | Free SDK + your hosting | Platform tier | Free 100/day + $29/mo Pro |
All MCP-shaped — consumed directly by Claude tool_use, OpenAI function-calling, or LangChain.
| Tool | Type | Returns |
|---|---|---|
chat.postMessage | Live action | Message ts + channel |
chat.update | Live action | Updated message |
conversations.list | Live action | Channel list (public + private) |
conversations.history | Live action | Channel message history |
conversations.create | Live action | New channel |
users.list | Live action | Workspace user directory |
users.lookupByEmail | Live action | User by email |
reactions.add | Live action | OK + reaction |
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)
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.groups:write; add it in your Slack app config and re-OAuth if needed.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.
Custom adapter + hosted MCP at mcp.yourbrand.com + verified badge. From $499 one-time setup.