Salesforce MCP Server
Provides tools for interacting with Salesforce, enabling natural language queries, record management, object and field manipulation, Apex code management, reports and dashboards, and REST API passthrough.
Click on "Deploy 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 Server Show me all fields in the Account object"
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
An MCP (Model Context Protocol) server implementation that integrates Claude with Salesforce, enabling natural language interactions with your Salesforce data and metadata. This server allows Claude to query, modify, and manage your Salesforce objects and records using everyday language.
Features
Object and Field Management: Create and modify custom objects and fields using natural language
Smart Object Search: Find Salesforce objects using partial name matches
Detailed Schema Information: Get comprehensive field and relationship details for any object
Flexible Data Queries: Query records with relationship support and complex filters
Data Manipulation: Insert, update, delete, and upsert records with ease
Cross-Object Search: Search across multiple objects using SOSL
Apex Code Management: Read, create, and update Apex classes and triggers
Reports & Dashboards: List, describe, run reports with filter overrides, and retrieve dashboard component data
REST API Passthrough: Call any Salesforce REST endpoint directly — Reports, Composite API, Files, Limits, and more
Input Sanitization: SOQL/SOSL injection prevention, identifier validation, and secure query construction
Intuitive Error Handling: Clear feedback with Salesforce-specific error details
Switchable Authentication: Supports multiple orgs. Easily switch your active Salesforce org based on the default org configured in your VS Code workspace (use Salesforce_CLI authentication for this feature).
Related MCP server: Salesforce MCP Server
Getting Started
For a complete walkthrough — installing the Salesforce CLI, authenticating, and configuring Claude Code or Claude Desktop — see SETUP.md.
Installation
Global Installation (npm)
npm install -g @aaron-pienza/mcp-server-salesforceTools
salesforce_search_objects
Search for standard and custom objects:
Search by partial name matches
Finds both standard and custom objects
Example: "Find objects related to Account" will find Account, AccountHistory, etc.
salesforce_describe_object
Get detailed object schema information:
Field definitions and properties
Relationship details
Picklist values
Example: "Show me all fields in the Account object"
salesforce_query_records
Query records with relationship support:
Parent-to-child relationships
Child-to-parent relationships
Complex WHERE conditions
Example: "Get all Accounts with their related Contacts"
Note: For queries with GROUP BY or aggregate functions, use salesforce_aggregate_query
salesforce_aggregate_query
Execute aggregate queries with GROUP BY:
GROUP BY single or multiple fields
Aggregate functions: COUNT, COUNT_DISTINCT, SUM, AVG, MIN, MAX
HAVING clauses for filtering grouped results
Date/time grouping functions
Example: "Count opportunities by stage" or "Find accounts with more than 10 opportunities"
salesforce_dml_records
Perform data operations:
Insert new records
Update existing records
Delete records
Upsert using external IDs
Example: "Update status of multiple accounts"
salesforce_manage_object
Create and modify custom objects:
Create new custom objects
Update object properties
Configure sharing settings
Example: "Create a Customer Feedback object"
salesforce_manage_field
Manage object fields:
Add new custom fields
Modify field properties
Create relationships
Automatically grants Field Level Security to System Administrator by default
Use
grantAccessToparameter to specify different profilesExample: "Add a Rating picklist field to Account"
salesforce_manage_field_permissions
Manage Field Level Security (Field Permissions):
Grant or revoke read/edit access to fields for specific profiles
View current field permissions
Bulk update permissions for multiple profiles
Useful for managing permissions after field creation or for existing fields
Example: "Grant System Administrator access to Custom_Field__c on Account"
salesforce_search_all
Search across multiple objects:
SOSL-based search
Multiple object support
Field snippets
Example: "Search for 'cloud' across Accounts and Opportunities"
salesforce_read_apex
Read Apex classes:
Get full source code of specific classes
List classes matching name patterns
View class metadata (API version, status, etc.)
Support for wildcards (* and ?) in name patterns
Example: "Show me the AccountController class" or "Find all classes matching AccountCont"
salesforce_write_apex
Create and update Apex classes:
Create new Apex classes
Update existing class implementations
Specify API versions
Example: "Create a new Apex class for handling account operations"
salesforce_read_apex_trigger
Read Apex triggers:
Get full source code of specific triggers
List triggers matching name patterns
View trigger metadata (API version, object, status, etc.)
Support for wildcards (* and ?) in name patterns
Example: "Show me the AccountTrigger" or "Find all triggers for Contact object"
salesforce_write_apex_trigger
Create and update Apex triggers:
Create new Apex triggers for specific objects
Update existing trigger implementations
Specify API versions and event operations
Example: "Create a new trigger for the Account object" or "Update the Lead trigger"
salesforce_execute_anonymous
Execute anonymous Apex code:
Run Apex code without creating a permanent class
View debug logs and execution results
Useful for data operations not directly supported by other tools
Example: "Execute Apex code to calculate account metrics" or "Run a script to update related records"
salesforce_manage_debug_logs
Manage debug logs for Salesforce users:
Enable debug logs for specific users
Disable active debug log configurations
Retrieve and view debug logs
Configure log levels (NONE, ERROR, WARN, INFO, DEBUG, FINE, FINER, FINEST)
Example: "Enable debug logs for user@example.com" or "Retrieve recent logs for an admin user"
salesforce_list_analytics
List available reports and dashboards:
Search reports or dashboards by name
Returns IDs, names, folders, and metadata
Use this to find IDs before describing or running analytics
Example: "List all reports matching 'Pipeline'" or "Find dashboards about Executive metrics"
salesforce_describe_analytics
Get detailed metadata for a report or dashboard:
Reports: columns, groupings, filters, aggregates, date filter, and available filter operators
Dashboards: component list with headers, visualization types, associated report IDs, and layout
Use this to understand structure before running with filter overrides
Example: "Describe the Pipeline report" or "Show me the components of the Executive dashboard"
salesforce_run_analytics
Execute reports or retrieve dashboard component data:
Run reports with optional runtime filter overrides, date filters, and detail rows
Retrieve current dashboard component data (aggregates and summaries) without refresh
Supports boolean filter logic (e.g., "1 AND (2 OR 3)")
Detail rows capped at 2,000 by the Salesforce sync API
Example: "Run the Pipeline report for Closed Won deals" or "Get the Executive dashboard data"
salesforce_refresh_dashboard
Refresh a dashboard or check refresh status:
Trigger an asynchronous dashboard refresh
Check per-component refresh status and data freshness
Use
salesforce_run_analyticsafter refresh completes to retrieve updated dataExample: "Refresh the Executive dashboard" or "Check if the dashboard refresh is done"
salesforce_rest_api
Make direct REST API calls to any Salesforce REST endpoint:
Access any Salesforce REST API endpoint not covered by other tools
Supports GET, POST, PATCH, PUT, and DELETE methods
Automatically handles API version prefixing (
/services/data/vXX.0/)Supports raw paths for custom Apex REST endpoints (
/services/apexrest/...)Query parameters and JSON request bodies
Configurable API version override
Large response truncation to prevent client overload
Examples:
"Get our org's API limits" →
GET /limits"Run report 00O5e000004XXXX" →
GET /analytics/reports/{id}"Get the Composite API to batch requests" →
POST /composite"Download file content" →
GET /sobjects/ContentVersion/{id}/VersionData"Call our custom Apex REST endpoint" →
GET /services/apexrest/MyEndpoint(withrawPath: true)
Setup
Salesforce Authentication
You can connect to Salesforce using one of three authentication methods:
1. Username/Password Authentication (Default)
Set up your Salesforce credentials
Get your security token (Reset from Salesforce Settings)
2. OAuth 2.0 Client Credentials Flow
Create a Connected App in Salesforce
Enable OAuth settings and select "Client Credentials Flow"
Set appropriate scopes (typically "api" is sufficient)
Save the Client ID and Client Secret
Important: Note your instance URL (e.g.,
https://your-domain.my.salesforce.com) as it's required for authentication
3. Salesforce CLI Authentication (Recommended for local/dev) (contribution by @andrea9293)
Install and authenticate Salesforce CLI (
sf).Make sure your org is authenticated and accessible via
sf org display --jsonin the root of your Salesforce project.The server will automatically retrieve the access token and instance url using the CLI.
Usage with Claude Desktop
Add to your claude_desktop_config.json:
For Salesforce CLI Authentication:
{
"mcpServers": {
"salesforce": {
"command": "npx",
"args": ["-y", "@aaron-pienza/mcp-server-salesforce"],
"env": {
"SALESFORCE_CONNECTION_TYPE": "Salesforce_CLI"
}
}
}
}For Username/Password Authentication:
{
"mcpServers": {
"salesforce": {
"command": "npx",
"args": ["-y", "@aaron-pienza/mcp-server-salesforce"],
"env": {
"SALESFORCE_CONNECTION_TYPE": "User_Password",
"SALESFORCE_USERNAME": "your_username",
"SALESFORCE_PASSWORD": "your_password",
"SALESFORCE_TOKEN": "your_security_token",
"SALESFORCE_INSTANCE_URL": "org_url" // Optional. Default value: https://login.salesforce.com
}
}
}
}For OAuth 2.0 Client Credentials Flow:
{
"mcpServers": {
"salesforce": {
"command": "npx",
"args": ["-y", "@aaron-pienza/mcp-server-salesforce"],
"env": {
"SALESFORCE_CONNECTION_TYPE": "OAuth_2.0_Client_Credentials",
"SALESFORCE_CLIENT_ID": "your_client_id",
"SALESFORCE_CLIENT_SECRET": "your_client_secret",
"SALESFORCE_INSTANCE_URL": "https://your-domain.my.salesforce.com" // REQUIRED: Must be your exact Salesforce instance URL
}
}
}
}Note: For OAuth 2.0 Client Credentials Flow, the
SALESFORCE_INSTANCE_URLmust be your exact Salesforce instance URL (e.g.,https://your-domain.my.salesforce.com). The token endpoint will be constructed as<instance_url>/services/oauth2/token.
Example Usage
Searching Objects
"Find all objects related to Accounts"
"Show me objects that handle customer service"
"What objects are available for order management?"Getting Schema Information
"What fields are available in the Account object?"
"Show me the picklist values for Case Status"
"Describe the relationship fields in Opportunity"Querying Records
"Get all Accounts created this month"
"Show me high-priority Cases with their related Contacts"
"Find all Opportunities over $100k"Aggregate Queries
"Count opportunities by stage"
"Show me the total revenue by account"
"Find accounts with more than 10 opportunities"
"Calculate average deal size by sales rep and quarter"
"Get the number of cases by priority and status"Managing Custom Objects
"Create a Customer Feedback object"
"Add a Rating field to the Feedback object"
"Update sharing settings for the Service Request object"Examples with Field Level Security:
# Default - grants access to System Administrator automatically
"Create a Status picklist field on Custom_Object__c"
# Custom profiles - grants access to specified profiles
"Create a Revenue currency field on Account and grant access to Sales User and Marketing User profiles"Managing Field Permissions
"Grant System Administrator access to Custom_Field__c on Account"
"Give read-only access to Rating__c field for Sales User profile"
"View which profiles have access to the Custom_Field__c"
"Revoke field access for specific profiles"Searching Across Objects
"Search for 'cloud' in Accounts and Opportunities"
"Find mentions of 'network issue' in Cases and Knowledge Articles"
"Search for customer name across all relevant objects"Managing Apex Code
"Show me all Apex classes with 'Controller' in the name"
"Get the full code for the AccountService class"
"Create a new Apex utility class for handling date operations"
"Update the LeadConverter class to add a new method"Managing Apex Triggers
"List all triggers for the Account object"
"Show me the code for the ContactTrigger"
"Create a new trigger for the Opportunity object"
"Update the Case trigger to handle after delete events"Executing Anonymous Apex Code
"Execute Apex code to calculate account metrics"
"Run a script to update related records"
"Execute a batch job to process large datasets"Managing Debug Logs
"Enable debug logs for user@example.com"
"Retrieve recent logs for an admin user"
"Disable debug logs for a specific user"
"Configure log level to DEBUG for a user"Reports & Dashboards
"List all reports matching 'Pipeline'"
"Describe the quarterly revenue report"
"Run the Pipeline report filtered to Closed Won"
"Run the sales report for last 90 days"
"Refresh the Executive dashboard"
"Get the latest data from the KPI dashboard"REST API Calls
"Check our org's API usage limits"
"Run the weekly sales report"
"Get all available REST API resources"
"Call our custom Apex REST endpoint at /services/apexrest/AccountSync"
"Use the Composite API to create an Account and Contact in one call"Security
This server includes multiple layers of input sanitization and security controls:
SOQL/SOSL injection prevention — All user-supplied values are escaped before interpolation into queries. Object and field names are validated against Salesforce identifier patterns.
Credential protection — Access tokens are never logged. CLI output is redacted before logging.
Audit logging — Anonymous Apex execution is audit-logged with code length and preview.
Shell injection prevention — CLI invocation uses
execFile(no shell) instead ofexec.
For full details, see SECURITY.md.
Note: The
salesforce_execute_anonymousandsalesforce_rest_apitools are intentionally powerful — they provide full access to Salesforce capabilities within the connected user's permissions. Use Salesforce profiles and permission sets to restrict what the connected user can do.
Development
Building from source
# Clone the repository
git clone https://github.com/aaron-pienza/mcp-server-salesforce.git
# Navigate to directory
cd mcp-server-salesforce
# Install dependencies
npm install
# Build the project
npm run buildContributing
Contributions are welcome! Feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Issues and Support
If you encounter any issues or need support, please file an issue on the GitHub repository.
Available Tools
20 toolssalesforce_aggregate_queryA
Execute SOQL queries with GROUP BY, aggregate functions, and statistical analysis. Use this tool for queries that summarize and group data rather than returning individual records.
NOTE: For regular queries without GROUP BY or aggregates, use salesforce_query_records instead.
This tool handles:
GROUP BY queries (single/multiple fields, related objects, date functions)
Aggregate functions: COUNT(), COUNT_DISTINCT(), SUM(), AVG(), MIN(), MAX()
HAVING clauses for filtering grouped results
Date/time grouping: CALENDAR_YEAR(), CALENDAR_MONTH(), CALENDAR_QUARTER(), FISCAL_YEAR(), FISCAL_QUARTER()
Examples:
Count opportunities by stage:
objectName: "Opportunity"
selectFields: ["StageName", "COUNT(Id) OpportunityCount"]
groupByFields: ["StageName"]
Analyze cases by priority and status:
objectName: "Case"
selectFields: ["Priority", "Status", "COUNT(Id) CaseCount", "AVG(Days_Open__c) AvgDaysOpen"]
groupByFields: ["Priority", "Status"]
Count contacts by account industry:
objectName: "Contact"
selectFields: ["Account.Industry", "COUNT(Id) ContactCount"]
groupByFields: ["Account.Industry"]
Quarterly opportunity analysis:
objectName: "Opportunity"
selectFields: ["CALENDAR_YEAR(CloseDate) Year", "CALENDAR_QUARTER(CloseDate) Quarter", "SUM(Amount) Revenue"]
groupByFields: ["CALENDAR_YEAR(CloseDate)", "CALENDAR_QUARTER(CloseDate)"]
Find accounts with more than 10 opportunities:
objectName: "Opportunity"
selectFields: ["Account.Name", "COUNT(Id) OpportunityCount"]
groupByFields: ["Account.Name"]
havingClause: "COUNT(Id) > 10"
Important Rules:
All non-aggregate fields in selectFields MUST be included in groupByFields
Use whereClause to filter rows BEFORE grouping
Use havingClause to filter AFTER grouping (for aggregate conditions)
ORDER BY can only use fields from groupByFields or aggregate functions
OFFSET is not supported with GROUP BY in Salesforce
Inputs: objectName (required), selectFields (required), groupByFields (required), whereClause, +3 more.
salesforce_describe_analyticsA
Get detailed metadata for a Salesforce report or dashboard.
For reports: returns columns, groupings, filters, aggregates, date filter, and available filter operators. Use this to understand a report's structure before running it with salesforce_run_analytics.
For dashboards: returns component list (headers, visualization types, associated report IDs), filters, running user, and layout info.
Examples:
Describe a report:
type: "report"
resourceId: "00Oxx000000XXXXX"
Describe a dashboard:
type: "dashboard"
resourceId: "01Zxx000000XXXXX"
Inputs: type (required), resourceId (required).
salesforce_describe_objectA
Get detailed schema metadata including all fields, relationships, and field properties of any Salesforce object. Examples: 'Account' shows all Account fields including custom fields; 'Case' shows all Case fields including relationships to Account, Contact etc.
Inputs: objectName (required).
salesforce_dml_recordsA
Perform data manipulation operations on Salesforce records:
insert: Create new records
update: Modify existing records (requires Id)
delete: Remove records (requires Id)
upsert: Insert or update based on external ID field Examples: Insert new Accounts, Update Case status, Delete old records, Upsert based on custom external ID
Inputs: operation (required), objectName (required), records (required), externalIdField.
salesforce_execute_anonymousA
Execute anonymous Apex code in Salesforce.
Examples:
Execute simple Apex code: { "apexCode": "System.debug('Hello World');" }
Execute Apex code with variables: { "apexCode": "List accounts = [SELECT Id, Name FROM Account LIMIT 5]; for(Account a : accounts) { System.debug(a.Name); }" }
Execute Apex with debug logs: { "apexCode": "System.debug(LoggingLevel.INFO, 'Processing accounts...'); List accounts = [SELECT Id FROM Account LIMIT 10]; System.debug(LoggingLevel.INFO, 'Found ' + accounts.size() + ' accounts');", "logLevel": "DEBUG" }
Notes:
The apexCode parameter is required and must contain valid Apex code
The code is executed in an anonymous context and does not persist
The logLevel parameter is optional (defaults to 'DEBUG')
Execution results include compilation success/failure, execution success/failure, and debug logs
For security reasons, some operations may be restricted based on user permissions
This tool can be used for data operations or updates when there are no other specific tools available
When users request data queries or updates that aren't directly supported by other tools, this tool can be used if the operation is achievable using Apex code
Inputs: apexCode (required), logLevel.
salesforce_list_analyticsA
List available Salesforce reports or dashboards. Returns IDs, names, and metadata. Use this to find IDs before describing or running them with salesforce_describe_analytics or salesforce_run_analytics.
Examples:
List recently viewed reports:
type: "report"
Search reports by name:
type: "report"
searchTerm: "Pipeline"
List recently viewed dashboards:
type: "dashboard"
Search dashboards by name:
type: "dashboard"
searchTerm: "Executive"
Inputs: type (required), searchTerm.
salesforce_manage_debug_logsA
Manage debug logs for Salesforce users - enable, disable, or retrieve logs.
Examples:
Enable debug logs for a user: { "operation": "enable", "username": "user@example.com", "logLevel": "DEBUG", "expirationTime": 30 }
Disable debug logs for a user: { "operation": "disable", "username": "user@example.com" }
Retrieve debug logs for a user: { "operation": "retrieve", "username": "user@example.com", "limit": 5 }
Retrieve a specific log with full content: { "operation": "retrieve", "username": "user@example.com", "logId": "07L1g000000XXXXEAA0", "includeBody": true }
Notes:
The operation must be one of: 'enable', 'disable', or 'retrieve'
The username parameter is required for all operations
For 'enable' operation, logLevel is optional (defaults to 'DEBUG')
Log levels: NONE, ERROR, WARN, INFO, DEBUG, FINE, FINER, FINEST
expirationTime is optional for 'enable' operation (minutes until expiration, defaults to 30)
limit is optional for 'retrieve' operation (maximum number of logs to return, defaults to 10)
logId is optional for 'retrieve' operation (to get a specific log)
includeBody is optional for 'retrieve' operation (to include the full log content, defaults to false)
The tool validates that the specified user exists before performing operations
If logLevel is not specified when enabling logs, the tool will ask for clarification
Inputs: operation (required), username (required), logLevel, expirationTime, +4 more.
salesforce_manage_fieldA
Create new custom fields or modify existing fields on any Salesforce object:
Field Types: Text, Number, Date, Lookup, Master-Detail, Picklist etc.
Properties: Required, Unique, External ID, Length, Scale etc.
Relationships: Create lookups and master-detail relationships
Automatically grants Field Level Security to System Administrator (or specified profiles) Examples: Add Rating__c picklist to Account, Create Account lookup on Custom Object Note: Use grantAccessTo parameter to specify profiles, defaults to System Administrator
Inputs: operation (required), objectName (required), fieldName (required), label, +14 more.
salesforce_manage_field_permissionsA
Manage Field Level Security (Field Permissions) for custom and standard fields.
Grant or revoke read/edit access to fields for specific profiles or permission sets
View current field permissions
Bulk update permissions for multiple profiles
Examples:
Grant System Administrator access to a field
Give read-only access to a field for specific profiles
Check which profiles have access to a field
Inputs: operation (required), objectName (required), fieldName (required), profileNames, +2 more.
salesforce_manage_objectA
Create new custom objects or modify existing ones in Salesforce:
Create: New custom objects with fields, relationships, and settings
Update: Modify existing object settings, labels, sharing model Examples: Create Customer_Feedback__c object, Update object sharing settings Note: Changes affect metadata and require proper permissions
Inputs: operation (required), objectName (required), label, pluralLabel, +5 more.
salesforce_query_recordsA
Query records from any Salesforce object using SOQL, including relationship queries.
NOTE: For queries with GROUP BY, aggregate functions (COUNT, SUM, AVG, etc.), or HAVING clauses, use salesforce_aggregate_query instead.
Pagination: Results default to 200 records per page. Use limit and offset to page through results. Response includes total record count and next offset. Note: Pages are not snapshot-consistent — if data changes between requests, records may shift. For stable pagination, add a deterministic WHERE clause (e.g., WHERE CreatedDate < 2026-04-07T00:00:00Z ORDER BY Id).
Examples:
Parent-to-child query (e.g., Account with Contacts):
objectName: "Account"
fields: ["Name", "(SELECT Id, FirstName, LastName FROM Contacts)"]
Child-to-parent query (e.g., Contact with Account details):
objectName: "Contact"
fields: ["FirstName", "LastName", "Account.Name", "Account.Industry"]
Multiple level query (e.g., Contact -> Account -> Owner):
objectName: "Contact"
fields: ["Name", "Account.Name", "Account.Owner.Name"]
Related object filtering:
objectName: "Contact"
fields: ["Name", "Account.Name"]
whereClause: "Account.Industry = 'Technology'"
Paginate through results:
objectName: "Account"
fields: ["Name"]
limit: 50
offset: 100
Note: When using relationship fields:
Use dot notation for parent relationships (e.g., "Account.Name")
Use subqueries in parentheses for child relationships (e.g., "(SELECT Id FROM Contacts)")
Custom relationship fields end in "__r" (e.g., "CustomObject__r.Name")
Inputs: objectName (required), fields (required), whereClause, orderBy, +2 more.
salesforce_read_apexA
Read Apex classes from Salesforce.
Examples:
Read a specific Apex class by name: { "className": "AccountController" }
List all Apex classes with an optional name pattern: { "namePattern": "Controller" }
Get metadata about Apex classes: { "includeMetadata": true, "namePattern": "Trigger" }
Use wildcards in name patterns: { "namePattern": "AccountCont" }
Notes:
When className is provided, the full body of that specific class is returned
When namePattern is provided, all matching class names are returned (without body)
Use includeMetadata to get additional information like API version, length, and last modified date
If neither className nor namePattern is provided, all Apex class names will be listed
Wildcards are supported in namePattern: * (matches any characters) and ? (matches a single character)
Inputs: className, namePattern, includeMetadata, limit, +1 more.
salesforce_read_apex_triggerA
Read Apex triggers from Salesforce.
Examples:
Read a specific Apex trigger by name: { "triggerName": "AccountTrigger" }
List all Apex triggers with an optional name pattern: { "namePattern": "Account" }
Get metadata about Apex triggers: { "includeMetadata": true, "namePattern": "Contact" }
Use wildcards in name patterns: { "namePattern": "Account*" }
Notes:
When triggerName is provided, the full body of that specific trigger is returned
When namePattern is provided, all matching trigger names are returned (without body)
Use includeMetadata to get additional information like API version, object type, and last modified date
If neither triggerName nor namePattern is provided, all Apex trigger names will be listed
Wildcards are supported in namePattern: * (matches any characters) and ? (matches a single character)
Inputs: triggerName, namePattern, includeMetadata, limit, +1 more.
salesforce_refresh_dashboardA
Refresh a Salesforce dashboard or check its refresh status.
Examples:
Trigger a dashboard refresh:
operation: "refresh"
dashboardId: "01Zxx000000XXXXX"
Check refresh status:
operation: "status"
dashboardId: "01Zxx000000XXXXX"
Notes:
The "refresh" operation triggers a refresh and returns a status URL
The "status" operation returns per-component refresh status and data status
Use salesforce_run_analytics with type "dashboard" to retrieve the updated data after refresh completes
Inputs: operation (required), dashboardId (required).
salesforce_rest_apiA
Make direct REST API calls to any Salesforce REST endpoint. This is a powerful passthrough tool that gives access to the full Salesforce REST API surface — including endpoints not covered by other tools.
Use this for any Salesforce REST API that doesn't have a dedicated tool, such as:
Reports and Dashboards API: GET /analytics/reports/{reportId}
Composite API: POST /composite
Files and ContentDocument: GET /sobjects/ContentDocument/{id}/VersionData
Approval Processes: POST /process/approvals
Limits and Usage: GET /limits
Tabs and Themes: GET /tabs, GET /theme
Quick Actions: GET /sobjects/{object}/quickActions
Any custom REST endpoint
The endpoint path is relative to /services/data/vXX.0/ (the API version prefix is added automatically).
Examples:
Get org limits:
method: "GET"
endpoint: "/limits"
Run a report:
method: "GET"
endpoint: "/analytics/reports/00O5e000004XXXXEAA"
Composite request (multiple operations in one call):
method: "POST"
endpoint: "/composite"
body: { "allOrNone": true, "compositeRequest": [...] }
Get file content:
method: "GET"
endpoint: "/sobjects/ContentVersion/068XXXXXXXXXXXXXXX/VersionData"
Call a custom REST endpoint:
method: "GET"
endpoint: "/my-custom-endpoint"
rawPath: true
Use a specific API version:
method: "GET"
endpoint: "/limits"
apiVersion: "59.0"
Inputs: method (required), endpoint (required), body, queryParameters, +2 more.
salesforce_run_analyticsA
Execute a Salesforce report or retrieve current dashboard component data.
For reports: runs the report synchronously via the Analytics API. Supports optional runtime filter overrides, date filter overrides, and detail row inclusion. When includeDetails is true, defaults to returning 100 rows (override with topRows). The sync API has a hard maximum of 2,000 detail rows — a warning is included if results are truncated. Aggregates and grouping summaries are always returned in full.
For dashboards: retrieves each component's current data (aggregates, grouping summaries) without triggering a refresh. To refresh first, use salesforce_refresh_dashboard.
Examples:
Run a report with saved defaults:
type: "report"
resourceId: "00Oxx000000XXXXX"
Run a report with detail rows:
type: "report"
resourceId: "00Oxx000000XXXXX"
includeDetails: true
Run a report with filter overrides:
type: "report"
resourceId: "00Oxx000000XXXXX"
includeDetails: true
filters: [{ "column": "STAGE_NAME", "operator": "equals", "value": "Closed Won" }]
standardDateFilter: { "column": "CLOSE_DATE", "durationValue": "LAST_N_DAYS:90" }
Run a report with row limit:
type: "report"
resourceId: "00Oxx000000XXXXX"
includeDetails: true
topRows: { "rowLimit": 50, "direction": "Desc" }
Run a report with multiple filters and boolean logic:
type: "report"
resourceId: "00Oxx000000XXXXX"
filters: [ { "column": "STAGE_NAME", "operator": "equals", "value": "Closed Won" }, { "column": "AMOUNT", "operator": "greaterThan", "value": "10000" } ]
booleanFilter: "1 AND 2"
Get current dashboard component data:
type: "dashboard"
resourceId: "01Zxx000000XXXXX"
Inputs: type (required), resourceId (required), includeDetails, filters, +3 more.
salesforce_search_allA
Search across multiple Salesforce objects using SOSL (Salesforce Object Search Language).
Examples:
Basic search across all objects: { "searchTerm": "John", "objects": [ { "name": "Account", "fields": ["Name"], "limit": 10 }, { "name": "Contact", "fields": ["FirstName", "LastName", "Email"] } ] }
Advanced search with filters: { "searchTerm": "Cloud*", "searchIn": "NAME FIELDS", "objects": [ { "name": "Account", "fields": ["Name", "Industry"], "orderBy": "Name DESC", "where": "Industry = 'Technology'" } ], "withClauses": [ { "type": "NETWORK", "value": "ALL NETWORKS" }, { "type": "SNIPPET", "fields": ["Description"] } ] }
Notes:
Use * and ? for wildcards in search terms
Each object can have its own WHERE, ORDER BY, and LIMIT clauses
Support for WITH clauses: DATA CATEGORY, DIVISION, METADATA, NETWORK, PRICEBOOKID, SNIPPET, SECURITY_ENFORCED
The updateable/viewable filters are reserved for future support and currently return a clear error if requested
Inputs: searchTerm (required), objects (required), searchIn, withClauses, +2 more.
salesforce_search_objectsA
Search for Salesforce standard and custom objects by name pattern. Examples: 'Account' will find Account, AccountHistory; 'Order' will find WorkOrder, ServiceOrder__c etc.
Inputs: searchPattern (required), limit, offset.
salesforce_write_apexA
Create or update Apex classes in Salesforce.
Examples:
Create a new Apex class: { "operation": "create", "className": "AccountService", "apiVersion": "58.0", "body": "public class AccountService { public static void updateAccounts() { /* implementation */ } }" }
Update an existing Apex class: { "operation": "update", "className": "AccountService", "body": "public class AccountService { public static void updateAccounts() { /* updated implementation */ } }" }
Notes:
The operation must be either 'create' or 'update'
For 'create' operations, className and body are required
For 'update' operations, className and body are required
apiVersion is optional for 'create' (defaults to the latest version)
The body must be valid Apex code
The className in the body must match the className parameter
Status information is returned after successful operations
Inputs: operation (required), className (required), body (required), apiVersion.
salesforce_write_apex_triggerA
Create or update Apex triggers in Salesforce.
Examples:
Create a new Apex trigger: { "operation": "create", "triggerName": "AccountTrigger", "objectName": "Account", "apiVersion": "58.0", "body": "trigger AccountTrigger on Account (before insert, before update) { /* implementation */ }" }
Update an existing Apex trigger: { "operation": "update", "triggerName": "AccountTrigger", "body": "trigger AccountTrigger on Account (before insert, before update, after update) { /* updated implementation */ }" }
Notes:
The operation must be either 'create' or 'update'
For 'create' operations, triggerName, objectName, and body are required
For 'update' operations, triggerName and body are required
apiVersion is optional for 'create' (defaults to the latest version)
The body must be valid Apex trigger code
The triggerName in the body must match the triggerName parameter
The objectName in the body must match the objectName parameter (for 'create')
Status information is returned after successful operations
Inputs: operation (required), triggerName (required), body (required), objectName, +1 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 20 tools
Each tool has a clearly distinct purpose. Potentially overlapping tools like salesforce_query_records and salesforce_aggregate_query are well-documented to differentiate use cases, and others like salesforce_run_analytics vs salesforce_rest_api have clear scope delineations.
All tools follow a consistent salesforce_verb_noun pattern using snake_case. The naming is predictable and descriptive, e.g., salesforce_query_records, salesforce_dml_records, salesforce_write_apex.
20 tools cover a broad yet focused range of Salesforce operations including CRUD, queries, metadata management, analytics, and Apex. The count is well-scoped for a comprehensive integration server.
The tool set covers essential CRM operations (CRUD, SOQL, SOSL, metadata, analytics, Apex) and includes a REST API passthrough for any gaps. Minor omissions like bulk API support exist, but the surface is otherwise thorough.
Maintenance
Related MCP Connectors
Create contacts, move deals, send proposals and invoices, read your inbox, from Claude or ChatGPT.
Plan Salesforce deploys, open pull requests and trigger pipelines from your AI client.
Run SOQL queries to explore and retrieve Salesforce data. Access accounts, contacts, opportunities…
Solk CRM for Claude: accounts, pipeline, visits, quotes, orders and tickets with your permissions.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceIntegrates Claude with Salesforce to enable natural language querying, modification, and management of Salesforce records and metadata. It supports comprehensive operations including object/field management, SOSL searches, and Apex code execution.2,615 npm1MIT
- AlicenseAqualityDmaintenanceEnables AI tools like Claude Desktop and Cline to interact with Salesforce, providing tools for SOQL queries, Apex execution, metadata management, and more.1768 npm42MIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude to interact with Salesforce for querying, modifying, and managing objects and records, with automatic integration setup for external services like WhatsApp, Slack, email, and webhooks.MIT
- AlicenseAqualityBmaintenanceConnects Salesforce CRM with Claude, enabling CRUD operations, SOQL/SOSL queries, metadata extraction, and sandbox management through natural language.14MIT