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 SalesforceInput 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 IDInput 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 clarificationInput 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 AdministratorInput 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 fieldInput 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 permissionsInput 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 filteringInput 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 operationsInput 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 operationsInput 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"
]
} | — | | — |