An MCP server that enables interaction with MySQL databases through tools, prompts, and resources. Supports executing SQL queries, managing tables, and providing business insights.
Single tool 'execute_sql' has a basic description and schema, but critical gaps undermine production readiness. Description is only 44 chars (below 50-char minimum for clarity). No parameter descriptions, the 'query' param lacks guidance on format, constraints, or examples. Schema is present but minimal. No error handling guidance, no destructive operation warnings despite DESTRUCTIVE risk classification, no idempotency hints, and no recovery paths. Tool lacks annotations (destructiveHint) that would signal to LLMs this is irreversible. Naming is acceptable (verb_noun form), but the tool conflates SELECT, SHOW TABLES, and UPDATE/DELETE/INSERT into one handler, violating single-responsibility principle.
Execute an SQL query on the MySQL server
Parameter 'query' lacks description. LLMs cannot infer format, constraints, or valid SQL dialects. Should document: 'SQL query string (SELECT, INSERT, UPDATE, DELETE, SHOW TABLES). Max 10000 chars. Parameterized queries recommended to prevent injection.'
Tool description is only 44 characters, too brief to guide LLM selection. Should explain: WHAT (executes SQL on MySQL), WHEN (to query/modify data), PREREQUISITES (connection must be configured), and CONSEQUENCES (modifications are permanent). Expand to 100-150 chars.
Destructive operations (UPDATE, DELETE, INSERT) lack confirmation or dry-run support. Tool is marked DESTRUCTIVE but has no confirmation_request pattern. LLMs can accidentally drop tables or corrupt data. Implement a 'dry_run' parameter or separate 'execute_sql_confirm' tool.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 36 | <=2025-11-25 | v2 |
Error handling returns raw exception messages ('Error executing query: java.sql.SQLException...') instead of actionable guidance. LLMs cannot parse stack traces. Should return: error category (syntax|permission|timeout|connection), the invalid query fragment, and recovery hint (e.g., 'Check table name spelling' or 'Verify user has SELECT privilege').
Tool conflates three distinct operations (SELECT, SHOW TABLES, UPDATE/DELETE/INSERT) into one handler. Violates single-responsibility principle. Should split into: 'query_sql' (SELECT/SHOW), 'execute_sql' (UPDATE/DELETE/INSERT with confirmation), and 'describe_tables' (SHOW TABLES). Enables better LLM reasoning and safer composition.