Skip to main content
Glama
tsmztech

Salesforce MCP Server

by tsmztech

Servidor MCP de Salesforce

Una implementación de servidor MCP (Protocolo de Contexto de Modelo) que integra Claude con Salesforce, lo que permite interacciones en lenguaje natural con sus datos y metadatos de Salesforce. Este servidor permite a Claude consultar, modificar y gestionar sus objetos y registros de Salesforce con lenguaje cotidiano.

Características

  • Gestión de objetos y campos : cree y modifique objetos y campos personalizados utilizando lenguaje natural

  • Búsqueda de objetos inteligentes : busque objetos de Salesforce mediante coincidencias de nombres parciales

  • Información detallada del esquema : obtenga detalles completos de campos y relaciones para cualquier objeto

  • Consultas de datos flexibles : consulte registros con soporte de relaciones y filtros complejos

  • Manipulación de datos : inserte, actualice, elimine y actualice registros con facilidad

  • Búsqueda entre objetos : busque entre varios objetos mediante SOSL

  • Administración de código Apex : lea, cree y actualice clases y activadores de Apex

  • Manejo intuitivo de errores : comentarios claros con detalles de errores específicos de Salesforce

Related MCP server: Salesforce MCP Server

Instalación

npm install -g @tsmztech/mcp-server-salesforce

Herramientas

objetos de búsqueda de salesforce

Búsqueda de objetos estándar y personalizados:

  • Búsqueda por coincidencias parciales de nombre

  • Encuentra objetos estándar y personalizados

  • Ejemplo: "Buscar objetos relacionados con Cuenta" encontrará Cuenta, Historial de cuenta, etc.

objeto de descripción de salesforce

Obtenga información detallada del esquema del objeto:

  • Definiciones y propiedades de los campos

  • Detalles de la relación

  • Valores de la lista de selección

  • Ejemplo: "Muéstrame todos los campos del objeto Cuenta"

registros de consulta de salesforce

Consultar registros con soporte de relaciones:

  • Relaciones entre padres e hijos

  • Relaciones entre padres e hijos

  • Condiciones WHERE complejas

  • Ejemplo: "Obtener todas las cuentas con sus contactos relacionados"

registros dml de salesforce

Realizar operaciones de datos:

  • Insertar nuevos registros

  • Actualizar registros existentes

  • Eliminar registros

  • Inserción mediante identificaciones externas

  • Ejemplo: "Actualizar el estado de varias cuentas"

objeto de gestión de salesforce

Crear y modificar objetos personalizados:

  • Crear nuevos objetos personalizados

  • Actualizar las propiedades del objeto

  • Configurar los ajustes de uso compartido

  • Ejemplo: "Crear un objeto de comentarios del cliente"

campo de gestión de salesforce

Administrar campos de objeto:

  • Agregar nuevos campos personalizados

  • Modificar propiedades de campo

  • Crear relaciones

  • Ejemplo: "Agregar un campo de lista de selección de calificación a la cuenta"

búsqueda_todo_en_salesforce

Buscar en múltiples objetos:

  • Búsqueda basada en SOSL

  • Compatibilidad con múltiples objetos

  • Fragmentos de campo

  • Ejemplo: "Buscar 'nube' en Cuentas y Oportunidades"

Salesforce_read_apex

Leer clases de Apex:

  • Obtenga el código fuente completo de clases específicas

  • Lista de clases que coinciden con patrones de nombres

  • Ver metadatos de la clase (versión de API, estado, etc.)

  • Compatibilidad con comodines (* y ?) en patrones de nombres

  • Ejemplo: "Muéstrame la clase AccountController" o "Buscar todas las clases que coincidan con Account Cont "

salesforce_write_apex

Crear y actualizar clases de Apex:

  • Crear nuevas clases de Apex

  • Actualizar las implementaciones de clases existentes

  • Especificar versiones de API

  • Ejemplo: "Crear una nueva clase Apex para gestionar las operaciones de la cuenta"

disparador de apex de lectura de salesforce

Leer los activadores de Apex:

  • Obtenga el código fuente completo de activadores específicos

  • Lista de desencadenadores que coinciden con patrones de nombres

  • Ver metadatos del disparador (versión de API, objeto, estado, etc.)

  • Compatibilidad con comodines (* y ?) en patrones de nombres

  • Ejemplo: "Muéstrame el disparador de cuenta" o "Buscar todos los disparadores para el objeto de contacto"

disparador de apex de escritura de salesforce

Crear y actualizar activadores de Apex:

  • Crear nuevos activadores de Apex para objetos específicos

  • Actualizar las implementaciones de activadores existentes

  • Especificar versiones de API y operaciones de eventos

  • Ejemplo: "Crear un nuevo disparador para el objeto Cuenta" o "Actualizar el disparador Cliente potencial"

ejecución anónima de salesforce

