by jtalk22
Provides a local‑first bridge that enables Claude to read, search, and send messages using an existing Slack user session, supporting both stdio/web workflows and a secure hosted HTTP endpoint.
Slack MCP Server creates a secure, local bridge between Claude (or other Model Context Protocol clients) and a user's existing Slack session. It mirrors the exact permissions of the logged‑in browser session, allowing full‑access read, search, export, and write operations without requiring a bot token or OAuth flow.
npx -y @jtalk22/slack-mcp --version
npx -y @jtalk22/slack-mcp --doctor
npx -y @jtalk22/slack-mcp --status
npx -y @jtalk22/slack-mcp --setup
xoxc- and xoxd- values manually.~/.slack-mcp-tokens.json).export SLACK_TOKEN=xoxc-...
export SLACK_COOKIE=xoxd-...
export SLACK_MCP_HTTP_AUTH_TOKEN=change-this
export SLACK_MCP_HTTP_ALLOWED_ORIGINS=https://claude.ai
node src/server-http.js
The server listens on /mcp and requires Authorization: Bearer <SLACK_MCP_HTTP_AUTH_TOKEN>.npx -y @jtalk22/slack-mcp web
Opens http://localhost:3000 with a one‑click magic link.stdio, web UI, and remote HTTP.Q: My tokens keep expiring. How do I refresh them?
npx -y @jtalk22/slack-mcp --setup or manually edit ~/.slack-mcp-tokens.json.Q: Do I need a Slack bot or OAuth app?
Q: Can I expose the server to the internet?
SLACK_MCP_HTTP_AUTH_TOKEN) and an explicit CORS allow‑list (SLACK_MCP_HTTP_ALLOWED_ORIGINS). Use SLACK_MCP_HTTP_INSECURE=1 only for local testing.Q: What platforms are supported?
Q: How does the Web UI authenticate?
Q: Is my Slack token stored safely?
chmod 600, optionally backed by macOS Keychain, and never committed to source control.Q: Which Claude clients work with this server?
stdio, web, or remote HTTP transport.Local-first Slack MCP server using your existing Slack session. Hosted HTTP is secure-default; local stdio/web workflows stay unchanged.
Live demo · Latest release · npm package

npx -y @jtalk22/slack-mcp@latest --version
npx -y @jtalk22/slack-mcp@latest --doctor
npx -y @jtalk22/slack-mcp@latest --status
If this project saves you setup time, star the repo: https://github.com/jtalk22/slack-mcp-server · Support ongoing maintenance: GitHub Sponsors, Ko-fi, Buy Me a Coffee
Maintainer/operator: jtalk22 (james@revasser.nyc)
Release: v3.0.0 · Notes: v3.0.0 notes · Support: deployment intake
/mcp now requires bearer auth by default (SLACK_MCP_HTTP_AUTH_TOKEN).SLACK_MCP_HTTP_ALLOWED_ORIGINS).stdio, web) stay compatible.export SLACK_TOKEN=xoxc-...
export SLACK_COOKIE=xoxd-...
export SLACK_MCP_HTTP_AUTH_TOKEN=change-this
export SLACK_MCP_HTTP_ALLOWED_ORIGINS=https://claude.ai
node src/server-http.js
Request with:
Authorization: Bearer <SLACK_MCP_HTTP_AUTH_TOKEN>
Emergency local fallback only:
SLACK_MCP_HTTP_INSECURE=1 node src/server-http.js
For guided hosted rollout requirements, open: deployment intake
I built this because I was working with someone to help me manage a complex workload, and we kept hitting walls. They needed context from my messages—"what did X say about Y?"—and standard app/OAuth flows were too constrained for that workflow.
Screenshotting messages is not a workflow.
This server bridges the gap. It creates a secure, local bridge between Claude and your Slack web session. It gives your MCP client the same access you already have in the browser—search history, summarize threads, and retrieve prior context—without fighting the platform.

