Skip to main content
Glama
boejucci

Salesforce MCP Server (Extended)

by boejucci

Salesforce MCP Server (Extended)

npm version

An extended MCP (Model Context Protocol) server implementation that integrates Claude with Salesforce, enabling natural language interactions with your Salesforce data, metadata, and reports. This fork adds comprehensive report creation and management capabilities to the original tsmztech/mcp-server-salesforce.

🆕 New Report Features

This fork extends the original server with 5 powerful report creation tools:

  • Report Creation: Create Salesforce reports using natural language

  • Report Discovery: List and search available report types

  • Schema Inspection: Get detailed field information for report types

  • Report Reading: Inspect existing report metadata

  • Smart Filtering: Automatic date range detection and field formatting

Related MCP server: Salesforce MCP Server

Installation

npx @boejucci/mcp-server-salesforce

Claude Desktop Configuration

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "salesforce": {
      "command": "npx",
      "args": ["-y", "@boejucci/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"
      }
    }
  }
}

Report Tools

salesforce_create_report

Create Salesforce reports with TABULAR, SUMMARY, or MATRIX formats. Supports filters, groupings, and automatic date range detection.

Features:

  • Smart field name formatting (automatically adds object prefixes to custom fields)

  • Automatic date range filter conversion

  • Support for charts

  • Multiple report formats (TABULAR, SUMMARY, MATRIX)

Example Usage:

"Create a report showing MSP opportunities by month for 2024-2025"
"Make a tabular report of all accounts with their annual revenue"
"Build a summary report of opportunities grouped by stage"

Parameters:

  • name: Report name

  • reportType: Base object (e.g., "Opportunity", "Account")

  • format: TABULAR, SUMMARY, or MATRIX

  • columns: Array of field names (use UPPERCASE for standard fields)

  • filters: Array of filter objects

  • groupingsDown: Row groupings for SUMMARY/MATRIX

  • groupingsAcross: Column groupings for MATRIX only

  • chart: Optional chart configuration

Smart Features:

  • Custom field names (e.g., Type__c) are automatically formatted as Opportunity.Type__c

  • Date range filters are automatically detected and converted to timeFrameFilter

  • Standard fields use UPPERCASE format (e.g., OPPORTUNITY_NAME, AMOUNT)

salesforce_list_report_types

Discover available report types in your Salesforce org.

Example Usage:

"What report types are available for opportunities?"
"Show me all account-related report types"

salesforce_describe_report_type

Get detailed field information for a specific report type, including which fields are filterable, groupable, and sortable.

Example Usage:

"What fields are available in the Opportunity report type?"
"Show me filterable fields for Account reports"

salesforce_read_report

Inspect existing report metadata including columns, filters, groupings, and chart configuration.

Example Usage:

"Show me the configuration of the Q3 Sales Report"
"What filters are applied to my pipeline report?"

salesforce_list_reports

List all reports or search for reports by name pattern.

Example Usage:

"List all reports with 'Opportunity' in the name"
"Find reports related to sales"

Original Features

All features from the original tsmztech/mcp-server-salesforce are included:

  • Object and Field Management: Create and modify custom objects and fields

  • Smart Object Search: Find Salesforce objects using partial name matches

  • Flexible Data Queries: Query records with relationship support

  • Data Manipulation: Insert, update, delete, and upsert records

  • Cross-Object Search: Search across multiple objects using SOSL

  • Apex Code Management: Read, create, and update Apex classes and triggers

  • Debug Log Management: Enable, disable, and retrieve debug logs

For complete documentation on the original tools, see the original repository.

Authentication

Supports three authentication methods:

{
  "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"
  }
}

2. Username/Password

{
  "env": {
    "SALESFORCE_CONNECTION_TYPE": "User_Password",
    "SALESFORCE_USERNAME": "your_username",
    "SALESFORCE_PASSWORD": "your_password",
    "SALESFORCE_TOKEN": "your_security_token",
    "SALESFORCE_INSTANCE_URL": "https://login.salesforce.com"
  }
}

3. Salesforce CLI

{
  "env": {
    "SALESFORCE_CONNECTION_TYPE": "Salesforce_CLI"
  }
}

Example: Creating Reports

Simple Tabular Report

"Create a tabular report showing all opportunities with their names, amounts, and close dates"

This generates a basic list-style report with three columns.

Summary Report with Grouping

"Create a summary report of opportunities grouped by stage, showing the total amount for each stage"

Creates a report grouped by stage with subtotals.

Matrix Report

