A Slack MCP server for the 2026-07-28 era, built on marianoguerra/mcp-server. Runs against an in-process mock workspace with no Slack account, or against real Slack with a token.
Dependencies
moon install marianoguerra/mcp-slack$ slack-mcp # stdio, mock workspace, built-in demo data
$ slack-mcp --data live --days 90 # mock workspace, real Feeling-of-Computing history
$ slack-mcp --backend real --token xoxb-… # a real Slack workspace
$ slack-mcp --http 127.0.0.1:3300 # streamable HTTP instead of stdio| Tool | Slack API | |
|---|---|---|
| R | slack_whoami | auth.test |
| R | slack_list_channels | conversations.list |
| R | slack_search_channels | conversations.list + filter |
| R | slack_channel_info | conversations.info |
| R | slack_read_channel | conversations.history |
| R | slack_read_thread | conversations.replies |
| R | slack_search_messages | conversations.history + filter |
| R | slack_list_channel_members | conversations.members |
| R | slack_user_info | users.info / users.lookupByEmail |
| R | slack_search_users | users.list + filter |
| R | slack_list_files / slack_file_info | files.list / files.info |
| R | slack_permalink | chat.getPermalink |
| W | slack_send_message | chat.postMessage |
| W | slack_reply_in_thread | chat.postMessage + thread_ts |
| W | slack_add_reaction | reactions.add |
| W | slack_create_channel | conversations.create |
| W | slack_open_conversation | conversations.open |
$ just slack-mcp --http 127.0.0.1:3300 --data live --days 90
slack-mcp: loaded 838 messages from 90 people across 11 channels, with 453 reactions$ just cli http://127.0.0.1:3300/mcp --method initialize
{
"serverInfo": { "name": "slack", "version": "0.5.0" },
"protocolVersion": "2026-07-28",
"capabilities": { "tools": {…}, "resources": {…}, "prompts": {…} },
"instructions": "This server is connected to a mock workspace seeded from the last 90 days…"
}$ just slack-cli --method tools/list --format json | jq -r '.result.tools[].name'
$ just slack-cli --method tools/call --tool-name slack_whoami$ just cli $U --method tools/list --format json \
| jq -r '.result.tools[] | "\(.annotations.readOnlyHint // false | if . then "R" else "W" end) \(.name)"'
R slack_whoami
R slack_list_channels
…
W slack_send_message$ just cli $U --method tools/call --tool-name slack_search_channels --tool-arg query=ai
#of-ai (C3MN5TLNTCFA2F) · 13 members
$ just cli $U --method tools/call --tool-name slack_read_thread \
--tool-args-json '{"channel":"#thinking-together","ts":"1785350135.438899","limit":4}'
[1785350135.438899] UNWGM0C: Open mic thread: what do you like find yourself collecting? (31 replies) [:🤍: 1]
↳ [1785350285.536719] UNWGM0C: I'll go first. I like collecting:
↳ [1785351131.045419] U4YW9FO: paychecks and money [:😆: 1]
↳ [1785351201.521999] UYA6ABK: Notes too. Over 5+ different apps. [:❤️: 1]
(more results: pass cursor="m:4" to see the next page)$ just cli $U --method resources/list
$ just cli $U --method resources/read --uri slack://channel/C3MN5TLNTCFA2F
$ just cli $U --method prompts/get --prompt-name catch-up --prompt-args channel='#of-ai'$ just cli $U --method tools/call --tool-name slack_read_channel --tool-arg channel='#nope'
No channel matches '#nope'. Available: #test-01, #administrivia, #announcements, …
isError: true exit 5$ just cli $U --method tools/call --tool-name slack_frobnicate
{"error":{"code":"tool_not_found","message":"Tool 'slack_frobnicate' not found on server."}}$ curl -s -o /dev/null -w '%{http_code}\n' -X GET http://127.0.0.1:3300/mcp
405| --data | Source | Offline | Deterministic |
|---|---|---|---|
| demo (default) | the slack package's built-in workspace | yes | yes |
| snapshot FILE | a recorded fetch | yes | yes |
| live | the Feeling-of-Computing atproto bridge | no | no |
$ just foc-snapshot foc.json 90
slack-mcp: loaded 838 messages from 90 people across 11 channels, with 453 reactions
$ slack-mcp --data snapshot foc.jsonsrc/tools/ the eighteen tools, resources and prompts — all four backends
src/atproto/ TID codec + listRecords paging (pure) — all four backends
the HTTPS fetch loop — native
src/foc/ bridge records -> mock workspace — all four backends
src/ the binary — nativeA Slack MCP server for the 2026-07-28 era, built on marianoguerra/mcp-server. Runs against an in-process mock workspace with no Slack account, or against real Slack with a token.
Dependencies