Skip to main content
Glama
simonl77

Salesforce MCP Server

by simonl77

Salesforce MCP Server

OpenSSF Scorecard

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-salesforce

Claude Desktop Quick Installation

For easy setup with Claude Desktop, download the pre-configured extension:

  1. Download salesforce-mcp-extension.dxt from the claude-desktop/ folder

  2. Open Claude Desktop → Settings → Extensions

  3. Drag the .dxt file into the Extensions window

  4. Configure 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 grantAccessTo parameter to specify different profiles

  • Example: "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)

  1. Set up your Salesforce credentials

  2. Get your security token (Reset from Salesforce Settings)

2. OAuth 2.0 Client Credentials Flow

  1. Create a Connected App in Salesforce

  2. Enable OAuth settings and select "Client Credentials Flow"

  3. Set appropriate scopes (typically "api" is sufficient)

  4. Save the Client ID and Client Secret

  5. Important: Note your instance URL (e.g., https://your-domain.my.salesforce.com) as it's required for authentication

  1. Install and authenticate Salesforce CLI (sf).

  2. Make sure your org is authenticated and accessible via sf org display --json in the root of your Salesforce project.

  3. 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_URL must 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 build

Contributing

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 tools
salesforce_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:

  1. GROUP BY queries (single/multiple fields, related objects, date functions)

  2. Aggregate functions: COUNT(), COUNT_DISTINCT(), SUM(), AVG(), MIN(), MAX()

  3. HAVING clauses for filtering grouped results

  4. Date/time grouping: CALENDAR_YEAR(), CALENDAR_MONTH(), CALENDAR_QUARTER(), FISCAL_YEAR(), FISCAL_QUARTER()

Examples:

  1. Count opportunities by stage:

    • objectName: "Opportunity"

    • selectFields: ["StageName", "COUNT(Id) OpportunityCount"]

    • groupByFields: ["StageName"]

  2. Analyze cases by priority and status:

    • objectName: "Case"

    • selectFields: ["Priority", "Status", "COUNT(Id) CaseCount", "AVG(Days_Open__c) AvgDaysOpen"]

    • groupByFields: ["Priority", "Status"]

  3. Count contacts by account industry:

    • objectName: "Contact"

    • selectFields: ["Account.Industry", "COUNT(Id) ContactCount"]

    • groupByFields: ["Account.Industry"]

  4. Quarterly opportunity analysis:

    • objectName: "Opportunity"

    • selectFields: ["CALENDAR_YEAR(CloseDate) Year", "CALENDAR_QUARTER(CloseDate) Quarter", "SUM(Amount) Revenue"]

    • groupByFields: ["CALENDAR_YEAR(CloseDate)", "CALENDAR_QUARTER(CloseDate)"]

  5. Find accounts with more than 10 opportunities:

    • objectName: "Opportunity"

    • selectFields: ["Account.Name", "COUNT(Id) OpportunityCount"]

    • groupByFields: ["Account.Name"]

    • havingClause: "COUNT(Id) > 10"

Important Rules:

  • All non-aggregate fields in selectFields MUST be included in groupByFields

  • Use whereClause to filter rows BEFORE grouping

  • Use havingClause to filter AFTER grouping (for aggregate conditions)

  • ORDER BY can only use fields from groupByFields or aggregate functions

  • OFFSET is not supported with GROUP BY in Salesforce

ParametersJSON Schema
NameRequiredDescriptionDefault
objectNameYesAPI name of the object to query
selectFieldsYesFields to select - mix of group fields and aggregates. Format: 'FieldName' or 'COUNT(Id) AliasName'
groupByFieldsYesFields to group by - must include all non-aggregate fields from selectFields
whereClauseNoWHERE clause to filter rows BEFORE grouping (cannot contain aggregate functions)
havingClauseNoHAVING clause to filter results AFTER grouping (use for aggregate conditions)
orderByNoORDER BY clause - can only use grouped fields or aggregate functions
limitNoMaximum number of grouped results to return

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
objectNameYesAPI name of the object (e.g., 'Account', 'Contact', 'Custom_Object__c')

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
operationYesType of DML operation to perform
objectNameYesAPI name of the object
recordsYesArray of records to process
externalIdFieldNoExternal ID field name for upsert operations

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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:

  1. Execute simple Apex code: { "apexCode": "System.debug('Hello World');" }

  2. Execute Apex code with variables: { "apexCode": "List 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 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

ParametersJSON Schema
NameRequiredDescriptionDefault
apexCodeYesApex code to execute anonymously
logLevelNoLog level for debug logs (optional, defaults to DEBUG)

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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:

  1. Enable debug logs for a user: { "operation": "enable", "username": "user@example.com", "logLevel": "DEBUG", "expirationTime": 30 }

  2. Disable debug logs for a user: { "operation": "disable", "username": "user@example.com" }

  3. Retrieve debug logs for a user: { "operation": "retrieve", "username": "user@example.com", "limit": 5 }

  4. Retrieve a specific log with full content: { "operation": "retrieve", "username": "user@example.com", "logId": "07L1g000000XXXXEAA0", "includeBody": true }

Notes:

  • The operation must be one of: 'enable', 'disable', or 'retrieve'

  • The username parameter is required for all operations

  • For 'enable' operation, logLevel is optional (defaults to 'DEBUG')

  • Log levels: NONE, ERROR, WARN, INFO, DEBUG, FINE, FINER, FINEST

  • expirationTime is optional for 'enable' operation (minutes until expiration, defaults to 30)

  • limit is optional for 'retrieve' operation (maximum number of logs to return, defaults to 10)

  • logId is optional for 'retrieve' operation (to get a specific log)

  • includeBody is optional for 'retrieve' operation (to include the full log content, defaults to false)

  • The tool validates that the specified user exists before performing operations

  • If logLevel is not specified when enabling logs, the tool will ask for clarification

ParametersJSON Schema
NameRequiredDescriptionDefault
operationYesOperation to perform on debug logs
usernameYesUsername of the Salesforce user
logLevelNoLog level for debug logs (required for 'enable' operation)
expirationTimeNoMinutes until the debug log configuration expires (optional, defaults to 30)
limitNoMaximum number of logs to retrieve (optional, defaults to 10)
logIdNoID of a specific log to retrieve (optional)
includeBodyNoWhether to include the full log content (optional, defaults to false)

TDQS

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
operationYesWhether to create new field or update existing
objectNameYesAPI name of the object to add/modify the field
fieldNameYesAPI name for the field (without __c suffix)
labelNoLabel for the field
typeNoField type (required for create)
requiredNoWhether the field is required
uniqueNoWhether the field value must be unique
externalIdNoWhether the field is an external ID
lengthNoLength for text fields
precisionNoPrecision for numeric fields
scaleNoScale for numeric fields
referenceToNoAPI name of the object to reference (for Lookup/MasterDetail)
relationshipLabelNoLabel for the relationship (for Lookup/MasterDetail)
relationshipNameNoAPI name for the relationship (for Lookup/MasterDetail)
deleteConstraintNoDelete constraint for Lookup fields
picklistValuesNoValues for Picklist/MultiselectPicklist fields
descriptionNoDescription of the field
grantAccessToNoProfile names to grant field access to (defaults to ['System Administrator'])

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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:

  1. Grant System Administrator access to a field

  2. Give read-only access to a field for specific profiles

  3. Check which profiles have access to a field

ParametersJSON Schema
NameRequiredDescriptionDefault
operationYesOperation to perform on field permissions
objectNameYesAPI name of the object (e.g., 'Account', 'Custom_Object__c')
fieldNameYesAPI name of the field (e.g., 'Custom_Field__c')
profileNamesNoNames of profiles to grant/revoke access (e.g., ['System Administrator', 'Sales User'])
readableNoGrant/revoke read access (default: true)
editableNoGrant/revoke edit access (default: true)

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
operationYesWhether to create new object or update existing
objectNameYesAPI name for the object (without __c suffix)
labelNoLabel for the object
pluralLabelNoPlural label for the object
descriptionNoDescription of the object
nameFieldLabelNoLabel for the name field
nameFieldTypeNoType of the name field
nameFieldFormatNoDisplay format for AutoNumber field (e.g., 'A-{0000}')
sharingModelNoSharing model for the object

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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:

  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")

ParametersJSON Schema
NameRequiredDescriptionDefault
objectNameYesAPI name of the object to query
fieldsYesList of fields to retrieve, including relationship fields
whereClauseNoWHERE clause, can include conditions on related objects
orderByNoORDER BY clause, can include fields from related objects
limitNoMaximum number of records to return

TDQS

A4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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:

  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": "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)

ParametersJSON Schema
NameRequiredDescriptionDefault
classNameNoName of a specific Apex class to read
namePatternNoPattern to match Apex class names (supports wildcards * and ?)
includeMetadataNoWhether to include metadata about the Apex classes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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:

  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)