"Create a matrix report showing opportunity counts by stage and quarter"

Creates a two-dimensional report with row and column groupings.

Report with Filters and Date Ranges

"Create a report of MSP opportunities created between January 1, 2024 and December 31, 2025, grouped by month"

The tool automatically:

  • Converts Type__c to Opportunity.Type__c

  • Detects the two date filters and converts to a timeFrameFilter

  • Groups by month using date granularity

Development

Building from Source

git clone https://github.com/boejucci/mcp-server-salesforce.git
cd mcp-server-salesforce
npm install
npm run build

Running Locally

{
  "mcpServers": {
    "salesforce": {
      "command": "node",
      "args": ["/path/to/mcp-server-salesforce/dist/index.js"],
      "env": {
        // ... auth config
      }
    }
  }
}

Technical Details

Report Field Naming

The tool handles field naming intelligently:

  • Standard fields: Use UPPERCASE format

    • Examples: OPPORTUNITY_NAME, AMOUNT, STAGE_NAME, CREATED_DATE

  • Custom fields: Use exact API names (e.g., Type__c)

    • Automatically prefixed with object name: Type__c → Opportunity.Type__c

Date Range Filters

Date ranges are automatically detected and converted:

// Input filters
[
  {"field": "CREATED_DATE", "operator": "greaterOrEqual", "value": "2024-01-01"},
  {"field": "CREATED_DATE", "operator": "lessOrEqual", "value": "2025-12-31"}
]

// Automatically converted to:
{
  "timeFrameFilter": {
    "dateColumn": "CREATED_DATE",
    "startDate": "2024-01-01",
    "endDate": "2025-12-31",
    "interval": "INTERVAL_CUSTOM"
  }
}

Supported Report Formats

  • TABULAR: Simple list-style reports

  • SUMMARY: Reports with groupings and subtotals (supports row groupings only)

  • MATRIX: Two-dimensional reports (supports both row and column groupings)

Contributing

Contributions welcome! Please submit pull requests or open issues on GitHub.

License

MIT License - see LICENSE for details.

Credits

Based on tsmztech/mcp-server-salesforce with report creation extensions by Joe Bucci.

Available Tools

21 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.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so description carries full burden. It discloses limitations like OFFSET not supported and that all non-aggregate fields must be in groupBy. However, it does not mention side effects (likely read-only) or what happens on query failure.

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?

Description is lengthy but well-structured with clear sections, bullet points, and examples. Every part serves a purpose and is front-loaded with a summary. Could be slightly more concise but not overly verbose.

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?

Despite detailed input rules, the description lacks explanation of the output format (e.g., array of grouped records). Without an output schema, this gap may hinder correct invocation. The examples imply the result, but not explicitly stated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers all 7 parameters, and the description adds extensive extra semantics: examples show parameter combinations, important rules about groupByFields and selectFields correlation, and format for date grouping. This goes well 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 the tool executes SOQL queries with GROUP BY and aggregate functions. It distinguishes from sibling salesforce_query_records by specifying that it summarizes and groups data rather than returning individual records.

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?

Explicitly advises to use salesforce_query_records for queries without GROUP BY or aggregates. Provides clear context on when to use whereClause vs havingClause and lists important rules for query construction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

salesforce_create_reportA

Create a new Salesforce report using the Metadata API. Supports tabular, summary, and matrix formats with groupings, filters, and charts.

IMPORTANT - REPORT TYPE: The reportType parameter can be:

  1. A standard object name: "Opportunity", "Account", "Contact", "Lead", "Case", etc.

  2. A custom report type API name (use salesforce_list_report_types or salesforce_describe_report_type to find these)

IMPORTANT - FOLDER REQUIREMENT: Reports MUST be created in a folder. Common folders:

  • "unfiled$public" (default) - Public unfiled reports folder

  • "Private Reports" - Private user reports (not recommended for shared reports)

  • Custom folder names - Use salesforce_list_report_folders to find available folders

IMPORTANT - FIELD NAMING:

  • For standard objects (Opportunity, Account, etc.): Use UPPERCASE field names Examples: OPPORTUNITY_NAME, AMOUNT, STAGE_NAME, CREATED_DATE, CLOSE_DATE, ACCOUNT_NAME, INDUSTRY

  • For custom fields: Use exact API name with __c suffix (will be auto-prefixed with object name) Example: Type__c becomes "Opportunity.Type__c" automatically

  • Date range filters: Two filters on same date field with greaterOrEqual/lessOrEqual are automatically converted to timeFrameFilter

