MySQL Readonly MCP Server for accessing MySQL databases through MCP protocol
Single tool with adequate schema and description, but missing critical parameter descriptions and output schema documentation. Tool name follows verb_noun pattern (mysql_execute_read_query). Description is 156 chars, within baseline range (p10=34, p90=392). However, 'params' parameter lacks type specificity (additionalProperties: true is too permissive), and no output schema is documented. The 'explanation' parameter is unusual and not justified in the description. Error handling is present in code but not reflected in tool definition.
Execute read-only MySQL SQL code. Only SELECT, SHOW, DESCRIBE, EXPLAIN allowed; queries are validated before execution.
Output schema not documented. Tool description does not specify what fields are returned (column_names, data, row_count, etc.). LLMs cannot plan downstream operations without knowing response structure.
'params' parameter uses additionalProperties: true without type constraints. This invites arbitrary key-value pairs and makes validation impossible. Should specify expected parameter types or provide examples of valid structures.
'explanation' parameter is required but its purpose is unclear. It appears to be a reasoning/audit field, but the description does not explain why the LLM must provide it or how it affects tool behavior. This violates the principle that every parameter must have a clear, actionable description.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | <=2025-11-25 | v2 |
Error handling guidance missing from tool definition. Code includes try-catch and validation (query type checking), but the tool description does not document what errors can occur, when they are retryable, or what the LLM should do next (e.g., 'Invalid SQL syntax. Ensure query uses only SELECT, SHOW, DESCRIBE, or EXPLAIN.').
max_rows parameter has a default (20) but no documented minimum or maximum bounds. Unbounded integers can cause performance issues. Should specify: 'max_rows: integer, range 1 - 1000, default 20'.