Slack MCP
Slack MCP
Read and respond to Slack from Claude. Works as an MCP server (for Claude Desktop/Claude Code) and as a standalone CLI (for GitHub Actions).
Features
Multi-workspace support - Configure multiple Slack workspaces
Read tools - Summarize activity, list channels, read messages, search
Write tools - Send messages, reply to threads, add reactions
Standalone CLI - Generate markdown summaries for GitHub Actions
Installation
1. Create Slack App(s)
For each workspace you want to connect:
Go to https://api.slack.com/apps → Create New App → From manifest
Select your workspace
Paste this manifest:
display_information:
name: Claude Slack Reader
description: Read and respond to Slack from Claude
oauth_config:
scopes:
user:
# Read
- channels:history
- channels:read
- groups:history
- groups:read
- im:history
- im:read
- mpim:history
- mpim:read
- users:read
- search:read # slack_search
# Write
- chat:write # send messages to channels + DMs
- reactions:write # add emoji reactions
- files:write # upload files / images
- im:write # open a NEW DM with someone you've never messaged (existing DMs work without this)
settings:
org_deploy_enabled: false
socket_mode_enabled: false
token_rotation_enabled: falseClick Install to Workspace → Allow
Copy the User OAuth Token (starts with
xoxp-)
Note: Slack requires a separate app per workspace (public distribution requires Slack approval).
2. Configure Tokens
Create ~/.mcp-auth/slack/config.json:
{
"workspaces": {
"work": {
"name": "Work Slack",
"token": "xoxp-your-token-here",
"priority": 1
},
"research": {
"name": "Research Group",
"token": "xoxp-your-token-here",
"priority": 2
}
},
"default_workspace": "work"
}Or use environment variables:
export SLACK_USER_TOKEN=xoxp-... # Single workspace
export SLACK_TOKEN_WORK=xoxp-... # Multiple workspaces
export SLACK_TOKEN_RESEARCH=xoxp-...3. Install Dependencies
cd ~/src/slack-mcp
pip install -r requirements.txt4. Add to Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"slack": {
"command": "python3",
"args": ["/path/to/slack-mcp/server.py"]
}
}
}Restart Claude Desktop.
Project Structure
slack-mcp/
├── src/
│ ├── config.py # Multi-workspace configuration
│ ├── slack_client.py # Slack API wrapper (read + write)
│ ├── summarizer.py # Message categorization
│ └── mcp_server.py # MCP server with tools
├── server.py # Entry point for MCP server
├── slack_summary.py # Standalone CLI
├── requirements.txt
├── pyproject.toml
└── .github/
└── workflows/
└── daily-summary.ymlMCP Tools
Read Tools
Tool | Description |
| Overview of DMs, mentions, channel activity. Use |
| List all channels (filter by type: |
| Read messages from a specific channel |
| Read messages in a thread |
| Search messages |
| Get unread message counts |
| List configured workspaces |
Write Tools
Tool | Description |
| Send message to channel or DM |
| Reply in a thread |
| Add emoji reaction |
Example Usage in Claude
"What's happening in my Slack?"
→ Uses slack_summary with quick mode
"Show me the #engineering channel"
→ Uses slack_channel
"Reply to that thread saying I'll review it tomorrow"
→ Uses slack_reply
"Add a thumbsup to that message"
→ Uses slack_reactStandalone CLI
Generate markdown summaries without Claude:
# Print summary to stdout
python slack_summary.py
# Save to file
python slack_summary.py --output slack-summary.md
# Look back 48 hours
python slack_summary.py --hours 48
# Specific workspace
python slack_summary.py --workspace work
# Action items only
python slack_summary.py --action-items-onlyGitHub Actions Workflow
The included workflow runs daily and commits a summary:
# .github/workflows/daily-summary.yml
name: Daily Slack Summary
on:
schedule:
- cron: '0 12 * * *' # 7 AM EST
workflow_dispatch:
jobs:
summarize:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- run: pip install -r requirements.txt
- env:
SLACK_USER_TOKEN: ${{ secrets.SLACK_USER_TOKEN }}
run: python slack_summary.py --output slack-summary.md
- run: |
git config user.email "github-actions[bot]@users.noreply.github.com"
git config user.name "github-actions[bot]"
git add slack-summary.md
git diff --quiet --staged || git commit -m "Daily Slack summary [skip ci]"
git pushAdd your token as a repository secret: Settings → Secrets → Actions → New repository secret → SLACK_USER_TOKEN
Configuration Sync
To sync config across machines, symlink to a cloud folder:
mkdir -p ~/.mcp-auth/slack
ln -sf ~/Dropbox/mcp-auth/slack/config.json ~/.mcp-auth/slack/config.json
# or Box, iCloud, etc.Performance
Quick mode (default): ~4 seconds - scans recent DMs and channels
Full mode: ~20 seconds - detailed scan of all activity
Cached calls: ~1.5 seconds - conversation list cached for 5 minutes
Requirements
Python 3.10+
slack-sdk- Slack API clientmcp- Model Context Protocol server
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/feamster/slack-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server