WORKFLOW TO CREATE A REPORT:

  1. First, use salesforce_describe_report_type to see available fields for your reportType

  2. Then use this tool with the correct field names from step 1

  3. If it fails, check the error message for field name issues

EXAMPLES:

  1. MSP opportunities by month (2024-2025): { "name": "MSP Opportunities 2024-2025", "reportType": "Opportunity", "format": "SUMMARY", "columns": ["OPPORTUNITY_NAME", "AMOUNT", "STAGE_NAME"], "filters": [ {"field": "Type__c", "operator": "equals", "value": "MSP"}, {"field": "CREATED_DATE", "operator": "greaterOrEqual", "value": "2024-01-01"}, {"field": "CREATED_DATE", "operator": "lessOrEqual", "value": "2025-12-31"} ], "groupingsDown": [{"field": "CREATED_DATE", "dateGranularity": "Month"}], "folder": "unfiled$public" }

  2. Accounts by industry: { "name": "Accounts by Industry", "reportType": "Account", "format": "SUMMARY", "columns": ["ACCOUNT_NAME", "INDUSTRY", "ANNUAL_REVENUE"], "filters": [{"field": "INDUSTRY", "operator": "notEqual", "value": ""}], "groupingsDown": [{"field": "INDUSTRY"}], "folder": "unfiled$public" }

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the report (will be sanitized for API name)
reportTypeYesReport type - either a standard object name (Opportunity, Account, Contact, Lead, Case, etc.) or a custom report type API name. Use salesforce_list_report_types to discover available report types.
formatYesReport format: TABULAR (simple list), SUMMARY (with groupings and subtotals), or MATRIX (rows and columns)
columnsYesList of field names in UPPERCASE (e.g., ["OPPORTUNITY_NAME", "AMOUNT", "STAGE_NAME"])
groupingsDownNoGroupings for rows (SUMMARY/MATRIX only)
groupingsAcrossNoGroupings for columns (MATRIX only)
filtersNoFilters to apply. Date ranges (two filters on same date field with greaterOrEqual/lessOrEqual) are automatically converted to timeFrameFilter.
chartNo
folderNoReport folder name. Default: "unfiled$public". Use salesforce_list_report_folders to see available folders. Common values: "unfiled$public", "Private Reports", or custom folder names.
descriptionNoReport description

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 full burden of behavioral disclosure. It reveals important behaviors such as automatic conversion of date range filters to timeFrameFilter and auto-prefixing custom fields with the object name. However, it does not mention permission requirements (beyond folder access) or what the API call returns, leaving minor 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 long but well-structured with clear headings, bullet points, and examples. It is front-loaded with key information like the IMPORTANT sections. While every section adds value, some repetition (e.g., field naming rules appear in multiple places) could be trimmed slightly, but overall it remains highly readable and efficient.

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 (10 parameters, nested objects) and no output schema, the description covers the input thoroughly with workflows, examples, and conventions. However, it does not describe what the tool returns (e.g., report ID or success confirmation), which would be helpful for an agent to confirm the result. This is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is high (90%), and the description adds substantial value beyond the schema by providing field naming rules (UPPERCASE for standard, __c for custom), examples of valid values for reportType (object names vs custom report types), and detailed usage patterns for filters (date ranges). This makes the parameters much clearer and easier to use correctly.

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 creates a Salesforce report using the Metadata API, specifying supported formats (tabular, summary, matrix) and features like groupings, filters, and charts. This distinguishes it from sibling tools such as salesforce_read_report (which reads reports) or salesforce_list_reports (which lists reports). The verb 'Create' and resource 'Salesforce report' are specific and actionable.

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 includes a dedicated 'WORKFLOW TO CREATE A REPORT' section with step-by-step instructions, prerequisites (using salesforce_describe_report_type to discover fields), and explicit guidance on folder requirements and field naming conventions. It clearly tells the agent when and how to use this tool, including what to do before invoking it, making it easy to select this tool over alternatives.

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

