Read and write Slack with session tokens — no OAuth, no bot, no admin approval.
MCP server that gives AI agents access to your Slack workspaces using session tokens. No OAuth apps, no bot permissions, no admin approval required.
Beyond reading and writing messages, it accumulates a durable picture of the workspace — every channel and user's state over time, departures kept as dated tombstones — and synthesizes a relationship graph from it on demand: estate view='about' person='X' answers "tell me about X" with their footprint, circle, and a ranked reading plan. The graph is never stored; it is computed per query from two small local ledgers that hold no message content (design note).
Slack MCP uses your existing browser session tokens (xoxc/xoxd) to interact with Slack on your behalf. It reads stealthily by default — only the mark-read tool triggers read receipts. Everything else is invisible to other users.
Token extraction is built into the binary. If you're logged into Slack in Chrome or Firefox, the setup flow can extract tokens automatically — no copy-pasting from DevTools.
You need an active Slack session in your browser. Log into your workspace at app.slack.com in Chrome, Chromium, Edge, or Firefox before running setup.
claude mcp add slack-mcp -- npx -y @aaronsb/slack-mcp
Then ask Claude to run the auth tool. It will guide you through browser selection, profile selection, and automatic token extraction.
Download the .mcpb file for your platform from the latest release:
| Platform | File |
|---|---|
| macOS (Apple Silicon) | slack-mcp-darwin-arm64.mcpb |
| macOS (Intel) | slack-mcp-darwin-x64.mcpb |
| Linux (x64) | slack-mcp-linux-x64.mcpb |
| Linux (ARM) | slack-mcp-linux-arm64.mcpb |
| Windows (x64) | slack-mcp-windows-x64.mcpb |
Open the file (double-click or drag into Claude Desktop). When prompted for tokens, you can either:
auth tool after connectingDownload the binary for your platform from releases, then:
# Extract tokens from your browser (interactive)
./slack-mcp setup
# Run as MCP server (stdio, default)
./slack-mcp
# Run as MCP server (SSE, for remote/shared access)
./slack-mcp --transport sse
npm install -g @aaronsb/slack-mcp
slack-mcp setup
There are three ways to get your Slack tokens, from easiest to most manual:
The auth MCP tool or slack-mcp setup CLI command will:
Requires Chrome to be fully closed before extraction — your tabs will restore when you reopen it.
The setup flow writes a temporary browser extension to a temp directory, then guides you to load it in Firefox via about:debugging. The extension extracts tokens and sends them to the local callback server. It's removed automatically when Firefox closes.
Run slack-mcp setup or use the auth tool — if no browser is detected or automatic extraction fails, it falls back to a localhost web page with step-by-step DevTools instructions.
You can also set tokens directly via environment variables:
export SLACK_MCP_XOXC_TOKEN="xoxc-..."
export SLACK_MCP_XOXD_TOKEN="xoxd-..."
./slack-mcp
| Tool | Kind | What it does |
|---|---|---|
inbox | noun | What needs you: view='new' (since your last dismiss), 'unreads', 'mentions' |
messages | noun | Conversation content: target= reads in full, +around= context, +since= time window, query= full Slack search syntax |
estate | noun | Workspace shape and relationships: view='about'|'families'|'person'|'initiatives'|'convergence'|'people'|'channels' |
batch | executor | Run a held plan of reads in one call: commands=[{tool, params}...]; playbooks via save=/run=/list=/delete= |
say | verb | Contribute content (Slack-visible): a message, or an emoji reaction |
dismiss | verb | Mark inbox items handled — private watermark, invisible to Slack |
mark-read | verb | Fire read receipts — the one visibly-public read signal |
auth | verb | Interactive token setup (localhost only) |
download | verb | Download a shared file |
Verb encodes effect, noun encodes domain, parameter encodes scope (ADR-009); the batch executor encodes composition, never effect, and admits only the read nouns (ADR-010). Every noun echoes its effective parameters and pages every capped list.
mark-read does~/.config/slack-mcp/config.json with 0600 permissions{user, conversation, day} encounters with a 90-day window; both live under XDG with 0600, and deleting them deletes the graphslack.com/api/*make build # Build for current platform
make test # Run tests
make build-all-platforms # Cross-compile (6 platforms)
make release TAG=v2.1.1 # Tag and push (CI handles the rest)
MIT
Source-derived launch command. Check the maintainer’s required arguments and credentials before running:
npx -y @aaronsb/slack-mcpMerge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"io-github-aaronsb-slack-mcp": {
"command": "npx",
"args": [
"-y",
"@aaronsb/slack-mcp"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.
Claude Desktop setup reference@aaronsb/slack-mcpnpmSlack works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.