An MCP server that provides tools for connecting to and querying SQL Server databases, including database/schema/table listing, table structure inspection, and read-only query execution.
SQL Server MCP server has clear, well-structured tool definitions with complete input schemas and descriptions. All 6 tools follow verb_noun naming (Connect, DescribeTable, ExecuteQuery, ListDatabases, ListSchemas, ListTables). Descriptions are present and actionable (avg ~80 chars). However, output schemas are entirely undocumented, responses are free-text strings rather than structured objects, forcing LLMs to parse unstructured data. No pagination support despite tools that could return large result sets (ListDatabases, ListTables). Error handling returns plain strings but lacks recovery guidance. No tool annotations (readOnlyHint, destructiveHint). Missing parameter constraints (enums, ranges) and dependency documentation.
Connects to a SQL Server instance. Port is optional, defaults to 1433.
Describes the structure of a table including columns, types, nullability, primary keys and foreign keys.
Executes a read-only SELECT query against the specified database.
Lists all databases available on the connected SQL Server instance.
Lists all schemas in the specified database.
Lists all tables in the specified schema and database.
Output schemas completely undocumented. All tools return free-text strings (e.g., 'Table: schema.table\n---\nColumn | Type | Nullable...') instead of structured JSON objects. LLMs cannot parse unstructured output reliably, wasting tokens and increasing hallucination risk.
No pagination support. ListDatabases, ListSchemas, and ListTables return all results as a single string. Large result sets will blow context windows and degrade LLM reasoning. No limit parameter, no offset/cursor, no total count.
No tool annotations. Tools lack readOnlyHint, destructiveHint, or idempotentHint metadata. ExecuteQuery enforces read-only at runtime but does not declare it via annotation. Agents cannot determine safety without reading descriptions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
Missing parameter constraints and dependency hints. ExecuteQuery accepts arbitrary SQL strings with runtime keyword filtering (no enum). Connect has no validation hints for port range (1-65535). No documentation of prerequisites (e.g., 'Call Connect first').
Error responses lack recovery guidance. Errors return plain strings ('Not connected. Please call connect first.', 'Error executing query: {ex.Message}') without actionable next steps or error classification (retryable vs fatal).