An MCP server that provides read-only SQL query execution on MySQL databases
Single tool 'execute_sql' has a clear, descriptive name and good description (127 chars, within 10-1024 range). Input schema is present with proper type and description. However, output schema is completely undocumented, the tool returns formatted CSV text but LLMs cannot predict the structure. No parameter constraints (enums, ranges). Error handling returns generic error messages without recovery guidance. No tool annotations (readOnlyHint despite being read-only). Missing pagination/limit parameters despite potentially large result sets. The write-operation check is implemented but not exposed as a constraint in the schema.
Execute a read-only SQL query on the MySQL server. Write operations (CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, etc.) are not permitted.
Output schema completely undocumented. Tool returns formatted CSV text but LLMs cannot predict structure (columns, rows, rowCount fields). Agents cannot reliably extract or chain results.
No pagination or result limit parameters. Large queries could return thousands of rows as unstructured text, exhausting context window. Baseline pattern requires limit + offset/cursor.
Error messages lack recovery guidance. 'Error executing query: <raw error>' tells LLM nothing actionable. Should categorize as retryable vs user-fixable and suggest next steps.
No tool annotations despite read-only semantics. Missing readOnlyHint annotation that would signal to agents this tool is safe to call speculatively.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | <=2025-11-25 | v2 |
Query parameter accepts free-form string with no format constraints. Should document expected format (SQL dialect, max length, character restrictions) to guide LLM input validation.