web-slack-mcp
web-slack-mcp
An MCP server that reads Slack through the web app, driven by Playwright over your own logged-in browser session.
Built for the case where you're a guest in a workspace and can't install a Slack app or mint API tokens — so instead of an app, it reuses the session in a persistent Chromium profile that you log into once.
Draft-only by design. It reads channels, messages, and threads, and (later) stages replies in the composer. There is no send code path in this server — it never posts a message.
How it works
Login is manual and one-time: a visible Chromium window opens, you sign in (SSO / magic link / whatever your workspace uses), and the session is saved to a persistent profile so it survives restarts.
Reads go through Slack's own internal JSON API (
conversations.history,conversations.replies,conversations.view), replayed from inside the logged-in browser context so the session cookie + boot token authenticate them. This is far more robust than scraping the virtualized React DOM.Navigation uses the UI only to resolve a human channel name to its id (the quick switcher routes to
/client/T…/<channel id>, which we read off the URL).Names — including Slack Connect / external members that per-id lookups won't return — are harvested in one
conversations.viewcall per channel.
Tools
Tool | Description |
| List channels/DMs visible in your sidebar. |
| Read recent messages in a channel/DM ( |
| Read a thread by matching text in its parent message. |
| Search messages workspace-wide with Slack search syntax. |
Requirements
Python 3.13+
uv(providesuvx)
Install & run
Run straight from GitHub with uvx — no clone needed:
uvx --from git+https://github.com/sercant/web-slack-mcp web-slack-mcpOn the first launch the server downloads the Chromium build Playwright drives
into Playwright's shared cache (~/Library/Caches/ms-playwright on macOS), so it
happens once and persists across runs.
Register with Claude Code
claude mcp add web-slack -- \
uvx --from git+https://github.com/sercant/web-slack-mcp web-slack-mcpThen reload Claude Code; the tools appear as mcp__web-slack__*. The first time
you call a read tool while signed out, the server opens a visible Chromium and
waits for you to sign in — no separate step. The session is saved and reused on
later runs.
Other MCP clients
Any client that speaks stdio works — point it at the same command:
{
"mcpServers": {
"web-slack": {
"command": "uvx",
"args": [
"--from", "git+https://github.com/sercant/web-slack-mcp",
"web-slack-mcp"
]
}
}
}Configuration
All optional, via environment variables:
Variable | Default | Purpose |
|
| Slack web client URL. |
|
| Where the persistent browser profile (your session) lives. |
|
|
|
|
| Seconds a read tool waits for you to finish signing in before giving up. |
The profile directory holds your live Slack session — treat it like a credential and keep it out of version control (it's gitignored here).
Local development
git clone https://github.com/sercant/web-slack-mcp
cd web-slack-mcp
uv sync
uv run web-slack-mcpLicense
MIT
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/sercant/web-slack-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server