Connect the Slack MCP Server
Slack hosts an MCP server at mcp.slack.com/mcp, exposing for searching, reading, and sending messages, working with canvases, and looking up . This guide covers the Arcade-side setup for connecting it as a remote MCP server, plus the Slack settings that most commonly trip people up.
This guide is about connecting to Slack’s own server, not the Arcade Slack toolkits. Arcade’s Slack toolkit and Slack API toolkit cover Slack with none of the setup below.
Reach for Slack’s server instead when you want the Slack itself builds and maintains, with access governed by your own Slack app and the scopes you grant it.
This guide is sourced from Slack’s MCP server overview and sample app guide .
Outcomes
Connect Slack’s server to Arcade and use its in gateways and SDKs.
You will Learn
- Which Slack app settings matter for Arcade specifically, and why
- Configure the remote server’s OAuth 2.0 settings in Arcade
- Why Slack’s per-user descriptions matter in a shared gateway, and how to turn them off
Prerequisites
- An Arcade
- A Slack workspace where you can create and install a Slack app
- The ability to contact Slack support for your workspace, to turn off per-user tool descriptions
Set up Slack
Slack’s server only accepts clients backed by a registered Slack app. Follow Slack’s sample app guide to create one. A few settings on that app matter specifically for connecting to Arcade:
-
App type: only internal apps and apps published in the Slack Marketplace can use the server. An internal app installed to your own workspace is the usual choice for Arcade.
-
: turn on the feature under in the app’s settings (or set
settings.is_mcp_enabledin the app manifest). Without it, the app can’t connect to the MCP server. -
token scopes: the server’s act on behalf of each user, so they need user token scopes, added under OAuth & Permissions. Each tool needs its own scopes. For example, searching messages needs
search:read.public(plussearch:read.private,search:read.mpim, andsearch:read.imfor private conversations), and sending messages needschat:write. Check the scope table in Slack’s MCP server overview and add a scope for every tool you plan to expose. -
Redirect URLs: set this once you have the redirect URI Arcade generates (see Add the redirect URI to your Slack app below).
Configure the remote server in Arcade
Register the server
Go to the MCP servers dashboard , click Add Server, choose Remote , and enter a server ID and the server URL:
https://mcp.slack.com/mcpConfigure OAuth2 authorization
Open Advanced settings → OAuth2 authorization and enter your Slack app’s Client ID and Client Secret.
Slack’s server doesn’t support Dynamic Client Registration, so you must supply the Client ID and Secret manually. If you leave these blank, Arcade attempts Dynamic Client Registration and the connection fails.
Add the redirect URI to your Slack app
Copy the redirect URI Arcade generated and add it under Redirect URLs in your Slack app’s OAuth & Permissions settings.
Authorize and confirm
Save the server to open the authorization prompt. Sign in with a Slack in the workspace where you installed the app, and approve the requested scopes.
Per-user tool descriptions
Slack’s server writes the authorizing user’s Slack user ID into some
descriptions, such as slack_search_public_and_private and
slack_send_message. An reads that ID as “me”, so a description
listed with one person’s credentials can point another ’s agent at the
wrong person: searching for someone else’s mentions, or sending a message
to someone else.
Arcade fetches a remote server’s list with the credentials of the admin who authorized it (see Who authenticates, and when). With Slack’s server, that list can carry the admin’s ID to every user of a gateway, even though each tool call still runs with the calling user’s own token.
Slack can switch these per-user descriptions off for your workspace, but only on request. Contact Slack support and ask them to turn off per-user tool descriptions on the Slack server. Do this before you roll the server out beyond a single .
Troubleshooting
- A Dynamic Client Registration error when you save the server: the Client ID and Client Secret are empty. See Configure OAuth2 authorization.
- Authorization doesn’t complete, or the server never lists : confirm the feature is turned on for your Slack app. See Set up Slack.
- A call fails with
missing_scopes: your Slack app doesn’t request a token scope that tool needs. Add the scope under OAuth & Permissions, then have the affected user authorize again so their token picks it up. - An acts on the wrong person when asked about “me”: the descriptions name a different . See Per-user tool descriptions.
Next steps
- Create an MCP Gateway to expose this server’s .
- Connect to MCP clients.