A4.2/5.0
Behavior4/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 of behavioral disclosure. It accurately describes the tool as returning schema metadata (a read operation) without side effects. However, it omits potential considerations like resource intensity for objects with many fields, API usage limits, or permission requirements beyond standard Salesforce describe access.

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 two sentences long with zero wasted words. It front-loads the core purpose in the first sentence and provides clarifying examples in the second. Every part serves a purpose.

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 single parameter, no output schema, and no annotations, the description is fairly complete. It explains what the tool returns and provides actionable examples. However, it could elaborate on the output structure (e.g., field types, relationships properties) to fully compensate for the missing output schema, though standard Salesforce metadata is well-known to agents.

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 provides 100% coverage for the single parameter 'objectName', describing it as the API name. The description adds significant value by giving concrete examples ('Account', 'Contact', 'Custom_Object__c') and clarifying that custom fields are included ('including custom fields'). This helps the agent understand the parameter format and scope.

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 'Get' and the resource 'detailed schema metadata including all fields, relationships, and field properties of any Salesforce object'. It provides concrete examples ('Account', 'Case') that distinguish this tool from siblings like salesforce_query_records or salesforce_search_objects, which operate on data rather than metadata.

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 but does not explicitly state when to use this tool versus alternatives (e.g., 'Use this to understand object structure before querying') or when not to use it. It provides no guidance on prerequisites or conditions, leaving the agent to infer context from the purpose alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

salesforce_describe_report_typeA

Get detailed information about a specific report type, including available fields that can be used in reports.

ParametersJSON Schema
NameRequiredDescriptionDefault
reportTypeYesThe API name of the report type to describe (e.g., "Opportunity", "Account", "Custom_Object__c")

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description only states it returns details and fields, without disclosing read-only nature, rate limits, or other behavioral traits.

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?

A single sentence that is concise and directly states the purpose without any extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple nature of the tool (one parameter, no output schema needed), the description adequately explains what to expect.

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 coverage is 100% and the description repeats the schema description without adding extra meaning beyond what's already in the parameter description.

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 'Get', resource 'specific report type', and includes 'available fields that can be used in reports', making it distinct from siblings like list_report_types.

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 for retrieving field information for report building, but does not explicitly exclude cases or mention alternatives like list_report_types.

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?

No annotations are provided, so the description carries full burden. It discloses that these are modify operations, requires Id for update/delete, and upsert uses external ID field. However, it lacks details on permissions, rate limits, error handling, or idempotency, which are important for behavioral transparency.

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 fairly concise and well-structured using bullet points and examples. Each sentence adds value, though some redundancy exists (e.g., operation list repeated). It could be slightly shorter without losing clarity.

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 absence of output schema and annotations, the description adequately covers the tool's purpose and parameters. However, it could mention return value behavior (e.g., IDs created) and error handling (e.g., partial success), which are lacking. Overall, it is sufficient but not thorough.

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 coverage is 100% (all parameters described), so baseline is 3. The description adds contextual value (e.g., 'requires Id' for update/delete) but does not significantly enhance understanding beyond the schema definitions. It could better explain the format of records (e.g., required fields per operation).

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 it performs DML operations (insert, update, delete, upsert) on Salesforce records, with explicit examples (e.g., 'Insert new Accounts, Update Case status'). This distinguishes it from siblings like salesforce_query_records (read-only) and salesforce_describe_object (metadata).

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 context for each operation (e.g., 'requires Id' for update/delete, 'based on external ID field' for upsert) and includes examples. However, it does not explicitly state when not to use the tool or suggest alternatives, leaving room for ambiguity.

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.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses that code runs anonymously, does not persist, includes debug logs, and may be restricted by permissions. However, it stops short of explicitly warning about potential data mutation or destructive actions.

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, three concise examples, and a bulleted notes section. It is front-loaded with purpose. The three examples could be trimmed to two without loss of clarity, but overall it is efficient.

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 complexity of executing arbitrary code and the absence of an output schema, the description adequately covers execution results, debug logs, and security. It also positions the tool as a fallback, which adds important context.

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?

Schema coverage is 100%, setting a baseline of 3. The description adds value by providing examples, noting that 'apexCode' must be valid Apex, and clarifying the 'logLevel' defaults. This goes beyond the schema, justifying a higher score.

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 'Execute anonymous Apex code in Salesforce' with a specific verb and resource. Examples demonstrate common use cases, and it distinguishes itself from sibling tools by noting it can be used as a fallback when other tools are unavailable.

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?

Explicit guidance: 'This tool can be used for data operations or updates when there are no other specific tools available.' It provides a clear condition for use and implies prefer specific tools, which helps in decision-making.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

salesforce_list_report_foldersA

List all report folders in Salesforce. Use this to discover available folders before listing reports.

