← All guides
Admin Setup Guide · MCP · Claude Connectors

Salesforce MCP Server →
Claude, No Terminal Required

A plain-English guide for Salesforce admins to connect Claude directly to your org over MCP — no terminal, no code, just clicking through Setup and Claude's Connectors screen. Ask in natural language, Claude reads and writes real data through Salesforce's own hosted MCP server.
Based on Salesforce's Try Headless 360 workshop — I ran this session for Sydney last week.

Updated Jul 25, 2026
Connect Claude to Salesforce with MCP Server (Step by Step) — video thumbnail
📺 Watch this guide in action: "Connect Claude to Salesforce with MCP Server (Step by Step)"
Pace Yourself on YouTube · recorded from this exact Sydney session
⚠ Before you start Do this in a Developer Edition org or a Sandbox — never your production org. The permission set and connected app you'll create can create, update, and delete records once authorised. Get comfortable here first.

No org yet? Sign up free at developer.salesforce.com/free-trials. You'll also need a Claude account at claude.ai — nothing to install, everything below happens in a browser.
1Enable
MCP
2Permission
Set
3Activate
Server
4External
Client App
5Connect
Claude
1
Turn on the MCP Service in Salesforce
One checkbox in Setup unlocks MCP for the whole org. ~2 min
What is MCP? Model Context Protocol is the open standard AI tools like Claude use to talk to live systems instead of guessing. Without it, Claude works from memory and generic training data. With it, Claude calls real tools against your real org — query records, create a case, update a field — and gets the truth back, in the moment it needs it.
1
Enable the MCP Service (Beta)

In Salesforce, click the gear icon → Setup. In Quick Find, search User Interface and open it.

Tick Enable MCP Service (Beta) under the Setup section, then click Save.

✓ That's the org-wide switch Everything else in this guide — the permission set, the server activation, the connected app — only becomes available once this checkbox is on.
2
Create a Permission Set for the MCP Client
Controls exactly what Claude is allowed to see and do in your org. ~5 min
1
Create the permission set

In Setup Quick Find, search Permission Sets and open it. Click New.

Label: MCP Client User (the API Name fills in automatically as MCP_Client_User). Description: "Grant API access to the Salesforce hosted MCP servers." Click Save.

2
Turn on API Enabled

On the permission set you just created, click System Permissions. Click Edit, tick API Enabled, then Save.

Why this matters API Enabled is what lets a user authenticated through this permission set access any Salesforce API — including the MCP endpoint Claude will be calling.
3
Assign the permission set to yourself

