MCP server exposing 193 Slack Web API methods as tools for AI agents
Slack MCP
The most complete Slack integration for AI agents. 193 tools covering the entire Slack Web API — messages, channels, files, canvases, lists, search, reactions, and more — all accessible through the Model Context Protocol.
Give your AI assistant full access to Slack. Read unread messages, draft replies, search across your workspace, manage channels, upload files, set reminders — anything you can do in Slack, your agent can do too.
Quickstart
One command. No cloning needed.
Add to your MCP client config (.mcp.json for Claude Code, claude_desktop_config.json for Claude Desktop):
{
"mcpServers": {
"slack": {
"type": "stdio",
"command": "uvx",
"args": ["--from", "git+https://github.com/karbassi/slack-mcp.git", "slack-mcp"],
"env": {
"SLACK_XOXP_TOKEN": "xoxp-..."
}
}
}
}
That's it. Your agent now has Slack.
What can it do?
Read — Unread messages, channel history, threads, search results, file listings
Write — Send messages, reply to threads, react, pin, bookmark, schedule messages
Manage — Create/archive channels, invite users, set topics, manage user groups
Files — Upload, share, edit, organize across channels
Advanced — Canvases, Lists, Reminders, Do Not Disturb, Calls, Workflows
Beyond the official API
This server also includes 15 undocumented and legacy endpoints — the same internal APIs that Slack's own web and desktop apps use. These require session tokens (xoxc+xoxd) from your browser.
Session endpoints — workspace state that the official API doesn't expose:
| Endpoint | What it provides |
|----------|-----------------|
| client.boot | Full workspace bootstrap — channels, users, prefs, feature flags. What Slack loads on startup. |
| client.counts | Unread counts per channel/DM/thread plus mention counts. Powers the badge numbers in Slack's sidebar. |
| client.userBoot | User-specific bootstrap data — lighter version of client.boot scoped to the authenticated user. |
| threads.getView | Thread inbox data — the list of threads you see in Slack's "Threads" view with read/unread state. |
Legacy endpoints — functionality missing from or removed from the official API:
| Endpoint | What it provides |
|----------|-----------------|
| chat.command | Execute slash commands (/shrug, /remind, custom commands) programmatically. |
| commands.list | List all available slash commands in the workspace, including custom ones. |
| files.edit | Edit a file's title, content, or filetype in-place. No official API equivalent. |
| files.share | Share a file to a channel. Simpler than the official message-with-attachment approach. |
| bots.list | List all bot users in the workspace. Not available via the official API. |
| team.prefs.get | Full team-level preferences — message retention, permissions, allowed domains. |
| users.prefs.get | All user preferences — notifications, sidebar, theme, accessibility. Hundreds of prefs. |
| users.prefs.set | Set any individual user preference by name/value. |
| users.admin.invite | Invite users to the workspace by email (Enterprise Grid only). |
| users.admin.setInactive | Deactivate a user account (Enterprise Grid only). |
| channels.delete | Dead method — returns unknown_method. Included for completeness. |
193 tools across 35 API families
| Family | Tools | Family | Tools | |--------|-------|--------|-------| | conversations | 28 | files | 16 | | chat | 14 | users | 12 | | slack_lists | 12 | legacy | 11 | | team | 9 | apps | 8 | | usergroups | 7 | workflows | 7 | | canvases | 6 | calls | 6 | | dnd | 5 | reminders | 5 | | bookmarks | 4 | reactions | 4 | | views | 4 | undocumented | 4 | | auth | 3 | assistant | 3 | | oauth | 3 | pins | 3 | | search | 3 | stars | 3 | | bots | 2 | functions | 2 | | openid | 2 | rtm | 2 | | api | 1 | dialog | 1 | | emoji | 1 | entity | 1 | | migration | 1 | tooling | 1 |
Setup
1. Create a Slack App
Use the included manifest.json to create a Slack app with all required scopes pre-configured:
- Go to api.slack.com/apps > Create New App > From a manifest
- Paste the contents of
manifest.json - Install to your workspace
- Copy the User OAuth Token (
xoxp-...) from OAuth & Permissions
2. Set your token
The only required token is SLACK_XOXP_TOKEN. Set it in your MCP config's env block (see Quickstart above), or via a .env file if running locally.
For access to undocumented endpoints (unread counts, workspace boot, file editing), you'll also need session tokens from your browser:
| Token | Source | Required |
|-------|--------|----------|
| SLACK_XOXP_TOKEN | Slack app OAuth | Yes |
| SLACK_XOXC_TOKEN | Browser cookies | Optional |
| SLACK_XOXD_TOKEN | Browser cookies | Optional |
Install
Via uvx (recommended)
No install step — uvx handles it. See Quickstart.
From git
uv pip install git+https://github.com/karbassi/slack-mcp.git
From a local clone
git clone https://github.com/karbassi/slack-mcp.git
cd slack-mcp
uv sync
Usage
MCP server (uvx)
{
"mcpServers": {
"slack": {
"type": "stdio",
"command": "uvx",
"args": ["--from", "git+https://github.com/karbassi/slack-mcp.git", "slack-mcp"],
"env": {
"SLACK_XOXP_TOKEN": "xoxp-...",
"SLACK_XOXC_TOKEN": "xoxc-...",
"SLACK_XOXD_TOKEN": "xoxd-..."
}
}
}
}
MCP server (local clone)
{
"mcpServers": {
"slack": {
"type": "stdio",
"command": "uv",
"args": ["run", "--directory", "/path/to/slack-mcp", "slack-mcp"]
}
}
}
Standalone
slack-mcp
Architecture
Built with FastMCP 3.0 and slack-sdk.
src/slack_mcp/
server.py # FastMCP server, tool registration
client.py # SlackClient with 4 transport methods
tools/ # 35 modules, one per API family
The client supports four transport modes to handle the full spectrum of Slack's API surface:
| Method | Encoding | Auth | Use case |
|--------|----------|------|----------|
| api_call | Form | xoxp | Standard Web API |
| api_call_json | JSON | xoxp | Endpoints with nested objects (canvases, lists) |
| session_call | JSON | xoxc+xoxd | Undocumented endpoints |
| session_call_form | Form | xoxc+xoxd | Legacy undocumented endpoints |
Tests
# Unit tests (mocked, no tokens needed)
uv run pytest tests/
# Integration tests (requires valid tokens in .env)
uv run pytest tests/ -m integration
257 passing, 56 skipped. Skips are endpoints that require bot tokens, specific OAuth scopes, or Enterprise Grid — not bugs.
Requirements
- Python 3.13+
- uv