NOTE: You may only see folders that you created and the "unfiled$public" folder. Standard folders like "Activity Reports" may not appear depending on permissions.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It usefully discloses that only folders created by the user and the 'unfiled$public' folder are visible, and that standard folders may not appear depending on permissions. This adds valuable behavioral context beyond the schema.

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 concise with two clear sentences plus a note. Every sentence adds value: the first states the action, the second gives usage guidance, the note provides transparency. No wasted words.

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 simple nature of a list tool with no parameters, the description is fairly complete. It explains the purpose and important visibility constraints. However, it lacks information about the output format (e.g., list of folder names/IDs), which would be helpful for a complete understanding.

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 tool has zero parameters, so the baseline is 4. The description does not need to add parameter information, and it doesn't. No schema description coverage is relevant here.

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 lists report folders in Salesforce. It uses a specific verb ('List') and resource ('report folders'), and distinguishes from sibling tools like salesforce_list_reports which lists reports.

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 explicitly advises to use this tool to discover available folders before listing reports, providing a clear usage context. It also includes a note about permissions and visibility, which implies when it may not be fully reliable, though it does not explicitly state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

salesforce_list_reportsA

List reports in Salesforce folders.

IMPORTANT: Reports in Salesforce are organized in folders. This tool will:

  • If folder is specified: List reports in that specific folder

  • If no folder specified: Check common folders ("unfiled$public" and "Private Reports")

  • Cannot list ALL reports across all folders in one call (Salesforce API limitation)

TIP: Use salesforce_list_report_folders first to discover available folders, then call this tool with specific folder names.

ParametersJSON Schema
NameRequiredDescriptionDefault
folderNoFolder name to list reports from (e.g., "unfiled$public", "Private Reports"). If not specified, will check common folders.
searchPatternNoOptional search pattern to filter reports by name

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, description fully discloses key behaviors: default folder checking ('unfiled$public' and 'Private Reports'), inability to list all reports across all folders, and the organizational structure (reports in folders). Could add more about potential rate limits or response format, but overall strong.

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?

Every sentence provides value, organized with clear headers and bullet points. Properly front-loaded with the core purpose. No redundant or unnecessary text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 params, no output schema, no annotations), the description comprehensively covers purpose, behavior with examples, limitations, and complementary tools. Leaves no significant gaps for an agent to misuse.

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?

Schema coverage is 100% with descriptions for both parameters. Description adds value by explaining the default behavior of the folder parameter (checks common folders if not specified) and reiterating the optional nature of searchPattern. This goes beyond the schema's 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?

Clearly states it lists reports in Salesforce folders and distinguishes from siblings by suggesting using salesforce_list_report_folders first. The verb 'list' and resource 'reports in folders' are specific and unambiguous.

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?

Provides explicit when-to-use: suggests listing folders first, explains behavior with and without folder parameter, and mentions the Salesforce API limitation that prevents listing all reports across folders in one call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

salesforce_list_report_typesB

List available report types in Salesforce. Report types determine which objects can be used as the basis for reports (e.g., Opportunity, Account, Contact, or custom objects).

ParametersJSON Schema
NameRequiredDescriptionDefault
searchPatternNoOptional search pattern to filter report types by name

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description implies a read-only listing operation, which is appropriate. No annotations are provided, so the description carries the burden; it is minimal but accurate.

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 concise with two sentences, front-loading the action and providing brief context. No unnecessary words.

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 simple list tool with one optional parameter and no output schema, the description adequately covers the purpose and basic context. It could mention output format but is not required.

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 has 100% coverage for the single parameter 'searchPattern', which is described as optional and for filtering by name. The description adds no extra semantic value beyond the schema.

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 lists available report types and explains what report types are. However, it does not explicitly differentiate from sibling tools like 'salesforce_describe_report_type' or 'salesforce_list_reports'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives, nor any prerequisites or context for decision-making.

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.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses that the tool validates user existence and mentions that if logLevel is not specified for 'enable', the tool will ask for clarification. However, it does not mention rate limits, authorization requirements, or side effects of operations.

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 brief intro, four examples, and a notes section. It is clear but slightly lengthy; the examples are helpful though they consume space. 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?

With 7 parameters, 3 operations, and no output schema, the description covers operations and parameters well. However, it does not describe the return values for any operation (e.g., what 'retrieve' returns) nor error handling. This leaves the agent without full context on expected output.

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?

Schema coverage is 100%, so the schema already documents all 7 parameters. The description adds value through examples, notes on defaults, and operational context (e.g., logLevel optionality, expirationTime default). This enhances understanding 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 'Manage debug logs for Salesforce users - enable, disable, or retrieve logs,' which is a specific verb+resource combination. It distinguishes this tool from sibling tools like salesforce_query_records or salesforce_dml_records by focusing solely on debug log management.

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 examples and notes on required parameters and defaults, but does not explicitly state when to use this tool versus alternatives. It implies usage through the three operations, but lacks explicit 'when not to use' or comparisons to siblings.

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?