On the permission set, click Manage Assignments → Add Assignment. Check your own user (and any other approved admins who'll use Claude against this org), click Next → Assign → Done.

3
Activate a Standard MCP Server and Grab Its URL
Salesforce ships several pre-built MCP servers — pick the one that matches how much access you want to hand over. ~3 min
Standard serverServer name in URLWhat it exposes
SObject allplatform/sobject-allFull CRUD — create, read, update, delete, query and search — across all objects
SObject readsplatform/sobject-readsRead and query only, no mutations
SObject mutationsplatform/sobject-mutationsCreate and update only, no delete
SObject deletesplatform/sobject-deletesDelete operations only
Salesforce API contextplatform/salesforce-api-contextLets Claude inspect your org's objects, fields and relationships without touching data
Metadata expertsplatform/metadata-expertsBeta — tools for generating and managing Salesforce metadata (fields, objects, etc.)
⚠ Start narrow First time round, activate sobject-reads or salesforce-api-context — let Claude look before it can touch anything. Move to sobject-all once you trust the workflow.
1
Find the server in the API Catalog

In Setup Quick Find, search MCP Servers and open it (it sits under API Catalog). Click Salesforce Servers, then open the server you want (e.g. sobject-reads).

2
Activate it and build the Server URL

Click Activate. The URL you'll actually connect Claude to isn't something you copy from the page — it's a fixed pattern built from the "Server name in URL" column above. Production orgs (including Developer Edition) and sandbox/scratch orgs use different roots:

Production orgs (incl. Developer Edition) https://api.salesforce.com/platform/mcp/v1/platform/sobject-reads
Sandbox or scratch orgs https://api.salesforce.com/platform/mcp/v1/sandbox/platform/sobject-reads

Swap platform/sobject-reads for whichever server you activated. You'll paste this into Claude's Connectors screen in Phase 5 — keep it handy in a notes file for now.

4
Create an External Client App (the OAuth front door)
This is what Claude authenticates against — it's how Salesforce knows to trust the connection. ~10 min
Why an External Client App? Claude authenticates with OAuth 2.0 against an External Client App (ECA), which then restricts what it can do based on the permission set, profile and IP ranges you assign to it. Same security model as any other connected app — you're not handing Claude a login, you're handing it a tightly scoped OAuth grant.
1
Create the External Client App

Setup Quick Find → External Client App Manager → New External Client App.

Name it something recognisable, e.g. Claude MCP App. Fill in a contact email and distribution state (Local is fine for a dev org).

2
Enable OAuth and set the callback URL

Tick Enable OAuth. For the Callback URL, use Claude's own fixed redirect address — this isn't something you choose, it's the exact URL Claude's servers listen on:

Callback URL https://claude.ai/api/mcp/auth_callback
⚠ Type this exactly One typo here and the OAuth flow will fail silently or bounce to an error page right after login. Copy-paste it rather than typing it out.
3
Add the OAuth scopes

Under OAuth Scopes you'll see two columns — Available OAuth Scopes on the left, Selected OAuth Scopes on the right. In the left column, select these two (click one, then Ctrl/Cmd-click the other to select both at once):

♻
Perform requests at any time (refresh_token, offline_access) — so Claude doesn't need you to re-authenticate every session
MCP
Access Salesforce hosted MCP servers (mcp_api) — the scope that actually grants MCP access

Click the → arrow between the two columns to move both across into Selected OAuth Scopes, then click Create.

4
Lock down the security settings

Open the app you just created → Edit App Policy. Under Security you'll see four checkboxes — two come off, two go on:

Uncheck these
✗ Require secret for Web Server Flow
✗ Require secret for Refresh Token Flow
Check these
✓ Require Proof Key for Code Exchange (PKCE) extension for Supported Authorization Flows
✓ Issue JSON Web Token (JWT)-based access tokens for named users

This combination lets Claude authenticate as a secure public client using PKCE, with no client secret sitting anywhere for someone to leak.

5
Restrict who's allowed to use it

Still on the Policies tab, under Plugin Policies:

Set Permitted Users to Admin approved users are pre-authorized. Under Selected Permission Set, move MCP Client User (the one you made in Phase 2) into the Selected column. Set IP Relaxation to Relax IP Restrictions. Click Save.

Why "admin approved" instead of "self-authorize" This means only users you've explicitly assigned the MCP Client User permission set to can ever authenticate through this app — not every user in the org.
6
Copy the Consumer Key

Go to the Settings tab → App Settings → Consumer Key and Secret. Verify with the code sent to your email, then copy the Consumer Key.

You won't need the Consumer Secret — with "Require secret" left unchecked and PKCE required on this app (Step 4), Claude authenticates without one.

5
Connect Claude — No Terminal Needed
Everything from here happens by clicking around Claude's own settings screen. ~5 min
1
Open Connectors and start a custom connector

In Claude, click Customize in the left sidebar, then click Connectors and the + button. Click Add custom connector.

Name it something recognisable — e.g. Salesforce SObject Read — and give it a description like "Read Salesforce records through Headless 360."

2
Paste in the Server URL

Use the URL you built in Phase 3 for the server you activated — no changes needed, paste it straight in.

3
Add the Consumer Key and connect

Open Advanced settings and paste the Consumer Key you copied in Phase 4 into OAuth Client ID. Click Add.

Click Connect next to the connector you just created. Claude redirects you to Salesforce to log in — if you're already logged in, this step is skipped and Claude gets its access token straight away. Click Allow, and you're back in Claude with the connector showing Connected.

✓ Optional: fine-tune tool permissions Once connected, click Configure next to the connector to see every tool that server exposes and switch off anything you don't want Claude to have access to.
4
Test it

Start a new chat and ask something real about your org:

Claude prompt List the first 10 Account records you can access in Salesforce
✓ How to know it's working Claude should call the MCP tool and come back with real records from your org — actual Account names, not a generic answer. No terminal, no code, just the one login redirect and then natural language against live data.
?
Common problems
Things that catch people out the first time through this flow.
OAuth redirect fails or bounces to an error page after I log in
Almost always a Callback URL mismatch. Go back to the External Client App from Phase 4 and confirm the Callback URL is exactly https://claude.ai/api/mcp/auth_callback — no trailing slash, no typo. Fix it, save, then click Connect again from Claude's Connectors screen.
The connector shows "Needs authentication" or won't finish connecting
Click Connect again — refresh tokens occasionally expire or get revoked (e.g. if you edited the ECA's policies afterwards). You don't need to delete and re-add the connector, just re-authenticate.
Tools list is empty even though the connector shows Connected
Check that the permission set (MCP Client User) is actually assigned to the user you authenticated as, and that it's listed in the ECA's Selected Permission Set. A connected-but-toolless connector almost always means the authenticated user doesn't have access to that server's underlying permission set.
Claude says it can't reach the tool / times out
Double-check the Server URL from Phase 3 was built correctly (right server name, right sandbox/ prefix for non-production orgs) and the standard server is still Activated in Setup → MCP Servers. Also confirm your org's IP restrictions on the ECA are set to Relax IP Restrictions — a strict IP range will silently block requests coming from Claude's servers.
"Admin approved users are pre-authorized" but I still get a permission error
Go back to the permission set → Manage Assignments and confirm your user is actually in the assigned list — creating the permission set doesn't assign it to anyone automatically.

You're connected. Claude can now talk to your org.

MCP is enabled, your permission set is scoped, the External Client App is authorising real requests, and Claude has a live connection to Salesforce through its Connector — no terminal, no code, ever.
Start with read-only questions, then work up to writes once you trust the flow.

Want to go further? This guide mirrors Salesforce's own Try Headless 360 workshop end to end. Ready to expose your own Apex and Flows instead of just the standard tools? See the Custom MCP Servers guide — it picks up right where this one leaves off.
Found this useful?