An MCP server that provides read-only access to MySQL databases.
The server provides 4 read-only database tools with clear naming (list_*, describe_*, execute_*) that follow verb-noun patterns. All tools have descriptions and basic input schemas. However, parameter descriptions are minimal or missing (e.g., 'database' parameter in list_tables has only 'Database name (optional, uses default if not specified)', lacks specificity on what 'default' means). No output schemas are documented. Error handling is absent, no guidance on what happens if a database doesn't exist, if a query fails, or how to recover. The descriptions are functional but terse (avg 52 chars), below the 194-char production baseline. Tool names are excellent (list_databases, execute_query), but parameter documentation falls short of the 72-char average and lacks actionable constraint information.
Show the schema for a specific table
Execute a read-only SQL query
List all accessible databases on the MySQL server
List all tables in a specified database
Output schemas not documented. LLMs cannot infer what fields list_databases, list_tables, describe_table, and execute_query return. This forces agents to guess the response structure.
Parameter descriptions lack detail and constraints. 'Database name (optional, uses default if not specified)' does not explain what the default is, whether partial names work, or what format is expected. 'Table name' is vague, does it accept schema-qualified names (schema.table)?
No error handling or recovery guidance. Tool descriptions do not explain what happens if a database, table, or query fails. No actionable error messages. LLMs cannot self-correct.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 66 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Tool descriptions are terse (avg 52 chars, baseline 194 chars). 'List all tables in a specified database' lacks context on WHEN to call this vs. describe_table, and what structure it returns. LLMs struggle to select between similar tools without richer docs.
execute_query parameter 'query' lacks constraint documentation. No mention of the allowed/disallowed SQL patterns, expected result size limits, or timeout behavior. LLMs cannot infer these limits and may pass dangerous queries.
No pagination or result limit documentation. If list_databases or list_tables return hundreds of items, the response could blow the context window. No mention of max results or cursor/offset support.