Skip to content
Conduit

mcp server

slack-mcp

MCP server exposing 193 Slack Web API methods as tools for AI agents

karbassi/slack-mcpcommunitylistedunreviewed

Set up

Runs on your computer. Pick your agent and operating system.

Before you start

  • uv (`curl -LsSf https://astral.sh/uv/install.sh | sh`)
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "karbassi-slack-mcp": {
      "command": "uvx",
      "args": [
        "slack-mcp"
      ]
    }
  }
}

same format Cursor, GitHub Copilot CLI, Junie, JetBrains AI Assistant, Augment (Auggie CLI), Factory Droid, Kiro, Devin CLI +12

Values in angle brackets are placeholders. Restart Claude Desktop after editing its config.Claude Desktop docs

README

synced Oct 17, 2026

Slack MCP

Your entire Slack workspace — available to any AI.

Python License

A Model Context Protocol server that gives LLMs full access to Slack. Messages, channels, files, canvases, lists, search, reactions — all of it.

253 tools · 37 API families · Every Slack feature


Quick Start

1. Create a Slack App

  1. Go to api.slack.com/apps > Create New App > From a manifest
  2. Paste the contents of manifest.json
  3. Install to your workspace
  4. Copy the User OAuth Token (xoxp-...) from OAuth & Permissions

2. Add to your AI client

claude mcp add slack -- uvx --from git+https://github.com/karbassi/slack-mcp.git slack-mcp

Then set SLACK_XOXP_TOKEN in your shell environment.

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "slack": {
      "type": "stdio",
      "command": "uvx",
      "args": ["--from", "git+https://github.com/karbassi/slack-mcp.git", "slack-mcp"],
      "env": {
        "SLACK_XOXP_TOKEN": "xoxp-..."
      }
    }
  }
}

Add to ~/.cursor/mcp.json:

{
  "mcpServers": {
    "slack": {
      "type": "stdio",
      "command": "uvx",
      "args": ["--from", "git+https://github.com/karbassi/slack-mcp.git", "slack-mcp"],
      "env": {
        "SLACK_XOXP_TOKEN": "xoxp-..."
      }
    }
  }
}

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "slack": {
      "type": "stdio",
      "command": "uvx",
      "args": ["--from", "git+https://github.com/karbassi/slack-mcp.git", "slack-mcp"],
      "env": {
        "SLACK_XOXP_TOKEN": "xoxp-..."
      }
    }
  }
}

Add to your VS Code settings.json:

{
  "mcp": {
    "servers": {
      "slack": {
        "command": "uvx",
        "args": ["--from", "git+https://github.com/karbassi/slack-mcp.git", "slack-mcp"],
        "env": {
          "SLACK_XOXP_TOKEN": "xoxp-..."
        }
      }
    }
  }
}
{
  "mcpServers": {
    "slack": {
      "type": "stdio",
      "command": "uv",
      "args": ["run", "--directory", "/path/to/slack-mcp", "slack-mcp"]
    }
  }
}

Run one long-lived server that every client shares, instead of one stdio process per session:

SLACK_MCP_TRANSPORT=http SLACK_MCP_PORT=8501 slack-mcp
{
  "mcpServers": {
    "slack": { "type": "http", "url": "http://127.0.0.1:8501/mcp" }
  }
}

The server has no auth of its own, so it only binds to loopback (SLACK_MCP_HOST must be 127.0.0.1, localhost, or ::1) and always turns on FastMCP's Host/Origin (DNS-rebinding) protection, which FastMCP leaves off by default. To reach it from elsewhere, put a reverse proxy you control in front and add the proxy's hostname to FASTMCP_HTTP_ALLOWED_HOSTS (and its origin to FASTMCP_HTTP_ALLOWED_ORIGINS), e.g. FASTMCP_HTTP_ALLOWED_HOSTS='["mcp.example.com"]'.

What Can It Do?

"Catch me up on #engineering from today" "Reply to Sarah's thread saying we'll ship it Monday" "Search for anything about the Q3 roadmap" "Create a channel called #project-atlas and invite the design team"

DomainToolsHighlights
Conversations31History, threads, replies, create, archive, invite, mark read, team connections, suggestions
Undocumented38Drafts, saved items, emoji management, granular search, sidebar, threads, activity inbox, DMs, AI unread summary + digests, Today view, Connect invites
Files19Upload, share, edit, list, remote files, shares, recently deleted, favorites
Chat13Send, reply, schedule, update, delete, ephemeral, stream
Users15Profile, presence, lookup, list, profile extras/sections, custom statuses
Lists15Create, edit items, manage access, my assigned items, templates, records
Legacy11Slash commands, file editing, bot listing
Team9Info, preferences, access logs, billing
Apps9Manifests, connections, authorizations, activities
Workflows8Featured workflows, step completion, workflow/trigger listing
Usergroups7Create, update, manage members
Canvases7Create, edit, sections, access control, templates
Calls6Start, end, manage participants
+ 24 moreCalendar, DND, reminders, bookmarks, reactions, pins, stars, views, search, auth, bots, emoji, ...

Plus resolve_names (bulk ID→name resolution) and cache_clear (bust the response cache on demand) utility tools.

Beyond the Official API

68 undocumented and legacy endpoints — the same internal APIs that Slack's own apps use. Requires session tokens (xoxc+xoxd).