No annotations are provided, so the description carries full burden. It mentions automatic FLS granting but does not disclose side effects of updates (e.g., type changes may be restricted) or error scenarios. Behavioral details are moderately covered.

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 concise, uses bullet points and examples effectively, and front-loads the key action. Every sentence adds value without redundancy.

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?

No output schema is provided, yet the description does not mention what the tool returns (e.g., success message or field ID). Given 18 parameters and no output details, the description is incomplete.

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?

Schema coverage is 100%, so baseline is 3. The description adds value by grouping parameters (field types, properties, relationships) and explaining the grantAccessTo default, which enriches meaning 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 the tool creates or modifies custom fields on any Salesforce object, lists supported field types and properties, and provides examples. It distinguishes from sibling tools like salesforce_manage_object by focusing on fields.

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?

While the description explains what the tool does, it does not explicitly state when to use it versus alternatives like salesforce_manage_field_permissions or salesforce_describe_object. No exclusions or contextual guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

salesforce_manage_field_permissionsA

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

A3.8/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 full burden. It discloses that the tool can grant/revoke/view field permissions, implying mutation for grant/revoke operations. However, it does not detail required permissions, reversibility, or side effects (e.g., profile changes may affect multiple users).

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 concise: 4 sentences plus a bullet list and examples. It avoids unnecessary detail, is well-structured, and front-loads the core purpose. Every sentence 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 moderate complexity (6 params, 3 required, no output schema), the description covers operations and examples. It lacks context on error conditions, prerequisites (e.g., Salesforce permissions to modify FLS), or limitations (e.g., profile name case sensitivity). However, the provided examples and schema make it fairly usable.

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% coverage, with descriptions for all 6 parameters. The description adds minimal semantics beyond the schema—only listing example scenarios. Since the schema already documents parameter meaning, the description adds value mainly through examples but not essential additional context.

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 manages Field Level Security (Field Permissions) for custom/standard fields, listing specific operations (grant, revoke, view, bulk update). It distinguishes from sibling tools like salesforce_manage_field, which handles field creation/deletion, by focusing on permissions.

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., granting access, viewing permissions) but does not explicitly state when to use this tool versus alternatives like salesforce_manage_field for field metadata changes. No 'when-not' guidance or alternative tool names are provided.

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.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries full burden. It states that changes affect metadata and require permissions, but does not disclose side effects, consequences of updates (overwrite vs additive), error behavior, or rate limits. Minimal behavioral insight beyond the obvious.

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 brief, using bullet points and an example, and front-loads the main action. It is efficient, though could be slightly more structured (e.g., separating create and update clearly).

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?

The tool has 9 parameters and no output schema. The description does not explain what the tool returns (e.g., success message, error handling) or provide deeper context about metadata operations beyond permissions. Lacks completeness for a complex metadata tool.

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, so baseline is 3. The description groups parameters under create/update lists but adds little new meaning beyond the schema, e.g., mentioning 'fields, relationships, and settings' without elaboration.

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 creates or modifies custom objects in Salesforce, listing specific operations (create, update) and providing examples. This distinguishes it from sibling tools like salesforce_manage_field.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes a note about metadata changes and permissions, but no explicit guidance on when to use this tool versus alternatives like salesforce_manage_field or when not to use it. No exclusions or context for 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.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully cover behavioral traits. It implies a read operation but does not explicitly state that it only queries and does not modify data, nor does it mention permissions or side effects. This is adequate but leaves ambiguity for the agent.

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 front-loaded with purpose and a key note, then provides practical examples without unnecessary fluff. It is slightly long due to examples, but each example earns its place by clarifying complex relationship queries.

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 no output schema, the description adequately explains query construction, including relationship patterns. It covers essential aspects like WHERE on related objects and ORDER BY. However, it could mention default limits or error handling for completeness.

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?

Schema coverage is 100%, so baseline is 3. The description adds value by providing detailed examples and notes on relationship field syntax (dot notation, subqueries, custom relationship fields ending in '__r'), which clarify parameter usage beyond the schema definitions.

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 'Query records from any Salesforce object using SOQL, including relationship queries,' specifying the verb, resource, and capability. It distinguishes itself from a sibling tool (salesforce_aggregate_query) by noting when to use the alternative for aggregate queries.

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 explicitly tells when to use salesforce_aggregate_query instead (for GROUP BY, aggregates, HAVING). However, it lacks guidance on when to prefer other sibling tools like salesforce_search_objects or salesforce_describe_object, which could lead to confusion in broader context.

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.4/5.0
Behavior4/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 providing className returns the full body, while namePattern returns only names, and includeMetadata adds extra info. No contradictions.

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 examples and a notes section. It is detailed but slightly long; could be more concise without losing key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description fully explains what is returned in each scenario. It covers all three parameters and their combinations, providing complete context for a read tool.

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?

