MSSQL MCP Server
This MCP server enables AI assistants to interact with both local SQL Server and Azure SQL Database through natural language queries and database operations.
Data Operations:
Query Data - Execute SELECT queries to retrieve data with built-in security to prevent destructive operations
Insert Data - Add single or multiple records using parameterized queries
Update Data - Modify existing records with required WHERE clauses for security
Schema Management:
Create Tables - Define new tables with custom column specifications and constraints
Drop Tables - Remove tables from the database
Create Indexes - Add clustered or non-clustered, unique or non-unique indexes for performance optimization
List Tables - View all tables or filter by specific schemas
Describe Table Schema - Inspect table structure including column names, data types, and constraints
Security Features:
SQL injection prevention through parameterized queries
Query validation and sanitization
Required WHERE clauses for update operations
Read-only mode support
Connection Support:
Local SQL Server (username/password or Windows authentication)
Azure SQL Database (Azure AD authentication)
Self-signed certificate support for local development
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MSSQL MCP Servershow me the top 10 customers by total purchase amount"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MSSQL MCP Server
A Model Context Protocol (MCP) server that enables AI assistants to interact with both local SQL Server and Azure SQL Database through natural language.
π What Makes This Special?
This MCP server solves a critical limitation of existing solutions by supporting both local SQL Server and Azure SQL Database connections. While the original Azure-Samples implementation only works with Azure SQL Database, this enhanced version enables:
π Local Development: Connect to local SQL Server instances using username/password authentication
βοΈ Azure Cloud: Full Azure SQL Database support with Azure AD authentication
π Seamless Switching: Use the same tools for both environments
Quick Example:
You: "Show me all customers from New York"
AI: *securely queries your database and returns results in plain English*
You: "Create a table for storing product reviews"
AI: *generates and executes the appropriate CREATE TABLE statement*π¦ Quick Start
Prerequisites
Node.js 18+
SQL Server (local) or Azure SQL Database
AI Assistant: Claude Desktop or VS Code Agent
Installation
git clone https://github.com/Nirmal123K/mssql-mcp.git
cd mssql-mcp-server
npm install && npm run buildConfiguration
Local SQL Server:
export SERVER_NAME="localhost"
export DATABASE_NAME="your_database"
export SQL_USER="your_username"
export SQL_PASSWORD="your_password"
export TRUST_SERVER_CERTIFICATE="true"Azure SQL Database:
export SERVER_NAME="your-server.database.windows.net"
export DATABASE_NAME="your_database"
# Uses Azure AD authentication (run 'az login' first)βοΈ AI Assistant Setup
Claude Desktop
Add to claude_desktop_config.json:
Local SQL Server:
{
"mcpServers": {
"mssql": {
"command": "node",
"args": ["/path/to/mssql-mcp-server/dist/index.js"],
"env": {
"SERVER_NAME": "localhost",
"DATABASE_NAME": "your_database",
"SQL_USER": "your_username",
"SQL_PASSWORD": "your_password",
"TRUST_SERVER_CERTIFICATE": "true"
}
}
}
}Azure SQL Database:
{
"mcpServers": {
"mssql": {
"command": "node",
"args": ["/path/to/mssql-mcp-server/dist/index.js"],
"env": {
"SERVER_NAME": "your-server.database.windows.net",
"DATABASE_NAME": "your_database",
"READONLY": "true"
}
}
}
}VS Code Agent
Create .vscode/mcp.json with similar configuration using "type": "stdio".
Config Locations:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
π Environment Variables
Variable | Required | Description | Example |
| β | SQL Server hostname |
|
| β | Target database name |
|
| π | Username (local SQL Server only) |
|
| π | Password (local SQL Server only) |
|
| β | Restrict to read-only operations |
|
| β | Trust self-signed certificates |
|
π = Required for local SQL Server, not needed for Azure SQL Database
β Verification
# Test the MCP server
echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}' | node dist/index.jsπ οΈ Available Tools
Tool | Purpose | Example |
| Query data with SELECT | "Show customers from New York" |
| Add new records | "Insert new product with price $99" |
| Modify existing data | "Update order status to shipped" |
| Create new tables | "Create table for reviews" |
| Add database indexes | "Create index on customer email" |
| Remove tables | "Drop temporary table" |
| Show all tables | "What tables exist?" |
| Show table structure | "Describe customers table" |
Security Features:
β SQL injection prevention
β Query validation and sanitization
β Required WHERE clauses for updates
β Read-only mode support
π Documentation
For detailed information, see our comprehensive guides:
Usage Examples - Practical examples and real-world scenarios
Advanced Configuration - Complex setups and enterprise deployment
Best Practices - Performance optimization and security guidance
Troubleshooting - Common issues and solutions
Platform Notes - Windows, macOS, Linux, and Docker specifics
οΏ½ Credits and Attribution
Original Work
This project is a fork of the Azure-Samples/SQL-AI-samples repository, specifically building upon the MssqlMcp implementation created by Microsoft and the Azure team.
Original Repository: Azure-Samples/SQL-AI-samples
Original Authors: Microsoft Corporation and the Azure team
Original License: MIT License
Original Focus: Azure SQL Database with Azure AD authentication
Key Enhancement
This fork extends the original Azure-only MCP server to support local SQL Server databases with username/password authentication, making it accessible for:
π Local Development: Connect to local SQL Server instances
π’ On-Premises Deployments: Support enterprise SQL Server installations
π Hybrid Environments: Seamlessly switch between local and Azure databases
π Broader Accessibility: Remove Azure dependency for local development
What We Added
Feature | Original Repository | This Fork |
Azure SQL Database | β Azure AD only | β Azure AD support |
Local SQL Server | β Not supported | β Username/password auth |
Authentication Methods | 1 (Azure AD) | 3 (Azure AD, SQL Server, Windows) |
Target Audience | Azure users only | Local + Azure + On-premises |
Development Setup | Requires Azure account | Works with local SQL Server |
Acknowledgments
We are deeply grateful to Microsoft and the Azure team for creating the foundational architecture, security implementation, and tool design that made this enhanced version possible.
This enhanced version would not exist without their excellent foundational work.
License: MIT License - see LICENSE file for details.
Available Tools
8 toolscreate_indexC
Creates an index on a specified column or columns in an MSSQL Database table
| Name | Required | Description | Default |
|---|---|---|---|
| columns | Yes | Array of column names to include in the index | |
| indexName | Yes | Name for the new index | |
| isClustered | No | Whether the index should be clustered (default: false) | |
| isUnique | No | Whether the index should enforce uniqueness (default: false) | |
| schemaName | No | Name of the schema containing the table | |
| tableName | Yes | Name of the table to create index on |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool creates an index, implying a write operation, but lacks details on permissions required, whether the operation is reversible, potential impacts on database performance, or error handling. This leaves significant gaps in understanding the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence that efficiently conveys the core action and target without unnecessary words. It is front-loaded with the key information, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a database index creation tool with no annotations and no output schema, the description is insufficient. It lacks details on behavioral traits (e.g., side effects, error conditions), usage context, and expected outcomes, making it incomplete for safe and effective tool invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with all parameters well-documented in the input schema (e.g., columns, indexName, isClustered). The description adds no additional parameter semantics beyond what the schema provides, so it meets the baseline for adequate but not enhanced coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('creates an index') and target ('on a specified column or columns in an MSSQL Database table'), making the purpose evident. However, it does not differentiate from sibling tools like create_table or update_data, which also modify database structures, leaving room for ambiguity in tool selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. For instance, it does not mention prerequisites (e.g., table must exist), performance implications, or when to choose indexing over other database operations, leaving the agent without context for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_tableC
Creates a new table in the MSSQL Database with the specified columns.
| Name | Required | Description | Default |
|---|---|---|---|
| columns | Yes | Array of column definitions (e.g., [{ name: 'id', type: 'INT PRIMARY KEY' }, ...]) | |
| tableName | Yes | Name of the table to create |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. While 'Creates' implies a write operation, it doesn't specify critical details like whether this requires admin permissions, if it's idempotent, what happens on conflicts, or error handling. For a database mutation tool, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded with the core action and resource, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a database table creation tool with no annotations and no output schema, the description is insufficient. It lacks details on permissions, error cases, return values, or how it interacts with sibling tools, leaving the agent with incomplete context for safe and effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description mentions 'specified columns' which aligns with the 'columns' parameter, but adds no additional meaning beyond what the schema provides. With 100% schema description coverage, the schema already documents both parameters thoroughly, so the description meets the baseline without enhancing parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Creates') and resource ('new table in the MSSQL Database'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'create_index' or 'insert_data', which would require more specific context about when to create a table versus other operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., database permissions), when not to use it (e.g., if a table already exists), or refer to sibling tools like 'drop_table' for cleanup or 'list_table' for checking existing tables.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_tableA
Describes the schema (columns and types) of a specified MSSQL Database table.
| Name | Required | Description | Default |
|---|---|---|---|
| tableName | Yes | Name of the table to describe |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states what the tool does but does not disclose behavioral traits such as whether it requires specific permissions, how it handles errors (e.g., invalid table names), or if it has rate limits. This is a significant gap for a tool with no annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the purpose without unnecessary words. It directly communicates the tool's function, making it appropriately sized and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is minimal but adequate for a simple read operation. It covers the basic purpose but lacks details on behavioral aspects and output format, which are important for a tool with no structured data support.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the single parameter 'tableName' with its description. The description adds no additional parameter semantics beyond what the schema provides, such as format examples or constraints, meeting the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('describes') and resource ('schema of a specified MSSQL Database table'), specifying it includes columns and types. It distinguishes from siblings like list_table (which likely lists table names) and read_data (which reads actual data).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when schema information is needed, but does not explicitly state when to use this tool versus alternatives like list_table or create_table. It provides basic context but lacks explicit guidance on prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drop_tableC
Drops a table from the MSSQL Database.
| Name | Required | Description | Default |
|---|---|---|---|
| tableName | Yes | Name of the table to drop |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('Drops') which implies a destructive mutation, but it doesn't elaborate on critical traits such as irreversibility, permission requirements, or potential side effects (e.g., data loss, dependencies). This is a significant gap for a destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with zero wasteβit states the action and resource efficiently. It's appropriately sized and front-loaded, making it easy for an agent to parse quickly without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's high complexity (destructive database operation) and lack of annotations or output schema, the description is incomplete. It fails to address critical context like safety warnings, return values, or error conditions, which are essential for proper agent usage in this scenario.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with the single parameter 'tableName' clearly documented in the schema. The description doesn't add any additional meaning or context beyond what the schema provides, such as format examples or constraints, so it meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Drops') and resource ('a table from the MSSQL Database'), making the purpose specific and understandable. However, it doesn't explicitly differentiate from sibling tools like 'create_table' or 'describe_table' beyond the obvious verb difference, which keeps it from a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., table must exist), exclusions (e.g., irreversible nature), or comparisons to siblings like 'list_table' or 'update_data', leaving the agent with minimal context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insert_dataA
Inserts data into an MSSQL Database table. Supports both single record insertion and multiple record insertion using standard SQL INSERT with VALUES clause. FORMAT EXAMPLES: Single Record Insert: { "tableName": "Users", "data": { "name": "John Doe", "email": "john@example.com", "age": 30, "isActive": true, "createdDate": "2023-01-15" } } Multiple Records Insert: { "tableName": "Users", "data": [ { "name": "John Doe", "email": "john@example.com", "age": 30, "isActive": true, "createdDate": "2023-01-15" }, { "name": "Jane Smith", "email": "jane@example.com", "age": 25, "isActive": false, "createdDate": "2023-01-16" } ] } GENERATED SQL FORMAT:
Single: INSERT INTO table (col1, col2) VALUES (@param1, @param2)
Multiple: INSERT INTO table (col1, col2) VALUES (@param1, @param2), (@param3, @param4), ... IMPORTANT RULES:
For single record: Use a single object for the 'data' field
For multiple records: Use an array of objects for the 'data' field
All objects in array must have identical column names
Column names must match the actual database table columns exactly
Values should match the expected data types (string, number, boolean, date)
Use proper date format for date columns (YYYY-MM-DD or ISO format)
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | ||
| tableName | Yes | Name of the table to insert data into |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing important behavioral traits: it explains the SQL generation format, specifies important rules about data structure consistency, column name matching, and data type requirements. It also clarifies the single vs. multiple record distinction. The main gap is lack of information about permissions, transaction behavior, or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose statement, format examples, generated SQL format, important rules). While comprehensive, it could be more concise by eliminating some redundancy between the format examples and rules. Every sentence adds value, but the examples are quite detailed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description provides substantial context about behavior, parameters, and constraints. It covers the core functionality thoroughly but lacks information about return values, error conditions, or performance characteristics. Given the complexity of database operations, some additional context about what happens on success/failure would be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds significant value beyond the 50% schema coverage. While the schema only describes basic structure, the description provides detailed format examples for both single and multiple records, explains the 'data' field's dual nature with clear rules, specifies column name matching requirements, and provides data type guidance. This fully compensates for the schema's limited coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('inserts data'), target resource ('MSSQL Database table'), and scope ('supports both single record insertion and multiple record insertion'). It distinguishes from siblings like 'update_data' by focusing on insertion rather than modification, and from 'create_table' by operating on existing tables rather than creating new ones.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (inserting data into tables) and implicitly distinguishes it from alternatives like 'update_data' (for modifying existing records) and 'create_table' (for creating table structures). However, it doesn't explicitly state when NOT to use this tool or name specific alternative tools for related operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tableC
Lists tables in an MSSQL Database, or list tables in specific schemas
| Name | Required | Description | Default |
|---|---|---|---|
| parameters | No | Schemas to filter by (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the filtering capability by schemas but doesn't describe what information is returned (e.g., table names, metadata, pagination), whether it requires specific permissions, or any rate limits. This leaves significant gaps for a tool that interacts with a database.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core functionality. It could be slightly improved by specifying the return format, but it avoids redundancy and wastes no words, making it appropriately concise for a simple listing tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what the output looks like (e.g., list of table names, structured data), potential errors, or behavioral traits like permissions needed. For a database tool with no structured safety hints, this leaves the agent under-informed about critical usage aspects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the parameter 'parameters' documented as an optional array of strings for schema filtering. The description adds marginal value by clarifying this is for filtering by schemas, but doesn't provide examples, format details, or explain what happens when no schemas are specified beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Lists') and resource ('tables in an MSSQL Database'), making the purpose immediately understandable. It distinguishes between two modes (all tables vs. tables in specific schemas), though it doesn't explicitly differentiate from sibling tools like 'describe_table' or 'read_data' which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to use 'list_table' over 'describe_table' (which might provide detailed metadata) or 'read_data' (which reads table contents), nor does it specify prerequisites like database connection requirements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_dataA
Executes a SELECT query on an MSSQL Database table. The query must start with SELECT and cannot contain any destructive SQL operations for security reasons.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | SQL SELECT query to execute (must start with SELECT and cannot contain destructive operations). Example: SELECT * FROM movies WHERE genre = 'comedy' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses key behavioral traits: it's a read-only operation (implied by SELECT-only), has security constraints (no destructive SQL), and targets MSSQL Database. However, it lacks details on permissions, error handling, result format, or rate limits, leaving gaps for a tool with no annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose and followed by a security constraint. Every word earns its place with no redundancy or fluff, making it highly efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is moderately complete for a simple query tool. It covers the purpose and basic constraints but lacks details on return values, error cases, or advanced usage, which could be critical for an AI agent to handle effectively in a database context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the 'query' parameter thoroughly. The description adds minimal value beyond the schema by reiterating the SELECT and non-destructive constraints, but does not provide additional syntax, format, or usage nuances. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Executes a SELECT query') and target resource ('on an MSSQL Database table'), distinguishing it from siblings like create_table or insert_data. It precisely defines the tool's function without being vague or tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (for SELECT queries only) and implicitly excludes destructive operations, but it does not explicitly name alternatives like list_table for metadata queries or when not to use it versus other read operations. It offers solid guidance but lacks explicit sibling comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_dataB
Updates data in an MSSQL Database table using a WHERE clause. The WHERE clause must be provided for security.
| Name | Required | Description | Default |
|---|---|---|---|
| tableName | Yes | Name of the table to update | |
| updates | Yes | Key-value pairs of columns to update. Example: { 'status': 'active', 'last_updated': '2025-01-01' } | |
| whereClause | Yes | WHERE clause to identify which records to update. Example: "genre = 'comedy' AND created_date <= '2025-07-05'" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the WHERE clause requirement 'for security,' which hints at a safety constraint, but lacks details on permissions needed, whether updates are reversible, potential side effects, or error handling. For a mutation tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences that are front-loaded and to the point, avoiding unnecessary verbosity. However, it could be slightly more structured by explicitly separating the purpose from the security note for better clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a database update tool with no annotations and no output schema, the description is incomplete. It lacks information on return values, error conditions, transactional behavior, or how updates interact with existing data, making it inadequate for safe and effective agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters thoroughly. The description adds no additional meaning beyond what's in the schema (e.g., it doesn't explain parameter interactions or provide further examples), resulting in a baseline score of 3 where the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Updates data') and resource ('in an MSSQL Database table'), making the purpose understandable. However, it doesn't explicitly differentiate this from sibling tools like 'insert_data' or 'read_data' beyond the 'WHERE clause' mention, which is more of a technical requirement than a functional distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by specifying 'using a WHERE clause' and noting it's 'for security,' which suggests this tool should be used for targeted updates rather than bulk operations. However, it doesn't explicitly state when to use this versus alternatives like 'insert_data' or provide exclusions, leaving some ambiguity for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v1.0.0- First observed
create_index - First observed
create_table - First observed
describe_table - First observed
drop_table - First observed
insert_data - First observed
list_table - First observed
read_data - First observed
update_data
TDQS
Scored across 8 tools
Each tool has a clearly distinct purpose with no ambiguity: create_index (index creation), create_table (table creation), describe_table (schema inspection), drop_table (table deletion), insert_data (data insertion), list_table (table listing), read_data (data querying), and update_data (data modification). The tools cover different aspects of database operations without overlap.
All tools follow a consistent verb_noun pattern (e.g., create_table, describe_table, drop_table, insert_data, list_table, read_data, update_data). The naming is uniform and predictable, making it easy for agents to understand the action and target resource.
With 8 tools, this server is well-scoped for MSSQL database operations. Each tool serves a specific and necessary function in the domain, such as table management, data manipulation, and schema inspection, without being overly sparse or bloated.
The tool set provides strong coverage for core database operations, including table lifecycle (create, describe, list, drop), data CRUD (insert, read, update), and index creation. A minor gap exists with no explicit tool for deleting data (e.g., delete_data) or managing indexes beyond creation, but agents can work around this using update_data or other methods.
Related MCP Connectors
- mcpOAuthcom.gibsonai
GibsonAI MCP server: manage your databases with natural language
Official Microsoft MCP Server to query Microsoft Entra data using natural language
Query your warehouse or a CSV with Claude/ChatGPT over MCP, governed by table-level ACL + audit.
Draxlr's remote MCP server connects AI assistants to your SQL databases and dashboards. Explore schemas, run read-only queries, manage saved queries and dashboards, and export results, all with row-level security so each user sees only their own data.