Vexa
Meeting bot and transcripts for Google Meet, Teams and Zoom. Live or after, speakers labelled.
作者提供的说明(英文原文)
Slack MCP server: channels, messages, threads, reactions, users, files, and scheduled messages
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
SLACK_CONFIG_PATH, SLACK_TEAM_ID, SLACK_CLIENT_ID, SLACK_CLIENT_SECRET, SLACK_DISABLE_REFRESH, SLACK_REQUEST_TIMEOUT_MS, SLACK_MAX_RETRIES, MCP_WORKSPACE_PATH标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"slack": {
"command": "npx",
"args": [
"-y",
"@mindstone/mcp-server-slack"
],
"env": {
"SLACK_CONFIG_PATH": "your-value",
"SLACK_TEAM_ID": "your-value",
"SLACK_CLIENT_ID": "your-value",
"SLACK_CLIENT_SECRET": "your-value",
"SLACK_DISABLE_REFRESH": "your-value",
"SLACK_REQUEST_TIMEOUT_MS": "your-value",
"SLACK_MAX_RETRIES": "your-value",
"MCP_WORKSPACE_PATH": "your-value"
}
}
}
}在终端中运行这条命令
claude mcp add slack --env SLACK_CONFIG_PATH=your-value --env SLACK_TEAM_ID=your-value --env SLACK_CLIENT_ID=your-value --env SLACK_CLIENT_SECRET=your-value --env SLACK_DISABLE_REFRESH=your-value --env SLACK_REQUEST_TIMEOUT_MS=your-value --env SLACK_MAX_RETRIES=your-value --env MCP_WORKSPACE_PATH=your-value -- npx -y @mindstone/mcp-server-slack运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"slack": {
"command": "npx",
"args": [
"-y",
"@mindstone/mcp-server-slack"
],
"env": {
"SLACK_CONFIG_PATH": "your-value",
"SLACK_TEAM_ID": "your-value",
"SLACK_CLIENT_ID": "your-value",
"SLACK_CLIENT_SECRET": "your-value",
"SLACK_DISABLE_REFRESH": "your-value",
"SLACK_REQUEST_TIMEOUT_MS": "your-value",
"SLACK_MAX_RETRIES": "your-value",
"MCP_WORKSPACE_PATH": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"slack": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@mindstone/mcp-server-slack"
],
"env": {
"SLACK_CONFIG_PATH": "your-value",
"SLACK_TEAM_ID": "your-value",
"SLACK_CLIENT_ID": "your-value",
"SLACK_CLIENT_SECRET": "your-value",
"SLACK_DISABLE_REFRESH": "your-value",
"SLACK_REQUEST_TIMEOUT_MS": "your-value",
"SLACK_MAX_RETRIES": "your-value",
"MCP_WORKSPACE_PATH": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
SLACK_CLIENT_ID envSLACK_DISABLE_REFRESH envSLACK_REQUEST_TIMEOUT_MS envSLACK_MAX_RETRIES envMCP_WORKSPACE_PATH env这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 mindstone 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
你需要填写:SLACK_CONFIG_PATH, SLACK_TEAM_ID, SLACK_CLIENT_SECRET
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.3.7)于今天进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。
同一分类中有:Vexa, emailmd, MCP WhatsApp Cloud
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Meeting bot and transcripts for Google Meet, Teams and Zoom. Live or after, speakers labelled.
Render markdown into email-safe HTML, lint drafts for deliverability problems, and preview emails.
MCP server for WhatsApp Cloud API (Meta) — messages, media, and templates via Graph API
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
Slack workspace MCP server — channels, messages, threads, reactions, users, files, bookmarks, and scheduled messages via the Slack Web API.
*Multi-workspace Slack MCP. Host-driven OAuth, per-workspace credentials files on disk, and a security review on every release.*
SLACK_CLIENT_SECRET)STATUS.jsonWhen we started building this connector, Slack had not yet released an official MCP server — that came later (announced February 2026, generally available April 2026). The community Slack MCPs available at the time each got parts of the job right, but none of them combined fast user-name lookups for small and medium workspaces, the correct mention format for modern Slack (most still used the deprecated link_names=true), support for more than one Slack workspace from the same user account, and tokens that stay on the user's own machine. Slack's official server now exists and is a fine choice for many use cases. We continue to maintain this one because the host application handles the login flow, each workspace has its own credentials file on disk under the user's control, and the connector goes through our own security review before each release.
"Find the most recent message from Alice in #q3-planning and react with :eyes:."
Tools the host calls:
lookup_user_by_email — resolves Alice's email to her Slack user ID.search_slack_messages — searches #q3-planning for her most recent message, returning the channel + timestamp.add_slack_reaction — adds the eyes reaction to that message.Response (trimmed):
{
"match": { "channel": "C08X...", "ts": "1715953812.004200", "user": "U07Z...", "text": "Pushed the updated forecast to the doc, ready for review." }, "reaction": { "ok": true, "name": "eyes" } }
${SLACK_CONFIG_PATH}/workspaces/{teamId}.json. This server reads those files; it does not initiate OAuth itself.After clicking the button, your host will prompt you to fill: SLACK_CONFIG_PATH, SLACK_TEAM_ID, SLACK_CLIENT_SECRET, SLACK_REQUEST_TIMEOUT_MS, SLACK_MAX_RETRIES.
Manual config for Claude Desktop / Claude Code / Goose / Continue.dev (Slack)
{
"mcpServers": { "Slack": { "command": "npx", "args": [ "-y", "@mindstone/mcp-server-slack" ], "env": { "SLACK_CONFIG_PATH": "", "SLACK_TEAM_ID": "", "SLACK_CLIENT_SECRET": "", "SLACK_REQUEST_TIMEOUT_MS": "60000", "SLACK_MAX_RETRIES": "10" } } } }
cd <path-to-repo>/connectors/slack
npm install npm run build
npx -y @mindstone/mcp-server-slack
node dist/index.js
This server is designed to run alongside a host application that performs the Slack OAuth flow on its own. The host writes credentials to disk; this server reads them.
SLACK_CONFIG_PATH — Path to the Slack config directory (host-managed). Contains config.json (workspace metadata) and workspaces/{teamId}.json (per-workspace tokens, mode 0600).SLACK_TEAM_ID — Workspace team ID (per-workspace instance).SLACK_CLIENT_ID — OAuth Connected App client ID. Only needed to refresh a *rotating* token. Saved non-rotating tokens authorize the Slack API directly without it. When a refresh is required but this is absent, the server fails loud with REFRESH_NO_CLIENT_CREDENTIALS and directs the host to re-authenticate.SLACK_CLIENT_SECRET — OAuth Connected App client secret. Same conditions as SLACK_CLIENT_ID.SLACK_DISABLE_REFRESH — Set to 1 to disable token refresh on this surface. The server will fail-closed with a structured auth_required response on token expiry instead of attempting an oauth.v2.access refresh. Use this on the cloud surface so desktop remains the sole refresh authority and avoids racing for single-use refresh tokens.SLACK_REQUEST_TIMEOUT_MS — Override the default 60s upstream timeout. Must be a positive integer ≤ 300000 (5 minutes).MCP_WORKSPACE_PATH — Directory that upload_slack_file reads are constrained to. Paths outside it (including symlinks pointing outside) are refused. Defaults to the system temp dir when unset.The host calls the authenticate_slack_workspace tool. The OSS server returns a structured auth_required response of the form:
{
"status": "auth_required", "user_action": { "id": "slack.connect_workspace", "label": "Connect Slack", "instruction": "Click \"Connect Slack\" in the side panel to authorise the workspace." }, "agent_action": { "instruction": "Tell the user to click the Connect Slack button in the connector settings to authorise. Then call list_slack_workspaces to verify." }, "setupToolName": "authenticate_slack_workspace" }
The host's MCP service recognises this shape and dispatches to its registered Slack OAuth orchestrator (the desktop browser flow). Once the user signs in, the host writes tokens to ${SLACK_CONFIG_PATH}/workspaces/{teamId}.json and the server picks them up on the next call.
The OSS server never initiates OAuth itself.
This server is designed for host-orchestrated OAuth: the host writes per-workspace token files to disk and the server reads them. The examples below show the env shape — your host application is responsible for populating ${SLACK_CONFIG_PATH}/workspaces/{teamId}.json before tool calls succeed.
{
"mcpServers": { "Slack": { "command": "npx", "args": ["-y", "@mindstone/mcp-server-slack"], "env": { "SLACK_CONFIG_PATH": "/absolute/path/to/slack-config", "SLACK_TEAM_ID": "T0123ABCD", "SLACK_CLIENT_ID": "your-slack-app-client-id", "SLACK_CLIENT_SECRET": "your-slack-app-client-secret" } } } }
Until the host has written ${SLACK_CONFIG_PATH}/workspaces/T0123ABCD.json for that team, every tool call returns a structured auth_required response (see the Authentication flow above).
{
"mcpServers": { "Slack": { "command": "node", "args": [" /connectors/slack/dist/index.js"], "env": { "SLACK_CONFIG_PATH": "/absolute/path/to/slack-config", "SLACK_TEAM_ID": "T0123ABCD", "SLACK_CLIENT_ID": "your-slack-app-client-id", "SLACK_CLIENT_SECRET": "your-slack-app-client-secret" } } } }
list_slack_users, get_slack_user_profile, lookup_user_by_email, message name enrichment and the profile shown by open_slack_dm use user authorization first. If it is absent or refused for authorization, scope or token-type reasons, the read may try bot authorization once. A retry starts the read again, including pagination and username resolution. Neither authorization can supply permissions it was not granted; email lookup still needs users:read.email.
If obtaining user credentials reports TOKEN_PERSIST_FAILED, these reads try once more to obtain credentials for user authorization before starting the Slack API read. If the retry fails or finds no user credentials, the read ends without trying bot authorization. Other operational errors do not trigger authorization fallback. Writes keep their identity: opening a DM uses user authorization once, and send_myself_a_note uses only bot authorization. If Slack refuses the app's authorization, the app cannot send you a notification even while other Slack actions still work. Reconnecting may restore it.
list_slack_workspaces tests bot and user authorization independently with auth.test. connected means at least one passed; tokenHealth.botToken and tokenHealth.userToken report each result separately (valid, refused, unavailable, or missing / not_configured). Having a saved token does not establish that Slack accepts it. When no probe passes and at least one is unavailable, follow the retry/status guidance rather than reconnecting immediately. Confirmed expiry with refresh disabled still requires authentication.
The Slack API error classifier preserves the four canonical refusal strings invalid_auth, token_expired, token_revoked and account_inactive byte-for-byte as code, alongside recovery guidance and next_step. Existing API error normalizations include ratelimited → rate_limited, not_allowed_token_type → missing_scope, and users_not_found → user_not_found. Other Slack API error strings pass through unchanged as code. Refresh refusals use the provider's REFRESH_AUTH_REJECTED code with the upstream string in extra data (slack_error_code). The final tool response shape depends on the tool, including existing auth_required responses.
For the people tools and enrichment helpers named above, DM opening and send_myself_a_note, errors include token_role (user or bot) when the attempted role is known, including operational credential-acquisition errors. Structured acquisition failures keep their existing recovery shape.
Each token request reads the token file. If a permission or disk error prevents that read, bot and user token requests can use the requested role's cached credentials already held in memory, including unsaved refresh results, only when that token exists and does not need ref
只显示了开头部分;其余内容请在仓库中阅读