# MCP server

The unmodified korotovsky Slack MCP server runs against the simulator through four tools: channel discovery, history, thread replies and posting a reply.

Harbor runs the unmodified korotovsky Slack MCP server `1.3.0` against the simulator, so an agent that talks to Slack through MCP works against a seeded workspace. Each of its four tools lands on a Web API call the simulator serves. The same calls by hand read the `#help` thread and post a reply:

```bash
curl -s -X POST "$RYSTIC_URL/_rystic/scenario" -d '{"name":"design_studio"}' -o /dev/null
curl -s "$RYSTIC_URL/api/conversations.list?types=public_channel&limit=3" -H 'Authorization: Bearer xoxb-local' | jq -c '[.channels[] | {id, name}]'
# -> [{"id":"CWDC0000001","name":"general"},{"id":"CWDC0000002","name":"random"},{"id":"CWDC0000003","name":"wins"}]
curl -s "$RYSTIC_URL/api/conversations.history?channel=CWDC0000004&limit=200" -H 'Authorization: Bearer xoxb-local' | jq -c '[.messages[] | select(.reply_count > 0)][0] | {ts, reply_count}'
# -> {"ts":"1772034935.000074","reply_count":2}
curl -s "$RYSTIC_URL/api/conversations.replies?channel=CWDC0000004&ts=1772034935.000074" -H 'Authorization: Bearer xoxb-local' | jq -c '[.messages[] | .user]'
# -> ["UWDC0000017","UWDC0000012","UWDC0000017"]
curl -s -X POST "$RYSTIC_URL/api/chat.postMessage" -H 'Authorization: Bearer xoxb-local' -d channel=CWDC0000004 -d thread_ts=1772034935.000074 -d 'text=Looking into it' | jq -c '{ok, thread_ts: .message.thread_ts}'
# -> {"ok":true,"thread_ts":"1772034935.000074"}
```

### Tools

| Tool | Supported use |
|---|---|
| `channels_list` | Find public channels |
| `conversations_history` | Read channel history |
| `conversations_replies` | Read a thread |
| `conversations_add_message` | Post a reply and read it back |

Use numeric limits for history and replies. The native server evaluates relative time strings against its own wall clock, so they are outside a static scenario's contract. Hosted Slack MCP, OAuth, search, uploads, reactions, browser credentials and MCP resources are outside this tool contract.

### What is qualified

The qualified integration is the Harbor image, which pins an earlier Slack build and its `refund_desk` scenario, neither of which is the current release; [the Harbor guide](https://www.rystic.ai/docs/slack-harbor.md) names the exact versions, the task files, grading and reset between episodes. The measured platform is Linux amd64. The upstream server uses stdio, and a local Streamable HTTP gateway lets a client inside the sandbox connect to it.

The standalone `slack-twin` `0.0.20` archive also carries an `mcp/` package for the same server, rebound to `design_studio`'s `#help` thread (`CWDC0000004`) on `wdcontractors.slack.com`. That rebinding has not been re-qualified, so treat the bundled package as unqualified until the Harbor guide names a newer Slack. Its README has the launch contract.

Starting the simulator alone does not configure an MCP connection. The website's `/mcp` endpoint searches Rystic documentation; the sandbox's `/mcp` endpoint serves Slack tools.

---

Source: https://www.rystic.ai/docs/simulators/slack/features/mcp · Markdown: https://www.rystic.ai/docs/simulators/slack/features/mcp.md
