slack_token_status
Token Status
Check token health, age, auto-refresh status, and cache stats
無需輸入參數。
io.github.jtalk22由 GitHub 帳號 jtalk22 發布v5.2.1更新於 Nov 3, 2026
無需閱讀即可掌握 Slack 動態。未讀訊息、話題串、搜尋。支援瀏覽器工作階段或託管 OAuth。
AI 翻譯由 AI 模型根據下方的原文描述翻譯,可能有誤。
Catch up on Slack without reading it. Unreads, threads, search. Browser-session or hosted OAuth.
Slack 的託管 MCP 服務(mcp.revasserlabs.com);需要 OAuth 登入;Streamable HTTP;20 個工具。
暫無 AI 概覽:以下資訊來自註冊中心條目和服務本身。
Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。
把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。
閱讀 https://sourceweft.com/mcp/io.github.jtalk22%2Fslack-mcp-server/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。把它新增到你客戶端的 mcpServers 設定中。 客戶端會在首次連接時完成 OAuth 登入。
{
"mcpServers": {
"slack": {
"type": "http",
"url": "https://mcp.revasserlabs.com/oauth/mcp"
}
}
}[npm version] [downloads per year] [weekly downloads] [Node] [License: MIT]
[Docker image] [MCP Registry] [CI] [npm provenance signed]
[Slack MCP channel mark]Unreads, threads, and search — in your agent’s context, from the session you already have.
Set it up, then register it with your client.
Check where your credentials are stored and how old they are, or run it read-only so your agent can read Slack but never post.
On Enterprise Grid, Slack can end a session it sees being automated. Use Slack's official MCP server there.
Claude Code Claude Desktop Cursor Copilot Windsurf Gemini CLI Codex CLI any stdio MCP client
What’s new in 5.1 · ▶ the whole morning in three minutes · interactive walkthrough · setup guide
Checked against Slack's published plans and pricing on 2026-10-07.
A free workspace keeps 90 days of message history, allows 10 app integrations, and gets only Slack's basic AI. The AI people actually want — AI search across the workspace, channel recaps, Slackbot acting as an agent, AI workflow generation — starts on Business+ at $15 per user per month on annual billing ($18 month to month). Pro, at $7.25, buys unlimited history and unlimited apps, not the advanced AI. So a ten-person free workspace that wants an AI it can ask about its own Slack is looking at $1,800 a year, and the cheaper upgrade does not get them there.
This package gives that workspace an agent over the same Slack for nothing, running on the AI subscription its people already pay for. Three things follow from how it works:
slack_get_full_conversation writes them out with their threads while they are still inside the window. It cannot retrieve anything already past the line; nothing can.The browser-session route is not a workaround to apologise for. For a workspace Slack's own AI does not serve, it is the only route there is.
Slack's official MCP server is an app your workspace admin approves and controls. Use it when your organisation wants a sanctioned integration. This server uses the browser session already in Chrome instead, so there is no app to install and no admin to ask, and it runs as a local command for any stdio MCP client. It acts as you, with exactly your access.
Treat browser-session automation as an acceptable-use decision for you and your workspace. The server acts as your signed-in Slack identity and cannot read a channel you cannot read or act as another user. It does not evade server-side retention, DLP, compliance exports, or audit controls.
"No admin request" means there is no Slack app installation to approve. It does not mean workspace activity disappears from Slack's systems. If your policy requires a sanctioned integration, use Slack's official MCP server.
Node 22 or 24 recommended. Node 20+ is supported and CI-tested.
Prefer a persistent CLI: npm install -g @jtalk22/slack-mcp then slack-mcp --setup.
Then:
--setup prints when it finishes.claude mcp add line it prints.slack_health_check.Per-client configuration keys are in the setup guide.
Use the same server command everywhere:
On macOS, setup can extract from Chrome and persist the selected storage backend. On other platforms, provide SLACK_TOKEN and SLACK_COOKIE through the client's environment configuration. Docker, HTTP, and detailed client examples live in docs/SETUP.md and docs/DEPLOYMENT-MODES.md.
Read channels, DMs, threads and search; act with a reply, a reaction or a read-state change; run the catch-up and typed workflows locally. The surface is 20 tools today: 13 read-only operations, 4 write-path tools that each carry an MCP destructive annotation so clients can gate workspace writes, and 3 local workflow tools. One of the reads is slack_session_report, which reads nothing from Slack: it returns what this process has done, as counts. Every tool does its work here — reads Slack or local state — and none is a placeholder for something you would have to pay for. Four read tools accept include_rich_message_fields: true to surface attachments, blocks, files, reactions, and metadata—complete inputs and response contracts live in docs/API.md.
Speaks MCP 2026-07-28 and every 2025 revision from the same binary — era-negotiated over stdio, stateless per request over HTTP (no Mcp-Session-Id; GET/DELETE answer 405). The claim is a test, not a sentence: test/mcp-era.test.js drives the real SDK client at both eras against the real entry points.
Advertising fewer tools. Every tool the server advertises sends its schema to the model on every turn, before you ask anything. SLACK_MCP_TOOLS=essentials advertises six (unread, history, search, thread, user lookup, send); SLACK_MCP_TOOLS=read the 13 read-only operations; --tools=slack_x,slack_y an explicit set. The default is all 20. Filtering changes what is advertised, not what is callable.
slack_refresh_tokens reads Slack and writes only local credential state.
Bind a workflow kind to channels, priority people, retention, and cadence. slack_catch_me_up then reads that scope locally and hands your agent the evidence: which threads went unanswered and for how long, what your priority people said or were pinned on, which conversations actually moved. It does the gathering; your agent writes the summary against the contract below.
There is no server-side model in that path, because there does not need to be one — the client calling this server is already a language model. Hosted adds what needs a server: running the same catch-up on a schedule while your laptop is shut.
Six editable templates ship in the package: oncall-handoff, support-triage, exec-monday, sprint-tracker, customer-feedback, and incident-room.
Three playbooks ship with the server, so an agent learns how to use these tools with nothing installed in the client.
slack-catch-up walks the agent through finding or creating the right workflow profile, running slack_catch_me_up, and citing the message behind every line. On a narrowed tool profile it builds the same answer from unreads, history and threads.slack-workflow-profiles covers choosing the kind, channels, priority people and cadence for a profile, or starting from a template.slack-send-safely keeps writes to what you ask for, explains a held send, and points to slack_session_report for what the session did.Clients get them through the MCP Skills extension (SEP-2640: skills/list, skills/get), as skill://<name>/SKILL.md resources, or as prompts of the same name. A playbook is offered only when its tools are, so a read-only server never offers the sending playbook and the essentials profile never offers profile setup.
Add your team's own with SLACK_MCP_SKILLS_DIR=/path/to/skills, a folder of playbook folders that each hold a SKILL.md. They are checked at startup and served beside the bundled ones. An invalid one, or one that reuses a bundled name, is skipped with a warning on stderr. SLACK_MCP_SKILLS=off turns playbooks off.
Every message this server returns becomes text in a model's context, next to your own instructions. Slack is a shared bus: a channel can hold Slack Connect participants from another workspace, guests, and apps relaying content from outside Slack entirely — and the same toolset that reads also writes. That adjacency is the risk worth naming.
Each message carries origin (self, internal, external, bot, unknown) and author_trusted, derived from fields Slack already returns, so it costs no extra API call. bot outranks workspace membership, because an app inside your workspace routinely relays words written outside it. A batch containing outside authors carries an untrusted_content envelope naming the count.
It fails closed: an author this server cannot positively place inside your workspace is reported untrusted. The exception is a conversation Slack reports as not shared with any other workspace — one of those structurally cannot hold an outside author, so a colleague with no team id on their message is called internal rather than unknown. When that lookup fails, the label stays unknown.
SLACK_MCP_PROVENANCE=off|label|strict. label is the default and only adds keys. A per-call provenance argument may tighten the mode and never loosen it, because a caller asking for fewer labels may be repeating something it read.
A label is advice to the model reading it. It is unsigned, it can be stripped by anything downstream, and it raises the cost of an injected instruction without making one impossible.
strict mode additionally holds slack_send_message once the session has read outside-authored text. The hold is released by confirm_untrusted_context, which the caller sets — so it interrupts the send and puts it on the record, but it cannot prove a human approved it.
Two surfaces are still unlabelled, and knowing that is better than assuming otherwise: user display names, real names and titles from the user tools, and channel topics and purposes from slack_list_conversations, are attacker-settable free text that reaches the model without an origin stamp.
The four write-path tools are withheld from tools/list and refused at dispatch, because a client can call a name it was never offered. The filter is applied after the tool profile resolves, so no profile or custom tool list widens it back. An absent tool needs no trust in the model that would have called it.
slack_session_report returns what this process actually did: messages read, how many were outside-authored and by which origin, writes attempted, writes held. Counts only — no message text, no channel name, no user id. A label is a claim about one message; this is the claim about the session, and it is how you check afterwards whether outside text reached the model and whether anything tried to send on the back of it.
A clean result means the package you installed was built and signed by this repository's release workflow. Read the code before giving it your Slack session. Full policy: SECURITY.md.
Five parts sit under the tools: extraction from Chrome, credential storage, reads, writes, and typed workflow output. All of it is plain JavaScript in this repository.
--setup turns the Slack identity Chrome already holds into a local MCP server:
xoxc- token in Chrome's on-disk LevelDB;keychain_timeout, no_slack_cookie_row, cookie_decrypt_failed, and more—instead of returning one opaque error.Slack session credentials rotate. The server handles that with:
auto, keychain-only, and file storage backends;Read DMs and channels, search the workspace, export complete histories with threads, inspect unread state, and resolve users. Opt into blocks, attachments, files, reactions, metadata, and bot/app markers when text alone is not the real message.
Send a reply, add or remove a reaction, and mark a conversation read. Every write tool carries MCP's destructive annotation, so compatible clients ask before running it.
Save workflow profiles for incident rooms, executive briefs, support inboxes, launch watches, and your own. Profiles are local JSON; the hosted tier can deliver them as scheduled briefs.
The server checks these in order and uses the first it finds.
Session credentials expire, and how long they last varies: one written on 2026-07-04 still worked on 2026-10-07. slack_token_status shows the age of yours. When Slack rejects it (invalid_auth, not_authed, token_expired, token_revoked, account_inactive or HTTP 401), run npx -y @jtalk22/slack-mcp --setup. On macOS, slack_refresh_tokens or --refresh-tokens refreshes without leaving your client, and the optional LaunchAgent in docs/SETUP.md keeps an idle install working.
Enterprise Grid. Grid runs aggressive session-anomaly detection. Browser-session automation can trip it, which flags the session and kills it, regardless of which tool drives the traffic. Outbound calls are paced by default to stay under burst thresholds (SLACK_MCP_MIN_REQUEST_INTERVAL_MS, default 350; SLACK_MCP_MAX_CONCURRENCY, default 3). Pacing lowers that risk; it does not remove it. On Grid, use Slack's official MCP server.
Credential extraction. --setup reads the newest xoxc- token from Chrome's on-disk LevelDB, snapshots the cookie SQLite database, retrieves Chrome Safe Storage from the macOS Keychain, and runs PBKDF2 + AES-128-CBC decryption locally. It writes the token file, Keychain entries, and non-secret metadata. It transmits nothing — the server talks to Slack and nowhere else.
This is the same access pattern credential stealers use. Chrome App-Bound Encryption exists to make this class of read harder, and infostealer families (Lumma, Vidar, Meduza) bypass it to lift live sessions. The mechanism here is comparable. What differs is that you run it, on your own machine, against your own session, and nothing leaves the host. The source is plain JavaScript in this repository; audit it before handing it a live session.
User cache. One cache exists: user-name lookups, populated on demand, 500 entries maximum, one-hour TTL. No message content, no channel history, and no persistent copy of the workspace is stored.
The selected backend is remembered in non-secret metadata and used by the server, CLI, and optional refresh job. An unrecognized mode fails at startup instead of silently downgrading storage.
Each profile gets its own token file, Keychain entries, metadata, and lock. Add SLACK_MCP_CHROME_PROFILE when the workspaces live in different Chrome profiles.
The package runs on your machine, talks only to Slack, and is free under the MIT license. The hosted tier runs on a schedule instead, so the brief arrives while your laptop is closed:
The package works without the hosted tier.
Setup · API · Architecture · Compatibility · Deployment modes · Recipes · Troubleshooting · Roadmap
PRs are welcome. Read CONTRIBUTING.md and run node --check on touched JavaScript before submitting.
MIT — see LICENSE.
Not affiliated with Slack Technologies, Inc. This server uses browser-session credentials. Review your workspace's acceptable-use policy before running it.
Your Slack. Your agent. One command.
If this removes a Slack tab from your day, star the repository. Stars are how the next admin-blocked developer finds the local path.
來源:README.md,提交 456fe9b
Token Status
Check token health, age, auto-refresh status, and cache stats
無需輸入參數。
Health Check
Check if Slack tokens are valid and show authentication status
無需輸入參數。
Refresh Tokens
Force refresh tokens by extracting from Chrome (macOS; requires having signed into Slack in Chrome)
無需輸入參數。
List Conversations
List all DMs and channels with user names resolved. Uses cached DMs by default for speed.
limittypesdiscover_dmsConversation History
Get messages from a channel or DM with user names resolved
limitlatestoldestchannel_id必填provenanceresolve_usersinclude_all_metadatainclude_rich_message_fieldsFull Conversation Export
Export FULL conversation history with all messages, threads, and user names. Can save to file.
latestoldestchannel_id必填provenanceoutput_filemax_messagesinclude_threadsinclude_all_metadatainclude_rich_message_fieldsSearch Messages
Search messages across the Slack workspace
countquery必填provenanceinclude_rich_message_fieldsUser Info
Get detailed information about a Slack user
user_id必填Send Message
Send a message to a channel or DM
text必填thread_tschannel_id必填provenanceconfirm_untrusted_contextGet Thread
Get all replies in a message thread
thread_ts必填channel_id必填provenanceinclude_all_metadatainclude_rich_message_fieldsList Users
List all users in the workspace
limitAdd Reaction
Add an emoji reaction to a message
reaction必填timestamp必填channel_id必填Remove Reaction
Remove an emoji reaction from a message
reaction必填timestamp必填channel_id必填Mark as Read
Mark a conversation as read up to a specific message timestamp
timestamp必填channel_id必填Unread Conversations
Get channels and DMs with unread messages, sorted by unread count (highest first)
limittypesSearch Users
Search workspace users by name, display name, or email. Case-insensitive partial match.
limitquery必填Save Workflow Profile
Save or update a workflow profile that binds a workflow_kind (support_inbox | incident_room | exec_brief | product_launch_watch | custom) to channels, priority people, retention mode, and summary cadence. Stored locally at ~/.slack-mcp-workflows.json. slack_catch_me_up reads the profile by name and returns evidence shaped by its workflow_kind.
channelsprofile_name必填workflow_kind必填retention_modepriority_peoplesummary_cadenceList Workflow Profiles
List all saved workflow profiles from ~/.slack-mcp-workflows.json. Optionally filter by workflow_kind. Returns profile_name, channels, priority_people, retention_mode, summary_cadence, structured_keys, created_at, updated_at.
workflow_kindCatch Me Up
Catch up on a saved workflow profile. Reads the profile's channels (or everything currently unread if the profile names none), pulls messages since the cadence window or an explicit `since`, expands active threads, and returns structured evidence: which threads are unanswered and for how long, what the profile's priority people said or were pinned on, and which conversations moved most. Runs locally against your own session — no hosted account, no server-side model. It also returns a `continuity` block — commitments someone made, asks nobody has claimed, and questions still unanswered — built from phrase and reply-count rules over the same messages, with the matched text and a permalink on every row so each line can be opened and checked. The response carries an `output_contract` naming the keys to compose for this workflow_kind; write the summary from the returned `signals`, `continuity` and `conversations`, citing conversation names and timestamps.
sinceprofile_name必填Session Report
What this server process has actually done, as counts: how many messages it read, how many of those were written by authors outside this workspace broken down by origin, how many sends were attempted, and how many were held. A provenance label is a claim about one message; this is the claim about the whole session, and it is the only way to check after the fact whether outside-authored text reached the model and whether anything tried to send on the back of it. Counts only — no message text, no channel name, no user id is recorded. The receipt and the strict hold belong to this server process, so over HTTP every client of the process shares them.
無需輸入參數。
已滿足適用檢查項的 100%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
npx -y @jtalk22/slack-mcp --setupclaude mcp add slack -- npx -y @jtalk22/slack-mcpnpx -y @jtalk22/slack-mcp --doctor --securitynpx -y @jtalk22/slack-mcp --read-onlynpx -y @jtalk22/slack-mcp --setup{ "command": "npx", "args": ["-y", "@jtalk22/slack-mcp"]}npx -y @jtalk22/slack-mcp --apply-template oncall-handoff --channels C012345,C067890npx -y @jtalk22/slack-mcp --read-only # or SLACK_MCP_READ_ONLY=1npm audit signatures{ "mcpServers": { "slack-work": { "command": "npx", "args": ["-y", "@jtalk22/slack-mcp"], "env": { "SLACK_MCP_PROFILE": "work" } }, "slack-personal": { "command": "npx", "args": ["-y", "@jtalk22/slack-mcp"], "env": { "SLACK_MCP_PROFILE": "personal" } } }}