MCP Server for Database Operations - provides tools for executing SQL queries, validating SQL syntax, and accessing database schema information
Two tools with basic descriptions and minimal parameter documentation. execute_query and validate_sql both accept a single 'sql' string parameter with minimal constraint guidance. Descriptions exist but lack actionable context (when to use, what happens, error recovery). No output schemas documented. No parameter validation rules, enums, or format constraints visible. Error handling returns generic dicts without recovery guidance. Missing tool annotations (destructiveHint for execute_query). Naming is clear (verb_noun pattern), but parameter descriptions are trivial ('SQL query to execute' vs 'SQL query to validate', no distinction of what validation entails).
Execute a SQL query directly against the database.
Validate SQL query syntax and structure.
No output schema documented for either tool. LLMs cannot plan downstream calls or extract required fields. execute_query returns Dict[str, Any] with 'status', 'message', 'data' fields, but structure is undocumented.
execute_query lacks destructiveHint annotation. This tool modifies database state (WRITE risk), but the tool definition does not signal this to the MCP client. LLMs cannot distinguish safe reads from destructive writes.
No input validation or constraint documentation. 'sql' parameter accepts any string with no format, length, or pattern constraints. No guidance on SQL injection prevention, query complexity limits, or allowed statement types (SELECT vs INSERT/UPDATE/DELETE).
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | <=2025-11-25 | v2 |
Error responses lack recovery guidance. Both tools return generic error dicts ('status': 'error', 'message': str(e)) without actionable next steps. LLMs cannot self-correct or know whether to retry.
Parameter descriptions are trivial (10-20 chars). 'SQL query to execute' vs 'SQL query to validate' do not explain the semantic difference or when to call each tool. No guidance on expected format, complexity limits, or statement types.