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 profile

If 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.

ToolTagsDescription
slack_search_publicread-onlySearch public messages across channels
slack_search_public_and_privateread-onlySearch public and private messages
slack_search_channelsread-onlySearch for channels
slack_search_usersread-onlySearch for users
slack_send_messagewrite, externalSend a message to a channel or user
slack_send_message_draftwriteSend a message draft
slack_schedule_messagewrite, externalSchedule a message for later delivery
slack_read_channelread-onlyRead messages from a channel
slack_read_threadread-onlyRead messages in a thread
slack_read_user_profileread-onlyRead a user's profile
slack_create_canvaswriteCreate a new canvas
slack_read_canvasread-onlyRead a canvas
slack_update_canvasdestructiveUpdate an existing canvas
slack_add_reactionwriteAdd an emoji reaction to a message

Required scopes

These are the scopes the gateway requests at sign-in:

  • search:read.public – search public channels
  • search:read.private – search private channels
  • search:read.mpim – search multi-person direct messages
  • search:read.im – search direct messages
  • search:read.files – search files
  • search:read.users – search users
  • chat:write – send messages
  • channels:history – read public channel history
  • groups:history – read private channel history
  • mpim:history – read multi-person direct message history
  • im:history – read direct message history
  • canvases:read – read canvases
  • canvases:write – create canvases
  • reactions:read – read message reactions
  • reactions:write – add and remove message reactions
  • users:read – read user profiles
  • users: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 for slack_send_* and slack_schedule_message below 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, and slack_schedule_message keep 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 for slack_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_message above any allow rules.
  • Block destructive tools: add a deny rule with the built-in destructive tag (Tools pill) for this resource (MCP pill).

Next steps

On this page