Slack MCP Server
This server gives your AI agent full Slack access via 21 tools, using browser session tokens instead of OAuth — no admin approval required.
Authentication & Token Management
Check token validity, age, and health (
slack_health_check,slack_token_status)Auto-extract and refresh tokens from Chrome on macOS (
slack_refresh_tokens)
Reading Messages & Conversations
List all channels and DMs with resolved user names
Fetch message history, full conversations, and threads (with opt-in rich fields: attachments, blocks, files, reactions)
Get channels/DMs with unread messages, sorted by unread count
Searching
Search messages across the entire workspace with Slack syntax (
from:@user,in:#channel)Search users by name, display name, or email
Writing & Interacting
Send messages to any channel or DM, including threaded replies
Add or remove emoji reactions
Mark conversations as read
User Management
Get detailed info on specific users; list all workspace users (paginated)
Workflow Profiles (Local)
Save and manage workflow profiles binding a
workflow_kind(incident_room,exec_brief,support_inbox,product_launch_watch,custom) to channels, priority people, retention mode, and summary cadence
Hosted AI Brain (Paid/Free Tier — requires sign-up at mcp.revasserlabs.com)
slack_smart_search— Semantic + lexical hybrid search across indexed Slack history with relevance scoresslack_catch_me_up— AI-structured digest against a workflow profile (e.g.,incident_summary,timeline,open_risks,next_actions)slack_triage— Classify and route threads by priority (low/medium/high/urgent), suggested owner, and escalation flag
Deployment
Works as a stdio MCP server with Claude, Cursor, Copilot, Windsurf, Gemini CLI, Codex CLI, and any MCP client
Docker support and hosted HTTP mode available for remote endpoints
Quick setup via
npx --setup
Provides tools for reading and writing Slack messages, searching conversations, managing reactions, and extracting structured workflow summaries from Slack workspaces using session tokens instead of OAuth.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Slack MCP Serversearch for deployment thread from last week"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
npx -y @jtalk22/slack-mcp --setupIt’s Monday, 9:07. Slack has already formed opinions.
You ask “what blew up overnight?” and the agent reads the workspace instead of you. It reconstructs the 2 AM P1 from #incidents—owner, resolution, and the runbook step that is still wrong. It finds the printer PIN that has been waiting in #facilities for five months. Then it closes the handled loops—replies, reactions, read-state changes—only where you approve.
This is not screenshot automation. The agent calls Slack through a real MCP tool surface and receives typed results it can search, summarize, export, or act on.
Related MCP server: Slack MCP Server
Built past the demo
The difficult part is not another chat tool. It is the operating layer underneath: browser-session extraction that names its failure stages, a credential lifecycle built for rotation, full-fidelity reads, guarded writes, and typed workflow output. The code is plain JavaScript in this repository—audit it before trusting it with a session.
1. The browser-session engine
--setup turns the Slack identity Chrome already holds into a local MCP server:
finds the newest
xoxc-token in Chrome's on-disk LevelDB;snapshots the cookie SQLite database with its WAL sidecars;
retrieves Chrome Safe Storage from the macOS Keychain;
runs Chrome-compatible PBKDF2 + AES-128-CBC decryption locally;
requires no DevTools, clipboard step, browser flag, or live Slack tab;
names the failed extraction stage—
keychain_timeout,no_slack_cookie_row,cookie_decrypt_failed, and more—instead of returning one opaque error.
2. Credential lifecycle, not credential paste
Session credentials rotate. The server is built around that reality:
auto,keychain-only, andfilestorage backends;owner-only token files and a Keychain-only path with no plaintext credentials on disk;
atomic file writes, verified Keychain migration, cross-process locks, and refresh mutexes;
proactive health checks and automatic macOS refresh;
last-known-good in-memory credentials when persistence is temporarily unavailable;
isolated profiles for work and personal Slack;
fail-closed handling for invalid storage or profile configuration.
3. Full-fidelity Slack reads
Read DMs and channels, search the workspace, export complete histories with threads, inspect unread state, and resolve users. Opt into blocks, attachments, files, reactions, metadata, and bot/app markers when text alone is not the real message.
4. The agent can finish the job
Send a reply, add or remove a reaction, and mark a conversation read. Every workspace write path carries an MCP destructive annotation so compatible clients can put approval where it belongs.
5. Slack in, typed JSON out
Save workflow profiles for incident rooms, executive briefs, support inboxes, launch watches, and custom operations. The OSS primitives are local JSON; the optional hosted brain renders them into contract-shaped briefs.
Two ways into Slack
Slack already knows who you are. The official path is a Slack-managed remote integration governed by workspace policy—a strong fit for organization-sanctioned deployments, documented by Slack with integration settings under admin control. This project is the direct local path: session-based auth from the browser session already in Chrome, local stdio, any stdio MCP client, and no Slack app or admin request. Same Slack identity. Same underlying permissions. A radically shorter path from your workspace to your agent.
Slack official MCP | Slack MCP Server — local | |
Starting point | A Slack-managed remote integration | The Slack session already in Chrome |
Workspace control | Governed by workspace integration settings | No Slack app or admin request for the local path |
Transport | Streamable HTTP | Local stdio |
Client surface | Slack's supported partner integrations | Any stdio MCP client |
Authentication | OAuth | Existing browser session |
Credential lifetime | Managed OAuth | Rotating session with health checks and refresh |
Product surface | Broad Slack-native capabilities | 21 focused tools across read, act, and automate |
Runtime | Slack-managed | MIT code on your machine |
Treat browser-session automation as an acceptable-use decision for you and your workspace. The server acts as your signed-in Slack identity and cannot read a channel you cannot read or act as another user. It does not evade server-side retention, DLP, compliance exports, or audit controls.
"No admin request" means there is no Slack app installation to approve. It does not mean workspace activity disappears from Slack's systems. If your policy requires a sanctioned OAuth integration, use the official MCP or the optional hosted OAuth path.
Grid, credentials, and caching
Enterprise Grid. Grid runs aggressive session-anomaly detection. Browser-session automation can trip it, which flags the session and kills it, regardless of which tool drives the traffic. Outbound calls are paced by default to stay under burst thresholds (SLACK_MCP_MIN_REQUEST_INTERVAL_MS, default 350; SLACK_MCP_MAX_CONCURRENCY, default 3). Pacing lowers that risk; it does not remove it. On Grid, use the hosted OAuth tier or Slack's official MCP instead.
Credential extraction. --setup reads the newest xoxc- token from Chrome's on-disk LevelDB, snapshots the cookie SQLite database, retrieves Chrome Safe Storage from the macOS Keychain, and runs PBKDF2 + AES-128-CBC decryption locally. It writes the token file, Keychain entries, and non-secret metadata. It transmits nothing — the server talks to Slack and nowhere else.
This is the same access pattern credential stealers use. Chrome App-Bound Encryption exists to make this class of read harder, and infostealer families (Lumma, Vidar, Meduza) bypass it to lift live sessions. The mechanism here is comparable. What differs is that you run it, on your own machine, against your own session, and nothing leaves the host. The source is plain JavaScript in this repository; audit it before handing it a live session.
User cache. One cache exists: user-name lookups, populated on demand, 500 entries maximum, one-hour TTL. No message content, no channel history, and no persistent copy of the workspace is stored.
Install
Node 22 or 24 recommended. Node 20 remains supported for the v4 line.
npx -y @jtalk22/slack-mcp --setupPrefer a persistent CLI: npm install -g @jtalk22/slack-mcp then slack-mcp --setup.
Then:
Pick your client in the setup guide.
Register the generated stdio command.
Fully restart the client.
Ask the agent to run
slack_health_check.A workspace name in the response means the connection is live.
Use the same server command everywhere:
{
"command": "npx",
"args": ["-y", "@jtalk22/slack-mcp"]
}On macOS, setup can extract from Chrome and persist the selected storage backend. On other platforms, provide SLACK_TOKEN and SLACK_COOKIE through the client's environment configuration. Docker, HTTP, and detailed client examples live in docs/SETUP.md and docs/DEPLOYMENT-MODES.md.
Client | Configuration surface | Status |
Claude Code |
| Documented |
Claude Desktop | Desktop MCP configuration | Verified |
Cursor |
| Documented |
GitHub Copilot |
| Documented |
Windsurf |
| Documented |
Gemini CLI |
| Documented |
Codex CLI |
| Documented |
Other clients | Any stdio MCP configuration | Protocol-compatible |
21 tools: read, act, automate
The local surface ships 21 tools today: 12 read-only Slack operations, 4 write-path tools that each carry an MCP destructive annotation so clients can gate workspace writes, 3 local workflow tools including the catch-up itself, and 2 hosted-intelligence stubs that return a structured upgrade payload without making a Slack call. Four read tools accept include_rich_message_fields: true to surface attachments, blocks, files, reactions, and metadata—complete inputs and response contracts live in docs/API.md.
Advertising fewer tools. A client pays for the tool schema on every turn that carries it. SLACK_MCP_TOOLS=essentials advertises six tools — unread, history, search, thread, user lookup, send — costing roughly 985 estimated tokens of schema per turn against about 3,600 for all 21. SLACK_MCP_TOOLS=read advertises the 12 read-only Slack operations listed below, near 1,690. --tools=slack_x,slack_y takes an explicit set. The default stays all 21. Filtering changes what is advertised, not what is callable. Reproduce the numbers with node scripts/measure-tool-schema.js (a ~4-chars-per-token estimate).
12 read-only Slack operations
Tool | Purpose |
| Verify credentials and workspace identity |
| Inspect credential age, health, cache, profile, and storage state |
| Refresh local credentials from the browser session on macOS—reads Slack, writes only local state |
| List channels and DMs |
| Read channel or DM history with optional rich fields |
| Export complete history and threads |
| Search across the workspace |
| Read all replies in a thread |
| Resolve a user |
| Page through large workspace directories |
| Search users by name, display name, or email |
| Prioritize conversations with unread messages |
Act in the workspace — 4 write-path tools
Tool | Purpose | MCP safety |
| Send to a channel or DM | destructive |
| Add an emoji reaction | destructive |
| Remove an emoji reaction | destructive |
| Mark a conversation read | destructive |
Automate locally — 3 workflow tools
Tool | Purpose |
| Save a typed workflow profile to |
| List saved workflow profiles |
| Read a profile's channels since its cadence window and return structured catch-up evidence |
Discover hosted intelligence — 2 explicit stubs
Tool | Hosted result |
| Semantic + lexical search over indexed Slack history |
| Prioritized action queue with routing recommendations |
These two need infrastructure this package does not ship — an index and a model — so the OSS handlers return a structured upgrade payload instead of making a Slack call. slack_catch_me_up needs neither and runs locally. slack_refresh_tokens only writes local credential state.
Typed workflows: Slack in, JSON out
Bind a workflow kind to channels, priority people, retention, and cadence. slack_catch_me_up then reads that scope locally and hands your agent the evidence: which threads went unanswered and for how long, what your priority people said or were pinned on, which conversations actually moved. It does the gathering; your agent writes the summary against the contract below.
There is no server-side model in that path, because there does not need to be one — the client calling this server is already a language model. Hosted adds what genuinely needs infrastructure: indexed semantic retrieval, and running the same catch-up on a schedule while your laptop is shut.
npx -y @jtalk22/slack-mcp --apply-template oncall-handoff --channels C012345,C067890Workflow kind | Contract |
|
|
|
|
|
|
|
|
|
|
Six editable templates ship in the package: oncall-handoff, support-triage, exec-monday, sprint-tracker, customer-feedback, and incident-room.
Where credentials live
Resolution is deterministic; first hit wins:
SLACK_TOKEN+SLACK_COOKIEtoken file (
chmod 600)macOS Keychain
Chrome extraction on macOS
Session credentials commonly rotate after one or two weeks. When Slack returns invalid_auth, not_authed, token_expired, token_revoked, account_inactive, or HTTP 401, run npx -y @jtalk22/slack-mcp --setup to recover locally. On macOS, slack_refresh_tokens or --refresh-tokens refreshes without leaving the client; the optional LaunchAgent in docs/SETUP.md keeps long-idle installations healthy.
Mode | Behavior |
| Token file plus Keychain backup |
| Keychain only; verified writes and no plaintext credential file |
| Owner-only token file; Keychain is never touched |
The selected backend is remembered in non-secret metadata and used by the server, CLI, and optional refresh job. An unrecognized mode fails at startup instead of silently downgrading storage.
{
"mcpServers": {
"slack-work": {
"command": "npx",
"args": ["-y", "@jtalk22/slack-mcp"],
"env": { "SLACK_MCP_PROFILE": "work" }
},
"slack-personal": {
"command": "npx",
"args": ["-y", "@jtalk22/slack-mcp"],
"env": { "SLACK_MCP_PROFILE": "personal" }
}
}
}Each profile gets its own token file, Keychain entries, metadata, and lock. Add SLACK_MCP_CHROME_PROFILE when the workspaces live in different Chrome profiles.
Free local when you’re driving. Hosted when it must drive itself.
When local control is enough, stop here—everything above is MIT-licensed and runs on your machine. The local product is complete, not a crippled trial: hosted earns the upgrade through continuity, intelligence, and collaboration, not by holding ordinary Slack access hostage. Hosted exists for work that must survive a rotating browser session:
permanent OAuth;
indexed semantic search;
scheduled catch-up and triage;
contract-validated workflow briefs;
shared profiles and managed workspace continuity.
Local mode never contacts us; it runs on your machine and talks only to Slack. Hosted never receives a browser cookie; it runs on permanent OAuth, for work that has to survive a rotating session — unattended schedules, Enterprise Grid. Everything above is MIT-licensed and complete on its own.
Security and provenance
Credential files are owner-only; Keychain-only mode keeps plaintext credentials off disk.
Configuration fails closed for unknown storage modes and invalid profiles.
Writes are atomic and shared credential state is process-locked.
The local web server binds to localhost; workspace write tools carry destructive annotations.
Every release publishes from CI with npm provenance.
Provenance: don't take my word for it
npm audit signaturesA clean result verifies that the package signatures and attestations trace back through the published release chain. Inspect the package before handing it a live Slack session. Full policy: SECURITY.md.
Documentation
Setup · API · Architecture · Compatibility · Deployment modes · Recipes · Troubleshooting · Roadmap
Contributing
PRs are welcome. Read CONTRIBUTING.md and run node --check on touched JavaScript before submitting.
License
MIT — see LICENSE.
Disclaimer
Not affiliated with Slack Technologies, Inc. This server uses browser-session credentials. Review your workspace's acceptable-use policy before running it.
Your Slack. Your agent. One command.
npx -y @jtalk22/slack-mcp --setupIf this removes a Slack tab from your day, star the repository. Stars are how the next admin-blocked developer finds the local path.
Maintenance
Related MCP Servers
- Flicense-qualityDmaintenanceEnables AI assistants to interact with Slack workspaces through secure OAuth 2.0 authentication. Supports posting messages, reading channel history, and listing channels across multiple workspaces with production-ready security features.
- Flicense-qualityDmaintenanceEnables AI-powered Slack workspace management with 18+ tools for messaging, channel management, conversation analysis, and real-time bot responses. Features an autonomous AI agent that can plan and execute complex multi-step tasks combining Slack operations with web research.2
- AlicenseAqualityDmaintenanceIntegrates AI assistants with Slack workspaces using OAuth 2.0 authenticated user tokens for secure, multi-functional interaction. It enables comprehensive operations including channel management, message searching, file handling, and reaction management through natural language.20169MIT
- FlicenseAqualityDmaintenanceEnables AI agents to interact with Slack using a user token, providing full access to message search, channel history, DMs, and posting as the user.8
Related MCP Connectors
SaaS intelligence for AI agents. 5 unified tools cover 1,000+ services with 91-96% token savings.
Give AI agents the LinkedIn tools to find, qualify, engage, and follow up with prospects.
Human-in-the-loop for AI coding agents — ask questions, get approvals via Slack.
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/jtalk22/slack-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server