You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Oct 27, 2026. It is now read-only.
Repository navigation
Commit 9324afe
Browse filesBrowse the repository at this point in the historyBrowse files
docs: document all 11 Salesforce MCP custom OAuth scopes
The toolkit requests four write/read scopes that were missing from the auth provider page, and the samples told people to pass only read_account.
Co-authored-by: Cursor <cursoragent@cursor.com>
Copy file name to clipboardExpand all lines: app/en/references/auth-providers/salesforce/page.mdx
+69-17Lines changed: 69 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -96,28 +96,32 @@ The Salesforce API requires the App developer to create [OAuth custom scopes](ht
96
96
97
97
The custom scopes required by the [Arcade Salesforce MCP Server](/resources/integrations/sales/salesforce) are listed below, along with their descriptions:
98
98
99
-
<Callouttype="info">
100
-
The custom scopes listed below are only required if you are using the [Arcade Salesforce MCP Server](/resources/integrations/sales/salesforce).
101
-
102
-
If you're creating your own [custom Salesforce tools](/build/create-tools/tool-basics/build-mcp-server) or using Arcade to authorize users and call Salesforce APIs directly, you are free to define custom scope(s) that fit best your application use cases. Observe that you must have at least one custom scope assigned to your Salesforce app in order to use the Salesforce API.
103
-
104
-
</Callout>
105
-
106
99
-`read_account`: Read access to account data.
107
100
-`read_contact`: Read access to contact data.
108
101
-`read_lead`: Read access to lead data.
109
102
-`read_note`: Read access to note data.
110
103
-`read_opportunity`: Read access to opportunity data.
111
104
-`read_task`: Read access to task data.
105
+
-`read_user`: Read access to user data.
112
106
-`write_contact`: Write access to create contact.
107
+
-`write_lead`: Write access to create/update leads.
108
+
-`write_opportunity`: Write access to create/update opportunities.
109
+
-`write_task`: Write access to create/update tasks.
113
110
114
111
Follow the [Create an OAuth Custom Scope](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_customscopes_create.htm&type=5) and [Assign an OAuth Custom Scope to an External Client App](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_customscopes_assign.htm&type=5) Salesforce documentation to understand how to define and assign these scopes to your Salesforce app.
115
112
113
+
<Callouttype="info">
114
+
If you use the [Arcade Salesforce MCP Server](/resources/integrations/sales/salesforce), you must create, assign, and request every custom scope in the list above. Salesforce requires at least one custom scope on the app. One scope is not enough for the MCP server.
115
+
</Callout>
116
+
117
+
<Callouttype="info">
118
+
The authorize URL will still include Salesforce's built-in `api` and `refresh_token` scopes from [Create a Salesforce app](#create-a-salesforce-app), even if you only pass custom names to `auth.start()`. Those are not custom scopes. Don't create them in the custom-scope UI.
119
+
</Callout>
120
+
116
121
<Callout>
117
-
The scope names aren't really attached to any endpoint or action. It's the
118
-
developer's job to honor the permissions communicated to the user when
119
-
authorizing the app. You could, in theory, assign one single scope (e.g.
120
-
`fullaccess`) and use it to query any Salesforce API endpoint.
122
+
If you're creating your own [custom Salesforce tools](/build/create-tools/tool-basics/build-mcp-server) or using Arcade to authorize users and call Salesforce APIs directly, you are free to define custom scopes that fit your application. You must assign at least one custom scope to your Salesforce app.
123
+
124
+
For custom tools, the scope names aren't attached to any endpoint or action. Honor the permissions you communicate to the user when they authorize the app. You could assign one single scope (e.g. `fullaccess`) and use it to query any Salesforce API endpoint.
-**`salesforce_provider_id`**: the ID you entered when setting up the [Salesforce auth provider](#configuring-salesforce-auth);
252
268
-**`salesforce_org_subdomain`**: your [Salesforce Org Subdomain](#get-your-salesforce-org-subdomain);
253
269
-**`user_id`**: an internal identifier for your application user (it could be an email address, a username, UUID, etc); for demonstration purposes, in this example, enter your own email address;
254
-
-**`scopes`**: the list of scopes you want to request from the user; if you assigned the [custom scopes required by the Arcade Salesforce MCP Server](#create-and-assign-custom-scopes-to-your-external-client-app) use `["read_account"]`in this example.
270
+
-**`scopes`**: the custom scopes to request from the user. Creating and assigning them on the Salesforce app is not enough. `auth.start()` only consents to this list. For the [Arcade Salesforce MCP Server](#create-and-assign-custom-scopes-to-your-external-client-app), pass every scope in the list above.
255
271
256
272
### Start the authorization process and wait for completion
-**`salesforceProviderId`**: the ID you entered when setting up the [Salesforce auth provider](#configuring-salesforce-auth);
419
459
-**`salesforceOrgSubdomain`**: your [Salesforce Org Subdomain](#get-your-salesforce-org-subdomain);
420
460
-**`userId`**: an internal identifier for your application user (it could be an email address, a username, UUID, etc); for demonstration purposes, in this example, enter your own email address;
421
-
-**`scopes`**: the list of scopes you want to request from the user; if you assigned the [custom scopes required by the Arcade Salesforce MCP Server](#create-and-assign-custom-scopes-to-your-external-client-app) use `["read_account"]`in this example.
461
+
-**`scopes`**: the custom scopes to request from the user. Creating and assigning them on the Salesforce app is not enough. `auth.start()` only consents to this list. For the [Arcade Salesforce MCP Server](#create-and-assign-custom-scopes-to-your-external-client-app), pass every scope in the list above.
422
462
423
463
### Start the authorization process and wait for completion
0 commit comments