Schema description coverage is 100%, so baseline is 3. The description adds value with examples and notes, e.g., wildcard support and the effect of combining parameters.

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 'Read Apex classes from Salesforce.' and provides examples that differentiate it from siblings like salesforce_read_apex_trigger and salesforce_write_apex.

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 notes clearly explain when to use className verses namePattern, and the effect of includeMetadata. However, it does not explicitly mention when not to use the tool or provide direct comparisons to siblings.

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?

The description explains that reading a specific trigger returns the full body, while pattern matching returns only names. It mentions metadata inclusion. No annotations are provided, but the description covers the tool's read-only nature and key behaviors. It could mention error handling or authentication requirements.

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-organized with a main statement, numbered examples, and bullet-point notes. Every sentence serves a purpose, and the structure aids readability. No unnecessary content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read tool with 3 optional parameters and no output schema, the description fully explains the different return behaviors based on input combinations. It covers all parameters and their interactions, making the tool self-explanatory for selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage, the description adds significant value by explaining the interplay between parameters: e.g., when triggerName is provided, full body is returned; when namePattern is provided, only names are returned. It also clarifies the effect of includeMetadata and wildcard support.

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 it reads Apex triggers from Salesforce, with specific options for reading by name, pattern, or listing all. It distinguishes from siblings like salesforce_read_apex (general Apex) and salesforce_write_apex_trigger (write operation).

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 usage patterns with examples showing when to use triggerName vs namePattern vs includeMetadata. However, it does not compare to alternative tools like salesforce_query_records or indicate when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

salesforce_read_reportA

Read detailed metadata for a Salesforce report including columns, filters, groupings, and chart configuration. Use this to inspect existing reports and understand their structure.

ParametersJSON Schema
NameRequiredDescriptionDefault
reportNameYesFull name of the report (e.g., "unfiled$public/Report_Name" or just "Report_Name")

TDQS

A3.6/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 for behavioral disclosure. It describes a read-only operation but lacks details on authentication, rate limits, error handling, or what happens if the report does not exist. This is minimal transparency.

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?

Two sentences, front-loaded with the main action and purpose. Every sentence adds value with no redundant or wasted words.

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 has one parameter, no output schema, and no annotations, the description covers the purpose and what metadata it retrieves. It is reasonably complete for a simple read tool, though it could briefly mention the return format.

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 single parameter 'reportName' has full schema description coverage (100%), providing an example format. The description does not add additional meaning beyond what the schema already provides, so baseline 3 is appropriate.

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 the resource 'detailed metadata for a Salesforce report', listing specific details like columns, filters, groupings, and chart configuration. This distinguishes it from sibling tools like salesforce_list_reports (which lists report names) and salesforce_create_report (which creates reports).

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 says 'Use this to inspect existing reports and understand their structure', implying when to use it, but does not explicitly state when not to use it or provide alternatives among sibling tools. Guidance is implied but not explicit.

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

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but the description details SOSL features (wildcards, WITH clauses, updateable/viewable). It doesn't mention pagination or error handling, but the information is substantial.

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?

Well-structured with sections, but the two large examples could be condensed. The main purpose is front-loaded.

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?

Missing output schema and no explanation of return values. The tool's complex parameter structure is well-documented, but agents may need to infer the response format from examples.

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?

Schema coverage is 100%, and the description adds value through examples illustrating parameter usage (e.g., where, orderBy, withClauses). The notes on wildcards and WITH clause types provide additional 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 'Search across multiple Salesforce objects using SOSL', with examples showing multi-object search. This distinguishes it from sibling tools like salesforce_query_records (SOQL) and salesforce_search_objects (likely single-object SOSL).

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?

Examples show usage but no explicit guidance on when to use this tool vs alternatives like salesforce_search_objects. No criteria for when not to use it.

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.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description should disclose all behavioral traits. It mentions the search behavior (name pattern matching) and examples, but lacks information on read-only nature, authentication requirements, or any side effects. The tool likely only reads object metadata, but this is not stated.

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?

