How to Connect Claude to Slack via MCP with Access Controls
Register a Claude agent in Lutril, connect Slack as an MCP app, bind the integration with the right scope, and configure Claude to use it. Every tool call logged from the start.
Overview
Lutril sits between Claude and Slack as an MCP proxy. Claude calls tools through Lutril rather than holding a Slack token directly. Lutril checks that the calling agent has a binding to Slack, forwards the call, and writes an immutable record to the activity log.
The setup has four moving parts: the Slack MCP app connection (OAuth), the agent registration, the binding that grants the agent access to Slack, and the Claude configuration that points at Lutril's MCP server. This guide walks through each one.
Prerequisites
Connect Slack as an MCP app
Before any agent can call Slack tools, your workspace needs to authorize Lutril to access Slack on its behalf. This is a one-time OAuth step done by an admin.
In Lutril, go to MCP Apps. You will see the available integrations: Slack, HubSpot, Notion, Mixpanel, and others. Find the Slack card and click Connect.
You will be redirected through Slack's OAuth flow. Lutril requests these scopes:
channels:read: list public channelschannels:history: read message history in public channelschat:write: post messages as the Lutril botusers:read: resolve user IDs to names in activity logs
After authorization, the Slack card shows a Connected badge with the connection date. Lutril now holds the Slack credential. Individual agents do not hold it. They request access through bindings, which you add in the next step.
Register the agent in the Agent Registry
Go to Agent Registry and click Register agent. Fill in the form:
Click Register. Lutril creates the agent in draft state and generates an MCP token. This token is shown exactly once. Copy it before closing the modal.
The modal also shows two configuration snippets: one for Claude Code and one for .mcp.json. Copy the one that matches your setup and keep it handy for Step 4.
Add a Slack binding to the agent
The agent exists but has no access to anything yet. Click into the agent row to open its detail panel, then go to the Bindings tab.
Click Add binding, select Slack from the integration dropdown, choose a scope, and confirm.
Two scope options:
For a Slack assistant that reads channels and posts summaries, select read + write. The risk score on the agent updates automatically once the binding is saved.
Now activate the agent. Back in the Overview tab, click Activate. State moves from draft to active. The agent can now call Slack tools through Lutril.
Configure Claude to use Lutril
Lutril's MCP server exposes all your connected integrations as tools. You point Claude at it using the MCP token from Step 2.
For Claude Desktop, open ~/Library/Application Support/Claude/claude_desktop_config.json and add:
{
"mcpServers": {
"lutril": {
"command": "npx",
"args": ["-y", "@lutril/mcp-server@latest"],
"env": {
"LUTRIL_MCP_TOKEN": "agt_7fRxP2kq8m@tenant_4hJnW:sk_live_..."
}
}
}
}
For Claude Code or a project-level setup, use .mcp.json at the root of your project:
{
"servers": {
"lutril": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@lutril/mcp-server@latest"],
"env": {
"LUTRIL_MCP_TOKEN": "${LUTRIL_MCP_TOKEN}"
}
}
}
}
Keep the token in an environment variable rather than committing it directly. Restart Claude Desktop after saving the config.
Test it and check the activity log
Ask Claude something that requires Slack access. Claude will invoke the relevant tool through Lutril, and you will see the calls appear in real time under MCP Activity.
Each row is expandable. Click one to see the full input parameters, response payload, and the actor that triggered the call. Every entry is immutable and exportable for compliance purposes.
If the agent attempts to use an integration it does not have a binding for, the call is blocked and an Access Request is created automatically under the Access Requests tab. An admin can approve or deny it from there, with an optional expiry date.
Managing the agent lifecycle
A few things worth knowing for ongoing management:
- Expiry. Agents must have an expiry date (maximum 90 days). When an agent expires, it stops working and needs to be renewed explicitly. This is intentional: it forces a periodic review of whether the agent should still exist.
- Suspension. Admins can suspend an agent immediately from the Agent Registry. All Slack access stops. Reactivation is also one click.
- Token rotation. If the MCP token is compromised, go to the agent detail page and rotate the credential. The old token gets a 24-hour grace window, then becomes invalid.
- Owner offboarding. If the agent's owner leaves the company, Lutril flags the agent for reassignment. Access does not silently continue under a deprovisioned user.
agt_7fRxP2 in the activity log, not a raw Slack token.