fix(slack): correct the Slack auth provider scope list [TOO-2091] - #1176
Merged
Conversation
The scope list matched neither the Arcade Slack toolkit nor Arcade's own Slack app. It listed groups:write, which the app does not declare; listed mpim:write, which no tool requires; and omitted any scope that grants conversations.invite. A customer following these instructions ended up able to read channels but unable to invite anyone, with the invite tool re-issuing an authorization URL on every call. Slack grants conversations.invite through channels:write.invites and groups:write.invites. The coarse channels:write / groups:write scopes cover channel management only, so they cannot satisfy the invite tool. Also states explicitly that these go under User Token Scopes. Arcade requests Slack credentials as user tokens, and a scope declared only for a bot token is never granted. mpim:write is left in place: Slack's send-message MPIM path likely needs it at runtime even though no tool currently declares it.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
david-arcade-dev
approved these changes
Sep 3, 2026
byrro
approved these changes
Sep 3, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes TOO-2091 (with ArcadeAI/monorepo#3877)
The Slack auth provider page's scope list matched neither the Arcade Slack toolkit nor Arcade's own Slack app. Three separate drifts:
groups:writempim:writechannels:writeA customer following these instructions could read channels but not invite anyone, and
Slack.InviteUsersToChannelre-issued an authorization URL on every call with no way to satisfy it. That is how this surfaced: an OpenTable escalation.The correct scopes
Slack grants
conversations.invitethroughchannels:write.invitesandgroups:write.invites. The coarsechannels:writeandgroups:writecover channel management only (archive, close, create, kick, leave, mark, rename, unarchive) and do not listconversations.inviteon their own scope reference pages. Same forim:writeandmpim:write. All four legacy write scopes omit it consistently.conversations.invite's method page still lists the legacy pair, presumably for grandfathered grants, which is the stale side of that contradiction.Also added
An explicit line that these go under User Token Scopes. Arcade requests Slack credentials as user tokens, so a scope declared only for a bot token is never granted, and the page did not say so anywhere.
Left alone deliberately
mpim:writestays.send_messagein the toolkit has it commented out of its declared scopes while its MPIM path likely needs it at runtime, so dropping it from the setup instructions could break a working flow. Tracked separately.toolkit-docs-generator/data/toolkits/slack.jsonstill carries the old scopes. It is generated from the Engine API, so it refreshes on its own once the worker ships the toolkit change.Sequencing
The matching toolkit change is ArcadeAI/monorepo#3877, which is itself blocked on TOO-2089 (adding these scopes to Arcade's production Slack app and the cloud engine allowlist). This page is instructions for customers bringing their own Slack app, so it is correct and useful as soon as the toolkit change ships, and harmless before then: the two new scopes are simply granted and unused.
Note
Low Risk
Documentation-only change to OAuth scope guidance; no runtime or auth code paths are modified.
Overview
Updates the Slack auth provider setup docs so the recommended OAuth scopes match what Arcade’s Slack tools actually need—especially inviting users to channels.
The scope list swaps coarse
groups:writeforchannels:write.invitesandgroups:write.invites, which are what Slack uses to grantconversations.invite. Without those, customers following the page could authorize successfully for read/history flows but still failInviteUsersToChannelwith endless re-auth.A new bullet tells readers to add every listed scope under User Token Scopes, not bot scopes, because Arcade obtains user tokens and bot-only scopes are never granted.
Reviewed by Cursor Bugbot for commit 3977286. Bugbot is set up for automated code reviews on this repo. Configure here.