Two concise sentences: the first defines the purpose, the second provides examples. No superfluous words, and the key information is front-loaded.

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?

The tool is simple with one parameter and no output schema. The description sufficiently explains its functionality for an AI agent to decide when to use it. However, it could mention the output format (e.g., list of object names) for completeness.

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 covers the single parameter fully (100% coverage). The description enhances it with illustrative examples showing partial matching and wildcard-like behavior, adding value beyond the schema's description.

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 searches for Salesforce objects by name pattern, providing concrete examples ('Account' finds Account and AccountHistory). It distinguishes itself from sibling tools that deal with records or data queries.

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 finding object names, but does not explicitly state when to use this tool over siblings like salesforce_search_all or salesforce_describe_object. The examples give context, but no direct guidance.

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

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 full burden. It mentions that className in body must match the parameter and status is returned, but it omits critical behavioral traits such as permissions required, potential overwriting, rate limits, or API version implications. This leaves gaps for an agent.

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 examples and bullet-point notes, making it easy to parse. However, the examples are verbose; a more concise summary could suffice, but the structure aids understanding.

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?

There is no output schema, so the description should detail return values. It only says 'Status information is returned', which is vague. Given the tool's complexity (4 parameters, write operation), more context on response format, error handling, or limits 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?

Schema description coverage is 100%, so baseline is 3. The description adds value by showing usage examples, clarifying that apiVersion is optional for create, and noting that className in body must match. This extends 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 explicitly states 'Create or update Apex classes in Salesforce', using a specific verb and resource. This clearly distinguishes it from sibling tools like salesforce_write_apex_trigger (writes triggers) and salesforce_read_apex (reads).

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 examples and notes on required fields (operation, className, body) and optional apiVersion. However, it does not explicitly guide when to use this tool versus alternatives like salesforce_write_apex_trigger or salesforce_read_apex, which would improve clarity.

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?

No annotations are provided, so the description carries full burden. It discloses that operations are 'create' or 'update' and notes required parameter matches, but does not detail potential side effects (e.g., overwriting existing triggers), permission needs, or error conditions. The mention of 'status information' is vague.

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 concise and well-structured, starting with a clear purpose statement, followed by two detailed examples, and a bulleted list of important notes. No extraneous information is included, and every sentence contributes 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 has 5 parameters, no output schema, and no annotations, the description covers essential aspects: operation types, required/optional fields, and validation rules. However, it lacks details about the response format or error handling, which would be helpful for an action that modifies system state.

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?

Schema coverage is 100%, so baseline is 3. The description adds value through examples and notes clarifying operational constraints (e.g., 'For 'create' operations, triggerName, objectName, and body are required') and defaults (e.g., 'apiVersion is optional for 'create' (defaults to the latest version)'), which go beyond the schema's field 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 explicitly states 'Create or update Apex triggers in Salesforce,' clearly identifying the verb (create/update) and resource (Apex triggers). Among sibling tools like 'salesforce_write_apex' (for classes) and 'salesforce_read_apex_trigger' (for reading), this tool's purpose is distinct and 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 does not provide explicit guidance on when to use this tool vs alternatives. While examples illustrate usage, there is no comparison with siblings like 'salesforce_write_apex' or 'salesforce_read_apex_trigger.' The context is clear only through the tool name and purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose, with descriptions explicitly directing users to the correct tool (e.g., aggregate_query vs query_records). No functional overlap exists.

Naming Consistency5/5

All tools follow the 'salesforce_verb_noun' pattern consistently (e.g., salesforce_create_report, salesforce_manage_field). Naming is predictable and unambiguous.

Tool Count4/5

With 21 tools, the set is slightly above the ideal range but still well-scoped for Salesforce's broad domain. Each tool serves a distinct, necessary function.

Completeness5/5

The set covers virtually all core Salesforce operations: query (standard and aggregate), DML, metadata management (objects, fields, reports, Apex), search, and debugging. Only minor niche features (e.g., bulk operations) are absent.

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
    A
    quality
    D
    maintenance
    Enables natural language interactions with Salesforce data and metadata, supporting queries, data manipulation, custom object/field management, Apex code operations, and debug logging across multiple authentication methods.
    15
    1,965
    MIT
  • 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
    A
    quality
    A
    maintenance
    Enables AI-powered interaction with Salesforce, providing opportunity intelligence, engagement analysis, business case generation, and standard CRUD operations through natural language.
    18
    60
    5
    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/boejucci/mcp-server-salesforce'

If you have feedback or need assistance with the MCP directory API, please join our Discord server