From salesforce-pack
Installs and configures Salesforce authentication with jsforce (Node.js), simple-salesforce (Python), or CLI. Supports username-password, JWT Bearer, and web server OAuth flows for integrations.
How this skill is triggered — by the user, by Claude, or both
Slash command
/salesforce-pack:salesforce-install-authThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Set up Salesforce connectivity using jsforce (Node.js) or simple-salesforce (Python), and configure one of three OAuth 2.0 authentication flows.
Set up Salesforce connectivity using jsforce (Node.js) or simple-salesforce (Python), and configure one of three OAuth 2.0 authentication flows.
api, refresh_token, offline_access# Node.js — jsforce (most popular SF client, 3M+ weekly downloads)
npm install jsforce
# Python — simple-salesforce
pip install simple-salesforce
# Salesforce CLI (for metadata, deployment, scratch orgs)
npm install -g @salesforce/cli
| Flow | Use Case | Requires Browser? |
|---|---|---|
| Username-Password | Dev/test scripts | No |
| JWT Bearer | CI/CD, server-to-server | No |
| Web Server (Authorization Code) | User-facing apps | Yes |
# .env (NEVER commit — add .env to .gitignore)
SF_LOGIN_URL=https://login.salesforce.com
[email protected]
SF_PASSWORD=yourpassword
SF_SECURITY_TOKEN=yourtoken
SF_CLIENT_ID=your_connected_app_consumer_key
SF_CLIENT_SECRET=your_connected_app_consumer_secret
# For sandbox orgs, use:
# SF_LOGIN_URL=https://test.salesforce.com
import jsforce from 'jsforce';
const conn = new jsforce.Connection({
loginUrl: process.env.SF_LOGIN_URL || 'https://login.salesforce.com',
});
await conn.login(
process.env.SF_USERNAME!,
process.env.SF_PASSWORD! + process.env.SF_SECURITY_TOKEN!
);
console.log('Connected to:', conn.instanceUrl);
console.log('User ID:', conn.userInfo?.id);
console.log('Org ID:', conn.userInfo?.organizationId);
import jsforce from 'jsforce';
import fs from 'fs';
const conn = new jsforce.Connection({
loginUrl: process.env.SF_LOGIN_URL,
// JWT requires a Connected App with a digital certificate
});
await conn.authorize({
grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer',
client_id: process.env.SF_CLIENT_ID!,
username: process.env.SF_USERNAME!,
privateKeyFile: './server.key', // RSA private key from your certificate
});
import jsforce from 'jsforce';
const oauth2 = new jsforce.OAuth2({
loginUrl: process.env.SF_LOGIN_URL,
clientId: process.env.SF_CLIENT_ID!,
clientSecret: process.env.SF_CLIENT_SECRET!,
redirectUri: 'https://yourapp.com/oauth/callback',
});
// Step A: Redirect user to authorization URL
const authUrl = oauth2.getAuthorizationUrl({ scope: 'api refresh_token' });
// Step B: Handle callback — exchange code for tokens
const conn = new jsforce.Connection({ oauth2 });
await conn.authorize(authorizationCode);
// conn.accessToken and conn.refreshToken are now set
// Quick verification — query org info
const identity = await conn.identity();
console.log('Username:', identity.username);
console.log('Display Name:', identity.display_name);
// Check API version
const versions = await conn.request('/services/data/');
console.log('Latest API version:', versions[versions.length - 1].version);
from simple_salesforce import Salesforce
import os
# Username-Password flow
sf = Salesforce(
username=os.environ['SF_USERNAME'],
password=os.environ['SF_PASSWORD'],
security_token=os.environ['SF_SECURITY_TOKEN'],
domain='test' if os.environ.get('SF_SANDBOX') else None # 'test' for sandbox
)
# Verify connection
print(f"Connected to: {sf.sf_instance}")
result = sf.query("SELECT Id, Name FROM Organization")
print(f"Org: {result['records'][0]['Name']}")
| Error | Cause | Solution |
|---|---|---|
INVALID_LOGIN | Wrong username/password/token | Verify credentials; reset security token in Setup > My Personal Information |
INVALID_CLIENT_ID | Wrong Connected App consumer key | Check Setup > App Manager > your app |
INVALID_GRANT | JWT cert mismatch or user not pre-authorized | Upload cert to Connected App; pre-authorize user profile |
LOGIN_MUST_USE_SECURITY_TOKEN | Missing security token | Append token to password or whitelist your IP in Setup |
API_DISABLED_FOR_ORG | API not enabled | Requires Enterprise, Unlimited, Developer, or Performance edition |
REQUEST_LIMIT_EXCEEDED | Daily API limit hit | Check Setup > Company Information for remaining calls |
After successful auth, proceed to salesforce-hello-world for your first SOQL query.
npx claudepluginhub jeremylongshore/claude-code-plugins-plus-skills --plugin salesforce-packApplies production-ready jsforce (TypeScript/Node.js) and simple-salesforce (Python) patterns for Salesforce integrations: singleton connections, typed queries, error handling, token refresh.
Configures Salesforce OAuth flows, Connected Apps, and External Client Apps with guidance on flow selection, PKCE, JWT bearer, scopes, and app model architecture decisions.
Provides patterns for Salesforce platform development: Lightning Web Components (LWC), Apex triggers/classes, REST/Bulk APIs, Connected Apps, Salesforce DX with scratch orgs and 2GP.