← Salesforce MCP Server (Extended)

Salesforce MCP Server (Extended) 1.0.5

npm · @boejucci/mcp-server-salesforce · current release

21
Tools
0
Resources
0
Templates
0
Prompts

Observation

Observed 2026-08-22T13:25:51.445Z using mcpSecurity-inventory. Status: succeeded. Negotiated protocol: 2025-06-18.

Server capabilities
{
  "tools": {}
}

Tools 21

ToolCategoryAnnotationsRisk
salesforce_aggregate_queryExecute 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() Examples: 1. Count opportunities by stage: - objectName: "Opportunity" - selectFields: ["StageName", "COUNT(Id) OpportunityCount"] - groupByFields: ["StageName"] 2. Analyze cases by priority and status: - objectName: "Case" - selectFields: ["Priority", "Status", "COUNT(Id) CaseCount", "AVG(Days_Open__c) AvgDaysOpen"] - groupByFields: ["Priority", "Status"] 3. Count contacts by account industry: - objectName: "Contact" - selectFields: ["Account.Industry", "COUNT(Id) ContactCount"] - groupByFields: ["Account.Industry"] 4. Quarterly opportunity analysis: - objectName: "Opportunity" - selectFields: ["CALENDAR_YEAR(CloseDate) Year", "CALENDAR_QUARTER(CloseDate) Quarter", "SUM(Amount) Revenue"] - groupByFields: ["CALENDAR_YEAR(CloseDate)", "CALENDAR_QUARTER(CloseDate)"] 5. 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
Input schema
{
  "type": "object",
  "properties": {
    "objectName": {
      "type": "string",
      "description": "API name of the object to query"
    },
    "selectFields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Fields to select - mix of group fields and aggregates. Format: 'FieldName' or 'COUNT(Id) AliasName'"
    },
    "groupByFields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Fields to group by - must include all non-aggregate fields from selectFields"
    },
    "whereClause": {
      "type": "string",
      "description": "WHERE clause to filter rows BEFORE grouping (cannot contain aggregate functions)",
      "optional": true
    },
    "havingClause": {
      "type": "string",
      "description": "HAVING clause to filter results AFTER grouping (use for aggregate conditions)",
      "optional": true
    },
    "orderBy": {
      "type": "string",
      "description": "ORDER BY clause - can only use grouped fields or aggregate functions",
      "optional": true
    },
    "limit": {
      "type": "number",
      "description": "Maximum number of grouped results to return",
      "optional": true
    }
  },
  "required": [
    "objectName",
    "selectFields",
    "groupByFields"
  ]
}
— · —
salesforce_create_reportCreate a new Salesforce report using the Metadata API. Supports tabular, summary, and matrix formats with groupings, filters, and charts. IMPORTANT - REPORT TYPE: The reportType parameter can be: 1. A standard object name: "Opportunity", "Account", "Contact", "Lead", "Case", etc. 2. A custom report type API name (use salesforce_list_report_types or salesforce_describe_report_type to find these) IMPORTANT - FOLDER REQUIREMENT: Reports MUST be created in a folder. Common folders: - "unfiled$public" (default) - Public unfiled reports folder - "Private Reports" - Private user reports (not recommended for shared reports) - Custom folder names - Use salesforce_list_report_folders to find available folders IMPORTANT - FIELD NAMING: - For standard objects (Opportunity, Account, etc.): Use UPPERCASE field names Examples: OPPORTUNITY_NAME, AMOUNT, STAGE_NAME, CREATED_DATE, CLOSE_DATE, ACCOUNT_NAME, INDUSTRY - For custom fields: Use exact API name with __c suffix (will be auto-prefixed with object name) Example: Type__c becomes "Opportunity.Type__c" automatically - Date range filters: Two filters on same date field with greaterOrEqual/lessOrEqual are automatically converted to timeFrameFilter WORKFLOW TO CREATE A REPORT: 1. First, use salesforce_describe_report_type to see available fields for your reportType 2. Then use this tool with the correct field names from step 1 3. If it fails, check the error message for field name issues EXAMPLES: 1. MSP opportunities by month (2024-2025): { "name": "MSP Opportunities 2024-2025", "reportType": "Opportunity", "format": "SUMMARY", "columns": ["OPPORTUNITY_NAME", "AMOUNT", "STAGE_NAME"], "filters": [ {"field": "Type__c", "operator": "equals", "value": "MSP"}, {"field": "CREATED_DATE", "operator": "greaterOrEqual", "value": "2024-01-01"}, {"field": "CREATED_DATE", "operator": "lessOrEqual", "value": "2025-12-31"} ], "groupingsDown": [{"field": "CREATED_DATE", "dateGranularity": "Month"}], "folder": "unfiled$public" } 2. Accounts by industry: { "name": "Accounts by Industry", "reportType": "Account", "format": "SUMMARY", "columns": ["ACCOUNT_NAME", "INDUSTRY", "ANNUAL_REVENUE"], "filters": [{"field": "INDUSTRY", "operator": "notEqual", "value": ""}], "groupingsDown": [{"field": "INDUSTRY"}], "folder": "unfiled$public" }
Input schema
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Name of the report (will be sanitized for API name)"
    },
    "reportType": {
      "type": "string",
      "description": "Report type - either a standard object name (Opportunity, Account, Contact, Lead, Case, etc.) or a custom report type API name. Use salesforce_list_report_types to discover available report types."
    },
    "format": {
      "type": "string",
      "enum": [
        "TABULAR",
        "SUMMARY",
        "MATRIX"
      ],
      "description": "Report format: TABULAR (simple list), SUMMARY (with groupings and subtotals), or MATRIX (rows and columns)"
    },
    "columns": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of field names in UPPERCASE (e.g., [\"OPPORTUNITY_NAME\", \"AMOUNT\", \"STAGE_NAME\"])"
    },
    "groupingsDown": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "field": {
            "type": "string",
            "description": "Field name in UPPERCASE"
          },
          "sortOrder": {
            "type": "string",
            "enum": [
              "Asc",
              "Desc"
            ]
          },
          "dateGranularity": {
            "type": "string",
            "enum": [
              "Day",
              "Week",
              "Month",
              "Quarter",
              "Year",
              "FiscalQuarter",
              "FiscalYear"
            ]
          }
        },
        "required": [
          "field"
        ]
      },
      "description": "Groupings for rows (SUMMARY/MATRIX only)"
    },
    "groupingsAcross": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "field": {
            "type": "string"
          },
          "sortOrder": {
            "type": "string",
            "enum": [
              "Asc",
              "Desc"
            ]
          },
          "dateGranularity": {
            "type": "string",
            "enum": [
              "Day",
              "Week",
              "Month",
              "Quarter",
              "Year"
            ]
          }
        },
        "required": [
          "field"
        ]
      },
      "description": "Groupings for columns (MATRIX only)"
    },
    "filters": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "field": {
            "type": "string",
            "description": "Field name (UPPERCASE for standard fields, exact API name for custom fields like Type__c)"
          },
          "operator": {
            "type": "string",
            "enum": [
              "equals",
              "notEqual",
              "lessThan",
              "greaterThan",
              "lessOrEqual",
              "greaterOrEqual",
              "contains",
              "notContain",
              "startsWith",
              "includes",
              "excludes"
            ]
          },
          "value": {
            "type": "string"
          }
        },
        "required": [
          "field",
          "operator",
          "value"
        ]
      },
      "description": "Filters to apply. Date ranges (two filters on same date field with greaterOrEqual/lessOrEqual) are automatically converted to timeFrameFilter."
    },
    "chart": {
      "type": "object",
      "properties": {
        "chartType": {
          "type": "string",
          "enum": [
            "VerticalColumn",
            "VerticalColumnGrouped",
            "VerticalColumnStacked",
            "HorizontalBar",
            "Line",
            "Pie",
            "Donut",
            "Funnel"
          ],
          "description": "Type of chart to display"
        },
        "title": {
          "type": "string"
        },
        "groupingColumn": {
          "type": "string"
        },
        "showValues": {
          "type": "boolean"
        },
        "showPercentage": {
          "type": "boolean"
        }
      }
    },
    "folder": {
      "type": "string",
      "description": "Report folder name. Default: \"unfiled$public\". Use salesforce_list_report_folders to see available folders. Common values: \"unfiled$public\", \"Private Reports\", or custom folder names."
    },
    "description": {
      "type": "string",
      "description": "Report description"
    }
  },
  "required": [
    "name",
    "reportType",
    "format",
    "columns"
  ]
}
— · —
salesforce_describe_objectGet 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.
Input schema
{
  "type": "object",
  "properties": {
    "objectName": {
      "type": "string",
      "description": "API name of the object (e.g., 'Account', 'Contact', 'Custom_Object__c')"
    }
  },
  "required": [
    "objectName"
  ]
}
— · —
salesforce_describe_report_typeGet detailed information about a specific report type, including available fields that can be used in reports.
Input schema
{
  "type": "object",
  "properties": {
    "reportType": {
      "type": "string",
      "description": "The API name of the report type to describe (e.g., \"Opportunity\", \"Account\", \"Custom_Object__c\")"
    }
  },
  "required": [
    "reportType"
  ]
}
— · —
salesforce_dml_recordsPerform 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
Input schema
{
  "type": "object",
  "properties": {
    "operation": {
      "type": "string",
      "enum": [
        "insert",
        "update",
        "delete",
        "upsert"
      ],
      "description": "Type of DML operation to perform"
    },
    "objectName": {
      "type": "string",
      "description": "API name of the object"
    },
    "records": {
      "type": "array",
      "items": {
        "type": "object"
      },
      "description": "Array of records to process"
    },
    "externalIdField": {
      "type": "string",
      "description": "External ID field name for upsert operations",
      "optional": true
    }
  },
  "required": [
    "operation",
    "objectName",
    "records"
  ]
}
— · —
salesforce_execute_anonymousExecute 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
Input schema
{
  "type": "object",
  "properties": {
    "apexCode": {
      "type": "string",
      "description": "Apex code to execute anonymously"
    },
    "logLevel": {
      "type": "string",
      "enum": [
        "NONE",
        "ERROR",
        "WARN",
        "INFO",
        "DEBUG",
        "FINE",
        "FINER",
        "FINEST"
      ],
      "description": "Log level for debug logs (optional, defaults to DEBUG)"
    }
  },
  "required": [
    "apexCode"
  ]
}
— · —
salesforce_list_report_foldersList all report folders in Salesforce. Use this to discover available folders before listing reports. NOTE: You may only see folders that you created and the "unfiled$public" folder. Standard folders like "Activity Reports" may not appear depending on permissions.
Input schema
{
  "type": "object",
  "properties": {}
}
— · —
salesforce_list_report_typesList available report types in Salesforce. Report types determine which objects can be used as the basis for reports (e.g., Opportunity, Account, Contact, or custom objects).
Input schema
{
  "type": "object",
  "properties": {
    "searchPattern": {
      "type": "string",
      "description": "Optional search pattern to filter report types by name"
    }
  }
}
— · —
salesforce_list_reportsList reports in Salesforce folders. IMPORTANT: Reports in Salesforce are organized in folders. This tool will: - If folder is specified: List reports in that specific folder - If no folder specified: Check common folders ("unfiled$public" and "Private Reports") - Cannot list ALL reports across all folders in one call (Salesforce API limitation) TIP: Use salesforce_list_report_folders first to discover available folders, then call this tool with specific folder names.
Input schema
{
  "type": "object",
  "properties": {
    "folder": {
      "type": "string",
      "description": "Folder name to list reports from (e.g., \"unfiled$public\", \"Private Reports\"). If not specified, will check common folders."
    },
    "searchPattern": {
      "type": "string",
      "description": "Optional search pattern to filter reports by name"
    }
  }
}
— · —
salesforce_manage_debug_logsManage debug logs for Salesforce users - enable, disable, or retrieve logs. Examples: 1. Enable debug logs for a user: { "operation": "enable", "username": "user@example.com", "logLevel": "DEBUG", "expirationTime": 30 } 2. Disable debug logs for a user: { "operation": "disable", "username": "user@example.com" } 3. Retrieve debug logs for a user: { "operation": "retrieve", "username": "user@example.com", "limit": 5 } 4. 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
Input schema
{
  "type": "object",
  "properties": {
    "operation": {
      "type": "string",
      "enum": [
        "enable",
        "disable",
        "retrieve"
      ],
      "description": "Operation to perform on debug logs"
    },
    "username": {
      "type": "string",
      "description": "Username of the Salesforce user"
    },
    "logLevel": {
      "type": "string",
      "enum": [
        "NONE",
        "ERROR",
        "WARN",
        "INFO",
        "DEBUG",
        "FINE",
        "FINER",
        "FINEST"
      ],
      "description": "Log level for debug logs (required for 'enable' operation)"
    },
    "expirationTime": {
      "type": "number",
      "description": "Minutes until the debug log configuration expires (optional, defaults to 30)"
    },
    "limit": {
      "type": "number",
      "description": "Maximum number of logs to retrieve (optional, defaults to 10)"
    },
    "logId": {
      "type": "string",
      "description": "ID of a specific log to retrieve (optional)"
    },
    "includeBody": {
      "type": "boolean",
      "description": "Whether to include the full log content (optional, defaults to false)"
    }
  },
  "required": [
    "operation",
    "username"
  ]
}
— · —
salesforce_manage_fieldCreate 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
Input schema
{
  "type": "object",
  "properties": {
    "operation": {
      "type": "string",
      "enum": [
        "create",
        "update"
      ],
      "description": "Whether to create new field or update existing"
    },
    "objectName": {
      "type": "string",
      "description": "API name of the object to add/modify the field"
    },
    "fieldName": {
      "type": "string",
      "description": "API name for the field (without __c suffix)"
    },
    "label": {
      "type": "string",
      "description": "Label for the field",
      "optional": true
    },
    "type": {
      "type": "string",
      "enum": [
        "Checkbox",
        "Currency",
        "Date",
        "DateTime",
        "Email",
        "Number",
        "Percent",
        "Phone",
        "Picklist",
        "MultiselectPicklist",
        "Text",
        "TextArea",
        "LongTextArea",
        "Html",
        "Url",
        "Lookup",
        "MasterDetail"
      ],
      "description": "Field type (required for create)",
      "optional": true
    },
    "required": {
      "type": "boolean",
      "description": "Whether the field is required",
      "optional": true
    },
    "unique": {
      "type": "boolean",
      "description": "Whether the field value must be unique",
      "optional": true
    },
    "externalId": {
      "type": "boolean",
      "description": "Whether the field is an external ID",
      "optional": true
    },
    "length": {
      "type": "number",
      "description": "Length for text fields",
      "optional": true
    },
    "precision": {
      "type": "number",
      "description": "Precision for numeric fields",
      "optional": true
    },
    "scale": {
      "type": "number",
      "description": "Scale for numeric fields",
      "optional": true
    },
    "referenceTo": {
      "type": "string",
      "description": "API name of the object to reference (for Lookup/MasterDetail)",
      "optional": true
    },
    "relationshipLabel": {
      "type": "string",
      "description": "Label for the relationship (for Lookup/MasterDetail)",
      "optional": true
    },
    "relationshipName": {
      "type": "string",
      "description": "API name for the relationship (for Lookup/MasterDetail)",
      "optional": true
    },
    "deleteConstraint": {
      "type": "string",
      "enum": [
        "Cascade",
        "Restrict",
        "SetNull"
      ],
      "description": "Delete constraint for Lookup fields",
      "optional": true
    },
    "picklistValues": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string"
          },
          "isDefault": {
            "type": "boolean",
            "optional": true
          }
        }
      },
      "description": "Values for Picklist/MultiselectPicklist fields",
      "optional": true
    },
    "description": {
      "type": "string",
      "description": "Description of the field",
      "optional": true
    },
    "grantAccessTo": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Profile names to grant field access to (defaults to ['System Administrator'])",
      "optional": true
    }
  },
  "required": [
    "operation",
    "objectName",
    "fieldName"
  ]
}
— · —
salesforce_manage_field_permissionsManage 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: 1. Grant System Administrator access to a field 2. Give read-only access to a field for specific profiles 3. Check which profiles have access to a field
Input schema
{
  "type": "object",
  "properties": {
    "operation": {
      "type": "string",
      "enum": [
        "grant",
        "revoke",
        "view"
      ],
      "description": "Operation to perform on field permissions"
    },
    "objectName": {
      "type": "string",
      "description": "API name of the object (e.g., 'Account', 'Custom_Object__c')"
    },
    "fieldName": {
      "type": "string",
      "description": "API name of the field (e.g., 'Custom_Field__c')"
    },
    "profileNames": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Names of profiles to grant/revoke access (e.g., ['System Administrator', 'Sales User'])",
      "optional": true
    },
    "readable": {
      "type": "boolean",
      "description": "Grant/revoke read access (default: true)",
      "optional": true
    },
    "editable": {
      "type": "boolean",
      "description": "Grant/revoke edit access (default: true)",
      "optional": true
    }
  },
  "required": [
    "operation",
    "objectName",
    "fieldName"
  ]
}
— · —
salesforce_manage_objectCreate 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
Input schema
{
  "type": "object",
  "properties": {
    "operation": {
      "type": "string",
      "enum": [
        "create",
        "update"
      ],
      "description": "Whether to create new object or update existing"
    },
    "objectName": {
      "type": "string",
      "description": "API name for the object (without __c suffix)"
    },
    "label": {
      "type": "string",
      "description": "Label for the object"
    },
    "pluralLabel": {
      "type": "string",
      "description": "Plural label for the object"
    },
    "description": {
      "type": "string",
      "description": "Description of the object",
      "optional": true
    },
    "nameFieldLabel": {
      "type": "string",
      "description": "Label for the name field",
      "optional": true
    },
    "nameFieldType": {
      "type": "string",
      "enum": [
        "Text",
        "AutoNumber"
      ],
      "description": "Type of the name field",
      "optional": true
    },
    "nameFieldFormat": {
      "type": "string",
      "description": "Display format for AutoNumber field (e.g., 'A-{0000}')",
      "optional": true
    },
    "sharingModel": {
      "type": "string",
      "enum": [
        "ReadWrite",
        "Read",
        "Private",
        "ControlledByParent"
      ],
      "description": "Sharing model for the object",
      "optional": true
    }
  },
  "required": [
    "operation",
    "objectName"
  ]
}
— · —
salesforce_query_recordsQuery 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. Examples: 1. Parent-to-child query (e.g., Account with Contacts): - objectName: "Account" - fields: ["Name", "(SELECT Id, FirstName, LastName FROM Contacts)"] 2. Child-to-parent query (e.g., Contact with Account details): - objectName: "Contact" - fields: ["FirstName", "LastName", "Account.Name", "Account.Industry"] 3. Multiple level query (e.g., Contact -> Account -> Owner): - objectName: "Contact" - fields: ["Name", "Account.Name", "Account.Owner.Name"] 4. Related object filtering: - objectName: "Contact" - fields: ["Name", "Account.Name"] - whereClause: "Account.Industry = 'Technology'" 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")
Input schema
{
  "type": "object",
  "properties": {
    "objectName": {
      "type": "string",
      "description": "API name of the object to query"
    },
    "fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of fields to retrieve, including relationship fields"
    },
    "whereClause": {
      "type": "string",
      "description": "WHERE clause, can include conditions on related objects",
      "optional": true
    },
    "orderBy": {
      "type": "string",
      "description": "ORDER BY clause, can include fields from related objects",
      "optional": true
    },
    "limit": {
      "type": "number",
      "description": "Maximum number of records to return",
      "optional": true
    }
  },
  "required": [
    "objectName",
    "fields"
  ]
}
— · —
salesforce_read_apexRead Apex classes from Salesforce. Examples: 1. Read a specific Apex class by name: { "className": "AccountController" } 2. List all Apex classes with an optional name pattern: { "namePattern": "Controller" } 3. Get metadata about Apex classes: { "includeMetadata": true, "namePattern": "Trigger" } 4. Use wildcards in name patterns: { "namePattern": "Account*Cont*" } 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)
Input schema
{
  "type": "object",
  "properties": {
    "className": {
      "type": "string",
      "description": "Name of a specific Apex class to read"
    },
    "namePattern": {
      "type": "string",
      "description": "Pattern to match Apex class names (supports wildcards * and ?)"
    },
    "includeMetadata": {
      "type": "boolean",
      "description": "Whether to include metadata about the Apex classes"
    }
  }
}
— · —
salesforce_read_apex_triggerRead Apex triggers from Salesforce. Examples: 1. Read a specific Apex trigger by name: { "triggerName": "AccountTrigger" } 2. List all Apex triggers with an optional name pattern: { "namePattern": "Account" } 3. Get metadata about Apex triggers: { "includeMetadata": true, "namePattern": "Contact" } 4. 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)
Input schema
{
  "type": "object",
  "properties": {
    "triggerName": {
      "type": "string",
      "description": "Name of a specific Apex trigger to read"
    },
    "namePattern": {
      "type": "string",
      "description": "Pattern to match Apex trigger names (supports wildcards * and ?)"
    },
    "includeMetadata": {
      "type": "boolean",
      "description": "Whether to include metadata about the Apex triggers"
    }
  }
}
— · —
salesforce_read_reportRead detailed metadata for a Salesforce report including columns, filters, groupings, and chart configuration. Use this to inspect existing reports and understand their structure.
Input schema
{
  "type": "object",
  "properties": {
    "reportName": {
      "type": "string",
      "description": "Full name of the report (e.g., \"unfiled$public/Report_Name\" or just \"Report_Name\")"
    }
  },
  "required": [
    "reportName"
  ]
}
— · —
salesforce_search_allSearch across multiple Salesforce objects using SOSL (Salesforce Object Search Language). Examples: 1. Basic search across all objects: { "searchTerm": "John", "objects": [ { "name": "Account", "fields": ["Name"], "limit": 10 }, { "name": "Contact", "fields": ["FirstName", "LastName", "Email"] } ] } 2. 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 - "updateable" and "viewable" options control record access filtering
Input schema
{
  "type": "object",
  "properties": {
    "searchTerm": {
      "type": "string",
      "description": "Text to search for (supports wildcards * and ?)"
    },
    "searchIn": {
      "type": "string",
      "enum": [
        "ALL FIELDS",
        "NAME FIELDS",
        "EMAIL FIELDS",
        "PHONE FIELDS",
        "SIDEBAR FIELDS"
      ],
      "description": "Which fields to search in",
      "optional": true
    },
    "objects": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "API name of the object"
          },
          "fields": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Fields to return for this object"
          },
          "where": {
            "type": "string",
            "description": "WHERE clause for this object",
            "optional": true
          },
          "orderBy": {
            "type": "string",
            "description": "ORDER BY clause for this object",
            "optional": true
          },
          "limit": {
            "type": "number",
            "description": "Maximum number of records to return for this object",
            "optional": true
          }
        },
        "required": [
          "name",
          "fields"
        ]
      },
      "description": "List of objects to search and their return fields"
    },
    "withClauses": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "DATA CATEGORY",
              "DIVISION",
              "METADATA",
              "NETWORK",
              "PRICEBOOKID",
              "SNIPPET",
              "SECURITY_ENFORCED"
            ]
          },
          "value": {
            "type": "string",
            "description": "Value for the WITH clause",
            "optional": true
          },
          "fields": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Fields for SNIPPET clause",
            "optional": true
          }
        },
        "required": [
          "type"
        ]
      },
      "description": "Additional WITH clauses for the search",
      "optional": true
    },
    "updateable": {
      "type": "boolean",
      "description": "Return only updateable records",
      "optional": true
    },
    "viewable": {
      "type": "boolean",
      "description": "Return only viewable records",
      "optional": true
    }
  },
  "required": [
    "searchTerm",
    "objects"
  ]
}
— · —
salesforce_search_objectsSearch for Salesforce standard and custom objects by name pattern. Examples: 'Account' will find Account, AccountHistory; 'Order' will find WorkOrder, ServiceOrder__c etc.
Input schema
{
  "type": "object",
  "properties": {
    "searchPattern": {
      "type": "string",
      "description": "Search pattern to find objects (e.g., 'Account Coverage' will find objects like 'AccountCoverage__c')"
    }
  },
  "required": [
    "searchPattern"
  ]
}
— · —
salesforce_write_apexCreate or update Apex classes in Salesforce. Examples: 1. Create a new Apex class: { "operation": "create", "className": "AccountService", "apiVersion": "58.0", "body": "public class AccountService { public static void updateAccounts() { /* implementation */ } }" } 2. 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
Input schema
{
  "type": "object",
  "properties": {
    "operation": {
      "type": "string",
      "enum": [
        "create",
        "update"
      ],
      "description": "Whether to create a new class or update an existing one"
    },
    "className": {
      "type": "string",
      "description": "Name of the Apex class to create or update"
    },
    "apiVersion": {
      "type": "string",
      "description": "API version for the Apex class (e.g., '58.0')"
    },
    "body": {
      "type": "string",
      "description": "Full body of the Apex class"
    }
  },
  "required": [
    "operation",
    "className",
    "body"
  ]
}
— · —
salesforce_write_apex_triggerCreate or update Apex triggers in Salesforce. Examples: 1. Create a new Apex trigger: { "operation": "create", "triggerName": "AccountTrigger", "objectName": "Account", "apiVersion": "58.0", "body": "trigger AccountTrigger on Account (before insert, before update) { /* implementation */ }" } 2. 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
Input schema
{
  "type": "object",
  "properties": {
    "operation": {
      "type": "string",
      "enum": [
        "create",
        "update"
      ],
      "description": "Whether to create a new trigger or update an existing one"
    },
    "triggerName": {
      "type": "string",
      "description": "Name of the Apex trigger to create or update"
    },
    "objectName": {
      "type": "string",
      "description": "Name of the Salesforce object the trigger is for (required for 'create')"
    },
    "apiVersion": {
      "type": "string",
      "description": "API version for the Apex trigger (e.g., '58.0')"
    },
    "body": {
      "type": "string",
      "description": "Full body of the Apex trigger"
    }
  },
  "required": [
    "operation",
    "triggerName",
    "body"
  ]
}
— · —

Resources 0

Resource templates 0

Prompts 0

Let’s talk about MCP security.

Share your details and our security team will contact you.