A Model Context Protocol (MCP) server implementation for Salesforce integration
Server has 9 tools with complete input schemas and basic descriptions. However, descriptions are generic and lack actionable context for LLM selection. Parameter descriptions are minimal (e.g., 'The SOQL query to execute' without format guidance). No output schemas documented. Error handling is absent, no recovery guidance or categorization. Security concerns: credentials handled via environment variables (good), but no audit logging or permission gates visible. Tool composition is reasonable (single responsibility), but several tools expose dangerous operations (delete_record, apex_execute) without confirmation patterns. Naming follows verb_noun convention well. Overall: functional but below production quality.
Executes an Apex REST request
Creates a new record
Deletes a record
Retrieves field Names, labels and types for a specific Salesforce object
Retrieves a specific record by ID
Executes a SOQL query against Salesforce
Executes a SOSL search against Salesforce
No output schemas documented. LLMs cannot predict response structure, forcing them to guess at field names and types for downstream tool chaining.
Destructive operations (delete_record, apex_execute with DELETE method) lack confirmation or dry-run patterns. Agents can permanently delete records without safeguards.
No error handling guidance. Tools do not return actionable error messages or recovery hints. A failed SOQL query returns raw exception text instead of 'Invalid SOQL syntax. Check field names and relationships.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
Executes a Tooling API request
Updates an existing record
Parameter descriptions are minimal and lack format/constraint guidance. 'The data for the new record' does not explain which fields are required, which are updateable, or what types are valid. LLMs must infer from context.
No pagination support. run_soql_query and run_sosl_search can return unbounded result sets, risking context window exhaustion and token waste.