Salesforce MCP Server
Provides tools for querying, managing records, metadata, and bulk operations in Salesforce, enabling AI agents to interact with Salesforce CRM.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Salesforce MCP Servershow me the last 5 opportunities"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Salesforce MCP Server
A Model Context Protocol (MCP) server that provides Salesforce integration for AI agents with flexible OAuth authentication.
Features
Dual OAuth modes - Bearer token validation or full OAuth 2.1 proxy
16 MCP tools across 4 categories for comprehensive Salesforce operations
Per-user Salesforce client caching - Efficient connection management
Dual transport modes - STDIO for local clients, HTTP for multi-user deployments
RFC-compliant OAuth - RFC 8414, RFC 9728, RFC 7591, PKCE support
Client OAuth flexibility - ADK agents, Claude Code, Gemini CLI all supported
Available Tools
Category | Tools |
Query |
|
Records |
|
Metadata |
|
Bulk API |
|
Related MCP server: MCP Salesforce Lite
Prerequisites
Python >= 3.14
uv package manager
Salesforce Connected App (see Connected App Setup)
Installation
Option 1: uvx (Recommended)
uvx salesforce-mcp-server --transport stdio
# or for HTTP mode:
uvx salesforce-mcp-server --transport httpOption 2: Docker
docker pull ghcr.io/hypn4/salesforce-mcp-server
# HTTP mode (default)
docker run -p 8000:8000 \
-e SALESFORCE_CLIENT_ID=your_client_id \
-e SALESFORCE_LOGIN_URL=https://login.salesforce.com \
ghcr.io/hypn4/salesforce-mcp-server
# STDIO mode
docker run -i \
-e SALESFORCE_ACCESS_TOKEN=your_token \
-e SALESFORCE_INSTANCE_URL=https://your-domain.my.salesforce.com \
ghcr.io/hypn4/salesforce-mcp-server --transport stdioOption 3: Pre-built Binary
Download from GitHub Releases:
Platform | Download |
Linux (x64) |
|
Linux (ARM64) |
|
macOS (ARM64) |
|
Windows (x64) |
|
Verify checksum:
# Download checksums-sha256.txt from the release
sha256sum -c checksums-sha256.txtOption 4: From Source
git clone https://github.com/hypn4/salesforce-mcp-server.git
cd salesforce-mcp-server
cp .env.example .env
# Edit .env with your Salesforce credentials
uv syncConfiguration
All configuration is done through environment variables. Copy .env.example to .env and adjust as needed.
OAuth Mode
Variable | Default | Description |
|
|
|
Bearer Mode (Default)
Clients handle OAuth themselves. The server validates Bearer tokens via Salesforce userinfo endpoint.
Variable | Default | Description |
|
| Token verification URL |
Proxy Mode
Server acts as OAuth 2.1 + PKCE proxy to Salesforce. Provides RFC-compliant endpoints:
/.well-known/oauth-authorization-server(RFC 8414)/.well-known/oauth-protected-resource(RFC 9728)/register(RFC 7591 Dynamic Client Registration)/authorize,/token,/auth/callback(OAuth 2.1 + PKCE)
Variable | Required | Description |
| Yes | Salesforce Connected App client ID |
| No | Client secret (optional, see modes below) |
| No | Login URL (default: |
| No | Public URL of the server (default: |
| No | Comma-separated scopes (default: |
Authentication Modes
Mode |
| Use Case |
Confidential Client | Set | Server-side apps where secret can be stored securely |
PKCE-only (Public Client) | Empty/Unset | CLI tools, mobile apps, or when secret storage isn't possible |
For PKCE-only mode, configure your Salesforce Connected App:
✅ Enable "Require Proof Key for Code Exchange (PKCE)"
❌ Disable "Require Secret for Web Server Flow"
Storage Configuration (Proxy Mode)
Variable | Default | Description |
|
|
|
|
| Redis connection URL |
| - | Fernet key for token encryption |
HTTP Server Settings
Variable | Default | Description |
|
| HTTP server port (cloud platform standard) |
| - | HTTP server port (fallback, for backwards compatibility) |
Port Priority:
PORT→FASTMCP_PORT→8000(default)Cloud platforms (Heroku, Cloud Run, Railway, etc.) automatically set the
PORTenvironment variable.
Salesforce Instance
Variable | Default | Description |
|
| For sandbox use |
|
| Token verification URL (userinfo endpoint) |
Logging
Variable | Default | Description |
|
|
|
MCP Integration Guide
Authentication Modes
This server supports two OAuth modes:
Bearer Token Mode (Default)
Standard MCP authentication pattern (like GitHub, Stripe MCP servers):
Server: Validates Bearer tokens via Salesforce userinfo endpoint
Clients: Handle OAuth authentication themselves
Client Type | OAuth Handling |
ADK Agents | Use |
Claude Desktop/Code/Gemini CLI | Static access token via environment variables (STDIO Mode) |
OAuth Proxy Mode
Full OAuth 2.1 + PKCE proxy with RFC-compliant discovery:
Server: Handles complete OAuth flow with Salesforce
Clients: Use standard OAuth discovery (automatic with compatible clients)
Client Type | OAuth Handling |
Claude Desktop | Native OAuth discovery (automatic) |
Claude Code | Native OAuth discovery (automatic) |
Gemini CLI | Native OAuth discovery (automatic) |
ADK Agents | StreamableHTTPConnectionParams with Bearer token |
To enable proxy mode:
export OAUTH_MODE=proxy
export SALESFORCE_CLIENT_ID=your_client_id
export BASE_URL=https://your-server.com
# Optional: Add client_secret for confidential client mode
# Omit for PKCE-only (public client) mode
export SALESFORCE_CLIENT_SECRET=your_client_secretTransport Modes
Mode | Authentication | Use Case |
STDIO | Access Token (env vars) | Local development, single-user |
HTTP | Bearer Token (Authorization header) | Multi-user, web-based clients |
STDIO Mode Environment Variables
Variable | Required | Description |
| Yes | Salesforce Access Token |
| Yes | Salesforce Instance URL (e.g., |
| No | User ID (default: |
| No | Org ID (default: |
| No | Username (default: |
Getting an Access Token for STDIO Mode
Use Salesforce CLI to get your Access Token:
sf org display --target-org <your-org-alias>From the output, copy the Access Token and Instance Url values for your configuration.
Claude Desktop
Config file location:
macOS/Linux:
~/.config/claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
OAuth Proxy Mode (Recommended)
Native OAuth 2.1 + PKCE - no additional tools required.
Configure the server for proxy mode:
export OAUTH_MODE=proxy
export SALESFORCE_CLIENT_ID=your_connected_app_client_id
export BASE_URL=http://localhost:8000
# Optional: SALESFORCE_CLIENT_SECRET for confidential client modeStart the server:
uvx salesforce-mcp-server --transport httpConfigure Claude Desktop:
{
"mcpServers": {
"salesforce": {
"url": "http://localhost:8000/mcp"
}
}
}Claude Desktop will automatically discover OAuth endpoints and initiate authentication when you first use a Salesforce tool.
STDIO Mode (Static Token)
{
"mcpServers": {
"salesforce": {
"command": "uvx",
"args": ["salesforce-mcp-server", "--transport", "stdio"],
"env": {
"SALESFORCE_ACCESS_TOKEN": "00D...",
"SALESFORCE_INSTANCE_URL": "https://your-domain.my.salesforce.com"
}
}
}
}Claude Code
Config file location:
Global:
~/.claude/settings.jsonProject:
.mcp.json
OAuth Proxy Mode (Recommended)
Native OAuth 2.1 + PKCE - no additional tools required.
Configure the server (see Configuration section above)
Start the server:
uvx salesforce-mcp-server --transport httpAdd the MCP server:
claude mcp add salesforce --transport http http://localhost:8000/mcpOr configure manually in ~/.claude/settings.json or .mcp.json:
{
"mcpServers": {
"salesforce": {
"url": "http://localhost:8000/mcp"
}
}
}Claude Code will automatically discover OAuth endpoints via RFC 8414 metadata.
STDIO Mode (Static Token)
{
"mcpServers": {
"salesforce": {
"command": "uvx",
"args": ["salesforce-mcp-server", "--transport", "stdio"],
"env": {
"SALESFORCE_ACCESS_TOKEN": "00D...",
"SALESFORCE_INSTANCE_URL": "https://your-domain.my.salesforce.com"
}
}
}
}Gemini CLI
Config file: ~/.gemini/settings.json
OAuth Proxy Mode (Recommended)
Native OAuth discovery - Gemini CLI auto-discovers OAuth endpoints.
Configure the server (see Configuration section above)
Start the server:
uvx salesforce-mcp-server --transport httpAdd the MCP server:
gemini mcp add salesforce http://localhost:8000/mcpOr configure manually in ~/.gemini/settings.json:
{
"mcpServers": {
"salesforce": {
"url": "http://localhost:8000/mcp"
}
}
}Gemini CLI will automatically discover OAuth endpoints and initiate authentication.
STDIO Mode (Static Token)
{
"mcpServers": {
"salesforce": {
"command": "uvx",
"args": ["salesforce-mcp-server", "--transport", "stdio"],
"env": {
"SALESFORCE_ACCESS_TOKEN": "00D...",
"SALESFORCE_INSTANCE_URL": "https://your-domain.my.salesforce.com"
}
}
}
}Running Manually
STDIO Mode:
uvx salesforce-mcp-server --transport stdio
# or with local development:
just runHTTP Mode:
uvx salesforce-mcp-server --transport http
# or with local development:
just run-httpHTTP mode default endpoint: http://localhost:8000
Salesforce Connected App Setup
In Salesforce Setup, navigate to App Manager
Click New Connected App
Fill in basic information (name, contact email)
Enable OAuth Settings
Set Callback URL to match your deployment:
For local development:
http://localhost:8000/auth/callbackFor production:
https://your-domain.com/auth/callback
Select OAuth scopes:
api(Access and manage your data)refresh_token(Perform requests at any time)offline_access(Perform requests at any time)
Enable Require Proof Key for Code Exchange (PKCE) Extension for Supported Authorization Flows
Save and copy the Consumer Key (this is your
SALESFORCE_CLIENT_ID)
Development
Commands
Command | Description |
| Run server in STDIO mode |
| Run server in HTTP mode |
| Run with DEBUG logging |
| Run tests |
| Run tests with coverage |
| Run linter |
| Run linter with auto-fix |
| Format code |
| Run with MCP Inspector for debugging |
| List all registered MCP tools |
| Build Docker image |
| Run in Docker (HTTP mode) |
| Run in Docker (STDIO mode) |
| Build standalone binary |
Project Structure
salesforce-mcp-server/
├── src/salesforce_mcp_server/
│ ├── server.py # FastMCP server setup
│ ├── tools/ # MCP tool implementations
│ │ ├── query.py # SOQL/SOSL query tools
│ │ ├── records.py # Record CRUD tools
│ │ ├── metadata.py # Metadata tools
│ │ └── bulk.py # Bulk API tools
│ ├── oauth/ # OAuth authentication
│ │ ├── proxy.py # OAuth 2.1 proxy for Salesforce
│ │ ├── token_verifier.py # Salesforce token validation
│ │ ├── token_access.py # Token access utilities
│ │ ├── storage.py # Token storage backends
│ │ └── pkce.py # PKCE utilities
│ └── salesforce/ # Salesforce client
├── tests/
├── .env.example
├── justfile
└── pyproject.tomlLicense
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/hypn4/salesforce-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server