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는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
SLACK_CLIENT_ID envSLACK_DISABLE_REFRESH envSLACK_REQUEST_TIMEOUT_MS envSLACK_MAX_RETRIES envMCP_WORKSPACE_PATH env이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 6일 점검
레지스트리 이름이 GitHub 계정 mindstone 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요
내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요
내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
입력해야 할 값: SLACK_CONFIG_PATH, SLACK_TEAM_ID, SLACK_CLIENT_SECRET
내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).
GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(0.3.7)은 오늘 레지스트리에 올라왔어요.
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 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
앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요