Skip to main content
Glama
sercant

web-slack-mcp

by sercant

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.view call per channel.

Related MCP server: Slack MCP Server

Tools

Tool

Description

list_channels

List channels/DMs visible in your sidebar.

read_messages

Read recent messages in a channel/DM (channel, limit).

read_thread

Read a thread by matching text in its parent message.

search_messages

Search messages workspace-wide with Slack search syntax.

Requirements

  • Python 3.13+

  • uv (provides uvx)

Install & run

Run straight from GitHub with uvx — no clone needed:

uvx --from git+https://github.com/sercant/web-slack-mcp web-slack-mcp

On 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-mcp

Then 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_URL

https://app.slack.com/client

Slack web client URL.

SLACK_PROFILE_DIR

.slack-profile

Where the persistent browser profile (your session) lives.

SLACK_HEADLESS

0

1 runs headless. Login needs a visible window, so keep 0 for the initial sign-in.

SLACK_LOGIN_WAIT

180

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-mcp

License

MIT

Available Tools

5 tools
check_loginA

Report whether the persistent browser session is logged into Slack.

Navigates to the Slack web client and checks for the app shell. Does not modify anything. Run login first if this reports logged out.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but description clarifies it is read-only (does not modify anything) and explains the navigation check. A minor gap is not mentioning potential network latency or response details, but output schema covers return values.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each serving a purpose: purpose, mechanism, usage guidance. No wasted words, front-loaded key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 0 parameters, presence of output schema, and sibling descriptions, the description covers all needed information: what it does, how, and when to use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so description adds no parameter info. Schema coverage is 100% trivially. Per guidelines, 0 params baseline is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reports login status for Slack, specifies the method (navigates to web client, checks for app shell), and distinguishes from sibling login by advising to run login first if logged out.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to run login first if reports logged out, and states it does not modify anything, providing clear when-to-use and when-not-to-use context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_channelsA

List the channels and DMs visible in your Slack sidebar.

Read-only. Note the sidebar is virtualized, so only currently-rendered entries appear; collapsed or scrolled-off sections may be omitted.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It explicitly states 'Read-only' and warns that the sidebar is virtualized, meaning only currently-rendered entries appear and collapsed sections may be omitted. This adds important behavioral context beyond a simple list operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two sentences. It front-loads the primary purpose and provides the key caveat about virtualization. Every sentence adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with zero parameters and an output schema (so return values don't need description), the description covers the essential points: what it lists, read-only behavior, and the important limitation of virtualized sidebar rendering. This is complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so the baseline is 4. The description does not need to add parameter information because none exist. The schema coverage is 100% automatically.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List the channels and DMs visible in your Slack sidebar.' This is a specific verb+resource combination and distinguishes the tool from its siblings (check_login, login, read_messages, read_thread) which do not perform listing of channels.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidelines are provided for when to use this tool versus alternatives. The description does not mention when not to use it or suggest other tools for different scenarios, leaving the agent without context on selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

loginA

Open Slack in a visible window so you can log in manually.

Optional — the read tools open this window on their own when you're signed out. Polls up to wait_seconds for the app shell after you finish SSO / magic-link sign-in; the session is saved to the persistent profile.

ParametersJSON Schema
NameRequiredDescriptionDefault
wait_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description transparently discloses behavior: opens visible window for manual login, polls up to wait_seconds for app shell, and persists the session. It omits details on timeout handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences, front-loaded with purpose. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, the description covers purpose, usage, parameter, and behavior. It does not mention error conditions, but is sufficiently complete for a straightforward login action.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description adds 'Polls up to `wait_seconds` for the app shell after you finish SSO / magic-link sign-in', explaining the parameter's purpose and how it affects behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Open Slack in a visible window so you can log in manually.' It distinguishes from sibling tools like check_login (which checks status) and read tools that auto-open the window.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description notes that read tools auto-open the window when signed out, making this tool optional. It provides context on when to use manually, but could be more explicit about specific scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_messagesA

Read the most recent messages in a channel or DM.

channel is matched via the quick switcher (name or partial name). Fetches up to limit most-recent messages from Slack's API and returns them oldest-first as [time] Name: text. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
channelYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses read-only nature, output format, and channel matching via quick switcher. While it lacks auth or error details, these are reasonable for a read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with front-loaded purpose, followed by specific details on channel matching, limit, and output format. Every sentence serves a purpose with no repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (not shown), the description explains output format effectively. It covers channel behavior and limit semantics. Missing error info is acceptable for a simple read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description must add parameter meaning. It explains channel matching via quick switcher and limit fetches most-recent messages. Both parameters are addressed, adding value beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads most recent messages, specifying the resource (messages) and action (read). It distinguishes from siblings like list_channels and read_thread, which are different operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context (getting recent messages) and notes it is read-only. However, it does not explicitly specify when to use this tool versus alternatives like read_thread, though sibling names make distinctions clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_threadA

Read the thread hanging off a message (parent + replies).

Finds the most recent message in channel whose text contains message_text, then fetches its thread via Slack's API. Returns up to limit messages, oldest-first. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
channelYes
message_textYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description notes read-only, explains algorithm (find message by text, fetch thread), ordering, and limit. Lacks details on error scenarios or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences: first states purpose, second explains process and output. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers core behavior and output (up to limit messages, oldest-first). With output schema present, return values are covered. Missing error handling when message not found.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has no descriptions (0% coverage). Description explains each parameter: channel, message_text used for search, limit for max results. Adds meaning beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool reads a thread (parent + replies) from a message. Distinguishes from sibling 'read_messages' by specifying thread context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Describes the search mechanism but does not explicitly contrast with sibling 'read_messages' or explain when to use this tool over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 5 tool updatesv0.1.0
    • First observedcheck_login
    • First observedlist_channels
    • First observedlogin
    • First observedread_messages
    • First observedread_thread

TDQS

A4.3/5.0
Disambiguation5/5

Each tool has a clear, distinct purpose: authentication status, channel listing, login, message reading, and thread reading. No overlap in functionality.

Naming Consistency5/5

All tools follow a consistent verb_noun naming pattern (check_login, list_channels, read_messages, read_thread), with 'login' being a natural exception as a standalone verb.

Tool Count4/5

Five tools is a reasonable count for a focused Slack read-only client. It covers the essential operations without being excessive, though a send tool might be expected.

Completeness3/5

The tool set covers authentication, channel enumeration, and message reading, but lacks write operations like sending messages or creating channels, which limits completeness for general Slack use.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A read-only MCP server that enables AI assistants to access Slack workspace data, including channels, messages, threads, and user information.
    24,316
    3
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to read messages, threads, channel info, user profiles, search conversations, and generate permalinks in Slack workspaces.
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Read-only MCP server for Slack with OAuth 2.1 authentication, enabling message retrieval, thread replies, search, user and channel listing.
    8
    Apache 2.0

Latest Blog Posts

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