Slack
Connect the Speakeasy AI Control Plane to Slack's hosted MCP server using an internal Slack app and user-scoped OAuth.
Sign in to Slack’s app settings with permission to create an internal app in the workspace you want to connect, or to manage an existing one. Obtain any required workspace-admin approval before connecting.
For a new app, use the JSON manifest below. For an existing internal app, skip to Enable MCP access and follow the manual steps. Slack permits internal apps and apps published in the Slack Marketplace; unlisted distributed apps cannot use its MCP server. This guide uses an internal app, not a bot token or a personal API key. Each connecting user authorizes access with their own Slack account.
If your app restricts allowed IP addresses, ask your network administrator to include the Control Plane’s outbound addresses before connecting. Do not remove the restriction to work around a failed connection.
Create an app from JSON
Use this option for a new internal app. The manifest enables MCP access and sets the same user permissions and callback as the manual steps below.
- Start creating an app in Slack’s app settings.
- Select From a manifest.
- Click Continue.
- Replace the JSON manifest with the following:
{ "display_information": { "name": "Slack MCP Control Plane" }, "oauth_config": { "redirect_urls": [ "https://app.getgram.ai/mcp/remote_login_callback" ], "scopes": { "user": [ "channels:read", "groups:read", "im:read", "mpim:read" ] } }, "settings": { "is_mcp_enabled": true }}- Select the workspace where the app will live.
- Click Next.
- Click Create.
These permissions allow listing the user’s channels, not message search, message history, or sending messages. Keep the app internal; creating it does not bypass workspace approval or authorize access for other users.
Continue to Copy the app credentials. You do not need to repeat the next three manual configuration steps.
Enable MCP access
- Open your internal app in Slack’s app settings.
- Select Agents in the sidebar.
- Toggle Slack Model Context Protocol (MCP) Server to On.
Set user permissions
- Select OAuth & Permissions in the sidebar.
- Scroll to Scopes.
- Add
channels:read,groups:read,im:read, andmpim:readto the user-token scopes, not the bot-token scopes.
These permissions let the server list the user’s channels. They do not enable message search, message history, or sending messages. If you need those tools, ask your app owner to select their user-token scopes from Slack’s tool-to-scope table. Use the same selected scopes when configuring the Control Plane.
Register the callback
- On OAuth & Permissions, scroll to Redirect URLs.
- Add
https://app.getgram.ai/mcp/remote_login_callbackas a redirect URL. - Save the redirect URL.
Copy the app credentials
- Open Basic Information in the app settings.
- Copy the app’s Client ID to your password manager.
- Reveal and copy its Client Secret to your password manager.
Keep this app’s identity fixed for the integration. Do not substitute its App ID, a bot token, or a user access token for these credentials. Continue to Speakeasy setup.
Add the server in Speakeasy
- In the Speakeasy AI Control Plane sidebar, under Connect, select Sources.
- Click Add Source.
- Choose Custom remote server.
- On Add a custom remote MCP server, paste
https://mcp.slack.com/mcpinto Remote MCP server URL. - Click Add server.
This creates the hosted MCP server and opens its Overview page.
Connect your credentials
- From Overview, open Settings.
- Under Authentication, click Configure Manually, or Use Discovered when offered.
- If the issuer is not already known, enter
https://mcp.slack.comas the Issuer URL. Under Endpoints, click Discover. - In Attach Remote Identity Provider, set Client Type to Manual.
- Paste the Slack Client ID into Client ID.
- Paste the Slack Client Secret into Client Secret (optional). Slack requires this secret.
- Set the token-endpoint authentication method to
client_secret_postusing the authentication-method control. Do not useclient_secret_basic. - Configure the scopes to match your Slack user permissions:
channels:read,groups:read,im:read, andmpim:readfor listing channels. If an issuer-level scope override is configured, make it match this selection. - Click Attach Identity Provider.
- Confirm that the sheet’s Redirect URI matches
https://app.getgram.ai/mcp/remote_login_callback, registered under Slack’s Redirect URLs.
Slack’s discovered authorization endpoint is
https://slack.com/oauth/v2_user/authorize and its token endpoint is
https://slack.com/api/oauth.v2.user.access. Use these user-token endpoints,
not the bot-token OAuth endpoints. Slack does not support Dynamic Client
Registration. Each user must complete Slack consent when connecting; attaching
the client credentials does not grant access to everyone’s Slack data.
If your deployment does not expose the authentication-method or scope controls, ask the Control Plane administrator to configure these values before connecting. This configuration is based on Slack’s documentation and the Control Plane’s OAuth implementation; it has not been tested end to end with a Slack workspace.
This guide covers setup only. For anything beyond it — billing, tool behavior, limits — see Slack’s MCP documentation.