EndpointWhat it provides
client.bootFull workspace bootstrap — channels, users, prefs, feature flags
client.countsUnread counts per channel/DM/thread plus mention counts
client.userBootUser-specific bootstrap data scoped to the authenticated user
threads.getViewThread inbox — the list of threads with read/unread state
subscriptions.thread.getViewMy threads with unread reply counts — "catch me up on my threads"
subscriptions.thread.markMark individual threads as read or unread
client.dmsOpen DMs and group DMs (ims + mpims)
activity.feedActivity inbox — mentions, reactions, replies, reminders, invites
drafts.listList all unsent message drafts
drafts.createCreate a message draft with Block Kit text
drafts.updateEdit an existing draft
drafts.deleteDelete a draft
saved.listList saved-for-later items
saved.getFetch specific saved-for-later items by id
saved.addSave a message for later with optional due date
saved.deleteRemove a saved-for-later item
lists.getMyItemsSlack List tasks and approvals assigned to me
emoji.addAdd a custom emoji from a URL
emoji.removeRemove a custom emoji
emoji.adminListEmoji with rich metadata — uploader, date, usage stats
search.modules.messagesGranular message search
search.modules.filesFile-specific search
search.modules.channelsServer-side channel search by name or topic
search.modules.peopleFuzzy people search by name, title, department
search.modules.dmsSearch within DMs only
conversations.viewChannel view with read state and personal config
conversations.listPrefsPer-channel notification and mute preferences
users.channelSections.listSidebar organization — custom sections, favorites
users.priority.listContacts ranked by interaction frequency
experiments.getByUserA/B test experiment assignments
api.featuresWorkspace feature flags
aiApps.listAI applications configured in the workspace
ai.alpha.summarize.unreadsSnapshotAI summary of unread messages — "summarize what I missed"
ai.alpha.digest.listSlack's AI recaps/digests of activity across channels
subscriptions.thread.getSubscription/read state for a single thread
today.items.listToday view items (suggested to-dos, highlights)
connectInvites.listPending Slack Connect channel and DM invites
conversations.teamConnectionsSlack Connect connections for a channel
conversations.suggestionsSuggested channels for the user
conversations.bulkReacjiTriggersPer-channel reacji (auto-reaction) triggers
lists.templatesAvailable Slack List templates
lists.records.listRecords/items within a given Slack List
calendar.getInstalledCalendarsConnected calendars (gcal, ocal)
calendar.user.statusThe user's current calendar status
canvases.getCannedTemplatesAvailable canvas templates
emoji.collections.listInstalled and available emoji packs
files.getSharesWhere a file is shared (channels, tabs, viewer count)
files.recentlyDeletedRecently deleted files
files.favorites.listFavorited files
functions.workflows.listWorkflows and their triggers
workflows.triggers.listTriggers, filterable by app
users.profile.getExtrasProfile extras — shared channels, onboarding state
users.profile.getSectionsCustom profile sections
users.customStatus.listSaved and scheduled custom statuses
search.inlineInline/quick search scoped to a channel or user
search.saveSave a search
enterpriseSearch.getConnectorsConfigured enterprise search connectors
EndpointWhat it provides
chat.commandExecute slash commands programmatically
commands.listList all slash commands including custom ones
files.editEdit a file's title, content, or filetype in-place
files.shareShare a file to a channel
bots.listList all bot users in the workspace
team.prefs.getTeam-level preferences — retention, permissions, domains
users.prefs.getAll user preferences — notifications, sidebar, theme
users.prefs.setSet any individual user preference
users.admin.inviteInvite users by email (Enterprise Grid)
users.admin.setInactiveDeactivate a user account (Enterprise Grid)
channels.deleteDead method — included for completeness

[!WARNING] Undocumented endpoints can break without notice. They use session tokens (xoxc+xoxd) which expire and must be re-grabbed from browser cookies.

Authentication

VariableRequiredDescription
SLACK_XOXP_TOKENYesUser OAuth token from your Slack app
SLACK_XOXC_TOKENNoBrowser session token for undocumented endpoints
SLACK_XOXD_TOKENNoBrowser session cookie (paired with xoxc)

[!TIP] The xoxp token covers all Slack Web API tools. Utility tools like resolve_names and cache_clear work without additional auth. For undocumented endpoints (unread counts, workspace boot, file editing), you also need xoxc+xoxd — grab them from your browser cookies while logged into slack.com.

Caching

Responses are cached automatically to reduce API calls:

  • Stable data (users, teams, bots, emoji) — 1 hour TTL
  • Dynamic data (channel lists, members, bookmarks) — 5 minute TTL
  • Old threads (conversations_replies with ts > 1 hour old) — 1 hour TTL
  • Bounded history (conversations_history with old date range) — 1 hour TTL
  • Resolved names (user/bot → 1 hour, channel → 5 minutes)

Cache is stored at the platform-native location (~/Library/Caches/slack-mcp on macOS, ~/.cache/slack-mcp on Linux). Set XDG_CACHE_HOME to override.

Use the cache_clear tool to bust the cache when you need fresh data.

Name Resolution

All tool responses automatically resolve user, channel, DM, and bot IDs to display names via a resolved_names field — no extra tool calls needed. Resolved names are disk-cached to avoid redundant API lookups.

Response Compaction

15 high-volume tools automatically strip bloat from Slack API responses — blocks (duplicates text), attachments (link unfurls), thumbnails (22 per file), and metadata noise. Measured reductions:

EndpointBeforeAfterReduction
conversations.history465 KB113 KB76%
files.list127 KB26 KB80%
conversations.list59 KB17 KB71%
reactions.list353 KB167 KB53%

Compaction is on by default. Pass detailed=True to any compactable tool to get the full Slack API response.

Development

git clone https://github.com/karbassi/slack-mcp.git
cd slack-mcp
uv sync
uv run pre-commit install            # ruff + ty on every commit
mise run check                       # test + lint + security scan
mise run test:integration            # requires tokens in .env

[!NOTE] ~68 integration tests are skipped because they require a bot token (xoxb), Slack Connect, interactive triggers (e.g. views.open), or would be destructive (e.g. auth.revoke). Adding bot token support is a future goal.

License

MIT

↑↓ navigate openesc close