{
  "markdown": "# slack-mcp\n\n\n<!-- mycelium-badges:start -->\n\n<p>\n  <a href=\"https://github.com/adelaidasofia/slack-mcp/blob/main/LICENSE\"><img alt=\"License\" src=\"https://img.shields.io/github/license/adelaidasofia/slack-mcp?color=blue\"></a>\n  <a href=\"https://github.com/adelaidasofia/slack-mcp/stargazers\"><img alt=\"GitHub stars\" src=\"https://img.shields.io/github/stars/adelaidasofia/slack-mcp?color=eab308\"></a>\n  <a href=\"https://github.com/adelaidasofia/slack-mcp/commits/main\"><img alt=\"Last commit\" src=\"https://img.shields.io/github/last-commit/adelaidasofia/slack-mcp\"></a>\n  <a href=\"https://github.com/adelaidasofia/slack-mcp/issues\"><img alt=\"Open issues\" src=\"https://img.shields.io/github/issues/adelaidasofia/slack-mcp\"></a>\n  <a href=\"https://pypi.org/project/adelaidasofia-slack-mcp/\"><img alt=\"PyPI version\" src=\"https://img.shields.io/pypi/v/adelaidasofia-slack-mcp?color=blue&label=pypi\"></a>\n  <a href=\"https://pypi.org/project/adelaidasofia-slack-mcp/\"><img alt=\"PyPI downloads\" src=\"https://img.shields.io/pypi/dm/adelaidasofia-slack-mcp?color=blue&label=downloads\"></a>\n  <a href=\"https://myceliumai.co\"><img alt=\"Built by Mycelium AI\" src=\"https://img.shields.io/badge/built_by-Mycelium_AI-15B89A\"></a>\n</p>\n\n<!-- mycelium-badges:end -->\n\nMulti-workspace Slack MCP server with draft+confirm safety, vault auto-export, and triple-mode auth.\n\nOne process, N workspaces, every write goes through draft → confirm. Built because the existing Slack MCP servers are single-workspace per instance and the Anthropic reference impl was deprecated.\n\n## Why use this over the alternatives\n\n| | This | Anthropic connector | korotovsky/slack-mcp-server |\n|---|---|---|---|\n| Multi-workspace per server | Yes | No | No |\n| Draft + confirm on writes | Yes | No | No |\n| Vault auto-export of reads | Yes | No | No |\n| Prompt-injection scrubber | Yes | No | No |\n| Audit log | Yes | No | No |\n| xoxc / xoxp / xoxb auth | Yes | n/a | Yes |\n| Status | Active | Active (limited) | Active |\n\n## Install\n\nOpen Claude Code, paste:\n\n    /plugin marketplace add adelaidasofia/slack-mcp\n    /plugin install slack-mcp@slack-mcp\n\nThen fill in tokens in `.env` (see SETUP.md for cookie extraction walkthrough).\n\n<details>\n<summary>Legacy install</summary>\n\n```bash\ngit clone https://github.com/adelaidasofia/slack-mcp.git ~/.claude/slack-mcp\ncd ~/.claude/slack-mcp\npip3 install --break-system-packages -r requirements.txt\ncp .env.example .env\n# fill in tokens — see SETUP.md for cookie extraction walkthrough\n```\n\nRegister in your project `.mcp.json` (or via `claude mcp add -s user`):\n\n```json\n{\n  \"mcpServers\": {\n    \"slack\": {\n      \"command\": \"python3\",\n      \"args\": [\"-m\", \"slack_mcp.server\"],\n      \"cwd\": \"/Users/YOU/.claude/slack-mcp\"\n    }\n  }\n}\n```\n\nRestart Claude Code, then run `claude mcp list` to verify `slack` shows up.\n\n</details>\n\n## Tools (v0.1.1)\n\n**Meta:** `list_workspaces`, `healthcheck`\n\n**Read:** `list_channels`, `search_channels`, `read_channel`, `read_thread`, `list_users`, `search_users`, `get_user_profile`, `search_messages`\n\n**Write (draft+confirm):** `send_message` → `confirm_send`, `send_reply_quote` → `confirm_send`, `update_own_message` → `confirm_send`, `cancel_draft`\n\n**Write (low-consequence, immediate):** `add_reaction`, `mark_read`, `delete_own_message`\n\n## Auth modes\n\n| Mode | Token shape | Capability | When to use |\n|---|---|---|---|\n| `xoxc` | `xoxc-...` + `xoxd-...` cookie | Full (search, internal APIs) | Default. Best for personal use across multiple workspaces. |\n| `xoxp` | `xoxp-...` | Permanent, OAuth, search restricted on free plans | If you don't want occasional cookie re-extraction. |\n| `xoxb` | `xoxb-...` | Bot-only, no search, invited channels only | Rare. Use only when you want bot semantics. |\n\nCookie extraction takes ~3 minutes per workspace. See SETUP.md.\n\n## Vault auto-export\n\nEvery `read_channel` call mirrors the channel to `<vault>/🤖 AI Chats/Slack/<workspace>/<channel>.md`. Idempotent (same channel + day overwrites cleanly). Disable via `SLACK_MCP_VAULT_EXPORT=false`.\n\n## Configuration\n\nAll config via env vars (loaded from `.env` at process start):\n\n- `SLACK_WORKSPACES` — comma-separated list of aliases (e.g. `onde,mycelium`)\n- `SLACK_PRIMARY_WORKSPACE` — default workspace when tool calls omit `workspace`\n- Per-workspace: `SLACK_WORKSPACE_<ALIAS>_TYPE`, `_TOKEN`, `_COOKIE` (xoxc only), `_TEAM_ID`, `_LABEL`\n- `SLACK_MCP_VAULT_PATH` — vault root for the auto-export mirror (default `~/Documents/Vault`)\n- `SLACK_MCP_VAULT_EXPORT` — `true`/`false` (default `true`)\n- `SLACK_MCP_AUDIT_LOG_PATH` — JSONL audit log path\n- `SLACK_MCP_DRAFT_TTL_SECONDS` — draft expiration (default 3600)\n- `SLACK_MCP_SCRUB_PROMPT_INJECTION` — `true`/`false` (default `true`)\n\n## Safety patterns\n\n- **Draft + confirm.** Every send (`send_message`, `send_reply_quote`, `update_own_message`) returns a `draft_id`. Nothing posts until `confirm_send(draft_id)` is called. Drafts expire after 1 hour. One-time confirm. `update_own_message` drafts include a before/after preview so the operator can diff before confirming the edit.\n- **Workspace required on writes.** No global default for sends — every write tool requires `workspace` to prevent wrong-workspace posts when channel names collide.\n- **Audit log.** Every tool call appends a JSONL record. Tokens are redacted.\n- **Prompt-injection scrubber.** Incoming message text is sanitized for known prompt-injection patterns (zalgo, role-spoof headers, fake fences). Hits are wrapped not deleted so the operator sees the attempt.\n- **Token redaction.** `list_workspaces` returns redacted profiles only. Tokens never appear in tool responses.\n\n## Related MCPs\n\nSame author, same architecture pattern (FastMCP, draft+confirm on writes where applicable, vault auto-export, MIT):\n\n- [imessage-mcp](https://github.com/adelaidasofia/imessage-mcp) - macOS iMessage\n- [whatsapp-mcp](https://github.com/adelaidasofia/whatsapp-mcp) - WhatsApp via whatsmeow\n- [google-workspace-mcp](https://github.com/adelaidasofia/google-workspace-mcp) - Gmail / Calendar / Drive / Docs / Sheets\n- [apollo-mcp](https://github.com/adelaidasofia/apollo-mcp) - Apollo.io CRM + sequences\n- [substack-mcp](https://github.com/adelaidasofia/substack-mcp) - Substack writing + analytics\n- [luma-mcp](https://github.com/adelaidasofia/luma-mcp) - lu.ma events\n- [parse-mcp](https://github.com/adelaidasofia/parse-mcp) - markitdown / Docling / LlamaParse router\n- [rescuetime-mcp](https://github.com/adelaidasofia/rescuetime-mcp) - RescueTime productivity data\n- [graph-query-mcp](https://github.com/adelaidasofia/graph-query-mcp) - vault knowledge graph queries\n- [investor-relations-mcp](https://github.com/adelaidasofia/investor-relations-mcp) - seed-raise pipeline tracker\n- [vault-sync-mcp](https://github.com/adelaidasofia/vault-sync-mcp) - bidirectional vault sync\n\n\n## Telemetry\n\nThis plugin sends a single anonymous install signal to `myceliumai.co` the first time it loads in a Claude Code session on a given machine.\n\n**What is sent:**\n- Plugin name (e.g. `slack-mcp`)\n- Plugin version (e.g. `0.1.0`)\n\n**What is NOT sent:**\n- No user identifiers, names, emails, tokens, or API keys\n- No file paths, message content, or anything from your work\n- No IP address is stored after dedup processing\n\n**Why:** Helps the maintainer know which plugins people actually install, so attention goes to the ones that get used.\n\n**Opt out:** Set the environment variable `MYCELIUM_NO_PING=1` before launching Claude Code. The hook will skip the network call entirely. Already-pinged installs leave a sentinel at `~/.mycelium/onboarded-<plugin>` — delete it if you want to reset state.\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n",
  "bytes": 7680,
  "sha": "899c954a97231c9fca127be34a398fb81263e12f3d79058a92c4d0300753e08c",
  "repo_slug": "adelaidasofia/slack-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_adelaidasofia_slack_mcp_9a40a705/readme"
}