MySQL database connector for Claude using Model Context Protocol
MySQL MCP has 12 tools with basic schemas and descriptions, but significant gaps limit production readiness. Tool naming is verb-forward (query_sql, execute_sql, search_movies) and generally clear. However, descriptions are minimal (10-50 chars for most tools), parameter descriptions are sparse or missing, and output schemas are not documented. Error handling is generic ('Database connection error', 'Query error') with no recovery guidance. The movies_database.py example tools (search_movies, get_movie_details, list_genres, top_rated_movies) show better parameter documentation but still lack output schema definitions. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) are present despite clear risk levels (READ_ONLY vs WRITE). Input validation exists (e.g., safe_limit = min(limit, 50)) but is not consistently applied or documented.
Get column definitions for a table
Execute a non-SELECT query (INSERT, UPDATE, DELETE, etc.)
Get the execution plan for a query
Get detailed information about a movie by ID
List all movie genres in the database
Execute a SELECT query and return the results
Search for movies by title keyword, genre, and/or minimum rating
Output schemas not documented. Tools return Dict[str, Any] with no field definitions. LLMs cannot plan downstream calls or extract specific fields without trial-and-error.
Descriptions too short (10-50 chars). Most tools lack context for LLM selection. E.g., 'Execute a SELECT query and return the results' (50 chars) does not explain when to use query_sql vs execute_sql, or what 'results' structure contains.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | <=2025-11-25 | v2 |
List all available databases
Show a sample of rows from a table
List all tables in the current database
Get the top rated movies, optionally filtered by genre
Switch to a different database
Error handling is generic and non-actionable. 'Database connection error: {e}' and 'Query error: {e}' give LLMs no recovery path. Should categorize as retryable vs fatal and suggest next steps (e.g., 'Connection failed. Verify MYSQL_HOST and MYSQL_PORT in .env').
No tool annotations despite clear risk levels. execute_sql and use_database are WRITE/state-changing but lack destructiveHint. query_sql, show_databases, etc. are READ_ONLY but lack readOnlyHint. Annotations enable safer agent planning.
Parameter descriptions missing or minimal. 'query' param in query_sql has description 'SQL SELECT query to execute' (35 chars) but does not specify format, length limits, or injection risks. 'limit' in show_table_sample has good description (max 100) but others lack bounds.