Slack
10 reviewed Dtwo policies for Slack MCP servers — egress + ingress controls for governing what AI agents can do with Slack.
On this page
Reusable DTwo policies for Slack MCP servers — the official Slack (Salesforce) remote MCP server that the Claude connector uses, plus compatible community and legacy implementations (korotovsky/slack-mcp-server, the archived Anthropic reference server). The MCP surface is read tools (channel/thread/canvas history, message and user search, profile lookups) and externally visible write tools (send/schedule messages, canvas create/update, group management). Its risk profile is dominated by visibility, not deletion: there are no destructive delete tools, but a sent or scheduled message is effectively irreversible, DMs and private channels concentrate the workspace's PII/PHI, and Slack Connect shared channels put the agent one call away from external exfiltration.
Available policies
| Policy | Direction | Purpose | Framework bundles |
|---|---|---|---|
| block-secrets | ingress | Deny send-message calls whose body looks like an API key, password, token, or private key. | soc2, pci-dss, gdpr-ccpa |
| redact-sensitive-info | ingress | Redact secrets and PII from outgoing message content to [REDACTED] (transform-only); all other Slack tools pass through. |
soc2, hipaa, pci-dss, gdpr-ccpa |
| role-gate-writes | ingress | Gate every write-class Slack tool (send/schedule/canvas/usergroups) behind an IdP writers group; read-only by default. | soc2, hipaa, pci-dss, gdpr-ccpa, sox |
| guard-external-send | ingress | Deny message-write calls whose destination is an externally shared Slack Connect channel. | soc2, gdpr-ccpa, hipaa |
| guard-dm-privacy | ingress | Deny agent read and search reach into Slack DMs and private conversations. | — |
| deny-direct-messages | ingress | Deny message-write calls addressed to a direct conversation (1:1 DM, user ID, or group DM). | soc2, gdpr-ccpa |
| deny-channel-creation | ingress | Deny Slack channel-creation tool calls; all other Slack tools pass through. | soc2, gdpr-ccpa |
| deny-read-search-summarize-sensitive-channels | ingress | Deny read, search, and summarize operations targeting sensitive channels (matched by channel ID). | soc2, hipaa, pci-dss, gdpr-ccpa |
| mask-pan-egress | egress | Mask payment-card numbers (PANs) in message-read, thread-read, canvas-read, history, and search responses. | pci-dss, soc2, gdpr-ccpa |
| redact-profile-pii | egress | Redact email, phone, and Slack custom profile fields from user-profile and user-search responses. | soc2, hipaa, gdpr-ccpa |
Tool naming on the DTwo gateway
DTwo prefixes tool names with the MCP server name configured on the gateway. A Slack MCP server registered as slack-mcp will surface tools like slack-mcp-slack-post-message, while one registered as slack will surface slack-slack-post-message. The policies in this directory match on the suffix (slack-post-message, slack-send-message, etc.) so they stay portable across naming conventions — but you should always confirm the exact tool name your gateway sends using the dump-input debug technique before deploying.
Identity claims
Most of these policies are single-purpose and require no IdP claims. The identity-gated ones (role-gate-writes, guard-dm-privacy, redact-profile-pii, and the exemption branches of guard-external-send and mask-pan-egress) read input.subject.claims.groups with placeholder group names (e.g. slack-writers, slack-private-ok, people-ops, finance). Replace these with your own IdP group names at import time. Missing claims fail closed for grants (no group → not exempt).
Contributing
To add a Slack policy:
- Create
apps/slack/<policy-slug>/withpolicy.mdand atests.yamltest file. - Add a row to the table above.
- Declare
apps: ["slack"]in the policy frontmatter, plus any industry / bundle slugs that apply. - If the policy fits an industry or bundle (e.g.
bundles/slackorbundles/im-messaging), link to it from the matching landing page. - Run
pnpm manifestfrom the repo root.
See CONTRIBUTING.md for the full process.