Instead of authenticating as a bot, this server leverages your existing Chrome session credentials (macOS) or manual token injection (Linux/Windows). It mirrors your user access exactly—if you can see it in Slack, Claude can see it too.
Trade-off: Session tokens expire every 1-2 weeks. Auto-refresh (macOS) or manual update keeps things running.
unref() for clean process exit| Tool | Description |
|---|---|
slack_health_check |
Verify token validity and workspace info |
slack_token_status |
Detailed token age, health, and cache stats |
slack_refresh_tokens |
Auto-extract fresh tokens from Chrome |
slack_list_conversations |
List DMs/channels (with lazy discovery cache) |
slack_conversations_history |
Get messages from a channel or DM |
slack_get_full_conversation |
Export full history with threads |
slack_search_messages |
Search across workspace |
slack_send_message |
Send a message to any conversation |
slack_get_thread |
Get thread replies |
slack_users_info |
Get user details |
slack_list_users |
List workspace users (paginated, 500+ supported) |
Runtime: Node.js 20+
npx -y @jtalk22/slack-mcp --setup
npx -y @jtalk22/slack-mcp --doctor
npx -y @jtalk22/slack-mcp --status
Expected:
--setup launches the interactive wizard--doctor returns one clear next action with exit code:
0 ready1 missing credentials2 invalid/expired credentials3 connectivity/runtime issue--status is read-only and non-mutatingCommand reference: HN launch kit
web)http)Compatibility matrix: compatibility matrix
npm install -g @jtalk22/slack-mcp
git clone https://github.com/jtalk22/slack-mcp-server.git
cd slack-mcp-server
npm install
docker pull ghcr.io/jtalk22/slack-mcp-server:latest
tmpdir="$(mktemp -d)"
cd "$tmpdir"
npx -y @jtalk22/slack-mcp --version
npx -y @jtalk22/slack-mcp --help
npx -y @jtalk22/slack-mcp --status
Expected:
--version and --help exit 0--status exits non-zero until credentials are configured--status is read-only and never attempts Chrome extractionThe interactive setup wizard handles token extraction and validation automatically:
npx -y @jtalk22/slack-mcp --setup
~/.slack-mcp-tokens.jsonnpx -y @jtalk22/slack-mcp --status
# macOS auto-extraction
npm run tokens:auto
# Manual entry (all platforms)
npm run tokens:refresh
# Check health
npm run tokens:status
Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"slack": {
"command": "npx",
"args": ["-y", "@jtalk22/slack-mcp"]
}
}
}
Edit %APPDATA%\Claude\claude_desktop_config.json:
{
"mcpServers": {
"slack": {
"command": "npx",
"args": ["-y", "@jtalk22/slack-mcp"],
"env": {
"SLACK_TOKEN": "xoxc-your-token",
"SLACK_COOKIE": "xoxd-your-cookie"
}
}
}
}
Note: Windows/Linux users must provide tokens via
envsince auto-refresh is macOS-only.
Add to ~/.claude.json:
{
"mcpServers": {
"slack": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@jtalk22/slack-mcp"]
}
}
}
Claude Code reads tokens from ~/.slack-mcp-tokens.json automatically.
{
"mcpServers": {
"slack": {
"command": "docker",
"args": ["run", "-i", "--rm",
"-v", "~/.slack-mcp-tokens.json:/root/.slack-mcp-tokens.json",
"ghcr.io/jtalk22/slack-mcp-server"]
}
}
}
Fully quit and reopen Claude. The Slack tools will appear.
Priority 1: Environment Variables (SLACK_TOKEN, SLACK_COOKIE)
↓ fallback
Priority 2: Token File (~/.slack-mcp-tokens.json)
↓ fallback
Priority 3: macOS Keychain (encrypted)
↓ fallback
Priority 4: Chrome Auto-Extraction (macOS only)
All file operations (tokens, DM cache) use atomic writes:
Write to temp file → chmod 600 → rename to target
This prevents JSON corruption if the process is killed mid-write.
Background refresh timers use unref():
const timer = setInterval(refreshTokens, 4 * 60 * 60 * 1000);
timer.unref(); // Process can exit even if timer is pending
When Claude closes the MCP connection, the server exits cleanly.
A mutex lock prevents concurrent Chrome extractions:
if (refreshInProgress) return null; // Skip if already refreshing
refreshInProgress = true;
try { return extractFromChromeInternal(); }
finally { refreshInProgress = false; }
Claude now supports remote MCP connectors on paid plans. For claude.ai, the preferred path is adding a remote connector in Settings -> Connectors.
Reference:
Use this Web UI when you want a local localhost dashboard, REST access, or a fallback workflow without remote connector hosting:
npm run web
# Or: npx -y @jtalk22/slack-mcp web
Magic Link: The console prints a one-click URL with the API key embedded:
════════════════════════════════════════════════════════════
Slack Web API Server v3.0.0
════════════════════════════════════════════════════════════
Dashboard: http://localhost:3000/?key=smcp_xxxxxxxxxxxx
Just click the link - no copy-paste needed. The key is saved to your browser and stripped from the URL for security.
| DMs View | Channels View |
|---|---|
![]() |
![]() |
Use this mode only when you need a remote MCP endpoint:
SLACK_TOKEN=xoxc-...
SLACK_COOKIE=xoxd-...
SLACK_MCP_HTTP_AUTH_TOKEN=change-this
SLACK_MCP_HTTP_ALLOWED_ORIGINS=https://claude.ai
node src/server-http.js
Behavior:
/mcp requires Authorization: Bearer <SLACK_MCP_HTTP_AUTH_TOKEN> by default.SLACK_MCP_HTTP_ALLOWED_ORIGINS.SLACK_MCP_HTTP_INSECURE=1.stdio, web, hosted HTTP, Smithery/Worker)If you're evaluating team rollout, start with Deployment Modes before exposing remote endpoints.
npx -y @jtalk22/slack-mcp --version
npx -y @jtalk22/slack-mcp --doctor
npx -y @jtalk22/slack-mcp --setup
# macOS: Auto-refresh from Chrome
slack_refresh_tokens # In Claude
# Or: npm run tokens:auto
# Package setup wizard
npx -y @jtalk22/slack-mcp --setup
# Linux/Windows: Manual update
# Edit ~/.slack-mcp-tokens.json with fresh values
Use discover_dms: true to force discovery:
slack_list_conversations with discover_dms=true
This caches DM channel IDs for 24 hours.
app.slack.comView > Developer > Allow JavaScript from Apple Events~/Library/Logs/Claude/mcp*.logslack-mcp-server/
├── src/
│ ├── server.js # MCP server (stdio transport)
│ └── web-server.js # REST API + Web UI
├── lib/
│ ├── token-store.js # 4-layer persistence + atomic writes
│ ├── slack-client.js # API client, LRU cache, retry logic
│ ├── tools.js # MCP tool definitions
│ └── handlers.js # Tool implementations
├── public/
│ ├── index.html # Web UI
│ └── demo.html # Interactive demo
└── scripts/
└── token-cli.js # Token management CLI
chmod 600 (owner-only)crypto.randomBytes)| Feature | macOS | Linux | Windows |
|---|---|---|---|
| MCP Server | Yes | Yes | Yes |
| Token File | Yes | Yes | Yes |
| Auto-Refresh from Chrome | Yes | No | No |
| Keychain Storage | Yes | No | No |
| Web UI | Yes | Yes | Yes |
PRs welcome. Run node --check on modified files before submitting.
If this project saves you setup time, consider starring the repository.
MIT - See LICENSE
This project uses unofficial Slack APIs. Use at your own risk. Not affiliated with or endorsed by Slack Technologies.
Please log in to share your review and rating for this MCP.
Explore related MCPs that share similar capabilities and solve comparable challenges
by activepieces
A self‑hosted, open‑source platform that provides a no‑code builder for creating, versioning, and running AI‑driven automation workflows. Pieces are TypeScript‑based plugins that become MCP servers, allowing direct consumption by large language models.
by Skyvern-AI
Automates browser‑based workflows by leveraging large language models and computer‑vision techniques, turning natural‑language prompts into fully functional web interactions without writing custom scripts.
by ahujasid
Enables Claude AI to control Blender for prompt‑assisted 3D modeling, scene creation, and manipulation via a socket‑based Model Context Protocol server.
by PipedreamHQ
Connect APIs quickly with a free, hosted integration platform that enables event‑driven automations across 1,000+ services and supports custom code in Node.js, Python, Go, or Bash.
by elie222
Organizes email inbox, drafts replies in the user's tone, tracks follow‑ups, and provides analytics to achieve inbox zero quickly.
by grab
Enables Cursor AI to read and programmatically modify Figma designs through a Model Context Protocol integration.
by CursorTouch
Enables AI agents to control the Windows operating system, performing file navigation, application launching, UI interaction, QA testing, and other automation tasks through a lightweight server.
by ahujasid
Enables Claude AI to control Ableton Live in real time, allowing AI‑driven creation, editing, and playback of tracks, clips, instruments, and effects through a socket‑based server.
by leonardsellem
Provides tools and resources to enable AI assistants to manage and execute n8n workflows via natural language commands.
{
"mcpServers": {
"slack": {
"command": "npx",
"args": [
"-y",
"@jtalk22/slack-mcp"
],
"env": {
"SLACK_TOKEN": "<YOUR_SLACK_XOXC_TOKEN>",
"SLACK_COOKIE": "<YOUR_SLACK_XOXD_COOKIE>",
"SLACK_MCP_HTTP_AUTH_TOKEN": "<YOUR_AUTH_TOKEN>",
"SLACK_MCP_HTTP_ALLOWED_ORIGINS": "https://claude.ai"
}
}
}
}claude mcp add slack npx -y @jtalk22/slack-mcp