A secure MySQL MCP server with clean architecture for database operations
Critical failures across naming, descriptions, and schema visibility. Tool names lack clear action verbs (e.g., 'db_migrate_rbac', 'db_seed_rbac_defaults' are vague). Most tool descriptions in the provided spec are generic 1-2 sentence stubs (10-50 chars), far below the 194-char baseline. Schemas are partially visible in admin-tool.ts but most tools (13-30) have no visible schema definitions in source, only inferred from the spec table. The 'apiKey' parameter appears in every tool definition but should NEVER be exposed as a parameter per pattern:secret-injection. No input validation guidance, no error recovery hints, no output schema documentation visible. Composition is poor: 30 tools with overlapping concerns (e.g., multiple RBAC tools that could be consolidated). No pagination, no result limits documented.
Analyze table statistics
Assign a permission to a role
Assign a role to a user
Log an audit event
Check if a user can access a resource with a specific action
Check if a user has a specific permission
Create a new permission
API key exposed as tool parameter in ALL 30 tools. Credentials must use server-side secret injection via environment variables, not tool parameters. Agent traces log every parameter, secrets leak into logs and prompt history.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 41 | 2026-07-28+ | v2 |
Create a new role
Create a new table in the database
Get all permissions for the current user
Check RBAC database integrity
Migrate RBAC database schema
Seed RBAC database with default roles and permissions
Delete a role
Get the structure of a table
Execute a SQL query against the MySQL database
Get MySQL process list
Get MySQL server status variables
Get table constraints
Get table indexes
Kill a running query
List all available databases
List all permissions
List all roles
List all tables in a database
List all roles assigned to a user
Optimize table
Query audit logs with optional filtering
Revoke a permission from a role
Revoke a role from a user
Most tool descriptions are 1-2 sentences (10-50 chars), far below 194-char baseline. Descriptions lack WHEN to use, prerequisites, and state-change implications. E.g., 'Create a new role' does not explain when to call it vs assign_role_to_user, or what happens on the backend.
No visible input schemas for tools 13-30 (RBAC, audit, admin tools). Only admin-tool.ts shows Zod schemas; the rest are inferred from the spec table. Cannot verify parameter types, constraints, or validation.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields. E.g., does list_roles return role_id, name, description? What fields does execute_query return?
Vague naming for database admin tools: 'db_migrate_rbac', 'db_seed_rbac_defaults', 'db_check_integrity' use 'db_' prefix which is generic. Better: 'migrate_rbac_schema', 'seed_default_roles', 'verify_rbac_integrity'. Names should start with clear action verbs (migrate, seed, verify) not 'db_'.