Slack
Search messages and read channels through the Slack MCP server, and choose which AI agents can post or edit canvases
An agent with Slack can search messages and read channels, but it can also send messages as the signed-in user and overwrite canvases. Adding Slack here puts each tool behind a policy rule and records each call in the audit log, so you decide which agents can post in Slack and which can only read it.
Server URL: https://mcp.slack.com/mcp
Credential mode
Slack installs with Bring your own app: the gateway uses a Slack app your workspace owns. Slack's MCP server accepts only apps listed in the Slack Marketplace and a workspace's own internal apps, so you create the app in your workspace.
See Credential modes for how the modes compare.
Before you begin
- Administrator access to your Agent Authority workspace, to add the resource.
- A Slack Workspace Owner, to create the app.
Setup moves between two consoles: you copy a redirect URI in the Agent Authority console, create an app at api.slack.com/apps, then return to the console and paste the credentials. Keep both tabs open.
Setup
In the Agent Authority console, go to Resources → Add Resource and select Slack. The credentials form opens, and step 1 starts there.
An Admin setup required dialog appears once the resource is added. Its View setup guide button links back to Bring your own app.
Use SecureAuth's app
SecureAuth's app is not available for Slack yet, because Slack has not approved it for its MCP server. Use Bring your own app instead.
Bring your own app
1. Copy the redirect URI
Copy the Redirect URI shown on the form, using the Copy button next to it.
It includes your tenant's region, so copy it rather than typing it.
It takes the form https://oauth.aisecurity.services.<region>.connect.secureauth.com/auth/callback.
Leave this page open. You come back to it in step 3.
2. Create a Slack app from a manifest
Go to api.slack.com/apps, click Create New App, and choose From an app manifest. Select your workspace, then paste the JSON below.
Replace <paste-redirect-uri> with the URI you copied in step 1, and <your-company> with your own branding.
Leave everything else as it is: the scope list, pkce_enabled, and is_mcp_enabled are what the gateway expects.
{
"display_information": {
"name": "<your-company> Agent Authority",
"description": "Agent Authority integration",
"background_color": "#0b1326"
},
"features": {
"bot_user": {
"display_name": "<your-company>",
"always_online": false
}
},
"oauth_config": {
"redirect_urls": ["<paste-redirect-uri>"],
"scopes": {
"user": [
"search:read.public",
"search:read.private",
"search:read.mpim",
"search:read.im",
"search:read.files",
"search:read.users",
"chat:write",
"channels:history",
"groups:history",
"mpim:history",
"im:history",
"canvases:read",
"canvases:write",
"reactions:read",
"reactions:write",
"users:read",
"users:read.email"
],
"bot": ["users:read"]
},
"pkce_enabled": false
},
"settings": {
"org_deploy_enabled": false,
"socket_mode_enabled": false,
"token_rotation_enabled": false,
"is_mcp_enabled": true
}
}Create the app. The manifest sets every scope listed under Required scopes, so there is nothing to select in Slack's scope picker.
Then go to Basic Information → App Credentials and copy the Client ID and Client Secret.
3. Finish in the console
Back on the Slack form in the Agent Authority console, paste the Client ID and Client Secret. Leave Token Endpoint Authentication on Auto-detect. Then click Add.
The resource is added with all tools and scopes pre-configured.
Verify the connection
The gateway syncs the available Slack tools automatically. To check the connection end to end, ask your agent to run a read-only request:
Show my Slack profileIf your Slack display name and profile details come back, the connection is working.
How users connect
Access is per user. Each additional user connects their own Slack account the first time their agent calls a Slack tool: the gateway returns a sign-in link, the user authorizes once, and the tools work from then on. Go to Connections to manage linked accounts.
Each call uses the signed-in user's own token, so the channels and conversations that user can already see in Slack are the ones their agent can reach. The gateway does not widen access beyond that.
Available tools
Tool names are matched exactly by policy rules unless you use a wildcard, so copy them from here verbatim. Check the Available Tools card on the resource's Overview tab in the Agent Authority console for the authoritative list of what your install actually exposes.
| Tool | Tags | Description |
|---|---|---|
slack_search_public | read-only | Search public messages across channels |
slack_search_public_and_private | read-only | Search public and private messages |
slack_search_channels | read-only | Search for channels |
slack_search_users | read-only | Search for users |
slack_send_message | write, external | Send a message to a channel or user |
slack_send_message_draft | write | Send a message draft |
slack_schedule_message | write, external | Schedule a message for later delivery |
slack_read_channel | read-only | Read messages from a channel |
slack_read_thread | read-only | Read messages in a thread |
slack_read_user_profile | read-only | Read a user's profile |
slack_create_canvas | write | Create a new canvas |
slack_read_canvas | read-only | Read a canvas |
slack_update_canvas | destructive | Update an existing canvas |
slack_add_reaction | write | Add an emoji reaction to a message |
Required scopes
These are the scopes the gateway requests at sign-in:
search:read.public– search public channelssearch:read.private– search private channelssearch:read.mpim– search multi-person direct messagessearch:read.im– search direct messagessearch:read.files– search filessearch:read.users– search userschat:write– send messageschannels:history– read public channel historygroups:history– read private channel historympim:history– read multi-person direct message historyim:history– read direct message historycanvases:read– read canvasescanvases:write– create canvasesreactions:read– read message reactionsreactions:write– add and remove message reactionsusers:read– read user profilesusers:read.email– read user email addresses
You do not pick these one at a time: the manifest in step 2 declares all of them at once. Each user sees the list on Slack's consent screen when they connect. If you edit the scopes in the manifest, the app no longer matches what the gateway requests and tools that rely on the missing scopes fail.
Policy examples
Rules are evaluated top to bottom and the first match wins; a call that matches no rule is denied. New rules are created at the top of the list, so create the rule you want evaluated last first.
- Search and read, but no sending:
allow
slack_search_*,slack_read_*, then add a deny forslack_send_*andslack_schedule_messagebelow those allows, or disable your organization's seeded Allow all rule so anything unmatched is denied. The allow rules alone block nothing: with Allow all in place,slack_send_message,slack_send_message_draft, andslack_schedule_messagekeep matching it. Removing Allow all is org-wide, so add the allows everything else needs first. - Only one agent may send:
allow
slack_send_*scoped to that agent, and add a deny forslack_send_*(unscoped) below it. A scoped allow does not exclude anyone: other agents simply fall through to the next matching rule, which is Allow all unless you deny or remove it. - Block scheduling messages entirely: add a deny rule for
slack_schedule_messageabove any allow rules. - Block destructive tools:
add a deny rule with the built-in
destructivetag (Tools pill) for this resource (MCP pill).
Next steps
- Create a policy – start from the search-and-read pattern in Policy examples above.
- Connections – manage the Slack accounts your users have linked.
- Limit an agent to one Slack channel – a worked policy for this exact resource.