Skip to main content
Glama

Salesforce MCP Server

by steffensbola
README.md7.61 kB
# MCP Salesforce TypeScript Connector A TypeScript implementation of a Model Context Protocol (MCP) server for Salesforce integration, allowing LLMs to interact with Salesforce data through SOQL queries, SOSL searches, and CRUD operations. ## Features - **🔐 Simplified Password Authentication**: Secure OAuth 2.0 Resource Owner Password Credentials Flow - **📊 SOQL & SOSL**: Execute queries and searches against Salesforce - **🔍 Metadata Access**: Retrieve object fields, labels, and types - **✏️ CRUD Operations**: Create, read, update, and delete records - **🛠️ Tooling API**: Execute Tooling API requests - **⚡ Apex REST**: Execute Apex REST requests - **🌐 REST API**: Make direct REST API calls to Salesforce - **🐳 Docker Ready**: No hardcoded values, fully configurable via environment variables - **🔄 Token Refresh**: Automatic token refresh for long-running sessions ## Available Tools - `authenticate_password` - Authenticate using username/password with OAuth - `run_soql_query` - Execute SOQL queries - `run_sosl_search` - Execute SOSL searches - `get_object_fields` - Get metadata for Salesforce objects - `get_record` - Retrieve specific records by ID - `create_record` - Create new records - `update_record` - Update existing records - `delete_record` - Delete records - `tooling_execute` - Execute Tooling API requests - `apex_execute` - Execute Apex REST requests - `restful` - Make direct REST API calls ## Quick Start with Docker ### Prerequisites 1. **Create a Connected App in Salesforce:** - Go to Setup → Apps → App Manager → New Connected App - Fill in basic information (App Name, API Name, Contact Email) - Enable OAuth Settings - Set callback URL: `http://localhost:8080/callback` (required but not used) - Select OAuth Scopes: - Access your basic information (id, profile, email, address, phone) - Perform requests on your behalf at any time (refresh_token, offline_access) - Access and manage your data (api) - Save and note down the Consumer Key and Consumer Secret 2. **Get your Security Token:** - Go to Setup → My Personal Information → Reset Security Token - Check your email for the new security token ### Using the Docker Image Pull and run the latest Docker image: ```bash # Pull the image docker pull steffensbola/salesforce-mcp-ts:latest # Run with your credentials docker run -p 3000:3000 \ -e SALESFORCE_CLIENT_ID=your_consumer_key \ -e SALESFORCE_CLIENT_SECRET=your_consumer_secret \ -e SALESFORCE_USERNAME=your_username@domain.com \ -e SALESFORCE_PASSWORD=your_password \ -e SALESFORCE_SECURITY_TOKEN=your_security_token \ -e SALESFORCE_SANDBOX=true \ steffensbola/salesforce-mcp-ts:latest ``` ## MCP Configuration ### VS Code using Docker image Add to your `.vscode/mcp.json`: ```json { "servers": { "salesforce": { "command": "docker", "args": [ "run", "--rm", "-i", "-e", "SALESFORCE_CLIENT_ID=your_consumer_key", "-e", "SALESFORCE_CLIENT_SECRET=your_consumer_secret", "-e", "SALESFORCE_USERNAME=your_username@domain.com", "-e", "SALESFORCE_PASSWORD=your_password", "-e", "SALESFORCE_SECURITY_TOKEN=your_token", "-e", "SALESFORCE_SANDBOX=true", "steffensbola/salesforce-mcp-ts:latest" ] } } } ``` You can also use volumes to mount a config file instead of passing environment variables: ```json { "servers": { "salesforce": { "command": "docker", "args": [ "run", "--rm", "-i", "-v", "${workspaceFolder}/.env:/app/.env", "steffensbola/salesforce-mcp-ts:latest" ] } } } ``` ### Claude Desktop using Docker image Add to your `claude_desktop_config.json`: ```json { "mcpServers": { "salesforce": { "command": "docker", "args": [ "run", "--rm", "-i", "-e", "SALESFORCE_CLIENT_ID=your_consumer_key", "-e", "SALESFORCE_CLIENT_SECRET=your_consumer_secret", "-e", "SALESFORCE_USERNAME=your_username@domain.com", "-e", "SALESFORCE_PASSWORD=your_password", "-e", "SALESFORCE_SECURITY_TOKEN=your_token", "-e", "SALESFORCE_SANDBOX=true", "steffensbola/salesforce-mcp-ts:latest" ] } } } ``` ## Environment Variables The server requires the following environment variables: ### Required (OAuth Authentication) - `SALESFORCE_CLIENT_ID` - Consumer Key from your Connected App - `SALESFORCE_CLIENT_SECRET` - Consumer Secret from your Connected App - `SALESFORCE_USERNAME` - Your Salesforce username - `SALESFORCE_PASSWORD` - Your Salesforce password - `SALESFORCE_SECURITY_TOKEN` - Your Salesforce security token ### Optional - `SALESFORCE_SANDBOX` - Set to `"true"` for sandbox, `"false"` for production (default: `"false"`) ### Alternative (Direct Token Authentication) Instead of username/password, you can use: - `SALESFORCE_ACCESS_TOKEN` - Direct access token - `SALESFORCE_INSTANCE_URL` - Salesforce instance URL (e.g., `https://your-instance.my.salesforce.com`) ### Backward Compatibility The server also supports alternative variable names: - `SF_CONSUMER_KEY` / `SF_CONSUMER_SECRET` - `SF_USERNAME` / `SF_PASSWORD` / `SF_SECURITY_TOKEN` ## Using Docker Compose 1. Create a `.env` file with your environment variables: ```bash SALESFORCE_CLIENT_ID=your_consumer_key SALESFORCE_CLIENT_SECRET=your_consumer_secret SALESFORCE_USERNAME=your_username@domain.com SALESFORCE_PASSWORD=your_password SALESFORCE_SECURITY_TOKEN=your_token SALESFORCE_SANDBOX=true DOCKER_HUB_USERNAME=steffensbola ``` 2. Run using Docker Compose: ```bash docker-compose up -d ``` ## Examples ### Using the Tools Once connected, you can use the tools through your MCP client: **Authentication:** ``` Please authenticate with Salesforce using my credentials ``` **Query Data:** ``` Run this SOQL query: SELECT Id, Name, Industry FROM Account WHERE Industry = 'Technology' LIMIT 10 ``` **Search:** ``` Search for contacts named "John" using SOSL ``` **Get Metadata:** ``` Get all the fields for the Contact object ``` **Create Record:** ``` Create a new Account with Name "Test Company" and Industry "Technology" ``` ## Troubleshooting ### Common Issues 1. **Authentication Failed** - Verify credentials are correct - Check Connected App OAuth scopes include "Access and manage your data (api)" - Ensure security token is current (reset if needed) - Verify sandbox setting matches your org type 2. **Container Won't Start** - Ensure both CLIENT_ID and CLIENT_SECRET are provided - Check that all required environment variables are set - Verify Docker has access to pull the image 3. **Network Errors** - Check internet connection - Verify Salesforce service status - Check firewall settings allow outbound HTTPS connections ### Debug Mode For verbose logging, add the debug environment variable: ```bash docker run -e DEBUG=true \ -e SALESFORCE_CLIENT_ID=... \ # ... other variables steffensbola/salesforce-mcp-ts:latest ``` ## Contributing See [CONTRIBUTING.md](CONTRIBUTING.md) for information about: - Project architecture and development setup - Running from source code - Contributing guidelines and pull request process ## License MIT License - see [LICENSE](LICENSE) file for details. ## Links - [Salesforce Documentation](https://developer.salesforce.com/docs) - [Model Context Protocol](https://github.com/modelcontextprotocol/typescript-sdk) - [Docker Hub Repository](https://hub.docker.com/r/steffensbola/salesforce-mcp-ts)

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/steffensbola/salesforce-mcp-ts'

If you have feedback or need assistance with the MCP directory API, please join our Discord server