MCP server for MySQL database operations and monitoring with Performance Schema support, query monitoring, and database administration tools
This server has significant definition quality gaps. Only 2 of 5 tools are actual database operations; 3 are prompt template utilities masquerading as tools. The actual database tools (get_server_info, get_active_connections) have reasonable descriptions but lack input validation, output schema documentation, and error handling guidance. Parameter descriptions are sparse. Tool composition is poor, prompt_template_* tools should not be tools at all; they should be resources or built into system prompts. The naming is acceptable but doesn't follow verb-noun patterns consistently (prompt_template_full vs get_server_info). No tool annotations (readOnly hints), no pagination support, no batching variants. Critical gap: database connection errors, SQL failures, and permission issues have no documented recovery paths.
[Tool Purpose]: Monitor active MySQL connections and processes [Exact Functionality]: - List all active connections with process ID, user, host, database - Show current command being executed by each connection - Display connection time and state information - Filter by user or database name [Required Use Cases]: - When user requests "active connections", "current sessions", "process list" - When diagnosing connection issues or monitoring user activity - When checking for long-running queries
[Tool Purpose]: Get MySQL server version and basic information [Exact Functionality]: - Show MySQL server version, edition, and compilation info - Display server uptime and basic configuration - Show available storage engines and default engine - Provide server connection details (sanitized) [Required Use Cases]: - When user requests "server info", "MySQL version", "server status" - When diagnosing compatibility issues - When checking server capabilities
Complete MySQL Operations guidance template with all tool descriptions and usage examples.
List of available prompt template sections and tools.
Get a specific section from the prompt template. Args: section: The name of the section to retrieve (if empty, shows available sections) Returns: The content of the specified section or list of available sections
Prompt template tools (3 of 5) should not be MCP tools. They are utility functions for LLM instructions, not database operations. This inflates tool count, clutters the toolset, and violates single-responsibility principle (pattern:tool). These belong in system prompts or as resources.
Zero documented output schemas for any tool. LLMs cannot plan downstream calls or extract data without knowing response structure. get_server_info returns what fields? get_active_connections returns what columns? This forces LLMs to guess and parse unstructured output.
No error handling guidance. What happens if MySQL is unreachable? If the user lacks permissions? If a query times out? Tools must tell LLMs what to do next (retry, ask user, fatal). Current code likely throws exceptions with no recovery path visible.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 44 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Insufficient parameter descriptions. 'database_name' says 'Database name to connect to (uses default if omitted)', but what IS the default? What databases are available? user_filter and db_filter lack examples or constraints (is wildcard supported? case-sensitive?). LLMs cannot use underspecified parameters reliably.
No pagination or result limits documented. get_active_connections could return thousands of connections. Without pagination, large result sets blow the context window. No mention of max_rows, limit, or cursor parameters in the visible schema.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). These tools are read-only and idempotent but don't declare it. LLMs cannot safely optimize retry/caching without these hints.
Naming inconsistency violates pattern:tool-naming. prompt_template_full, prompt_template_headings, prompt_template_section use noun_adjective naming; database tools use get_noun naming. More critically, prompt_template_* names are vague about intent, 'full' vs 'headings' vs 'section' is not self-documenting to LLMs.