Communication · MCP Tool

Slack MCP Integration with Claude AI

Search messages, post updates, and manage channels via AI. Model Context Protocol (MCP) lets Claude connect directly to your Slack workspace — no copy-paste, no manual scrolling, no custom integration code.

Explainer Video

An 89-second overview of the Slack MCP integration — what it is, what Claude can do, how to set it up, and who benefits most.

Key Takeaways

What Slack MCP Actually Is

Slack MCP is a Model Context Protocol server that gives Claude structured access to your Slack workspace through Slack's Web API. Instead of pasting Slack messages manually into a conversation, Claude calls tools directly — listing channels, pulling history, searching messages, posting replies. Think of it as an API wrapper that speaks the MCP protocol Claude understands natively.

Before MCP existed, connecting an AI assistant to Slack meant writing custom API wrappers, parsing webhook payloads, and wiring up message formatting by hand. MCP standardizes that entire handshake. Claude discovers what tools are available, calls them with structured parameters, and receives structured results — without bespoke glue code on your end.

There are two main paths for the Slack MCP server itself. The official slackapi server is maintained by Slack's team and requires full OAuth setup with workspace admin approval — not something you spin up in ten minutes. The community server (@modelcontextprotocol/server-slack) works with a standard xoxb- bot token you create yourself in Slack's developer portal. For personal projects and internal tooling, most developers start with the community server.

Why Claude Specifically?

Claude treats MCP as a first-class feature. Tool calls are reliable across long conversations, context is preserved as Claude chains multiple calls together, and Claude can reason over the results — not just display them. Ask "which channel had the most discussion about the product launch last week?" and Claude will call the right tools in sequence, aggregate results, and give you a useful answer.

How the Connection Works

The Slack MCP connection works by running a server-side proxy — in this demo, a Cloudflare Worker — that holds a Slack bot token and makes calls to the Slack Web API on Claude's behalf. Claude communicates with that Worker using structured tool calls, and the Worker translates those into real Slack API requests.

Here's the flow: you ask Claude something like "show me the last 10 messages in #general." Claude identifies the right tool call, sends the request to the Worker at api.mcpdemo.com/proxy/slack, and the Worker calls conversations.history on the Slack API using the bot token. Slack returns the messages; the Worker passes them to Claude; Claude presents results in natural language. The round-trip takes a few seconds.

What Claude Can Actually Do With Slack

ToolWhat It DoesExample Prompt
slack_list_channelsLists public channels with IDs and member counts"What channels are in this workspace?"
slack_get_channel_historyReads recent messages from a specific channel"Show me the last 20 messages in #engineering"
slack_search_messagesSearches keyword queries across all accessible channels"Find messages mentioning the v2 API rollback"
slack_post_messageSends a new message (requires chat:write scope)"Post 'Deployment complete' to #releases"
slack_reply_to_threadReplies to an existing thread (requires chat:write)"Reply to the budget thread in #finance"

Setting Up the Slack MCP Connection

Connecting Claude to Slack involves three steps: creating a Slack bot app, configuring your MCP server, and pointing Claude at that server. If you're comfortable with API keys and a terminal, you can complete this in under 30 minutes.

Step 1 — Create a Slack Bot App and Token

Go to api.slack.com/apps and create a new app from scratch. Under OAuth & Permissions, add bot token scopes. For read-only access add channels:read and channels:history. To enable posting, also add chat:write. Install the app to your workspace and copy the Bot User OAuth Token — it starts with xoxb-. You'll also need your Slack Team ID (find it in your browser URL: the string starting with T in app.slack.com/client/T01ABC123).

Start conservative with scopes — unnecessary write access creates real security exposure if a token leaks. You can always add scopes later.

Step 2 — Configure Your MCP Server

The community package @modelcontextprotocol/server-slack runs directly via npx — no repository cloning, no global install. Add it to your Claude Desktop config at ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "slack": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-slack"],
      "env": {
        "SLACK_BOT_TOKEN": "xoxb-your-token-here",
        "SLACK_TEAM_ID": "T01ABC123"
      }
    }
  }
}

Step 3 — Connect Claude via the Anthropic API

For programmatic access, the Anthropic Messages API supports MCP servers via the mcp_servers parameter. Claude automatically discovers the tools the server exposes:

const response = await fetch("https://api.anthropic.com/v1/messages", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "x-api-key": YOUR_ANTHROPIC_API_KEY,
    "anthropic-version": "2023-06-01",
    "anthropic-beta": "mcp-client-2025-04-04"
  },
  body: JSON.stringify({
    model: "claude-haiku-4-5-20251001",
    max_tokens: 1024,
    messages: [{ role: "user", content: "List all channels in the workspace" }],
    mcp_servers: [{
      type: "url",
      url: "https://your-slack-mcp-server.example.com/mcp",
      name: "slack-mcp",
      authorization_token: "your-server-token"
    }]
  })
});

Real-World Use Cases

Surfacing Past Decisions Without Scrolling

Engineering and product teams make dozens of decisions in Slack every week — and then spend hours later trying to find them. With Claude connected via MCP, you can ask "what did the team decide about the API rate limit strategy?" and Claude will search the relevant channels, surface the thread, and summarize the outcome. Engineers spend a surprising amount of time re-litigating decisions that were already made in a Slack thread six months ago. This fixes that.

Standup and Activity Summaries

Point slack_get_channel_history at your #standup channel, specify a time window, and Claude can parse individual updates, identify blockers, and generate a clean summary. Teams using async standups find this especially valuable — you stop skimming 47 individual posts and get a digest instead. "Summarize the last 24 hours in #product and #eng" is a single prompt that would otherwise require manually reading two channels.

Incident Monitoring Without Tab-Switching

During on-call shifts, engineers often need to monitor several channels simultaneously without keeping them all pinned. Claude's MCP connection lets you query incident channels in natural language: "Was there any activity in #incidents or #alerts in the last hour?" It pulls channel history on demand rather than requiring you to watch feeds in real time.

Onboarding New Team Members

New hires face a wall of context when joining a Slack workspace. Claude with MCP can answer onboarding questions directly from channel history: "What's the current deployment process?" or "What monitoring tools does the team use?" The answers exist somewhere in Slack already — MCP gives Claude the ability to find and surface them without manual archaeology.

Slack MCP vs. Traditional Integrations

Integration MethodSetup TimeNatural LanguageMaintenanceReal-Time Data
Slack MCP + Claude15–30 minYesLowYes
Custom Slack Bot1–3 daysRequires NLP buildHighYes
Zapier / Make workflow30–60 minNoMediumTrigger-based only
Manual Search / ExportMinutes per queryNoConstantSnapshot only

Security and Permissions

Your Slack bot token is only as permissive as the scopes you grant it. A token with channels:read and channels:history can read public channel messages — it cannot post messages, join private channels, or access direct messages. You control scope at the app level in Slack's developer dashboard, and those limits are enforced by Slack's API itself.

Private channels don't appear in slack_list_channels results unless the bot has been explicitly invited to them — Claude can't see them at all. This is intentional; you wouldn't want an AI assistant silently reading private exec channels because someone misconfigured a token.

In the Worker pattern used by this demo, the bot token is stored as a Cloudflare Worker Secret — it never appears in your HTML, never passes through the browser, and is not visible to Anthropic. Claude calls the Worker; the Worker calls Slack; your token stays server-side throughout. For production deployments, Slack also supports token rotation, IP allowlists, and workspace admin oversight of installed apps.

Live Demo

See it in action

Ask Claude questions about a real Slack workspace via MCP — live channel data, real message history, no account needed.

Open the Live Demo →