A Model Context Protocol server for MySQL database operations
The server defines 14 tools with clear verb-noun naming conventions and complete JSON schemas. Most descriptions are adequate (100-300 chars), but several lack depth on error conditions and prerequisites. All tools include parameter descriptions, though some parameters lack type precision. No output schemas are documented. Error handling exists but lacks recovery guidance. The tool set is well-composed (read-only tools separate from write operations), but missing tool annotations and confirmation patterns for destructive operations.
Add a new column to an existing table
Modify an existing column (type, nullable, default, or rename)
Connect to a MySQL database using URL, workspace config, or direct parameters
Create a new table with specified columns and indexes
Get detailed structure of a table including columns, types, and constraints
Remove a column from a table
Delete a table (requires confirmation)
No output schemas documented. Tools return query results but LLM has no structured specification of what fields to expect. This breaks downstream tool chaining and forces the LLM to infer output structure from unstructured text responses.
Destructive operations (drop_table, truncate_table, drop_column) lack proper confirmation patterns. The 'confirm' boolean parameter is present but descriptions do not explain that omitting it (defaulting to false) prevents execution, or guide LLMs on when confirmation is needed.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot distinguish at registration time which tools are read-only, which are destructive, and which are safe to retry. This is a current MCP 2026-07-28 spec requirement.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 67 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 44 | - | v1 |
Execute an INSERT, UPDATE, or DELETE query
Retrieve all foreign keys for a specific table
Retrieve all indexes for a specific table
List all accessible databases on the server
List all tables in the connected database
Execute a SELECT query and return results
Remove all rows from a table (requires confirmation)
Error handling lacks recovery guidance. Code shows handleDatabaseError() is called but descriptions do not include 'what to do next' hints. E.g., 'Not connected to database. Use connect_db tool first.' is good, but most tools omit actionable error contexts.
Missing dependencies and prerequisites in descriptions. E.g., 'create_table' does not mention that connect_db must be called first. Discovery tools like 'describe_table' should hint 'Call this first to understand schema before altering.'
List tools (list_tables, list_databases) lack pagination parameters (limit, offset/cursor). If a database contains hundreds of tables, returning all at once blows context. Descriptions do not mention result limits.
Parameter descriptions in create_table, add_column, and alter_column lack format constraints. E.g., 'type' accepts 'MySQL column type' but does not enumerate valid types (INT, VARCHAR, TEXT, etc.) or specify length requirements. This invites invalid input.