A Salesforce connector MCP Server enabling AI access to Salesforce data and operations
This Salesforce MCP server has 15 well-defined tools with consistent naming, comprehensive descriptions, and complete input schemas. All tools follow verb_noun patterns (salesforce_search_*, salesforce_describe_*, salesforce_query_*, etc.), making intent clear. Descriptions are detailed and include examples, context, and use-case guidance. Input schemas are properly typed with enum constraints for operation parameters. However, there are gaps in output schema documentation (no visible return type specifications in the source), and error handling guidance is minimal. Parameters generally have descriptions but lack explicit constraints (e.g., limit bounds, string length limits, pattern formats). The server includes tool annotations (destructiveHint, readOnlyHint via 'Risk' field), which is excellent, but the code does not show comprehensive error recovery patterns or actionable error messages. No per-tool output schemas are documented in the provided source.
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: 1. GROUP BY queries (single/multiple fields, related objects, date functions) 2. Aggregate functions: COUNT(), COUNT_DISTINCT(), SUM(), AVG(), MIN(), MAX() 3. HAVING clauses for filtering grouped results 4. Date/time grouping: CALENDAR_YEAR(), CALENDAR_MONTH(), CALENDAR_QUARTER(), FISCAL_YEAR(), FISCAL_QUARTER()
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.
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
Execute anonymous Apex code in Salesforce. Examples: 1. Execute simple Apex code: { "apexCode": "System.debug('Hello World');" } 2. Execute Apex code with variables: { "apexCode": "List<Account> accounts = [SELECT Id, Name FROM Account LIMIT 5]; for(Account a : accounts) { System.debug(a.Name); }" } 3. Execute Apex with debug logs: { "apexCode": "System.debug(LoggingLevel.INFO, 'Processing accounts...'); List<Account> 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
Output schemas not documented. No visible return type specifications in source code. Tools declare input schemas but output types are inferred from handler implementations. This forces LLMs to discover response structure by trial and error.
Parameter constraints missing. Numeric parameters (limit, precision, scale, length, expirationTime) lack explicit min/max bounds. String parameters lack length or pattern constraints. This invites hallucinated values from LLMs.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 58 | 2026-07-28+ | v2 |
| 2026-03-09 | C | 63 | - | v1 |
Manage debug logs for Salesforce users - enable, disable, or retrieve logs. Examples: 1. Enable debug logs for a user: { "operation": "enable", "username": "[email protected]", "logLevel": "DEBUG", "expirationTime": 30 } 2. Disable debug logs for a user: { "operation": "disable", "username": "[email protected]" } 3. Retrieve debug logs for a user: { "operation": "retrieve", "username": "[email protected]", "limit": 5 } 4. Retrieve a specific log with full content: { "operation": "retrieve", "username": "[email protected]", "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
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
Manage field level security permissions - grant, revoke, or view permissions for specific fields across profiles. Examples: Grant read/edit access to a field for specific profiles, Revoke access, View current permissions
Create new custom objects or update existing custom object metadata (label, plural label, description, name field configuration, sharing model). Examples: Create a new custom object, Update object sharing settings
Execute SOQL queries to retrieve records. Supports WHERE, ORDER BY, and LIMIT clauses. For aggregate queries with GROUP BY, use salesforce_aggregate_query instead.
Read Apex class source code. Retrieves the full source code of a Salesforce Apex class by API name.
Read Apex trigger source code. Retrieves the full source code of a Salesforce Apex trigger by name.
Execute SOSL (Salesforce Object Search Language) queries to search across multiple objects and fields simultaneously. Search for text in records across specified objects and fields. Supports WHERE, ORDER BY, and LIMIT clauses.
Search for Salesforce objects by name. Find objects matching a search pattern (e.g., 'Account', 'Custom'). Returns all objects whose API name or label matches the search pattern.
Create or update Apex class source code. Creates a new Apex class or updates an existing one in Salesforce.
Create or update Apex trigger source code. Creates a new Apex trigger or updates an existing one in Salesforce.
Error handling not visible in source. No recovery guidance or error classification. Handlers throw generic Error objects without actionable messages. Agents cannot distinguish retryable vs. permanent failures.
Destructive tools lack confirmation/dry-run support. salesforce_dml_records (delete operation), salesforce_write_apex, salesforce_write_apex_trigger, salesforce_execute_anonymous can all modify or destroy data without a confirmation step. Agents may irreversibly delete records.
Large result sets not paginated. salesforce_query_records, salesforce_search_all, and salesforce_aggregate_query accept 'limit' but no offset/cursor. Returning hundreds of records without pagination can exhaust context windows. Results should be capped by default (recommend 20-50) with explicit pagination support.