DevOps

Salesforce Plugin for Claude Code: Setup Guide and Fixes for Common Errors

By Rishabh Panwar · Published 12 October 2026 · 5 min read · Intermediate

Salesforce released an official plugin for Claude Code at Dreamforce ‘26. With it, Claude Code can write Apex, deploy it to your org and run your tests. The install guide makes it look like one command, but a few things can go wrong along the way. We set it up on a Developer Edition org on Winter ‘27, used it for real work, and wrote down every error we saw and how to fix it.

What the plugin does

The plugin adds Salesforce knowledge to Claude Code. You ask in plain English, for example “write a test class for this Apex class and run it”, and it does the work using the Salesforce CLI. Every command it runs is shown on screen, so you can see exactly what it did.

It also uses three helper servers, called MCP servers. One runs on your own computer and checks Apex and SOQL as you write. The other two run inside your Salesforce org, and they need switching on before they work.

How to set it up

Step 1: Install the tools it needs. Salesforce’s install page lists Claude Code, Node.js (a long-term support version), Salesforce CLI and Python. Check what you have:

claude --version
node -v
sf --version
python3 --version

Step 2: Install the plugin.

claude plugin install salesforce-development@claude-plugins-official

Step 3: Create a project and log in to your org.

sf project generate --name my-project
cd my-project
sf org login web --alias my-org --set-default

Step 4: Start Claude Code and check everything works. Type claude inside the project folder. Then run /plugin to see the plugin is installed, and /salesforce-development:status to see the health of your setup. Before building anything, ask: “Validate that I can deploy to this org.”

The install page says the plugin needs a Salesforce Foundations or Agentforce license. On our Developer Edition org, everything we tried worked.

Errors you may see, and how to fix them

Validation fails with a “jq: parse error”

If you see Error: Exit code 5 together with jq: parse error: Invalid numeric literal when you ask the plugin to validate your org:

  • Try this first: update the Salesforce CLI with sf update, restart Claude Code and ask again. An old CLI prints an “update available” message that confuses the plugin’s checks. This fixed it for us.
  • If it still fails: run sf org display yourself to make sure your org is still connected, and log in again with sf org login web if it isn’t.

”Server not activated in this org”

If you see this message, or the status screen shows api-context · metadata-experts — ✗ unavailable, two MCP servers the plugin uses are switched off in your org.

  • Fix: in Setup, type API Catalog in Quick Find. Open MCP Servers, then the Salesforce Servers tab. Set salesforce-api-context and metadata-experts to Active.
  • Then: run /salesforce-development:status again. It should now say ✓ connected.

Deploys still work while these are off, but some features don’t. Also note the yellow banner on that Setup page: Salesforce MCP server usage may be billed through Flex Credits. In a paid org, check with whoever manages your Salesforce budget before switching on more servers than you need.

”Could not locate a Python v3.10.0+ install”

If you see this as a “Critical” result when the plugin checks your code, the problem is your setup, and your code is fine. The plugin runs Salesforce Code Analyzer, and its Flow check needs Python 3.10 or newer. Many Macs come with an older Python.

  • Fix: install Python 3.10 or newer, then ask the plugin to check your code again.
  • If you don’t use Flows: you can turn the Flow check off instead, by setting engines.flow.disable_engine to true in your Code Analyzer settings.

Work stops and it suggests installing other plugins

If the plugin pauses mid-task and lists other Salesforce plugins you could install, that’s expected. It never installs anything without asking.

  • To carry on: tell it to skip.
  • To install one: name the exact plugin you want. A general “yes” isn’t accepted, because it needs to know which one.

It calls your org “trial”

If you see a message that your org was “classified as trial — non-production, allowing deploy”, nothing is wrong. The plugin checks what kind of org it is about to deploy to, and it treats Developer Edition orgs as non-production.

The status screen says nothing has been deployed

If status still says “Local source never deployed to this org” after you have deployed, your deploys are fine. The progress tracker didn’t count them in our test. Check the org itself, or run sf project deploy report, if you want to be sure.

What it did with a real task

We asked for two small Apex classes, where one calls a method on the other, plus a test class, all deployed and tested. Here’s what it did:

  • Wrote all three classes and a test class.
  • Added a couple of things we didn’t ask for, such as a check for empty input and an extra test for it.
  • Checked the code with Code Analyzer and fixed small style issues.
  • Did a practice deploy first, then the real deploy, running only the relevant test.
  • Finished with every test passing and 100% code coverage.

The extras were sensible, but it’s a good reason to read what it changed before you approve.

What happens when you break something

In our article on dependent class errors, we showed that Salesforce lets you save a change that breaks other classes. We tried the same thing with the plugin: we renamed a method that another class still called, and asked it to deploy just that one class.

It deployed the change, just as Salesforce itself would have. Then it checked the org straight away, told us which two classes were now broken and why, and offered three ways to fix it. When we picked one, it found every place that used the old method name, updated them, deployed, and ran the tests again. Everything passed.

Should you use it?

Yes, once you have done the fixes above. It’s good at the everyday jobs: writing Apex, deploying safely and running tests. It shows every command it runs, so you always know what changed. Its best moment for us was fixing the broken classes in a single step.

For other ways to connect Claude to Salesforce, see our guides to hosted MCP servers for Claude and the Claude Code OAuth callback error.

Quick checklist before you start

Do thisHow
Update the Salesforce CLIRun sf update
Install Python 3.10 or newerNeeded for Code Analyzer’s Flow check
Switch on the two MCP serversSetup → API Catalog → MCP Servers → Salesforce Servers
Check billing in paid orgsRead the banner on the MCP Servers page
Test your setup firstAsk “Validate that I can deploy to this org”

Frequently asked questions

What is the Salesforce plugin for Claude Code?

It is Salesforce's official add-on for Claude Code, announced at Dreamforce '26. Once installed, Claude Code can write Apex, deploy it to your org and run tests for you, all from a Salesforce DX project.

How do I install the Salesforce plugin for Claude Code?

Install Claude Code, Node.js, Salesforce CLI and Python first. Then run claude plugin install salesforce-development@claude-plugins-official and type /plugin inside Claude Code to check it is installed.

Does the Salesforce Claude Code plugin work with a Developer Edition org?

Yes, in our test. Writing Apex, deploying it and running tests all worked on a free Developer Edition org once two MCP servers were switched on in Setup.

How do I fix 'Server not activated in this org'?

Two MCP servers the plugin uses are switched off in your org. In Setup, search for API Catalog, open MCP Servers, then Salesforce Servers, and set salesforce-api-context and metadata-experts to Active.

How do I fix 'Could not locate a Python v3.10.0+ install'?

Salesforce Code Analyzer needs Python 3.10 or newer to check Flows. Install a newer Python. If you don't use Flows, you can switch off the Flow check in the Code Analyzer settings instead.

Will the plugin stop me deploying a change that breaks other classes?

Not in our test. It deployed the change, but straight away found the classes it broke, explained why, and fixed them when asked.