MCP server for SQL Server database operations and diagnostics
Server has 9 tools with basic schemas and descriptions, but significant gaps limit production readiness. All tools have descriptions (10-80 chars, mostly adequate) and input schemas with types. However, descriptions lack depth on WHEN to use each tool and dependencies between them. No output schemas documented. Parameters lack constraints (enums, ranges). Error handling is absent, no guidance on retryability, user-fixable errors, or recovery paths. No tool annotations (readOnlyHint, etc.). Tools are well-named with action verbs (get_*, exec_*) but lack composition guidance. Security: credentials appear to be injected server-side (good), but no audit logging visible in code.
Execute a diagnostic SQL query safely with statistics collection.
Get index usage statistics for a SQL Server database.
Get missing indexes recommendations for a SQL Server database.
Get table I/O statistics for a SQL Server database.
Get/Scan table names in specific database.
Get table row counts in specific database.
Get the schema of a SQL Server table by connecting to SQLServer database.
No output schemas documented. LLMs cannot predict response structure, forcing them to guess field names and types for downstream processing. All 9 tools return query results but lack formal response documentation.
No error handling or recovery guidance. Tools lack actionable error messages. If a query fails or a database is unreachable, the LLM receives no guidance on retryability, user-fixable issues, or next steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | 2026-07-28+ | v2 |
Get the top 10 most expensive queries in a SQL Server database.
Get the top wait events in a SQL Server database.
Parameter descriptions lack constraints and format guidance. 'db' and 'db_schema' parameters have minimal descriptions. No enum constraints, regex patterns, or length limits. LLMs cannot validate input before calling.
Tool descriptions lack WHEN-to-use guidance and dependencies. E.g., 'get_missing_indexes' does not explain when to call it vs 'get_index_usage_stats', or that it requires the database to have been running for a period to accumulate stats.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools are read-only but lack explicit annotation. This prevents clients from optimizing caching, retry logic, or UI presentation.