ParametersJSON Schema
NameRequiredDescriptionDefault
triggerNameNoName of a specific Apex trigger to read
namePatternNoPattern to match Apex trigger names (supports wildcards * and ?)
includeMetadataNoWhether to include metadata about the Apex triggers

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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:

  1. Basic search across all objects: { "searchTerm": "John", "objects": [ { "name": "Account", "fields": ["Name"], "limit": 10 }, { "name": "Contact", "fields": ["FirstName", "LastName", "Email"] } ] }

  2. Advanced search with filters: { "searchTerm": "Cloud*", "searchIn": "NAME FIELDS", "objects": [ { "name": "Account", "fields": ["Name", "Industry"], "orderBy": "Name DESC", "where": "Industry = 'Technology'" } ], "withClauses": [ { "type": "NETWORK", "value": "ALL NETWORKS" }, { "type": "SNIPPET", "fields": ["Description"] } ] }

Notes:

  • Use * and ? for wildcards in search terms

  • Each object can have its own WHERE, ORDER BY, and LIMIT clauses

  • Support for WITH clauses: DATA CATEGORY, DIVISION, METADATA, NETWORK, PRICEBOOKID, SNIPPET, SECURITY_ENFORCED

  • "updateable" and "viewable" options control record access filtering

ParametersJSON Schema
NameRequiredDescriptionDefault
searchTermYesText to search for (supports wildcards * and ?)
searchInNoWhich fields to search in
objectsYesList of objects to search and their return fields
withClausesNoAdditional WITH clauses for the search
updateableNoReturn only updateable records
viewableNoReturn only viewable records

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
searchPatternYesSearch pattern to find objects (e.g., 'Account Coverage' will find objects like 'AccountCoverage__c')

