Summary
In an Enterprise Grid workspace, new users attempting to connect Slack to claude.ai (via the official Claude Slack app, App ID A08SF47R6P4) consistently get the error "承認されていない権限がリクエストされました" ("Unauthorized permission was requested") even after the Org admin has approved the app through the Slack admin UI.
The root cause turned out to be a state divergence between the Slack admin UI ("権限を管理する → 保存") and the admin.apps.approved.list API record. The UI approval did not reflect in the API record, causing new user OAuth flows to fail with no recovery path visible to the admin.
We resolved this via admin.apps.approve API with the explicit bot_scopes parameter. Sharing the investigation in case other Enterprise Grid orgs hit the same issue.
Environment
- Slack plan: Enterprise Grid
- Claude app: official Marketplace install (
A08SF47R6P4)
- "Pre-approved apps must be approved" mode: ON
- Affected users: new members not previously connected
- Working users: existing connected users (reconnect succeeded after admin UI "save permissions" action)
Symptom
- Admin clicks "Manage Permissions" → "Save" in the Slack admin app management UI after a manifest update by Anthropic.
- Existing users (who had connected previously) reconnect successfully.
- New users see error: "承認されていない権限がリクエストされました" ("Unauthorized permission was requested").
- The Slack OAuth consent screen shows ungreyed checkboxes (e.g., "あなたに代わりパブリックチャンネルの管理と新規作成を行う" =
channels:write) which cannot be unchecked to pass through.
- Uninstall → reinstall does not change the behavior.
Investigation
Created a small admin app with admin.apps:read + admin.apps:write scopes installed at the Enterprise Org level, then ran:
1. Check pending requests
POST https://slack.com/api/admin.apps.requests.list
enterprise_id=<our org>
Result: empty array (no pending requests despite new users hitting the OAuth error).
2. Check approved scopes
POST https://slack.com/api/admin.apps.approved.list
enterprise_id=<our org>
Result for A08SF47R6P4:
date_updated: 2026-05-22 (about a month old, even though admin "Save" was clicked recently in the UI)
- 27 approved scopes
- All 27 were
token_type: user — no bot scopes in record despite Slack OAuth v2 requiring bot scope approval for bot install.
3. Refresh via admin.apps.approve (no scope filter)
POST https://slack.com/api/admin.apps.approve
app_id=A08SF47R6P4
enterprise_id=<our org>
Result: {"ok": true}. After this:
date_updated updated to current time.
- scope count: 27 → 57 (+30).
- 21 bot scopes appeared in the record (previously missing).
- 1 user scope (
channels:write) was removed (likely a side effect of re-approval reflecting the current manifest state).
4. Capture the failing user's OAuth consent URL
Asked the affected user to copy the URL from the address bar of the consent screen (before clicking "Allow"):
https://d1ka.slack.com/oauth?client_id=1601185624273.8899143856786
&scope=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
users:read users:read.email reactions:write reactions:read emoji:read
files:read channels:write groups:write im:write mpim:write
channels:read groups:read mpim:read
&user_scope=
&granular_bot_scope=1
&redirect_uri=https://claude.ai/api/mcp/auth_callback
...
Two important facts from this URL:
- The app requests 26 bot scopes (all under
scope=)
user_scope= is empty and granular_bot_scope=1 is set
- i.e., the official Claude Slack app uses granular bot scopes only; no user-token scopes are requested in this connector flow
5. Diff URL request vs approved.list
The 26 bot scopes requested by the OAuth URL vs the 24 bot scopes in approved.list (after step 3) revealed 9 missing bot scopes:
canvases:write
channels:write
groups:write
mpim:write
search:read.files
search:read.im
search:read.mpim
search:read.private
search:read.users
Resolution
Explicitly approve the 9 missing bot scopes:
POST https://slack.com/api/admin.apps.approve
app_id=A08SF47R6P4
enterprise_id=<our org>
bot_scopes=canvases:write,channels:write,groups:write,mpim:write,search:read.files,search:read.im,search:read.mpim,search:read.private,search:read.users
Response: {"ok": true}.
After this, approved.list contained all 26 bot scopes that the OAuth URL requests, and multiple new users were able to connect successfully through the standard OAuth flow.
Root cause analysis
Primary issue is on the Slack side: a state divergence between the admin UI's "Manage Permissions → Save" action and the internal admin.apps.approved.list record. The UI suggested success (no error message, "saved" indicator), but date_updated stayed unchanged and bot scopes never got registered in the API record. New user OAuth flows had no recovery path visible to the admin.
Secondary issue: the Slack admin UI's "Optional" section showed only links:read while the 9 missing bot scopes were completely invisible to the admin. There was no actionable way to discover or approve them through the UI.
For Anthropic — possible follow-ups
While the root cause is in Slack's admin tooling (UI ↔ API divergence), Anthropic could help affected Enterprise Grid orgs by:
- Documenting the
admin.apps.approve API workaround in the official Claude Slack connector troubleshooting docs (currently no Anthropic-side troubleshooting guide for this connector exists)
- Surfacing a more actionable error message to end users — currently they see "unapproved permission" with no admin action path
- Optionally sharing this investigation with the Slack team as a multi-customer regression
Related Issues
Reproducer summary (for other affected admins)
- Confirm: Slack plan = Enterprise Grid + "Pre-approved apps must be approved" mode ON
- Have org admin click "Manage Permissions → Save" in the Slack admin UI for Claude (
A08SF47R6P4)
- Run
admin.apps.approved.list?enterprise_id=... and check date_updated for Claude — if it does not match the recent admin UI action, you are hitting this issue
- Capture a failing new user's OAuth consent URL → extract the
scope= query parameter → diff against the bot scope set in approved.list
- Apply the resolution above (
admin.apps.approve with explicit bot_scopes)
Filed by an Enterprise Grid org admin after a long investigation today. Happy to share the full debug data privately if useful.
Summary
In an Enterprise Grid workspace, new users attempting to connect Slack to claude.ai (via the official Claude Slack app, App ID
A08SF47R6P4) consistently get the error "承認されていない権限がリクエストされました" ("Unauthorized permission was requested") even after the Org admin has approved the app through the Slack admin UI.The root cause turned out to be a state divergence between the Slack admin UI ("権限を管理する → 保存") and the
admin.apps.approved.listAPI record. The UI approval did not reflect in the API record, causing new user OAuth flows to fail with no recovery path visible to the admin.We resolved this via
admin.apps.approveAPI with the explicitbot_scopesparameter. Sharing the investigation in case other Enterprise Grid orgs hit the same issue.Environment
A08SF47R6P4)Symptom
channels:write) which cannot be unchecked to pass through.Investigation
Created a small admin app with
admin.apps:read+admin.apps:writescopes installed at the Enterprise Org level, then ran:1. Check pending requests
Result: empty array (no pending requests despite new users hitting the OAuth error).
2. Check approved scopes
Result for
A08SF47R6P4:date_updated: 2026-05-22 (about a month old, even though admin "Save" was clicked recently in the UI)token_type: user— no bot scopes in record despite Slack OAuth v2 requiring bot scope approval for bot install.3. Refresh via admin.apps.approve (no scope filter)
Result:
{"ok": true}. After this:date_updatedupdated to current time.channels:write) was removed (likely a side effect of re-approval reflecting the current manifest state).4. Capture the failing user's OAuth consent URL
Asked the affected user to copy the URL from the address bar of the consent screen (before clicking "Allow"):
Two important facts from this URL:
scope=)user_scope=is empty andgranular_bot_scope=1is set5. Diff URL request vs approved.list
The 26 bot scopes requested by the OAuth URL vs the 24 bot scopes in
approved.list(after step 3) revealed 9 missing bot scopes:canvases:writechannels:writegroups:writempim:writesearch:read.filessearch:read.imsearch:read.mpimsearch:read.privatesearch:read.usersResolution
Explicitly approve the 9 missing bot scopes:
Response:
{"ok": true}.After this,
approved.listcontained all 26 bot scopes that the OAuth URL requests, and multiple new users were able to connect successfully through the standard OAuth flow.Root cause analysis
Primary issue is on the Slack side: a state divergence between the admin UI's "Manage Permissions → Save" action and the internal
admin.apps.approved.listrecord. The UI suggested success (no error message, "saved" indicator), butdate_updatedstayed unchanged and bot scopes never got registered in the API record. New user OAuth flows had no recovery path visible to the admin.Secondary issue: the Slack admin UI's "Optional" section showed only
links:readwhile the 9 missing bot scopes were completely invisible to the admin. There was no actionable way to discover or approve them through the UI.For Anthropic — possible follow-ups
While the root cause is in Slack's admin tooling (UI ↔ API divergence), Anthropic could help affected Enterprise Grid orgs by:
admin.apps.approveAPI workaround in the official Claude Slack connector troubleshooting docs (currently no Anthropic-side troubleshooting guide for this connector exists)Related Issues
no_bot_scopes_requestedon Slack Enterprise Grid (admin/install verified) #1920 — Enterprise Gridno_bot_scopes_requested(still open)canvases:writebot_scopes_not_found(closed, related symptom)anthropics/claude-ai-mcp#443 —commandsscope UI approval impossible (open)Reproducer summary (for other affected admins)
A08SF47R6P4)admin.apps.approved.list?enterprise_id=...and checkdate_updatedfor Claude — if it does not match the recent admin UI action, you are hitting this issuescope=query parameter → diff against the bot scope set inapproved.listadmin.apps.approvewith explicitbot_scopes)Filed by an Enterprise Grid org admin after a long investigation today. Happy to share the full debug data privately if useful.