MSSQL MCP Server
The MSSQL MCP Server enables natural language interaction with Microsoft SQL Server databases through LLMs like Claude, facilitating comprehensive data manipulation and schema management.
Query Data: Execute SELECT queries to retrieve data from tables
Insert Data: Add single or multiple records to database tables
Update Data: Modify existing table data with mandatory WHERE clause for security
Create Tables: Define new tables with custom columns and data types
Drop Tables: Remove entire tables from the database
Create Indexes: Add indexes on columns for improved query performance
Describe Tables: Retrieve schema information including columns and data types
List Tables: View all available tables, with optional schema filtering
Secure Connections: Handle database connections securely with optional read-only mode
Enables querying, reading, and modifying Microsoft SQL Server databases (part of the .NET ecosystem) through natural language, including executing SQL operations, managing tables and indexes, and performing CRUD operations on data.
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 order 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 LLMs like Claude to interact with Microsoft SQL Server databases through natural language.
Features
🔍 Query your SQL Server database using natural language
📊 Read, insert, update, and delete data
🏗️ Create and manage tables and indexes
🔒 Secure connection handling with optional read-only mode
⚡ Direct TypeScript execution with tsx - no build step required
Related MCP server: ExecuteAutomation Database Server
Quick Start
Option 1: Use directly from GitHub with npx (Recommended)
No installation needed! Just configure Claude Desktop:
Windows
Add to %APPDATA%\Claude\claude_desktop_config.json:
{
"mcpServers": {
"mssql": {
"type": "stdio",
"command": "cmd",
"args": ["/c", "npx", "-y", "github:EvilPhatBoi/McpSqlServer"],
"env": {
"SERVER_NAME": "your-server.database.windows.net",
"DATABASE_NAME": "your-database",
"SQL_USERNAME": "your-username",
"SQL_PASSWORD": "your-password",
"PORT": "1433",
"ENCRYPT": "true",
"TRUST_SERVER_CERTIFICATE": "false",
"CONNECTION_TIMEOUT": "30",
"READONLY": "false"
}
}
}
}macOS/Linux
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"mssql": {
"type": "stdio",
"command": "npx",
"args": ["-y", "github:EvilPhatBoi/McpSqlServer"],
"env": {
"SERVER_NAME": "your-server.database.windows.net",
"DATABASE_NAME": "your-database",
"SQL_USERNAME": "your-username",
"SQL_PASSWORD": "your-password",
"PORT": "1433",
"ENCRYPT": "true",
"TRUST_SERVER_CERTIFICATE": "false",
"CONNECTION_TIMEOUT": "30",
"READONLY": "false",
"DEBUG": "false"
}
}
}
}Note for legacy SQL Servers: If you experience SSL/TLS connection issues with older SQL Server versions, try:
"ENCRYPT": "false"to disable TLS/SSL encryption"TRUST_SERVER_CERTIFICATE": "true"to trust self-signed certificates"CONNECTION_TIMEOUT": "60"or higher for slower connections"DEBUG": "true"to see detailed connection logs
Option 2: Clone and run locally
Clone the repository:
git clone https://github.com/EvilPhatBoi/McpSqlServer.git
cd McpSqlServerInstall dependencies:
npm installCreate
.envfile:
cp .env.example .env
# Edit .env with your database credentialsConfigure Claude Desktop to point to your local installation:
{
"mcpServers": {
"mssql": {
"type": "stdio",
"command": "npx",
"args": ["tsx", "C:/path/to/McpSqlServer/src/index.ts"],
"env": {
"SERVER_NAME": "your-server.database.windows.net",
"DATABASE_NAME": "your-database",
"SQL_USERNAME": "your-username",
"SQL_PASSWORD": "your-password"
}
}
}
}Environment Variables
Variable | Description | Default |
| SQL Server hostname | Required |
| Database name | Required |
| SQL username | Required |
| SQL password | Required |
| SQL Server port |
|
| Enable TLS/SSL encryption |
|
| Trust self-signed certificates |
|
| Connection timeout in seconds |
|
| Enable read-only mode |
|
| Enable debug logging |
|
Usage Examples
Once configured, you can interact with your database using natural language in Claude:
"Show me all customers from New York"
"Create a table called products with columns for id, name, and price"
"Update the price of product with id 5 to 29.99"
"List all tables in the database"
"Describe the structure of the orders table"
Development
Running locally with tsx:
npm run start # Run the server
npm run dev # Run with watch modeType checking:
npm run typecheckSecurity Notes
Never commit
.envfiles with real credentialsUse read-only mode (
READONLY=true) in production for safetyThe server requires WHERE clauses for updates to prevent accidental mass updates
Consider using environment-specific credentials
Troubleshooting
Connection issues
Ensure your SQL Server allows remote connections
Check firewall rules for SQL Server port (default 1433, or your custom PORT setting)
Verify credentials and server name
Enable debug logging by setting
DEBUG=truein your environment variables
SSL/TLS connection issues
For older SQL Server versions that don't support modern TLS, set
ENCRYPT=falseIf using self-signed certificates, set
TRUST_SERVER_CERTIFICATE=trueFor connection timeout issues, increase
CONNECTION_TIMEOUTto 60 or higherCheck that your SQL Server accepts the TLS version your Node.js supports
Debug mode
To enable detailed logging for troubleshooting:
"env": {
"DEBUG": "true",
// ... other environment variables
}Authentication errors
This server uses SQL authentication, not Windows authentication
Ensure SQL authentication is enabled on your server
Check that the SQL user has appropriate permissions
License
MIT
Available Tools
8 toolscreate_indexC
Creates an index on a specified column or columns in an MSSQL Database table
| Name | Required | Description | Default |
|---|---|---|---|
| schemaName | No | Name of the schema containing the table | |
| tableName | Yes | Name of the table to create index on | |
| indexName | Yes | Name for the new index | |
| columns | Yes | Array of column names to include in the index | |
| isUnique | No | Whether the index should enforce uniqueness (default: false) | |
| isClustered | No | Whether the index should be clustered (default: false) |
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 |
|---|---|---|---|
| tableName | Yes | Name of the table to create | |
| columns | Yes | Array of column definitions (e.g., [{ name: 'id', type: 'INT PRIMARY KEY' }, ...]) |
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 |
|---|---|---|---|
| tableName | Yes | Name of the table to insert data into | |
| data | Yes |
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
- 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, create_table, describe_table, drop_table, insert_data, list_table, read_data, and update_data each target specific database operations with no overlap in functionality. The descriptions clearly differentiate between schema operations, data manipulation, and querying.
All tools follow a consistent verb_noun pattern with snake_case throughout. The naming convention is perfectly uniform: create_index, create_table, describe_table, drop_table, insert_data, list_table, read_data, and update_data all maintain the same structure and style.
With 8 tools, this server is well-scoped for MSSQL database operations. Each tool earns its place by covering essential database tasks: schema management (create/drop/describe/list tables, create index) and data operations (insert/read/update). The count is appropriate for the domain without being overwhelming.
The tool surface covers most essential MSSQL operations well, including table lifecycle management and core CRUD operations. However, there are minor gaps: no delete_data tool (only update_data with WHERE clause), no transaction management tools, and no stored procedure or view operations. Agents can work around these gaps using existing tools.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
- mcpOAuthcom.gibsonai
GibsonAI MCP server: manage your databases with natural language
The BigQuery remote MCP server is a fully managed service that uses the Model Context Protocol to connect AI applications and LLMs to BigQuery data sources. It provides secure, standardized tools for AI agents to list datasets and tables, retrieve schemas, generate and execute SQL queries through natural language, and analyze data—enabling direct access to enterprise analytics data without requiring manual SQL coding.
The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.
Related MCP Servers
- AlicenseBqualityDmaintenanceA Model Context Protocol server that enables secure interaction with Microsoft SQL Server databases, allowing AI assistants to list tables, read data, and execute SQL queries through a controlled interface.1391MIT
- AlicenseNot gradedqualityFmaintenanceA Model Context Protocol server that enables LLMs like Claude to interact with SQLite and SQL Server databases, allowing for schema inspection and SQL query execution.544 npm380MIT
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that allows Large Language Models like Claude to execute SQL queries, explore database schemas, and maintain persistent connections to SQL Server databases.-
- AlicenseBqualityDmaintenanceA Model Context Protocol server that enables AI assistants (Cursor, Windsurf, Claude Code) to interact with Microsoft SQL Server databases by providing connectivity through environment-configurable connections.8537 npm8MIT