TDQS

A3.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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:

  1. Create a new Apex class: { "operation": "create", "className": "AccountService", "apiVersion": "58.0", "body": "public class AccountService { public static void updateAccounts() { /* implementation */ } }" }

  2. Update an existing Apex class: { "operation": "update", "className": "AccountService", "body": "public class AccountService { public static void updateAccounts() { /* updated implementation */ } }" }

Notes:

  • The operation must be either 'create' or 'update'

  • For 'create' operations, className and body are required

  • For 'update' operations, className and body are required

  • apiVersion is optional for 'create' (defaults to the latest version)

  • The body must be valid Apex code

  • The className in the body must match the className parameter

  • Status information is returned after successful operations

ParametersJSON Schema
NameRequiredDescriptionDefault
operationYesWhether to create a new class or update an existing one
classNameYesName of the Apex class to create or update
apiVersionNoAPI version for the Apex class (e.g., '58.0')
bodyYesFull body of the Apex class

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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:

  1. Create a new Apex trigger: { "operation": "create", "triggerName": "AccountTrigger", "objectName": "Account", "apiVersion": "58.0", "body": "trigger AccountTrigger on Account (before insert, before update) { /* implementation */ }" }

  2. Update an existing Apex trigger: { "operation": "update", "triggerName": "AccountTrigger", "body": "trigger AccountTrigger on Account (before insert, before update, after update) { /* updated implementation */ }" }

Notes:

  • The operation must be either 'create' or 'update'

  • For 'create' operations, triggerName, objectName, and body are required

  • For 'update' operations, triggerName and body are required

  • apiVersion is optional for 'create' (defaults to the latest version)

  • The body must be valid Apex trigger code

  • The triggerName in the body must match the triggerName parameter

  • The objectName in the body must match the objectName parameter (for 'create')

  • Status information is returned after successful operations

ParametersJSON Schema
NameRequiredDescriptionDefault
operationYesWhether to create a new trigger or update an existing one
triggerNameYesName of the Apex trigger to create or update
objectNameNoName of the Salesforce object the trigger is for (required for 'create')
apiVersionNoAPI version for the Apex trigger (e.g., '58.0')
bodyYesFull body of the Apex trigger

TDQS

A4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 15 tool updates
    • First observedsalesforce_aggregate_query
    • First observedsalesforce_describe_object
    • First observedsalesforce_dml_records
    • First observedsalesforce_execute_anonymous
    • First observedsalesforce_manage_debug_logs
    • First observedsalesforce_manage_field
    • First observedsalesforce_manage_field_permissions
    • First observedsalesforce_manage_object
    • First observedsalesforce_query_records
    • First observedsalesforce_read_apex
    • First observedsalesforce_read_apex_trigger
    • First observedsalesforce_search_all
    • First observedsalesforce_search_objects
    • First observedsalesforce_write_apex
    • First observedsalesforce_write_apex_trigger

TDQS

A3.9/5.0
Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityInactive
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables 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,965
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables 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.
    15
    1,965
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Integrates 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,965
    1
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables 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.
    11
    MIT

Latest Blog Posts

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