mcp-slack
Provides tools for reading Slack messages via a browser session, including search, channel history, threads, DMs, user profiles, and optional message posting.
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., "@mcp-slacksearch for messages from @alice about the outage"
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.
mcp-slack
An MCP server for reading Slack through your own browser session, for workspaces where installing a Slack app isn't an option. Ten tools: six primitives, three multi-call operations, one write that is off by default.
It authenticates as you, not as a bot. Everything you can see, it can read; anything it posts is indistinguishable from a message you typed. Browser-session auth is not an officially supported Slack integration path, so check your workspace's policies first.
The tools take explicit ranges and neutral defaults — no assumed reporting cadence, channel naming scheme, or truncation limit — so workflows can be built on top rather than baked in.
Install
Copy the d cookie from your browser (developer tools → Application → Cookies →
https://app.slack.com) into ~/.slack-tokens.yml:
slack:
- name: myworkspace.slack.com
token: xoxd-your-cookie-value-here
xoxc: null # auto-populated on first runThe short-lived xoxc API token is derived automatically and written back, so
later runs skip that step. Both values are session credentials — chmod 600 the
file, and expect to recopy the cookie whenever your browser session ends.
Then install the server and register it:
uv tool install --editable .{
"mcpServers": {
"slack": {
"command": "/Users/you/.local/bin/mcp-slack",
"args": [],
"lifecycle": "lazy"
}
}
}To skip installing, point at the repo-root shim instead — it carries a PEP 723
header, so uv resolves dependencies on the fly:
"command": "uv", "args": ["run", "/path/to/mcp-slack/server.py"].
Related MCP server: slack-mcp
Tools
Tool | Purpose |
| Native Slack search syntax ( |
| Messages from one channel over a time window |
| Every reply in a thread |
| DM history with one person |
| Resolve a username or user ID to a profile |
| Channel discovery by glob and member count (expensive) |
Three tools stitch many calls into one result. They exist because their deduplication isn't reproducible from outside: a message found by search, by channel history, and by thread expansion is the same message, and only the server sees all three passes.
Tool | Purpose |
| Everything one person said or received in a range, with optional surrounding context and thread expansion, grouped by channel |
| History for many channels at once, by list or glob, with replies nested under their parents |
| Batch profiles with custom fields resolved to labels |
Time ranges accept YYYY-MM-DD, an epoch, or a relative offset like -7d.
slack_post_message posts as you, and refuses unless
SLACK_MCP_ALLOW_WRITE=1 is set in the server's environment:
"env": { "SLACK_MCP_ALLOW_WRITE": "1" }Behavior worth knowing
A channel with no messages can't be resolved by name. Names resolve via
search.messages, becauseconversations.listis throttled to the point of uselessness on Enterprise Grid — measured at 11m48s of consecutive 429 backoffs without reaching the target channel. Pass a channel ID (C…) for empty or archived channels, and prefer a channel name overslack_list_channels, which still enumerates and may returnrate_limited.Glob discovery only sees channels you've joined. It uses
users.conversationsfor the same throttling reason.Failures come back as data, not exceptions:
{"error": "not_found", ...}. Codes arenot_found,rate_limited,auth_failed, andwrite_disabled. An expired cookie shows up asauth_failed.Rate-limit waits are bounded. A cumulative sleep budget (45s, reset each tool call) means a call returns
rate_limitedrather than hanging. Library callers who don't mind waiting can raise it:SlackClient(ws, wait_budget=600).Messages are projected, not passed through. Raw Slack records run to several KB each; tools return
ts,time,user,user_name,text, andpermalink, plus thread fields when meaningful. Mentions and links are rewritten to readable text, and permalinks are built locally, so citing a message costs no extra call.Lookups are cached, message content is not. One JSON file per workspace, with a timestamp per entry:
Cached
TTL
DM channel ID
never
assigned once per pair of users
user name → ID
30d
only a handle change invalidates it
user ID → name
7d
display names change occasionally
channel name → ID
7d
renames are rare but real
team profile schema
30d
effectively static
channel member counts
24h
drifts slowly, only gates a filter
failed lookups
1h
stops a typo being re-searched in a loop
A negative is only recorded after a search completes and matches nothing, so a rate limit or transport error is never cached as "does not exist".
Library use
The multi-call operations are plain functions in slack_mcp/aggregate.py
(user_activity, channels_history, profiles) taking an explicit
SlackClient. Import them directly rather than speaking MCP to a subprocess.
License
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityCmaintenanceThe most powerful MCP server for Slack Workspaces. This integration supports both Stdio and SSE transports, proxy settings and does not require any permissions or bots being created or approved by Workspace admins 😏.21,780MIT
- Alicense-qualityBmaintenanceRead-only MCP server for Slack with OAuth 2.1 authentication, enabling message retrieval, thread replies, search, user and channel listing.8Apache 2.0
- Alicense-qualityCmaintenanceSelf-hosted MCP server for Slack using User OAuth Token, enabling message management, channel operations, and user interactions via natural language.53MIT
- AlicenseAqualityCmaintenanceA self-hosted, read-only Slack MCP server that runs locally and provides read-only access to Slack channels, messages, and users via the Slack Web API, with no third-party intermediary.7MIT
Related MCP Connectors
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
Search your AI chat history (ChatGPT, Claude, Codex) from any MCP client. Remote, private, read-only
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
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/gregbuehler/mcp-slack'
If you have feedback or need assistance with the MCP directory API, please join our Discord server