MCP server that provides SQL query capabilities to interact with Salesforce Marketing data via JDBC connection
This Salesforce Marketing MCP server provides three read-only data discovery and query tools with generally clear naming and adequate descriptions. Tool names follow verb_noun pattern (get_tables, get_columns, run_query) and accurately reflect their actions. Descriptions are present and reasonably detailed (ranging 194-298 chars), exceeding the 20-char minimum. Input schemas are properly defined with JSON Schema types and field descriptions. However, there are significant gaps: output schemas are not formally documented (responses mention 'CSV format' but don't define structured output fields), parameter descriptions could be more prescriptive about constraints, error handling lacks recovery guidance, and there is no discussion of limits/pagination for potentially large result sets. The tools are read-only and well-composed (each does one thing), reducing risk. Overall: acceptable for a data discovery toolkit, but falls short of production-grade quality due to missing output documentation and error recovery patterns.
Retrieves a list of fields, dimensions, or measures (as columns) for an object, entity or collection (table). Use the `salesforce_get_tables` tool to get a list of available tables. The output of the tool will be returned in CSV format, with the first line containing column headers.
Retrieves a list of objects, entities, collections, etc. (as tables) available in the data source. Use the `salesforce_get_columns` tool to list available columns on a table. Both `catalog` and `schema` are optional parameters. The output of the tool will be returned in CSV format, with the first line containing column headers.
Execute a SQL SELECT statement.
Output schemas not documented. Tools return CSV format but lack a formal schema definition of field types and structure. LLMs cannot reliably parse or extract fields for downstream tool chaining.
Error handling lacks recovery guidance. Exception handling converts to RuntimeException('ERROR: ' + message) with no categorization (retryable vs. user-fixable), no suggestions for next steps, and no field-level validation errors.
No pagination or result limits documented. run_query accepts unbounded SQL; no limit parameter or documented cap on result rows. Large result sets risk token exhaustion and context window overflow.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 52 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 36 | - | v1 |
Parameter descriptions lack constraint clarity. 'catalog' and 'schema' are marked optional but no guidance on when they are required vs. inferred, or how nulls are handled (empty string vs. null). 'sql' parameter lacks format constraints (no indication of allowed clauses, syntax rules, or injection safeguards).
Missing tool annotations. Tools lack readOnlyHint, destructiveHint, or idempotentHint annotations. All three are read-only, so idempotentHint should be applied to signal safe retries.