Ejecutar código Apex anónimo:

  • Ejecute el código Apex sin crear una clase permanente

  • Ver registros de depuración y resultados de ejecución

  • Útil para operaciones de datos que no son compatibles directamente con otras herramientas

  • Ejemplo: "Ejecutar código Apex para calcular las métricas de la cuenta" o "Ejecutar un script para actualizar los registros relacionados".

registros de depuración de salesforce_manage

Administrar registros de depuración para usuarios de Salesforce:

  • Habilitar registros de depuración para usuarios específicos

  • Deshabilitar configuraciones de registro de depuración activa

  • Recuperar y ver registros de depuración

  • Configurar los niveles de registro (NINGUNO, ERROR, ADVERTENCIA, INFORMACIÓN, DEPURACIÓN, FINO, MÁS FINO, EL MEJOR)

  • Ejemplo: "Habilitar registros de depuración para usuario@ejemplo.com " o "Recuperar registros recientes de un usuario administrador"

Configuración

Autenticación de Salesforce

Puede conectarse a Salesforce utilizando uno de dos métodos de autenticación:

1. Autenticación de nombre de usuario/contraseña (predeterminada)

  1. Configura tus credenciales de Salesforce

  2. Obtenga su token de seguridad (Restablecer desde la configuración de Salesforce)

2. Flujo de credenciales de cliente OAuth 2.0

  1. Crear una aplicación conectada en Salesforce

  2. Habilite la configuración de OAuth y seleccione "Flujo de credenciales del cliente".

  3. Establezca alcances apropiados (normalmente, "api" es suficiente)

  4. Guardar el ID del cliente y el secreto del cliente

  5. Importante : Tenga en cuenta la URL de su instancia (por ejemplo, https://your-domain.my.salesforce.com ), ya que es necesaria para la autenticación.

Uso con Claude Desktop

Añade a tu claude_desktop_config.json :

Para la autenticación de nombre de usuario/contraseña:

{
  "mcpServers": {
    "salesforce": {
      "command": "npx",
      "args": ["-y", "@tsmztech/mcp-server-salesforce"],
      "env": {
        "SALESFORCE_CONNECTION_TYPE": "User_Password",
        "SALESFORCE_USERNAME": "your_username",
        "SALESFORCE_PASSWORD": "your_password",
        "SALESFORCE_TOKEN": "your_security_token",
        "SALESFORCE_INSTANCE_URL": "org_url"        // Optional. Default value: https://login.salesforce.com
      }
    }
  }
}

Para el flujo de credenciales de cliente OAuth 2.0:

{
  "mcpServers": {
    "salesforce": {
      "command": "npx",
      "args": ["-y", "@tsmztech/mcp-server-salesforce"],
      "env": {
        "SALESFORCE_CONNECTION_TYPE": "OAuth_2.0_Client_Credentials",
        "SALESFORCE_CLIENT_ID": "your_client_id",
        "SALESFORCE_CLIENT_SECRET": "your_client_secret",
        "SALESFORCE_INSTANCE_URL": "https://your-domain.my.salesforce.com"  // REQUIRED: Must be your exact Salesforce instance URL
      }
    }
  }
}

Nota : Para el flujo de credenciales de cliente de OAuth 2.0, SALESFORCE_INSTANCE_URL debe ser la URL exacta de su instancia de Salesforce (p. ej., https://your-domain.my.salesforce.com ). El punto final del token se construirá como <instance_url>/services/oauth2/token .

Ejemplo de uso

Buscando objetos

"Find all objects related to Accounts"
"Show me objects that handle customer service"
"What objects are available for order management?"

Obtención de información del esquema

"What fields are available in the Account object?"
"Show me the picklist values for Case Status"
"Describe the relationship fields in Opportunity"

Consulta de registros

"Get all Accounts created this month"
"Show me high-priority Cases with their related Contacts"
"Find all Opportunities over $100k"

Administrar objetos personalizados

"Create a Customer Feedback object"
"Add a Rating field to the Feedback object"
"Update sharing settings for the Service Request object"

Búsqueda entre objetos

"Search for 'cloud' in Accounts and Opportunities"
"Find mentions of 'network issue' in Cases and Knowledge Articles"
"Search for customer name across all relevant objects"

Gestión del código Apex

"Show me all Apex classes with 'Controller' in the name"
"Get the full code for the AccountService class"
"Create a new Apex utility class for handling date operations"
"Update the LeadConverter class to add a new method"

Administración de activadores de Apex

"List all triggers for the Account object"
"Show me the code for the ContactTrigger"
"Create a new trigger for the Opportunity object"
"Update the Case trigger to handle after delete events"

Ejecución de código Apex anónimo

"Execute Apex code to calculate account metrics"
"Run a script to update related records"
"Execute a batch job to process large datasets"

Administrar registros de depuración

"Enable debug logs for user@example.com"
"Retrieve recent logs for an admin user"
"Disable debug logs for a specific user"
"Configure log level to DEBUG for a user"

Desarrollo

Construyendo desde la fuente

# Clone the repository
git clone https://github.com/tsmztech/mcp-server-salesforce.git

# Navigate to directory
cd mcp-server-salesforce

# Install dependencies
npm install

# Build the project
npm run build

Contribuyendo

¡Agradecemos sus contribuciones! No dude en enviar una solicitud de incorporación de cambios.

Licencia

Este proyecto está licenciado bajo la licencia MIT: consulte el archivo de LICENCIA para obtener más detalles.

Problemas y soporte

Si encuentra algún problema o necesita ayuda, informe un problema en el repositorio de GitHub .

Available Tools

15 tools
salesforce_aggregate_queryA
Read-only

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
limitNoMaximum number of grouped results to return
orderByNoORDER BY clause - can only use grouped fields or aggregate functions
objectNameYesAPI name of the object to query
whereClauseNoWHERE clause to filter rows BEFORE grouping (cannot contain aggregate functions)
havingClauseNoHAVING clause to filter results AFTER grouping (use for aggregate conditions)
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

TDQS

A5/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses query behavior, grouping requirements, filtering semantics before and after grouping, supported date functions, and limitations such as OFFSET not being supported. This gives the agent a clear model of how the tool behaves in execution.

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 long but well-structured, front-loaded with purpose and usage distinction, followed by examples and rules. Every section earns its place; there is no filler or redundancy that would distract an agent.

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 complex aggregate-query tool, the description is remarkably complete: it covers supported aggregate functions, date grouping, related-object grouping, HAVING usage, field-aliasing, and key Salesforce-specific restrictions. Without an output schema, the examples and rules still provide enough context to call the tool correctly.

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?

Although the schema already documents all parameters, the description adds substantial semantic value: it maps parameters to concrete examples, explains the selectFields alias format, clarifies when whereClause versus havingClause should be used, and states the relationship between selectFields and groupByFields.

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 states a specific verb and resource: execute SOQL queries with GROUP BY and aggregate functions. It clearly distinguishes itself from salesforce_query_records by noting that regular queries without GROUP BY or aggregates should use the sibling tool instead.

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?

It explicitly says when to use this tool versus salesforce_query_records. It also provides detailed guidance through examples and Important Rules for when to apply WHERE versus HAVING, GROUP BY constraints, ORDER BY constraints, and unsupported OFFSET behavior.

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

salesforce_describe_objectA
Read-only

Get detailed schema metadata including all fields, relationships, and field properties of any Salesforce object. Examples: 'Account' shows all Account fields including custom fields; 'Case' shows all Case fields including relationships to Account, Contact etc.

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

TDQS

A3.9/5.0
Behavior3/5

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

The readOnlyHint annotation already covers the read-only safety profile. The description adds useful context about the returned metadata content (fields, relationships, field properties) but does not disclose behavior such as response size, invalid object handling, or permissions. This is adequate but not rich.

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 core purpose and followed by concrete examples. No filler or redundancy, and every sentence earns its place.

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 simple one-parameter, read-only describe tool, the description is complete: it states what the tool returns, gives valid object examples, and is backed by the readOnlyHint annotation. There is no output schema, but the description sufficiently conveys the expected metadata result.

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 already documents the single objectName parameter with examples at 100% coverage. The description reinforces the parameter with Account/Case examples but adds no new semantic details beyond what the schema provides, so the baseline of 3 applies.

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 uses a specific verb ('Get') and resource ('detailed schema metadata including all fields, relationships, and field properties'). The examples clarify that this is about object structure, not data records, which clearly distinguishes it from query/search/DML siblings.

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 intended use is implied: call this when you need object schema metadata. However, the description does not explicitly say when to choose this over query_records, search_objects, or manage_object, and it provides no exclusions or alternative routing.

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
recordsYesArray of records to process
operationYesType of DML operation to perform
objectNameYesAPI name of the object
externalIdFieldNoExternal ID field name for upsert operations

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of disclosing behavior. It mentions the operations but omits critical traits such as the irreversibility of delete, required permissions, or potential bulk API limits. The lack of any cautionary or side-effect information leaves an agent under-informed.

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: it opens with a clear purpose, lists operations as bullet points, and concludes with practical examples. No unnecessary words or technical jargon are present, making it easily scannable.

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?

While the description includes examples, it omits important usage constraints such as the requirement that delete operations only need the record Id, or that upsert requires an external ID field. Given the tool's multiple modes, an agent would need more context to use it correctly in all scenarios.

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

Parameters3/5

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

The schema description covers 100% of the parameters, and the descriptions are accurate but minimal. The externalIdField parameter is described as 'for upsert operations', which adds a slight clarification, but otherwise the descriptions do not go beyond the schema's own names and types (e.g., 'records' does not specify the required record format).

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 'Perform data manipulation operations on Salesforce records' and enumerates the four specific operations (insert, update, delete, upsert) with examples. This clearly distinguishes it from sibling tools that focus on querying, searching, or managing 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 provides practical examples like 'Insert new Accounts' and 'Update Case status', which hint at usage. However, it does not explicitly contrast this tool with siblings such as salesforce_query_records or salesforce_manage_object, nor does it state when not to use it (e.g., for read-only operations).

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
Behavior5/5

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

No annotations are provided, so the description carries the full disclosure burden. It explains that code runs in an anonymous context and does not persist, that results include compilation/execution success/failure and debug logs, and that user permissions may restrict operations. It also acknowledges the tool can perform data operations or updates, so side effects are not hidden.

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 purpose is front-loaded, and the numbered examples with a notes section make the structure scannable. There is some redundancy between the two fallback notes, but overall the description is appropriately sized for a tool that executes arbitrary code and contains no filler.

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 an arbitrary-code execution tool with no output schema and no annotations, the description covers input requirements, execution context, result categories, permission restrictions, and fallback usage. It could specify exact response fields or warn more strongly about irreversible DML side effects, but the provided information is sufficient for an agent to select and invoke the tool correctly.

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 already covers both parameters at 100%, including the logLevel enum and default. The description adds value through concrete examples showing that apexCode can contain multi-statement blocks, SOQL queries, loops, and debug logging. This gives an agent a clearer sense of what valid inputs look like beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource statement: 'Execute anonymous Apex code in Salesforce.' Examples reinforce that this tool runs ad-hoc Apex rather than reading or writing stored Apex artifacts, which distinguishes it from siblings like salesforce_read_apex 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 state when to use this tool: for data operations or updates when no other specific tools are available, and for queries/updates not directly supported by other tools. It does not explicitly name sibling alternatives like salesforce_query_records or salesforce_dml_records, but the fallback condition is clear.

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
limitNoMaximum number of logs to retrieve (optional, defaults to 10)
logIdNoID of a specific log to retrieve (optional)
logLevelNoLog level for debug logs (required for 'enable' operation)
usernameYesUsername of the Salesforce user
operationYesOperation to perform on debug logs
includeBodyNoWhether to include the full log content (optional, defaults to false)
expirationTimeNoMinutes until the debug log configuration expires (optional, defaults to 30)

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden and does provide useful details: defaults, user validation, log-level enumeration, and a clarification behavior. However, it contains an internal inconsistency—logLevel is described as optional defaulting to DEBUG, but a later note says the tool will ask for clarification if it is not specified, and the schema says it is required for enable. It also does not describe side effects of enabling/disabling beyond the operation names.

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 longer than average but well-structured: a summary line, concrete examples, and a notes section. Some redundancy exists between the examples and notes, but every section contributes operational value and the main purpose 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 description covers all seven parameters, operation modes, defaults, log-levels, validation behavior, and optional flags. It does not describe the exact return structure of retrieve or any required permissions, but it is reasonably complete for invoking the tool successfully.

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 documentation covers 100% of parameters, so the baseline is 3. The description adds helpful defaults, examples, and conditional dependencies, but the contradictory statements about logLevel (optional/default vs. required/ask-for-clarification) reduce its reliability for parameter usage.

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 opening sentence explicitly names the resource ('debug logs for Salesforce users') and the action (manage), then enumerates the three concrete operations: enable, disable, retrieve. This makes it clearly distinguishable from all sibling tools, none of which mention debug logs.

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?

Four numbered examples show precisely which parameters are relevant for each operation, and the notes clarify defaults and constraints. There is no explicit 'when not to use' statement, but no sibling tool is a plausible alternative for debug-log management, so selection guidance is strong.

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

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations supplied, the description must carry behavioral disclosure. It usefully discloses a non-obvious side effect: 'Automatically grants Field Level Security to System Administrator (or specified profiles).' It does not disclose prerequisites, error behavior, or whether updates to existing fields have destructive or irreversible consequences, leaving gaps for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: a clear one-sentence purpose, bullet summary of key capabilities, examples, and a note about access defaults. It is economical and readable, though the bullet list overlaps with schema content slightly.

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

Completeness3/5

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

For a complex 18-parameter mutation tool with no output schema and no annotations, this description supplies a solid high-level orientation and flags FLS behavior, but it omits return/result information, permission prerequisites, and conditional parameter requirements (e.g., referenceTo needed for Lookup/MasterDetail). It is adequate for selection but not fully complete for safe invocation in edge cases.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 18 parameters. The description adds useful conceptual grouping and examples, and restates the grantAccessTo default, but it does not add meaningfully new parameter semantics beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action and resource: 'Create new custom fields or modify existing fields on any Salesforce object.' Concrete examples ('Add Rating__c picklist to Account') anchor the purpose and make it easy to distinguish from sibling tools like salesforce_manage_object or salesforce_manage_field_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 clearly implies when to use the tool: whenever custom fields need to be created or modified, and it gives representative examples. However, it does not explicitly contrast this tool with closely related siblings, such as salesforce_manage_object for creating objects or salesforce_manage_field_permissions for permission-only workflows, so an agent gets no explicit when-not-to-use guidance.

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

salesforce_manage_field_permissionsB

Manage Field Level Security (Field Permissions) for custom and standard fields.

  • Grant or revoke read/edit access to fields for specific profiles or permission sets

  • View current field permissions

  • Bulk update permissions for multiple profiles

Examples:

  1. Grant System Administrator access to a field

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

  3. Check which profiles have access to a field

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

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions grant/revoke/view and bulk updates, but does not disclose consequences of the default editable/readable values, whether operations are reversible, required permissions, or what happens if profileNames is omitted for grant/revoke. For a mutating tool, this is a significant transparency gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized with a clear opening, bulleted capabilities, and concrete examples. It is slightly repetitive in that the examples restate the bullets, but overall it is compact and front-loaded with the most important information.

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 description mentions permission sets, but the input schema only supports profileNames, creating a misleading gap. It also does not clarify operation-specific requirements, such as whether profileNames is needed for view or what defaults apply when readable/editable are omitted. With no output schema and no annotations, an agent lacks enough context to call this tool reliably in all cases.

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% parameter description coverage, so the baseline is 3. The description adds some practical context through examples, such as using 'System Administrator' and 'read-only access', but it does not explain relationships between operation, readable, editable, and profileNames beyond what the schema already provides.

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 identifies the tool as managing Field Level Security for custom and standard fields, and enumerates the specific operations: grant, revoke, view, and bulk update. It distinguishes this from sibling tools like salesforce_manage_field by focusing on profile/permission-set access rather than field definitions, though it does not explicitly name an alternative.

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 bulleted capabilities and examples imply when to use the tool: granting access, giving read-only access, and checking access. However, there is no explicit guidance on when not to use it or how to choose between this and the sibling salesforce_manage_field tool, leaving some ambiguity for an agent.

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

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral disclosure burden. It does disclose that 'Changes affect metadata and require proper permissions,' which is valuable. Still, it omits other relevant behaviors such as side effects of updating existing objects, irreversibility, or what happens on partial failure, leaving the mutation profile only partially transparent.

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 compact, front-loaded, and uses bullets and examples effectively. The structure makes the two operation modes immediately visible. The only questionable element is the unsupported 'fields, relationships, and settings' phrase; otherwise the description is efficient and well organized.

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

Completeness2/5

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

For a metadata mutation tool with no annotations and no output schema, the description should explain what the agent should expect after a successful call. It provides a permission caveat and examples, but it does not describe return values, failure modes, or update semantics, and it inaccurately hints at field/relationship creation. This leaves the tool incompletely specified for reliable invocation.

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

Parameters2/5

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

All 9 parameters have schema descriptions, so the baseline is 3. However, the description's claim that creates involve 'fields, relationships, and settings' is not supported by the input schema, which has no field or relationship parameters. This misleading statement detracts from the schema's otherwise clear parameter documentation, so the score is lowered.

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 a specific verb and resource: 'Create new custom objects or modify existing ones in Salesforce.' The bullets and examples clarify the create/update operations, and the note 'Changes affect metadata' distinguishes this from data operations like salesforce_dml_records. It is easy for an agent to identify this as the metadata object management tool.

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 context for use is implied: create or update custom object metadata. However, the description never explicitly contrasts with sibling tools like salesforce_manage_field or salesforce_dml_records, nor does it provide 'when not to use' guidance. The usage scenario is clear but exclusions and alternatives are left to inference.

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

salesforce_query_recordsA
Read-only

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
limitNoMaximum number of records to return
fieldsYesList of fields to retrieve, including relationship fields
orderByNoORDER BY clause, can include fields from related objects
objectNameYesAPI name of the object to query
whereClauseNoWHERE clause, can include conditions on related objects

TDQS

A4.5/5.0
Behavior4/5

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

The annotation readOnlyHint: true already indicates the tool is non-destructive. The description adds no contradictory side effects and provides context about querying relationships. Since the annotation covers the main behavioral trait, a score of 4 is appropriate.

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 main statement, a note about alternatives, and examples. While it is somewhat long, the content is relevant and directly supports usage. No fluff is present.

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?

The description, combined with the schema and examples, provides complete guidance for querying records including complex relationships. The absence of an output schema is not a gap for this tool as the query results are standard.

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?

All 5 parameters are described in the schema with 100% coverage. The description further clarifies complex usage of fields, whereClause, and orderBy through examples and notes about relationship fields, enhancing 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 the tool's function: 'Query records from any Salesforce object using SOQL, including relationship queries.' It is specific and distinct from sibling tools like salesforce_aggregate_query which handles aggregation.

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 a clear usage guideline by noting when to use salesforce_aggregate_query instead (for GROUP BY, aggregates, HAVING). It also gives examples for relationship queries. However, it does not explicitly contrast with search tools like salesforce_search_objects, but the intended use is implicit.

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

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

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

Annotations only declare readOnlyHint=true. The description adds substantial behavioral detail: namePattern results exclude class bodies, includeMetadata adds API version/length/last modified date, wildcard syntax is supported, and the no-argument behavior lists all class names. This goes well beyond what the annotation provides.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear summary, four relevant examples, and grouped notes. Information is front-loaded and each line contributes to understanding parameter behavior. Despite its length, it remains focused and easy to scan.

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 description covers all main input modes, wildcard behavior, metadata enrichment, and the default listing case. The only notable ambiguity is what happens when both className and namePattern are provided together, and whether includeMetadata also applies to exact className lookups. Overall it is highly complete for a read-only tool with no output schema.

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?

The input schema already describes all three parameters, but the description adds meaningful semantics: how className and namePattern behave differently, how includeMetadata changes the result, default behavior when neither is provided, and concrete wildcard syntax with examples. This adds clear value 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 opens with a specific verb and resource: 'Read Apex classes from Salesforce.' This clearly distinguishes the tool from siblings like salesforce_write_apex and salesforce_read_apex_trigger, which target different operations or resources.

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 give explicit usage conditions: className returns a full body, namePattern returns matching class names without bodies, includeMetadata adds metadata, and neither parameter lists all classes. It does not explicitly name alternatives or state when not to use this tool, but the usage context is clearly conveyed.

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

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
namePatternNoPattern to match Apex trigger names (supports wildcards * and ?)
triggerNameNoName of a specific Apex trigger to read
includeMetadataNoWhether to include metadata about the Apex triggers

TDQS

A4.7/5.0
Behavior5/5

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

The readOnlyHint annotation already signals a safe read operation, but the description goes far beyond that by explaining return behavior differences: triggerName returns the full body, namePattern returns names without body, includeMetadata adds extra fields, and wildcards are supported. This is exactly the kind of behavioral context an agent needs and is not present in the annotations.

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 one-line summary, numbered examples, and bulleted notes. It is slightly longer than strictly necessary, but every section contributes useful context and the front-loaded summary ensures quick understanding. It earns a 4, not a 5, due to some redundancy between the examples and notes.

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?

All relevant operational details are covered: the effect of each parameter, the default behavior when neither parameter is given, wildcard syntax, and metadata options. There is no output schema, so the description appropriately clarifies what the tool returns (full body vs. names vs. metadata). Nothing an agent needs to call this correctly is missing.

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?

Even though schema coverage is 100%, the description enriches the parameters with relational semantics: the mutual interaction between triggerName and namePattern, the optionality of includeMetadata, and the wildcard behavior. The examples concretely map JSON inputs to outcomes, adding value beyond the plain schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource pair: 'Read Apex triggers from Salesforce.' This clearly distinguishes it from siblings like salesforce_write_apex_trigger and salesforce_read_apex, and the examples reinforce the resource being acted on. The tool's purpose is unambiguous.

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 gives clear conditional guidance for parameter combinations (when triggerName is provided, when namePattern is provided, when neither is provided), which effectively tells an agent how to invoke the tool for different intents. However, it does not explicitly mention when to choose this tool over sibling tools, so it stops short of a 5.

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

salesforce_search_allA
Read-only

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
objectsYesList of objects to search and their return fields
searchInNoWhich fields to search in
viewableNoReturn only viewable records
searchTermYesText to search for (supports wildcards * and ?)
updateableNoReturn only updateable records
withClausesNoAdditional WITH clauses for the search

TDQS

A3.9/5.0
Behavior4/5

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

With only readOnlyHint=true in annotations, the description carries meaningful behavioral detail: wildcard support, per-object clauses, WITH clause options, and updateable/viewable access filtering. It does not describe return format or error behavior, but the added functional context goes well beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a clear purpose sentence, followed by well-organized examples and notes. Despite its length, every section carries useful information for invoking a complex tool, and there is no fluff or redundancy.

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 complex with six parameters, nested objects, and enums, but the description plus 100% schema coverage covers all invocation aspects thoroughly. It lacks an explicit output contract and sibling routing guidance, but the detailed examples make it nearly complete for correct use.

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 already 100%, so the baseline is 3. The description adds value with concrete request examples and notes that clarify wildcard syntax, per-object WHERE/ORDER BY/LIMIT usage, and WITH clause semantics, going beyond the terse schema descriptions.

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 operation ('Search'), the resource ('multiple Salesforce objects'), and the mechanism (SOSL), which is more specific than the tool name. It does not explicitly differentiate from sibling tools like salesforce_search_objects, but the multi-object SOSL focus is evident.

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 examples and notes imply that this tool is for cross-object SOSL search, but there is no explicit guidance on when to choose it over salesforce_query_records or salesforce_search_objects. No exclusions or alternative conditions are stated, so the agent must infer usage from context.

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

salesforce_search_objectsA
Read-only

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

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

Annotations only declare readOnlyHint, so the description carries the behavioral disclosure burden. It adds meaningful detail about partial-pattern matching and inclusion of custom objects, helping an agent predict that a search may return multiple related object definitions.

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 deliver the core operation first, followed by concrete illustrative examples. There is no filler, repetition of schema fields, or unnecessary detail.

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 single-parameter read-only search tool with no output schema, the description sufficiently explains scope and matching behavior to support correct invocation. It could be slightly stronger by describing the return shape, but that is not essential here.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline of 3 applies. The tool description reinforces pattern-matching behavior with examples, but the parameter meaning is already fully conveyed by 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?

States a specific verb ('Search'), a specific resource ('Salesforce standard and custom objects'), and a matching criterion ('by name pattern'). The examples make it clear this returns object definitions rather than records, distinguishing it from salesforce_search_all and salesforce_describe_object.

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 explains what the tool does but gives no guidance on when to use it versus alternatives such as salesforce_search_all or salesforce_describe_object. There are no explicit conditions, exclusions, or recommended usage contexts.

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
bodyYesFull body of the Apex class
classNameYesName of the Apex class to create or update
operationYesWhether to create a new class or update an existing one
apiVersionNoAPI version for the Apex class (e.g., '58.0')

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral transparency burden. It explains the create/update operations, required inputs, apiVersion default behavior, the className/body matching requirement, and that status information is returned. However, it does not disclose overwrite semantics for updates, error cases, or permission requirements, so it falls short of full 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 well-structured with a summary, two concrete examples, and bullet notes. It is slightly redundant in repeating that className and body are required for both create and update, but overall every section earns its place and the examples are valuable.

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 moderate-complexity write tool with no output schema, the description provides enough context to call it correctly: operation mode, required parameters, optional apiVersion, body constraints, and a note on returned status. The main gap is lack of detail on failure/error behavior and what the status information contains.

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?

Although the schema already documents all parameters, the description adds meaningful semantics beyond it: concrete JSON examples, the default for apiVersion, the requirement that className in the body must match the className parameter, and validation rules for create vs update operations. This substantially helps an agent construct correct calls.

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 opens with a specific verb+resource pair: 'Create or update Apex classes in Salesforce.' This clearly distinguishes it from sibling tools like salesforce_read_apex and salesforce_write_apex_trigger, which are for reading classes or writing triggers instead.

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 makes the intended use explicit: creating or updating Apex classes. It does not explicitly name alternatives or state when not to use the tool, but the class-vs-trigger and read-vs-write distinctions in the sibling list make the context clear enough for correct selection.

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
bodyYesFull body of the Apex trigger
operationYesWhether to create a new trigger or update an existing one
apiVersionNoAPI version for the Apex trigger (e.g., '58.0')
objectNameNoName of the Salesforce object the trigger is for (required for 'create')
triggerNameYesName of the Apex trigger to create or update

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It mentions that status information is returned after successful operations but does not detail failure modes, side effects (e.g., overwriting on update), permission requirements, or idempotency behavior. Some important behavioral aspects are left implicit.

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 moderately long but well-organized with examples and bullet-point notes. Every section contributes useful information; the examples are particularly helpful for understanding the expected input format. No redundancy or fluff.

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?

While the description covers input semantics and mentions status output, it lacks details about the output structure, error handling, and edge cases (e.g., updating a non-existent trigger). Given the absence of an output schema, a bit more context on expected results would improve completeness.

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?

The input schema provides descriptions for all parameters, and the notes add critical context about required fields per operation, defaulting of apiVersion, and validation rules. This fully clarifies the meaning and usage of each parameter.

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 that the tool creates or updates Apex triggers in Salesforce, which is a specific resource type. It distinguishes itself from siblings by focusing on 'Apex triggers' rather than other objects like classes or 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 notes provide explicit instructions on when to use 'create' vs 'update', required vs optional parameters, and consistency constraints between body and parameters. However, it does not explicitly mention how this tool compares to similar siblings like salesforce_write_apex, though the resource type is clearly different.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv0.0.7
    • Changedsalesforce_aggregate_query4 fields changed
      • removedInput schema / properties / havingClause / optional
        Removed value: -true
      • removedInput schema / properties / limit / optional
        Removed value: -true
      • removedInput schema / properties / orderBy / optional
        Removed value: -true
      • removedInput schema / properties / whereClause / optional
        Removed value: -true
    • Changedsalesforce_dml_records1 field changed
      • removedInput schema / properties / externalIdField / optional
        Removed value: -true
    • Changedsalesforce_manage_field16 fields changed
      • removedInput schema / properties / deleteConstraint / optional
        Removed value: -true
      • removedInput schema / properties / description / optional
        Removed value: -true
      • removedInput schema / properties / externalId / optional
        Removed value: -true
      • removedInput schema / properties / grantAccessTo / optional
        Removed value: -true
      • removedInput schema / properties / label / optional
        Removed value: -true
      • removedInput schema / properties / length / optional
        Removed value: -true
      • removedInput schema / properties / picklistValues / items / properties / isDefault / optional
        Removed value: -true
      • removedInput schema / properties / picklistValues / optional
        Removed value: -true
      • removedInput schema / properties / precision / optional
        Removed value: -true
      • removedInput schema / properties / referenceTo / optional
        Removed value: -true
      • removedInput schema / properties / relationshipLabel / optional
        Removed value: -true
      • removedInput schema / properties / relationshipName / optional
        Removed value: -true
      • removedInput schema / properties / required / optional
        Removed value: -true
      • removedInput schema / properties / scale / optional
        Removed value: -true
      • removedInput schema / properties / type / optional
        Removed value: -true
      • removedInput schema / properties / unique / optional
        Removed value: -true
    • Changedsalesforce_manage_field_permissions3 fields changed
      • removedInput schema / properties / editable / optional
        Removed value: -true
      • removedInput schema / properties / profileNames / optional
        Removed value: -true
      • removedInput schema / properties / readable / optional
        Removed value: -true
    • Changedsalesforce_manage_object5 fields changed
      • removedInput schema / properties / description / optional
        Removed value: -true
      • removedInput schema / properties / nameFieldFormat / optional
        Removed value: -true
      • removedInput schema / properties / nameFieldLabel / optional
        Removed value: -true
      • removedInput schema / properties / nameFieldType / optional
        Removed value: -true
      • removedInput schema / properties / sharingModel / optional
        Removed value: -true
    • Changedsalesforce_query_records3 fields changed
      • removedInput schema / properties / limit / optional
        Removed value: -true
      • removedInput schema / properties / orderBy / optional
        Removed value: -true
      • removedInput schema / properties / whereClause / optional
        Removed value: -true
    • Changedsalesforce_search_all9 fields changed
      • removedInput schema / properties / objects / items / properties / limit / optional
        Removed value: -true
      • removedInput schema / properties / objects / items / properties / orderBy / optional
        Removed value: -true
      • removedInput schema / properties / objects / items / properties / where / optional
        Removed value: -true
      • removedInput schema / properties / searchIn / optional
        Removed value: -true
      • removedInput schema / properties / updateable / optional
        Removed value: -true
      • removedInput schema / properties / viewable / optional
        Removed value: -true
      • removedInput schema / properties / withClauses / items / properties / fields / optional
        Removed value: -true
      • removedInput schema / properties / withClauses / items / properties / value / optional
        Removed value: -true
      • removedInput schema / properties / withClauses / optional
        Removed value: -true
  2. 15 tool updatesv1.0.0
    • Addedsalesforce_aggregate_query
    • Addedsalesforce_describe_object
    • Addedsalesforce_dml_records
    • Addedsalesforce_execute_anonymous
    • Addedsalesforce_manage_debug_logs
    • Addedsalesforce_manage_field
    • Addedsalesforce_manage_field_permissions
    • Addedsalesforce_manage_object
    • Addedsalesforce_query_records
    • Addedsalesforce_read_apex
    • Addedsalesforce_read_apex_trigger
    • Addedsalesforce_search_all
    • Addedsalesforce_search_objects
    • Addedsalesforce_write_apex
    • Addedsalesforce_write_apex_trigger

TDQS

A4.2/5.0

Scored across 15 tools

Disambiguation5/5

Each tool targets a clearly distinct resource/action pair. Query vs. aggregate query are explicitly disambiguated via cross-references; search objects (metadata) vs. search all (records) are differentiated; Apex class and trigger tools are separate. No genuine overlap.

Naming Consistency5/5

All tools consistently use the 'salesforce_' prefix followed by snake_case names with verb-like prefixes (describe, query, search, manage, read, write, execute). Minor deviations like 'aggregate_query' and 'execute_anonymous' still fit the overall predictable pattern.

Tool Count5/5

15 tools is at the upper end of the ideal range, but each tool earns its place by covering distinct Salesforce workflows: data querying, DML, metadata management, Apex code, and debug logs. No redundancy or bloat.

Completeness4/5

The tool set provides solid lifecycle coverage: record CRUD via dml_records, query and aggregate query, SOSL search, object/field metadata management, Apex class/trigger read/write, and anonymous execution. The main gap is lack of explicit delete operations for metadata (objects, fields, Apex classes/triggers), but execute_anonymous can act as a workaround in some cases.

Maintenance

ActivityActive
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers