Salesforce MCP Server
Enables natural language interactions with Salesforce data and metadata, including querying and managing objects, fields, records, relationships, Apex code, triggers, debug logs, and field-level security permissions across standard and custom objects.
Click on "Install 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 Servershow 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
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
Installation
Global Installation (npm)
npm install -g @tsmztech/mcp-server-salesforceClaude Desktop Quick Installation
For easy setup with Claude Desktop, download the pre-configured extension:
Download
salesforce-mcp-extension.dxtfrom theclaude-desktop/folderOpen Claude Desktop → Settings → Extensions
Drag the
.dxtfile into the Extensions windowConfigure your Salesforce credentials when prompted
For manual Claude Desktop configuration, see Usage with Claude Desktop below.
Tools
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"
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", "@tsmztech/mcp-server-salesforce"],
"env": {
"SALESFORCE_CONNECTION_TYPE": "Salesforce_CLI"
}
}
}
}For Username/Password Authentication:
{
"mcpServers": {
"salesforce": {
"command": "npx",
"args": ["-y", "@tsmztech/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", "@tsmztech/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"Development
Building from source
# Clone the repository
git clone https://github.com/tsmztech/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
15 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
| Name | Required | Description | Default |
|---|---|---|---|
| objectName | Yes | API name of the object to query | |
| selectFields | Yes | Fields to select - mix of group fields and aggregates. Format: 'FieldName' or 'COUNT(Id) AliasName' | |
| groupByFields | Yes | Fields to group by - must include all non-aggregate fields from selectFields | |
| whereClause | No | WHERE clause to filter rows BEFORE grouping (cannot contain aggregate functions) | |
| havingClause | No | HAVING clause to filter results AFTER grouping (use for aggregate conditions) | |
| orderBy | No | ORDER BY clause - can only use grouped fields or aggregate functions | |
| limit | No | Maximum number of grouped results to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes what the tool does (execute aggregate queries), lists supported features (GROUP BY, aggregate functions, HAVING, date grouping), and provides important behavioral rules (e.g., 'All non-aggregate fields in selectFields MUST be included in groupByFields', 'OFFSET is not supported'). However, it doesn't mention performance characteristics, error handling, or authentication requirements, leaving some behavioral aspects uncovered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: purpose statement, usage guidance, feature list, examples, and important rules. While comprehensive, it's appropriately sized for a complex tool with many parameters and constraints. Some sentences in the rules section could be more concise, but overall it's front-loaded with critical information and each section adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, aggregate query functionality) and lack of annotations/output schema, the description does an excellent job of explaining what the tool does, when to use it, and important constraints. The examples and rules provide crucial context for proper usage. The main gap is the absence of output format description, which would be helpful since there's no output schema, but the description compensates well with comprehensive functional coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the schema already documents all 7 parameters thoroughly. The description adds value through examples that illustrate how parameters work together (e.g., showing selectFields with aggregate functions and aliases, groupByFields matching non-aggregate fields, havingClause usage). However, it doesn't provide additional semantic context beyond what the schema descriptions already cover, meeting the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Execute SOQL queries with GROUP BY, aggregate functions, and statistical analysis.' It specifies the verb (execute), resource (SOQL queries), and scope (GROUP BY, aggregates, statistical analysis). It explicitly distinguishes from sibling 'salesforce_query_records' for regular queries without GROUP BY or aggregates, providing clear differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool vs. alternatives: 'Use this tool for queries that summarize and group data rather than returning individual records' and 'For regular queries without GROUP BY or aggregates, use salesforce_query_records instead.' It clearly defines the context (summarize/group data) and names the specific alternative tool, meeting the highest criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| objectName | Yes | API name of the object (e.g., 'Account', 'Contact', 'Custom_Object__c') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool retrieves metadata (a read operation) and specifies the types of metadata included (fields, relationships, properties). However, it lacks details on behavioral traits such as permissions required, rate limits, error handling, or whether it returns all metadata at once or supports pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first sentence, followed by illustrative examples that reinforce usage without redundancy. Every sentence earns its place by adding clarity or context, and there is no wasted verbiage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (single parameter, no output schema, no annotations), the description is adequate but has gaps. It explains what metadata is retrieved but does not cover the return format, error cases, or dependencies. For a metadata tool without annotations or output schema, more detail on behavioral aspects would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the parameter 'objectName' clearly documented. The description adds value by providing examples ('Account', 'Case') and clarifying that it includes custom fields and relationships, which enhances understanding beyond the schema's technical definition. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get detailed schema metadata') and resource ('any Salesforce object'), with concrete examples ('Account', 'Case') that illustrate the scope. It distinguishes this from sibling tools by focusing on object schema metadata rather than querying, DML, or code management operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context through examples (e.g., 'Account' shows all Account fields) and mentions what metadata is included (fields, relationships, field properties). However, it does not explicitly state when to use this tool versus alternatives like 'salesforce_search_objects' or 'salesforce_query_records', which could provide overlapping or related functionality.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Type of DML operation to perform | |
| objectName | Yes | API name of the object | |
| records | Yes | Array of records to process | |
| externalIdField | No | External ID field name for upsert operations |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It clearly indicates this is a write/mutation tool (insert, update, delete, upsert) and specifies some requirements (Id for update/delete, external ID for upsert). However, it doesn't mention permission requirements, transaction behavior, error handling, or rate limits that would be important for a DML tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening statement followed by bullet points and examples. It's appropriately sized for a multi-operation tool, though the bullet format could be slightly more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a DML tool with no annotations and no output schema, the description provides good operational clarity but lacks important context about permissions, transactional behavior, error responses, and what happens on partial failures. The examples help but don't fully compensate for missing behavioral details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters well. The description adds some context by explaining what each operation type does and providing examples, but doesn't add significant semantic value beyond what's in the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs 'data manipulation operations on Salesforce records' and lists specific operations (insert, update, delete, upsert) with concrete examples. It distinguishes itself from sibling tools like query or describe tools by focusing on write operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides implicit guidance by listing operation types and their requirements (e.g., 'update requires Id', 'delete requires Id', 'upsert based on external ID field'). However, it doesn't explicitly state when to use this tool versus alternatives like salesforce_write_apex or provide exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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
| Name | Required | Description | Default |
|---|---|---|---|
| apexCode | Yes | Apex code to execute anonymously | |
| logLevel | No | Log level for debug logs (optional, defaults to DEBUG) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing: 'The code is executed in an anonymous context and does not persist' (transient nature), 'Execution results include compilation success/failure, execution success/failure, and debug logs' (return format), and 'For security reasons, some operations may be restricted based on user permissions' (security constraints). It doesn't mention rate limits or specific destructive behaviors, but covers key operational aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately structured with purpose statement, examples, and notes sections. While comprehensive, some sentences could be more concise (e.g., the two usage guideline sentences are somewhat repetitive). Overall, it's well-organized and most content earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a powerful code execution tool with no annotations and no output schema, the description does well by explaining the anonymous context, persistence behavior, security restrictions, and when to use versus alternatives. It could benefit from more detail about return structure since there's no output schema, but it mentions key result components. Given the complexity and lack of structured metadata, it's quite complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters thoroughly. The description provides examples showing parameter usage but doesn't add significant semantic meaning beyond what's in the schema descriptions. The baseline of 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Execute anonymous Apex code in Salesforce' - a specific verb ('Execute') and resource ('anonymous Apex code') with clear scope ('in Salesforce'). It distinguishes from siblings like salesforce_query_records (for queries) and salesforce_dml_records (for data operations) by focusing on arbitrary code execution rather than specific operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'This tool can be used for data operations or updates when there are no other specific tools available' and '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.' This clearly defines when to use this tool versus the many sibling tools available.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Operation to perform on debug logs | |
| username | Yes | Username of the Salesforce user | |
| logLevel | No | Log level for debug logs (required for 'enable' operation) | |
| expirationTime | No | Minutes until the debug log configuration expires (optional, defaults to 30) | |
| limit | No | Maximum number of logs to retrieve (optional, defaults to 10) | |
| logId | No | ID of a specific log to retrieve (optional) | |
| includeBody | No | Whether to include the full log content (optional, defaults to false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and delivers substantial behavioral context. It discloses validation behavior ('validates that the specified user exists'), clarification prompts ('will ask for clarification' when logLevel unspecified), default values, and operational constraints. However, it doesn't mention authentication requirements, rate limits, or error response formats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose statement, examples, notes) and every sentence adds value. While comprehensive, it could be more front-loaded - the detailed examples come before the general notes that would help the agent understand constraints first. No wasted text, but slightly longer than ideal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with no annotations and no output schema, the description provides good operational context but has gaps. It covers parameter usage well but doesn't describe return values, error conditions, or authentication requirements. The examples help, but without output schema, the agent doesn't know what to expect from successful operations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema description coverage, the description adds significant value through detailed examples showing parameter combinations for different operations, clarification of optional/required status per operation, default values, and operational constraints. The schema provides basic descriptions, but the description adds practical usage context that helps the agent understand how parameters interact.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('enable, disable, or retrieve logs') and resource ('debug logs for Salesforce users'). It distinguishes itself from sibling tools like salesforce_query_records or salesforce_dml_records by focusing specifically on debug log management rather than general data operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides implied usage through examples showing different operations, but lacks explicit guidance on when to choose this tool versus alternatives. There's no mention of prerequisites, error conditions, or comparison to other debug-related tools that might exist in the Salesforce ecosystem.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Whether to create new field or update existing | |
| objectName | Yes | API name of the object to add/modify the field | |
| fieldName | Yes | API name for the field (without __c suffix) | |
| label | No | Label for the field | |
| type | No | Field type (required for create) | |
| required | No | Whether the field is required | |
| unique | No | Whether the field value must be unique | |
| externalId | No | Whether the field is an external ID | |
| length | No | Length for text fields | |
| precision | No | Precision for numeric fields | |
| scale | No | Scale for numeric fields | |
| referenceTo | No | API name of the object to reference (for Lookup/MasterDetail) | |
| relationshipLabel | No | Label for the relationship (for Lookup/MasterDetail) | |
| relationshipName | No | API name for the relationship (for Lookup/MasterDetail) | |
| deleteConstraint | No | Delete constraint for Lookup fields | |
| picklistValues | No | Values for Picklist/MultiselectPicklist fields | |
| description | No | Description of the field | |
| grantAccessTo | No | Profile names to grant field access to (defaults to ['System Administrator']) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does reveal important behavioral traits: that it 'Automatically grants Field Level Security to System Administrator (or specified profiles)' and includes a note about the grantAccessTo parameter default. However, it doesn't disclose other critical behaviors like whether this is a destructive operation (modifying existing fields could break dependencies), what permissions are required, rate limits, or what happens on failure. For a field management tool with zero annotation coverage, this leaves significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with bullet points and examples, making it easy to scan. It's appropriately sized for a complex tool with 18 parameters. The information is front-loaded with the core purpose first. There's minimal waste, though the bullet points could be slightly more concise. Every sentence earns its place by adding value beyond the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (18 parameters, no annotations, no output schema), the description provides a reasonable foundation but has notable gaps. It covers the purpose, usage context, and some behavioral aspects (field security granting), but doesn't address important contextual elements like what the tool returns, error conditions, dependencies, or detailed behavioral constraints. For a field management tool that can modify existing fields, more completeness would be expected.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the schema already documents all 18 parameters thoroughly. The description adds some value by grouping parameters conceptually ('Field Types', 'Properties', 'Relationships') and mentioning the grantAccessTo parameter's default behavior. However, it doesn't provide significant additional semantic context beyond what's already in the schema descriptions. The baseline of 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Create new custom fields or modify existing fields on any Salesforce object.' It specifies the verb (create/modify), resource (custom fields), and scope (any Salesforce object). It distinguishes from siblings like salesforce_manage_object (which manages objects, not fields) and salesforce_manage_field_permissions (which manages permissions, not field definitions).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when to use this tool: for creating or modifying fields with specific types and properties. It includes examples ('Add Rating__c picklist to Account, Create Account lookup on Custom Object') that illustrate appropriate use cases. However, it doesn't explicitly state when NOT to use this tool or mention alternatives among the sibling tools, such as when to use salesforce_manage_field_permissions instead for permission management.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
salesforce_manage_field_permissionsB
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
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Operation to perform on field permissions | |
| objectName | Yes | API name of the object (e.g., 'Account', 'Custom_Object__c') | |
| fieldName | Yes | API name of the field (e.g., 'Custom_Field__c') | |
| profileNames | No | Names of profiles to grant/revoke access (e.g., ['System Administrator', 'Sales User']) | |
| readable | No | Grant/revoke read access (default: true) | |
| editable | No | Grant/revoke edit access (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but offers limited behavioral insight. It mentions operations (grant/revoke/view) and bulk updates, but doesn't disclose critical traits like required permissions, whether changes are reversible, rate limits, or what the response looks like (no output schema). For a mutation tool with security implications, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening sentence followed by bullet points and examples. It avoids redundancy, though the examples partially restate the bullet points. Every sentence contributes to understanding, but slight trimming of the examples could improve efficiency without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex security management tool with 6 parameters, no annotations, and no output schema, the description is incomplete. It lacks details on error conditions, side effects (e.g., impact on existing permissions), response format, and integration with sibling tools. The examples help but don't compensate for missing behavioral and operational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, providing baseline documentation for all 6 parameters. The description adds minimal value beyond the schema—it mentions 'profiles or permission sets' (hinting at profileNames usage) and 'read/edit access' (relating to readable/editable), but doesn't clarify parameter interactions (e.g., how profileNames interacts with operation='view') or provide syntax examples beyond what the schema already offers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('Manage Field Level Security', 'Grant or revoke', 'View', 'Bulk update') and resources ('custom and standard fields', 'profiles or permission sets'). It distinguishes itself from sibling tools like salesforce_manage_field or salesforce_manage_object by focusing specifically on field permissions rather than field/object metadata or DML operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through examples (e.g., 'Grant System Administrator access to a field'), but lacks explicit guidance on when to use this tool versus alternatives like salesforce_manage_field for field metadata or salesforce_dml_records for data manipulation. No clear exclusions or prerequisites are stated, leaving the agent to infer context from the examples.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
salesforce_manage_objectB
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
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Whether to create new object or update existing | |
| objectName | Yes | API name for the object (without __c suffix) | |
| label | No | Label for the object | |
| pluralLabel | No | Plural label for the object | |
| description | No | Description of the object | |
| nameFieldLabel | No | Label for the name field | |
| nameFieldType | No | Type of the name field | |
| nameFieldFormat | No | Display format for AutoNumber field (e.g., 'A-{0000}') | |
| sharingModel | No | Sharing model for the object |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses that changes affect metadata and require proper permissions, which is valuable behavioral context. However, it doesn't mention important traits like whether operations are reversible, what happens on partial updates, rate limits, or error behavior. The description adds some value but leaves significant gaps for a metadata mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with a clear opening sentence followed by bullet points and examples. The note about metadata and permissions is front-loaded. While efficient, the bullet format could be slightly more polished, and the examples could be integrated more smoothly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a metadata mutation tool with 9 parameters, no annotations, and no output schema, the description provides basic purpose and permission context but lacks important details. It doesn't explain return values, error conditions, or behavioral nuances. Given the complexity and lack of structured coverage, the description should do more to compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 9 parameters thoroughly. The description mentions fields, relationships, settings, labels, and sharing model in general terms but doesn't add specific semantic details beyond what's in the schema. The baseline of 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates new custom objects or modifies existing ones in Salesforce, specifying both create and update operations with examples. It distinguishes from some siblings like query or read tools but doesn't explicitly differentiate from salesforce_manage_field which handles field-level operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for object-level metadata operations (create/update custom objects) and mentions permission requirements, but doesn't explicitly state when to use this vs. alternatives like salesforce_manage_field for field operations or salesforce_describe_object for read-only metadata. The note about permissions provides some context but no explicit guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
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'"
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")
| Name | Required | Description | Default |
|---|---|---|---|
| objectName | Yes | API name of the object to query | |
| fields | Yes | List of fields to retrieve, including relationship fields | |
| whereClause | No | WHERE clause, can include conditions on related objects | |
| orderBy | No | ORDER BY clause, can include fields from related objects | |
| limit | No | Maximum number of records to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It describes the tool's behavior well for querying with SOQL and relationships, including syntax notes for custom fields. However, it lacks details on permissions, rate limits, error handling, or response format, which are important for a query tool with no output schema. The description adds value but misses key behavioral aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, with the core purpose stated first, followed by usage guidelines and examples. The examples are detailed but necessary for clarity. It could be slightly more concise by reducing example verbosity, but overall, it's well-structured with no wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (SOQL queries with relationships), no annotations, and no output schema, the description is incomplete. It covers usage and syntax well but lacks information on response format, pagination, error cases, or authentication needs. For a tool with 5 parameters and no structured output, more context is needed to be fully helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds minimal semantic value beyond the schema—it provides examples of how to use parameters like 'fields' and 'whereClause' with relationships, but doesn't explain parameter interactions or constraints not in the schema. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Query records from any Salesforce object using SOQL, including relationship queries.' It specifies the verb ('Query'), resource ('records from any Salesforce object'), and method ('using SOQL'), and distinguishes it from sibling tools by mentioning relationship queries. This is specific and comprehensive.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool versus alternatives. It states: 'For queries with GROUP BY, aggregate functions (COUNT, SUM, AVG, etc.), or HAVING clauses, use salesforce_aggregate_query instead,' naming the specific sibling tool. This clearly defines usage boundaries and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| className | No | Name of a specific Apex class to read | |
| namePattern | No | Pattern to match Apex class names (supports wildcards * and ?) | |
| includeMetadata | No | Whether to include metadata about the Apex classes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does an excellent job disclosing behavioral traits. It explains what gets returned under different conditions (full body vs. names only), wildcard support, default behavior when no parameters are provided, and metadata inclusion details. The only minor gap is lack of information about authentication requirements or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly structured with a clear purpose statement, numbered examples showing common use cases, and a notes section with behavioral details. Every sentence earns its place by providing specific guidance without redundancy. The information is front-loaded with the core purpose immediately stated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with no output schema, the description provides excellent coverage of behavior, parameter interactions, and return formats. It explains what gets returned under different parameter combinations. The only minor gap is the lack of information about authentication or permissions needed to access Apex classes, which would be helpful given the Salesforce context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the schema already documents all parameters well. The description adds some value through examples showing how parameters interact (e.g., includeMetadata with namePattern) and clarifies that className and namePattern are mutually exclusive in their effects, but doesn't add significant semantic meaning beyond what's in the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as 'Read Apex classes from Salesforce' with a specific verb ('Read') and resource ('Apex classes'). It distinguishes itself from siblings like salesforce_write_apex (write operation) and salesforce_read_apex_trigger (different resource type).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use different parameter combinations (e.g., className for full body, namePattern for matching names, includeMetadata for additional info). However, it doesn't explicitly mention when NOT to use this tool versus alternatives like salesforce_search_all or salesforce_query_records for different types of Salesforce data retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| triggerName | No | Name of a specific Apex trigger to read | |
| namePattern | No | Pattern to match Apex trigger names (supports wildcards * and ?) | |
| includeMetadata | No | Whether to include metadata about the Apex triggers |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure and does so effectively. It explains key behaviors: what gets returned (full body vs. names only), how wildcards work, default behavior when no parameters are provided, and metadata inclusion details. However, it doesn't mention potential limitations like rate limits or authentication requirements, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose statement followed by numbered examples and bullet-point notes. Every sentence adds practical value—no wasted words. The information is front-loaded with the core purpose, then detailed usage guidance, making it efficient for an agent to parse and apply.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with no annotations and no output schema, the description provides comprehensive context about behavior and parameter usage. It covers all three parameters thoroughly and explains return variations. The main gap is the lack of output format details (what the return structure looks like), which would be helpful given the absence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so the baseline is 3. The description adds significant value beyond the schema by explaining the semantic relationships between parameters (e.g., triggerName returns full body, namePattern returns names only, includeMetadata adds extra info) and providing concrete examples of how parameters interact, elevating the score above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Read' and resource 'Apex triggers from Salesforce', making the purpose specific and unambiguous. It distinguishes this tool from siblings like salesforce_read_apex (for Apex classes) and salesforce_write_apex_trigger (for writing triggers), establishing clear differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use different parameter combinations through detailed examples and notes. It specifies alternatives like using triggerName for full body retrieval vs. namePattern for name-only listing, and clarifies that includeMetadata adds extra information, helping the agent choose the right approach for different scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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
"updateable" and "viewable" options control record access filtering
| Name | Required | Description | Default |
|---|---|---|---|
| searchTerm | Yes | Text to search for (supports wildcards * and ?) | |
| searchIn | No | Which fields to search in | |
| objects | Yes | List of objects to search and their return fields | |
| withClauses | No | Additional WITH clauses for the search | |
| updateable | No | Return only updateable records | |
| viewable | No | Return only viewable records |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does well by explaining search capabilities (wildcards, WITH clauses, access filtering via 'updateable' and 'viewable'), but doesn't mention important behavioral aspects like rate limits, authentication requirements, error handling, or what the response format looks like. The notes section adds valuable operational context beyond basic functionality.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose statement upfront, followed by comprehensive examples and organized notes. While slightly lengthy, every section earns its place by providing essential guidance for using this complex tool. The examples are particularly valuable for understanding parameter combinations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex search tool with 6 parameters, no annotations, and no output schema, the description does a decent job but has gaps. It explains the search mechanics well but doesn't describe the return format, pagination, error conditions, or performance characteristics. The examples help compensate, but complete behavioral transparency is lacking for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the baseline is 3. The description adds value through examples that demonstrate how parameters work together (especially the complex 'objects' and 'withClauses' structures) and provides practical guidance about wildcards and WITH clause types, but doesn't significantly enhance understanding beyond what the well-documented schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Search across multiple Salesforce objects') and technology used ('using SOSL'), distinguishing it from sibling tools like salesforce_query_records (SOQL) and salesforce_search_objects. It explicitly identifies the multi-object search capability as its core function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when to use this tool (searching across multiple objects with SOSL) and includes examples demonstrating different use cases. However, it doesn't explicitly state when NOT to use it or name specific alternatives among the sibling tools, though the SOSL focus implies differentiation from SOQL-based queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| searchPattern | Yes | Search pattern to find objects (e.g., 'Account Coverage' will find objects like 'AccountCoverage__c') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions the search behavior and examples of matches, but does not disclose critical traits such as whether this is a read-only operation, if there are rate limits, authentication requirements, or what the output format looks like (e.g., list of object names with metadata). For a search tool with zero annotation coverage, this leaves significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first sentence, followed by illustrative examples that earn their place by clarifying usage. It is brief, with no redundant or unnecessary information, making it highly efficient for an AI agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (search with pattern matching), no annotations, and no output schema, the description is adequate but incomplete. It covers the purpose and parameter usage well, but lacks details on behavioral aspects like output format, error handling, or system constraints, which are important for an agent to use it effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the schema already documents the single parameter 'searchPattern'. The description adds value by providing concrete examples ('Account' will find Account, AccountHistory) that illustrate the pattern-matching semantics beyond the schema's generic description, enhancing understanding of how the parameter behaves in practice.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Search for Salesforce standard and custom objects') and resource ('by name pattern'), with concrete examples that distinguish it from siblings like salesforce_describe_object (which describes a single object) or salesforce_search_all (which searches across all data, not just object names).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through examples (e.g., searching for 'Account' or 'Order'), but does not explicitly state when to use this tool versus alternatives like salesforce_describe_object for detailed metadata or salesforce_search_all for broader data searches. No explicit exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Whether to create a new class or update an existing one | |
| className | Yes | Name of the Apex class to create or update | |
| apiVersion | No | API version for the Apex class (e.g., '58.0') | |
| body | Yes | Full body of the Apex class |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds useful context about required/optional parameters for different operations, validation rules (e.g., body must be valid Apex code, className must match), and that status information is returned. However, it doesn't cover important behavioral aspects like error handling, permissions needed, or whether operations are reversible/destructive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded with the core purpose. The examples and notes are well-organized and add necessary detail without redundancy. However, some information in the notes (e.g., 'operation must be either create or update') is already implied by the enum in the schema, making it slightly less efficient than ideal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a write operation with no annotations and no output schema, the description is moderately complete. It covers the basic operations, parameters, and validation rules but lacks details on error responses, authentication requirements, rate limits, or what specific 'status information' is returned. For a mutation tool without structured safety hints, more behavioral context would be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the baseline is 3. The description adds significant value beyond the schema by clarifying parameter semantics through examples and notes: it explains when apiVersion is optional (defaults to latest), distinguishes required parameters for create vs. update operations, and provides validation rules for body and className matching. This compensates well for the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('Create or update') and resource ('Apex classes in Salesforce'). It distinguishes itself from sibling tools like salesforce_read_apex (read vs. write) and salesforce_write_apex_trigger (classes vs. triggers), making the scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides implied usage guidance through examples and notes (e.g., operation must be 'create' or 'update'), but it lacks explicit guidance on when to use this tool versus alternatives like salesforce_dml_records or salesforce_execute_anonymous. No when-not-to-use scenarios or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Whether to create a new trigger or update an existing one | |
| triggerName | Yes | Name of the Apex trigger to create or update | |
| objectName | No | Name of the Salesforce object the trigger is for (required for 'create') | |
| apiVersion | No | API version for the Apex trigger (e.g., '58.0') | |
| body | Yes | Full body of the Apex trigger |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses that 'Status information is returned after successful operations' which is helpful behavioral context. However, it doesn't mention important behavioral aspects like required Salesforce permissions, whether this is a destructive operation (it modifies Salesforce metadata), potential rate limits, or error handling for invalid Apex code.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose statement, detailed examples, and organized notes. While somewhat lengthy, every section earns its place by providing essential information. The front-loaded purpose statement is effective, though the examples could be slightly more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that modifies Salesforce metadata (a significant operation) with no annotations and no output schema, the description is adequate but has gaps. It covers the basic operation well but lacks information about permissions needed, potential side effects, error conditions, or what 'Status information' specifically contains. Given the complexity, more behavioral context would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage, so baseline is 3. The description adds significant value through examples that clarify how parameters work together for create vs. update scenarios, notes about required/optional parameters per operation type, and validation rules about body content matching triggerName/objectName. This provides practical usage context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create or update Apex triggers in Salesforce' - a specific verb (create/update) with the resource (Apex triggers) and platform (Salesforce). It distinguishes from siblings like 'salesforce_write_apex' (for general Apex code) and 'salesforce_read_apex_trigger' (for reading triggers).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when to use create vs. update operations with specific parameter requirements for each. However, it doesn't explicitly state when to use this tool versus alternatives like 'salesforce_write_apex' for other Apex code types or mention prerequisites like required permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
15 tool updates
- First observed
salesforce_aggregate_query - First observed
salesforce_describe_object - First observed
salesforce_dml_records - First observed
salesforce_execute_anonymous - First observed
salesforce_manage_debug_logs - First observed
salesforce_manage_field - First observed
salesforce_manage_field_permissions - First observed
salesforce_manage_object - First observed
salesforce_query_records - First observed
salesforce_read_apex - First observed
salesforce_read_apex_trigger - First observed
salesforce_search_all - First observed
salesforce_search_objects - First observed
salesforce_write_apex - First observed
salesforce_write_apex_trigger
TDQS
Most tools have distinct purposes, but there is some overlap between salesforce_query_records and salesforce_aggregate_query, which are explicitly disambiguated in descriptions, and between salesforce_execute_anonymous and other data manipulation tools. However, the descriptions help clarify boundaries, preventing major confusion.
All tools follow a consistent snake_case pattern with a clear 'salesforce_' prefix and descriptive verb_noun combinations (e.g., salesforce_query_records, salesforce_manage_object). This uniformity makes the tool set predictable and easy to navigate.
With 15 tools, the server is well-scoped for Salesforce operations, covering data querying, manipulation, metadata management, Apex code handling, and debugging. Each tool serves a specific function without redundancy, making the count appropriate for the domain.
The tool set provides comprehensive coverage for Salesforce, including CRUD operations, metadata management, Apex development, and debugging. Minor gaps exist, such as no direct tool for managing user permissions or workflows, but agents can work around these using existing tools like salesforce_execute_anonymous.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Run SOQL queries to explore and retrieve Salesforce data. Access accounts, contacts, opportunities…
Run SOQL queries against your Salesforce org to retrieve records and insights. Explore objects, fi…
Plan Salesforce deploys, open pull requests and trigger pipelines from your AI client.
Run SOQL queries to explore and retrieve Salesforce data. Inspect records, fields, and relationshi…
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables natural language interactions with Salesforce, allowing users to query and modify data, manage custom objects and fields, execute Apex code, and perform SOQL/SOSL searches across Salesforce organizations.1,965MIT
- AlicenseAqualityCmaintenanceEnables natural language interactions with Salesforce data and metadata, allowing users to query records, manage custom objects, and manipulate Apex code. It provides comprehensive tools for schema exploration, aggregate queries, and field-level security management.151,965MIT
- 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.1,9651MIT
- AlicenseAqualityBmaintenanceEnables interaction with Salesforce orgs to perform operations like querying data with SOQL, managing records, and executing Apex code. It provides configurable access levels and support for both standard and Tooling APIs via natural language interfaces.11MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/simonl77/mcp-server-salesforce'
If you have feedback or need assistance with the MCP directory API, please join our Discord server