Session-based SQL Server access over HTTP via MCP (Model Context Protocol). Provides tools for connecting to SQL Server databases, executing queries, and retrieving execution plans with per-user credential management and audit logging.
Server has solid naming conventions (verb_noun pattern), comprehensive parameter descriptions, and clear tool purposes. All 11 tools have descriptions (avg ~150 chars, within baseline 194). Input schemas are present with types and descriptions for all parameters. However, output schemas are not documented, responses are described narratively but lack formal JSON Schema definitions. Error handling is present but generic (returns dict with 'error' key without recovery guidance). No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. Session-based architecture is well-designed but adds complexity for LLM reasoning.
Open a session to a SQL Server database and return a session_id; this is the required first step before any other tool. Missing credentials are prompted for once and cached in memory; on a login failure nothing is cached, so just retry connect.
Describe the schema of a table: column names, types, nullability, defaults, and constraints.
Close an active SQL Server session and release its connection. If you don't have the session_id, call list_sessions first.
Execute a single SQL statement on the session and return the rows as table, JSON, or CSV. Read vs. write is enforced by the login's own permissions, so prefer efficient read-only queries.
Return the SQL Server execution plan for a statement as Showplan XML (requires SHOWPLAN permission). Default actual=false gives the estimated plan without running the statement; actual=true runs it and adds real runtime row/time counters.
Output schemas not documented. Tools return structured data (headers, rows, formatted strings) but no formal JSON Schema definitions provided. LLMs cannot reliably extract fields for downstream tool chaining.
No tool annotations (readOnlyHint/destructiveHint/idempotentHint). Tools declare Risk levels (READ_ONLY, WRITE) in metadata but MCP spec requires tool annotations for agent safety. execute_sql marked WRITE but no destructiveHint annotation.
Error handling lacks recovery guidance. Errors return dict with 'error' key but do not suggest next steps. E.g., 'Login failed' should suggest 'Call connect() again with correct credentials' or 'Check server/database name with list_databases()'.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | <=2025-11-25 | v2 |
Fetch a sample of rows from a table to preview its data and structure.
List all accessible databases on the connected SQL Server instance with their state and properties.
List active SQL Server sessions with their server, database, and usage details. Use it to find a session_id or check whether you are already connected to a target.
List all stored procedures in the connected database with their schema and parameter information.
List all tables in the connected database with their schema, row count, and size information.
List all views in the connected database with their schema and definition.
Session-based architecture requires LLM to manage session_id state across calls. Every tool except connect/list_sessions requires session_id parameter. No automatic session reuse or discovery, LLM must call list_sessions() first to find active sessions, adding cognitive load.
No pagination support on list_* tools. list_tables, list_databases, list_views, list_stored_procedures return all results without limit/offset. Large schemas could exhaust context window.