Read-only MySQL MCP server — list databases/tables, inspect schemas, run SELECT queries
The MySQL DB Reader server demonstrates solid definition quality with consistent naming, clear descriptions, and well-structured schemas across all 6 tools. All tools follow verb_noun naming conventions (mysql_list_*, mysql_get_*, mysql_preview_*, mysql_query, mysql_explain_*). Descriptions are substantive and provide context for when/why to use each tool. Parameter schemas are complete with type definitions and constraints. However, there are gaps in output schema documentation and error handling guidance that prevent a higher score.
Run EXPLAIN on a SELECT query to show the query execution plan. Use this to analyze query performance and identify missing indexes.
Get table column definitions, primary key, indexes, and constraints. Use this to understand table structure before writing queries.
List available databases (schemas) on the MySQL server. Use this first to discover what databases exist before querying tables.
List tables (and optionally views) in a database. Use this after mysql_list_databases to discover available tables before querying or inspecting schema.
Preview first N rows from a table with optional ordering. Use this to quickly inspect sample data without writing SQL.
Run a read-only SQL query with optional positional parameters. For complex queries or when you need JOINs, aggregations, or filtering. Results are limited to 10,000 rows; use LIMIT for large tables.
Output schemas not documented. No descriptions of what fields/structure tools return. LLMs cannot plan downstream calls or extract the right data without knowing response structure.
Error handling lacks recovery guidance. Code throws generic errors like 'Invalid [kind] identifier' and 'Only read-only queries are allowed' without suggesting next steps or available alternatives. LLMs need actionable error messages.
Result limits not explicitly documented in tool descriptions. mysql_query states 'limited to 10,000 rows' but other tools (mysql_list_tables, mysql_list_databases) do not state whether results are paginated or capped.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 69 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 55 | - | v1 |
Parameter constraints not fully exposed in descriptions. mysql_preview_table has min/max constraints on 'limit' in schema (1-1000) but the description does not state these bounds. LLMs cannot read JSON Schema constraints, they rely on description text.
Timeout behavior not documented. Code has a 30-second QUERY_TIMEOUT_MS, but this is not surfaced in tool descriptions. LLMs cannot plan around timeout risk or know how to retry.