An MCP server for SQL Server that provides tools for querying databases, executing stored procedures, exploring schema, and managing transactions with read-only and mutable modes.
Server provides 12 well-named tools with complete input schemas and descriptions. Naming follows verb_noun convention (describe_*, list_*, execute_*, search_*, get_*). All tools have descriptions (avg ~120 chars, within 10-1024 range). Input parameters are typed and described. However, output schemas are not documented in the provided code, LLMs cannot see what fields to expect from responses. Error handling is present but generic (no recovery guidance or actionable error messages visible). No tool annotations (readOnlyHint/destructiveHint) despite clear risk stratification (READ_ONLY vs WRITE). Parameter descriptions lack format constraints (e.g., maxRows/timeoutSeconds have no min/max bounds stated). Missing dependency hints for multi-step workflows (e.g., 'Call list_tables() first to discover table names').
Describes a stored procedure, including parameters, definition, and first result-set metadata when SQL Server can infer it.
Describes a table with columns, primary key columns, and outgoing foreign keys.
Executes a single read-only SELECT query with bounded rows and timeout.
Executes a stored procedure in mutable mode and returns result sets, output parameters, and return value.
Executes one or more whitelisted mutable SQL statements atomically inside a single SQL Server transaction when mutable mode is enabled.
Executes a single mutable SQL statement when mutable mode is explicitly enabled.
Output schemas not documented. LLMs cannot see what fields describe_table, execute_read_query, or list_tables return. This forces agents to guess field names for downstream tool calls and risks broken chaining.
No tool annotations (readOnlyHint/destructiveHint/idempotentHint). Tools are marked READ_ONLY or WRITE in metadata, but this is not exposed in the MCP tool definition. Agents cannot distinguish safe from destructive operations without reading descriptions.
Numeric parameters (maxRows, timeoutSeconds, limit) lack min/max bounds in descriptions. LLMs can pass absurd values (maxRows=999999, timeoutSeconds=86400) that break performance or timeout. Descriptions should state 'maxRows: 1-10000 (default 100)' etc.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2025-06-18+ | v2 |
Returns a bounded sample of rows from a target table.
Lists accessible SQL Server databases with optional filtering.
Lists stored procedures in a target database with optional schema and name filtering.
Lists tables in a target database with optional schema and name filtering.
Searches columns by name in a target database, optionally filtered by schema.
Returns SQL Server connection context and MCP safety settings.
No error recovery guidance. Error responses likely return raw SQL Server errors or generic messages. Descriptions should include 'If query times out, reduce maxRows or add WHERE clauses' or 'If procedure not found, call list_stored_procedures() first.'
Missing dependency hints in discovery tools. list_tables and list_stored_procedures should state 'Call this first to discover available objects before executing queries.' This guides multi-step agent planning.