Agent Skills: Salesforce Install & Auth

|

UncategorizedID: jeremylongshore/claude-code-plugins-plus-skills/salesforce-install-auth

Install this agent skill to your local

pnpm dlx add-skill https://github.com/jeremylongshore/claude-code-plugins-plus-skills/tree/HEAD/plugins/saas-packs/salesforce-pack/skills/salesforce-install-auth

Skill Files

Browse the full folder contents for salesforce-install-auth.

Download Skill

Loading file tree…

plugins/saas-packs/salesforce-pack/skills/salesforce-install-auth/SKILL.md

Skill Metadata

Name
salesforce-install-auth
Description
|

Salesforce Install & Auth

Overview

Set up Salesforce connectivity using jsforce (Node.js) or simple-salesforce (Python), and configure one of three OAuth 2.0 authentication flows.

Prerequisites

  • Node.js 18+ or Python 3.10+
  • A Salesforce org (Developer Edition free at developer.salesforce.com)
  • Connected App configured in Setup > App Manager > New Connected App
  • OAuth scopes: api, refresh_token, offline_access

Instructions

Step 1: Install SDK

# 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

Step 2: Choose Authentication Flow

| 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 |

Step 3: Configure Credentials

# .env (NEVER commit — add .env to .gitignore)
SF_LOGIN_URL=https://login.salesforce.com
SF_USERNAME=user@example.com
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

Step 4: Connect with Username-Password Flow

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);

Step 5: Connect with JWT Bearer Flow (Production)

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
});

Step 6: Connect with OAuth2 Web Server Flow

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

Step 7: Verify Connection

// 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);

Python Setup (simple-salesforce)

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']}")

Output

  • jsforce or simple-salesforce installed
  • Authentication flow configured
  • Environment variables set (never hardcoded)
  • Connection verified with identity/org query

Error Handling

| 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 |

Resources

Next Steps

After successful auth, proceed to salesforce-hello-world for your first SOQL query.