Skip to content

fix(slack): correct the Slack auth provider scope list [TOO-2091] - #1176

Merged
EricGustin merged 1 commit into
mainfrom
ericgustin/too-2091-slack-invite-scopes
Sep 3, 2026
Merged

fix(slack): correct the Slack auth provider scope list [TOO-2091]#1176
EricGustin merged 1 commit into
mainfrom
ericgustin/too-2091-slack-invite-scopes

Conversation

@EricGustin

@EricGustin EricGustin commented Sep 3, 2026

Copy link
Copy Markdown
Member

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:

Scope On the page Required by a tool Declared on Arcade's Slack app
groups:write yes only by the invite tool no
mpim:write yes no no
channels:write no by the invite tool no

A customer following these instructions could read channels but not invite anyone, and Slack.InviteUsersToChannel re-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.invite through channels:write.invites and groups:write.invites. The coarse channels:write and groups:write cover channel management only (archive, close, create, kick, leave, mark, rename, unarchive) and do not list conversations.invite on their own scope reference pages. Same for im:write and mpim: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:write stays. send_message in 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.json still 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:write for channels:write.invites and groups:write.invites, which are what Slack uses to grant conversations.invite. Without those, customers following the page could authorize successfully for read/history flows but still fail InviteUsersToChannel with 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.

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.
@vercel

vercel Bot commented Sep 3, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
docs Ready Ready Preview Sep 3, 2026 5:43pm UTC

Request Review

@EricGustin
EricGustin merged commit 221483d into main Sep 3, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants