Salesforce MCP Server
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-salesforceHerramientas
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)
Configura tus credenciales de Salesforce
Obtenga su token de seguridad (Restablecer desde la configuración de Salesforce)
2. Flujo de credenciales de cliente OAuth 2.0
Crear una aplicación conectada en Salesforce
Habilite la configuración de OAuth y seleccione "Flujo de credenciales del cliente".
Establezca alcances apropiados (normalmente, "api" es suficiente)
Guardar el ID del cliente y el secreto del cliente
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_URLdebe 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 buildContribuyendo
¡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 toolssalesforce_aggregate_queryARead-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:
GROUP BY queries (single/multiple fields, related objects, date functions)
Aggregate functions: COUNT(), COUNT_DISTINCT(), SUM(), AVG(), MIN(), MAX()
HAVING clauses for filtering grouped results
Date/time grouping: CALENDAR_YEAR(), CALENDAR_MONTH(), CALENDAR_QUARTER(), FISCAL_YEAR(), FISCAL_QUARTER()
Examples:
Count opportunities by stage:
objectName: "Opportunity"
selectFields: ["StageName", "COUNT(Id) OpportunityCount"]
groupByFields: ["StageName"]
Analyze cases by priority and status:
objectName: "Case"
selectFields: ["Priority", "Status", "COUNT(Id) CaseCount", "AVG(Days_Open__c) AvgDaysOpen"]
groupByFields: ["Priority", "Status"]
Count contacts by account industry:
objectName: "Contact"
selectFields: ["Account.Industry", "COUNT(Id) ContactCount"]
groupByFields: ["Account.Industry"]
Quarterly opportunity analysis:
objectName: "Opportunity"
selectFields: ["CALENDAR_YEAR(CloseDate) Year", "CALENDAR_QUARTER(CloseDate) Quarter", "SUM(Amount) Revenue"]
groupByFields: ["CALENDAR_YEAR(CloseDate)", "CALENDAR_QUARTER(CloseDate)"]
Find accounts with more than 10 opportunities:
objectName: "Opportunity"
selectFields: ["Account.Name", "COUNT(Id) OpportunityCount"]
groupByFields: ["Account.Name"]
havingClause: "COUNT(Id) > 10"
Important Rules:
All non-aggregate fields in selectFields MUST be included in groupByFields
Use whereClause to filter rows BEFORE grouping
Use havingClause to filter AFTER grouping (for aggregate conditions)
ORDER BY can only use fields from groupByFields or aggregate functions
OFFSET is not supported with GROUP BY in Salesforce
Inputs: objectName (required), selectFields (required), groupByFields (required), limit, +3 more.
salesforce_describe_objectARead-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.
Inputs: objectName (required).
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
Inputs: records (required), operation (required), objectName (required), externalIdField.
salesforce_execute_anonymousA
Execute anonymous Apex code in Salesforce.
Examples:
Execute simple Apex code: { "apexCode": "System.debug('Hello World');" }
Execute Apex code with variables: { "apexCode": "List accounts = [SELECT Id, Name FROM Account LIMIT 5]; for(Account a : accounts) { System.debug(a.Name); }" }
Execute Apex with debug logs: { "apexCode": "System.debug(LoggingLevel.INFO, 'Processing accounts...'); List accounts = [SELECT Id FROM Account LIMIT 10]; System.debug(LoggingLevel.INFO, 'Found ' + accounts.size() + ' accounts');", "logLevel": "DEBUG" }
Notes:
The apexCode parameter is required and must contain valid Apex code
The code is executed in an anonymous context and does not persist
The logLevel parameter is optional (defaults to 'DEBUG')
Execution results include compilation success/failure, execution success/failure, and debug logs
For security reasons, some operations may be restricted based on user permissions
This tool can be used for data operations or updates when there are no other specific tools available
When users request data queries or updates that aren't directly supported by other tools, this tool can be used if the operation is achievable using Apex code
Inputs: apexCode (required), logLevel.
salesforce_manage_debug_logsA
Manage debug logs for Salesforce users - enable, disable, or retrieve logs.
Examples:
Enable debug logs for a user: { "operation": "enable", "username": "user@example.com", "logLevel": "DEBUG", "expirationTime": 30 }
Disable debug logs for a user: { "operation": "disable", "username": "user@example.com" }
Retrieve debug logs for a user: { "operation": "retrieve", "username": "user@example.com", "limit": 5 }
Retrieve a specific log with full content: { "operation": "retrieve", "username": "user@example.com", "logId": "07L1g000000XXXXEAA0", "includeBody": true }
Notes:
The operation must be one of: 'enable', 'disable', or 'retrieve'
The username parameter is required for all operations
For 'enable' operation, logLevel is optional (defaults to 'DEBUG')
Log levels: NONE, ERROR, WARN, INFO, DEBUG, FINE, FINER, FINEST
expirationTime is optional for 'enable' operation (minutes until expiration, defaults to 30)
limit is optional for 'retrieve' operation (maximum number of logs to return, defaults to 10)
logId is optional for 'retrieve' operation (to get a specific log)
includeBody is optional for 'retrieve' operation (to include the full log content, defaults to false)
The tool validates that the specified user exists before performing operations
If logLevel is not specified when enabling logs, the tool will ask for clarification
Inputs: username (required), operation (required), limit, logId, +3 more.
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
Inputs: fieldName (required), operation (required), objectName (required), type, +14 more.
salesforce_manage_field_permissionsB
Manage Field Level Security (Field Permissions) for custom and standard fields.
Grant or revoke read/edit access to fields for specific profiles or permission sets
View current field permissions
Bulk update permissions for multiple profiles
Examples:
Grant System Administrator access to a field
Give read-only access to a field for specific profiles
Check which profiles have access to a field
Inputs: fieldName (required), operation (required), objectName (required), editable, +2 more.
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
Inputs: operation (required), objectName (required), label, description, +5 more.
salesforce_query_recordsARead-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:
Parent-to-child query (e.g., Account with Contacts):
objectName: "Account"
fields: ["Name", "(SELECT Id, FirstName, LastName FROM Contacts)"]
Child-to-parent query (e.g., Contact with Account details):
objectName: "Contact"
fields: ["FirstName", "LastName", "Account.Name", "Account.Industry"]
Multiple level query (e.g., Contact -> Account -> Owner):
objectName: "Contact"
fields: ["Name", "Account.Name", "Account.Owner.Name"]
Related object filtering:
objectName: "Contact"
fields: ["Name", "Account.Name"]
whereClause: "Account.Industry = 'Technology'"
Note: When using relationship fields:
Use dot notation for parent relationships (e.g., "Account.Name")
Use subqueries in parentheses for child relationships (e.g., "(SELECT Id FROM Contacts)")
Custom relationship fields end in "__r" (e.g., "CustomObject__r.Name")
Inputs: fields (required), objectName (required), limit, orderBy, +1 more.
salesforce_read_apexARead-only
Read Apex classes from Salesforce.
Examples:
Read a specific Apex class by name: { "className": "AccountController" }
List all Apex classes with an optional name pattern: { "namePattern": "Controller" }
Get metadata about Apex classes: { "includeMetadata": true, "namePattern": "Trigger" }
Use wildcards in name patterns: { "namePattern": "AccountCont" }
Notes:
When className is provided, the full body of that specific class is returned
When namePattern is provided, all matching class names are returned (without body)
Use includeMetadata to get additional information like API version, length, and last modified date
If neither className nor namePattern is provided, all Apex class names will be listed
Wildcards are supported in namePattern: * (matches any characters) and ? (matches a single character)
Inputs: className, namePattern, includeMetadata.
salesforce_read_apex_triggerARead-only
Read Apex triggers from Salesforce.
Examples:
Read a specific Apex trigger by name: { "triggerName": "AccountTrigger" }
List all Apex triggers with an optional name pattern: { "namePattern": "Account" }
Get metadata about Apex triggers: { "includeMetadata": true, "namePattern": "Contact" }
Use wildcards in name patterns: { "namePattern": "Account*" }
Notes:
When triggerName is provided, the full body of that specific trigger is returned
When namePattern is provided, all matching trigger names are returned (without body)
Use includeMetadata to get additional information like API version, object type, and last modified date
If neither triggerName nor namePattern is provided, all Apex trigger names will be listed
Wildcards are supported in namePattern: * (matches any characters) and ? (matches a single character)
Inputs: namePattern, triggerName, includeMetadata.
salesforce_search_allARead-only
Search across multiple Salesforce objects using SOSL (Salesforce Object Search Language).
Examples:
Basic search across all objects: { "searchTerm": "John", "objects": [ { "name": "Account", "fields": ["Name"], "limit": 10 }, { "name": "Contact", "fields": ["FirstName", "LastName", "Email"] } ] }
Advanced search with filters: { "searchTerm": "Cloud*", "searchIn": "NAME FIELDS", "objects": [ { "name": "Account", "fields": ["Name", "Industry"], "orderBy": "Name DESC", "where": "Industry = 'Technology'" } ], "withClauses": [ { "type": "NETWORK", "value": "ALL NETWORKS" }, { "type": "SNIPPET", "fields": ["Description"] } ] }
Notes:
Use * and ? for wildcards in search terms
Each object can have its own WHERE, ORDER BY, and LIMIT clauses
Support for WITH clauses: DATA CATEGORY, DIVISION, METADATA, NETWORK, PRICEBOOKID, SNIPPET, SECURITY_ENFORCED
"updateable" and "viewable" options control record access filtering
Inputs: objects (required), searchTerm (required), searchIn, viewable, +2 more.
salesforce_search_objectsARead-only
Search for Salesforce standard and custom objects by name pattern. Examples: 'Account' will find Account, AccountHistory; 'Order' will find WorkOrder, ServiceOrder__c etc.
Inputs: searchPattern (required).
salesforce_write_apexA
Create or update Apex classes in Salesforce.
Examples:
Create a new Apex class: { "operation": "create", "className": "AccountService", "apiVersion": "58.0", "body": "public class AccountService { public static void updateAccounts() { /* implementation */ } }" }
Update an existing Apex class: { "operation": "update", "className": "AccountService", "body": "public class AccountService { public static void updateAccounts() { /* updated implementation */ } }" }
Notes:
The operation must be either 'create' or 'update'
For 'create' operations, className and body are required
For 'update' operations, className and body are required
apiVersion is optional for 'create' (defaults to the latest version)
The body must be valid Apex code
The className in the body must match the className parameter
Status information is returned after successful operations
Inputs: body (required), className (required), operation (required), apiVersion.
salesforce_write_apex_triggerA
Create or update Apex triggers in Salesforce.
Examples:
Create a new Apex trigger: { "operation": "create", "triggerName": "AccountTrigger", "objectName": "Account", "apiVersion": "58.0", "body": "trigger AccountTrigger on Account (before insert, before update) { /* implementation */ }" }
Update an existing Apex trigger: { "operation": "update", "triggerName": "AccountTrigger", "body": "trigger AccountTrigger on Account (before insert, before update, after update) { /* updated implementation */ }" }
Notes:
The operation must be either 'create' or 'update'
For 'create' operations, triggerName, objectName, and body are required
For 'update' operations, triggerName and body are required
apiVersion is optional for 'create' (defaults to the latest version)
The body must be valid Apex trigger code
The triggerName in the body must match the triggerName parameter
The objectName in the body must match the objectName parameter (for 'create')
Status information is returned after successful operations
Inputs: body (required), operation (required), triggerName (required), apiVersion, +1 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 15 tools
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.
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.
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.
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
Related MCP Connectors
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Hosted SQL Server MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
Hosted Amazon Seller Central and Amazon Ads MCP server for Claude, ChatGPT, Cursor, and agents.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server implementation that integrates Claude with Salesforce, enabling natural language interactions with Salesforce data and metadata for querying, modifying, and managing objects and records.759 npm15MIT
- AlicenseAqualityDmaintenanceAn MCP server implementation that integrates Claude with Salesforce, enabling natural language interactions with Salesforce data and metadata.859 npmMIT
- AlicenseNot gradedqualityNot gradedmaintenanceAn MCP server implementation that integrates Claude/VS Code with Salesforce, enabling natural language interactions with your Salesforce data and metadata.MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that provides comprehensive access to Salesforce Tooling API for metadata management, SOQL queries, code analysis, and debugging through Claude and other AI assistants.53 npm5MIT