Database introspection and query tool for MySQL databases. Provides tools to list tables, describe table schemas, execute SELECT queries, retrieve database statistics, and explore table relationships.
MCP DbServer provides 6 database introspection tools with good naming patterns and basic descriptions. All tools start with verbs (DescribeTable, ListTables, ExecuteQuery, etc.) and follow the verb_noun convention. However, there are significant gaps in parameter descriptions, output schema documentation, and error handling guidance. Descriptions are present but brief (34-194 chars, baseline avg 194). Parameter validation constraints are mentioned in some descriptions (e.g., 'max: 1000' for maxRows) but not comprehensively. Critical issue: ExecuteQuery performs SQL injection defense with a basic string check, but no detailed error recovery guidance. All tools are READ_ONLY, which is positive for security. Output formatting happens via private methods (FormatTableDescription, FormatQueryResults, etc.) but return types are not formally documented in the schema.
Get detailed description of a table including column names and types.
Execute a SELECT query on the database. Returns results in a formatted table.
Get database statistics including table counts, size information, and general database info.
Get schema information for all tables or tables matching a pattern. Use % as wildcard.
Get table relationships showing foreign key dependencies between tables.
Get a list of all tables in the database.
Output schemas completely undocumented for 4 of 6 tools (GetDatabaseStats, GetTableRelationships, ListTables implicitly, GetSchemaInfo implicitly). LLM cannot know what fields to extract or plan chained calls without seeing response structure.
Error messages are generic strings ('Error describing table' or 'Error executing query') with no recovery guidance. Pattern requires: 'Try search_users() with partial name' or 'Invalid status, must be one of: open, in_progress, resolved'. LLMs cannot self-correct from vague errors.
ExecuteQuery enforces 'SELECT or WITH only' but error message does not explain WHY (security: DML prevention) or what the LLM should do next. Missing: actionable error like 'Only SELECT and WITH statements are allowed (DML statements create, update, delete are not supported).'
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 47 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 46 | - | v1 |
No pagination or result limits documented for ListTables, GetSchemaInfo, GetTableRelationships. If a database has 1000+ tables or relationships, results could be huge. Pattern requires limits (cap 20-50) and offer pagination. Baseline: 100% of A+ tools return paginated/limited results.
All tools return free-text formatted strings (StringBuilder output), not structured JSON. LLM must parse unstructured text to extract table names, column info, relationships. Pattern requires: structured objects with typed fields (e.g., return {tables: [{name, schema, rowCount}]} instead of 'Table: dbo.Users\n---\nColumns: ...'). Wastes tokens and increases hallucination.
No tool annotations present (readOnlyHint, destructiveHint, idempotentHint). All 6 tools are READ_ONLY, but this is not declared in tool metadata. Current spec (2026-07-28) includes tool annotations; their absence means LLM cannot distinguish read-safe tools from destructive ones at protocol level.