claude-database-tools
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., "@claude-database-toolsshow me the schema for the dbo.Users table"
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.
claude-database-tools
SQL Server CLI and MCP server for Claude Code.
Why This Tool?
This project is an alternative to Microsoft's official mssql MCP server with some key advantages:
SQL Server Authentication: Supports SQL Server authentication (username/password), not just Windows/Entra authentication. Ideal for development environments, Docker containers, or scenarios where integrated auth isn't available.
CLI-First Design: The CLI tools can be used directly from a Claude Code skill, giving you database access without requiring MCP server setup. This is useful when you want simpler configuration or need to work in environments where MCP servers are problematic.
MCP Server Included: Also provides an MCP server if you prefer that integration approach.
Related MCP server: SQL Server MCP
Features
CLI Tool: Command-line interface for SQL Server operations
MCP Server: Model Context Protocol server for Claude integration (experimental)
Security: Built-in SQL injection prevention and query validation
Operations: List tables, describe schemas, query data, insert/update/delete records, DDL generation
Installation
git clone https://github.com/cyronius/claude-database-tools.git
cd claude-database-tools
npm install
npm run buildConfiguration
Copy .env.example to .env and configure your database connection:
cp .env.example .envEdit .env with your SQL Server credentials:
SQL_SERVER=localhost
SQL_DATABASE=your_database
SQL_USER=your_username
SQL_PASSWORD=your_password
SQL_PORT=1433
SQL_ENCRYPT=false
SQL_TRUST_SERVER_CERTIFICATE=trueCLI Usage
After building, run commands with:
node dist/cli/index.js <command> [options]Or install globally:
npm install -g .
sql-cli <command> [options]Commands
Command | Description |
| List tables, optionally filtered by schema |
| Get table schema (columns, indexes, foreign keys) |
| Execute a SELECT query |
| Insert records |
| Update records |
| Delete records |
| Execute stored procedure |
| Create a new table |
| Drop a table |
| Create an index |
| Generate CREATE TABLE DDL |
| Generate ALTER TABLE DDL |
Examples
# List all tables
sql-cli list-tables
# List tables in specific schemas
sql-cli list-tables dbo sales
# Describe a table
sql-cli describe-table dbo.Users
# Query data
sql-cli read-data "SELECT TOP 10 * FROM dbo.Users"
# Insert data
sql-cli insert-data dbo.Users '{"name": "John", "email": "john@example.com"}'
# Update data
sql-cli update-data dbo.Users '{"name": "Jane"}' "id = 1"
# Delete data (requires --confirm flag)
sql-cli delete-data dbo.Users "id = 1" --confirm
# Get table DDL
sql-cli get-ddl dbo.UsersMCP Server (Experimental)
Note: The MCP server integration has not been fully tested. Use at your own risk.
The MCP server allows Claude Code to interact with your SQL Server database directly.
Setup
Add to your ~/.claude/mcp.json:
{
"mcpServers": {
"mssql": {
"command": "node",
"args": ["/path/to/claude-database-tools/dist/index.js"],
"env": {
"SQL_SERVER": "your-server",
"SQL_DATABASE": "your-database",
"SQL_USER": "your-username",
"SQL_PASSWORD": "your-password",
"SQL_ENCRYPT": "true",
"READONLY": "true"
}
}
}
}Restart Claude Code to load the MCP server.
Available MCP Tools
Read-Only (available when READONLY=true):
list_tables- List tablesdescribe_table- Get table schemaread_data- Execute SELECT queriesget_table_ddl- Generate CREATE TABLE DDLget_table_alter_ddl- Generate ALTER TABLE DDL
Write (requires READONLY=false):
insert_data- Insert recordsupdate_data- Update recordsdelete_data- Delete recordscreate_table- Create tablescreate_index- Create indexesdrop_table- Drop tablesexecute_stored_proc- Execute stored procedures
Security
SQL Injection Prevention: SELECT queries are validated against dangerous keywords and patterns
Parameterized Queries: All INSERT/UPDATE/DELETE operations use parameterized queries
WHERE Clause Required: UPDATE and DELETE operations require WHERE clauses
Query Limits: Maximum query length of 10,000 characters, result sets limited to 10,000 records
Read-Only Mode: Set
READONLY=trueto disable write operations
License
MIT
Available Tools
12 toolscreate_indexC
Creates an index on a specified column or columns in an MSSQL Database table
| Name | Required | Description | Default |
|---|---|---|---|
| tableName | Yes | Name of the table to create index on (can include schema: schema.table) | |
| 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. While 'creates an index' implies a schema mutation operation, the description doesn't address critical behavioral aspects: whether this requires specific database permissions, whether the operation is reversible, potential performance impacts during creation, or what happens if the index already exists. For a database mutation tool with zero annotation coverage, this represents significant gaps.
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 clearly states the tool's purpose without unnecessary words. It's appropriately sized for a straightforward database operation and front-loads the essential information. Every word earns its place in conveying the core functionality.
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 database schema mutation tool with 5 parameters, no annotations, and no output schema, the description is insufficiently complete. It doesn't address behavioral implications, error conditions, performance considerations, or relationship to sibling tools. The agent would need to make assumptions about permissions, side effects, and appropriate usage contexts that aren't documented.
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 'on a specified column or columns' which aligns with the 'columns' parameter, but doesn't add meaningful semantics beyond what the 100% schema coverage already provides. The schema descriptions comprehensively document each parameter's purpose, defaults, and requirements, so the description adds minimal value. The baseline score of 3 reflects adequate but not enhanced 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 an index') and target ('on a specified column or columns in an MSSQL Database table'), providing a specific verb+resource combination. However, it doesn't distinguish this tool from potential alternatives like 'create_table' or 'get_table_alter_ddl' which might also involve database schema modifications.
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. With sibling tools like 'create_table', 'drop_table', and 'get_table_alter_ddl' available, there's no indication of when index creation is appropriate versus other schema operations or how it relates to data manipulation tools like 'insert_data' or 'update_data'.
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.
delete_dataA
Executes a physical DELETE operation on table records. WARNING: This database uses soft delete patterns (__deleted flag). Consider using update_data to set __deleted = 1 instead for most use cases.
| Name | Required | Description | Default |
|---|---|---|---|
| tableName | Yes | Name of the table to delete from | |
| whereClause | Yes | WHERE clause to identify which records to delete. REQUIRED for safety. | |
| confirmDelete | Yes | Must be set to true to confirm physical deletion. Physical deletes are permanent and bypass the soft delete pattern. |
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 so effectively: it discloses that this is a physical DELETE (implying permanent, destructive operation), mentions the database's soft delete pattern, and warns about permanence. It doesn't cover rate limits or auth needs, but provides substantial behavioral context.
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 perfectly concise with two sentences that each earn their place: the first states the core operation, the second provides critical warnings and alternatives. No wasted words, front-loaded with essential information.
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 destructive tool with no annotations and no output schema, the description provides excellent context about the permanent nature of the operation and the soft delete alternative. It could mention what happens on success/failure or return values, but given the warnings and alternatives provided, it's largely complete.
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 parameter information beyond what's in the schema, meeting the baseline expectation 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 physical DELETE operation') and resource ('on table records'), distinguishing it from sibling tools like update_data. It explicitly contrasts with soft delete patterns, making the purpose unambiguous.
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 explicit guidance on when to use this tool versus alternatives: it warns that the database uses soft delete patterns and recommends using update_data instead for most cases. This directly addresses sibling tool selection.
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 complete schema of a specified MSSQL Database table, including columns, types, constraints, indexes, and foreign keys.
| Name | Required | Description | Default |
|---|---|---|---|
| tableName | Yes | Name of the table to describe (can include schema: schema.table) |
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 clearly indicates this is a read-only metadata operation ('Describes') rather than a mutation, and specifies the scope of information returned. However, it doesn't mention potential limitations like permission requirements, performance considerations for large tables, or error conditions for non-existent tables.
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, efficiently constructed sentence that front-loads the core purpose and follows with specific details about what information is returned. Every element serves a purpose with no wasted words or redundant information.
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 single-parameter read operation with no output schema, the description provides good context about what information is returned. It could be more complete by mentioning the return format or any limitations, but it adequately covers the tool's purpose and scope given its simplicity and the absence of annotations.
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 single parameter 'tableName' well-documented in the schema. The description doesn't add any parameter-specific information beyond what the schema already provides about table naming conventions. This meets the baseline expectation when schema coverage is complete.
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 ('Describes') and resource ('complete schema of a specified MSSQL Database table'), with explicit details about what information is included ('columns, types, constraints, indexes, and foreign keys'). It distinguishes this read-only metadata tool from sibling tools that perform data manipulation or DDL 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 implies usage context by specifying it describes 'MSSQL Database table' schemas, which helps differentiate it from generic table operations. However, it doesn't explicitly state when to use this versus alternatives like 'get_table_ddl' or 'list_tables', nor does it provide exclusion guidance for when other tools might be more appropriate.
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.
execute_stored_procC
Executes a stored procedure with optional parameters. Supports input parameters and returns result sets, output parameters, and return values.
| Name | Required | Description | Default |
|---|---|---|---|
| procedureName | Yes | Name of the stored procedure to execute (can include schema: schema.procname) | |
| parameters | No | Object with parameter name/value pairs. Example: { 'accountId': '123', 'groupId': '456' } |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states basic functionality. It doesn't disclose critical behavioral traits like authentication needs, error handling, transaction behavior, or rate limits, which are essential for a database execution tool. No contradiction exists, but the disclosure is minimal.
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 action and key features. It avoids unnecessary words, though it could be slightly more structured by separating usage notes from functionality.
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 executing stored procedures (with potential side effects, security implications, and varied outputs) and no annotations or output schema, the description is inadequate. It lacks details on return formats, error cases, or operational constraints, leaving significant gaps for an AI agent.
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 both parameters thoroughly. The description adds minimal value by mentioning 'optional parameters' and 'input parameters', but doesn't provide additional syntax or format details beyond what the schema specifies, such as parameter types or constraints.
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 ('Executes') and resource ('a stored procedure'), specifying it handles parameters and returns results. It distinguishes from siblings like create_table or read_data by focusing on procedure execution rather than table operations, though it doesn't explicitly contrast with them.
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?
No guidance is provided on when to use this tool versus alternatives like read_data or insert_data, nor does it mention prerequisites such as needing an existing stored procedure. The description implies usage for executing procedures but lacks explicit context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_table_alter_ddlB
Generates ALTER TABLE DDL statements to add columns and constraints from an existing table.
| Name | Required | Description | Default |
|---|---|---|---|
| tableName | Yes | Name of the table to generate ALTER DDL for (can include schema: schema.table) |
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. It states the tool generates DDL statements but doesn't clarify if this is a read-only operation, whether it requires specific database permissions, if it modifies the table (it likely doesn't, as it 'generates' statements), or what the output format is. For a tool with zero annotation coverage, this leaves significant gaps in understanding its behavior and safety.
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 any fluff or redundancy. It is front-loaded with the key action ('Generates') and resource, making it easy to parse quickly. Every word earns its place, contributing to 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 tool's moderate complexity (generating DDL statements), lack of annotations, and no output schema, the description is somewhat complete but has gaps. It explains what the tool does but misses behavioral details like output format or usage context. For a tool with no structured safety or output information, it should provide more guidance to be fully helpful.
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 input schema has 100% description coverage, with the parameter 'tableName' well-documented in the schema itself. The description adds no additional semantic information about parameters beyond what the schema provides, such as examples or constraints. Since schema coverage is high, the baseline score of 3 is appropriate, as 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 tool's purpose: 'Generates ALTER TABLE DDL statements to add columns and constraints from an existing table.' It specifies the verb ('Generates'), resource ('ALTER TABLE DDL statements'), and scope ('from an existing table'), making it easy to understand what the tool does. However, it doesn't explicitly differentiate from sibling tools like 'get_table_ddl' or 'describe_table', which might also involve table metadata, so it misses full sibling 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 provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, such as needing an existing table, or compare it to siblings like 'get_table_ddl' (which might generate full CREATE statements) or 'alter_table' (if such a tool existed). Without this context, users might struggle to choose the right tool for their needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_table_ddlB
Generates CREATE TABLE DDL script for an existing table, including columns, constraints, and optionally indexes.
| Name | Required | Description | Default |
|---|---|---|---|
| tableName | Yes | Name of the table to generate DDL for (can include schema: schema.table) | |
| includeIndexes | No | Include index definitions (default: true) | |
| includeConstraints | No | Include foreign key constraints (default: true) |
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. It mentions generating a DDL script but doesn't specify whether this is a read-only operation (likely safe), what permissions are required, whether it affects database state, or what the output format looks like (e.g., plain text SQL). For a tool with no annotation coverage, this leaves significant gaps in understanding its behavior and safety.
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 purpose without unnecessary words. It directly states what the tool does and includes key optional features, making it easy to parse quickly. Every part of the sentence earns its place by adding relevant information.
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 moderate complexity (generating DDL scripts), lack of annotations, and no output schema, the description is somewhat incomplete. It covers the basic purpose but misses behavioral details like safety, permissions, and output format. However, it does hint at the scope (columns, constraints, indexes), which aligns with the parameters, making it minimally adequate but with clear gaps.
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 minimal value beyond the schema by mentioning 'including columns, constraints, and optionally indexes,' which loosely maps to the parameters but doesn't provide additional syntax, format details, or examples. The baseline score of 3 is appropriate when 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 tool's purpose: 'Generates CREATE TABLE DDL script for an existing table, including columns, constraints, and optionally indexes.' It specifies the verb ('Generates'), resource ('CREATE TABLE DDL script'), and scope ('for an existing table'). However, it doesn't explicitly differentiate from sibling tools like 'describe_table' or 'get_table_alter_ddl', which might have overlapping 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 choose this over 'describe_table' (which might provide metadata without DDL) or 'get_table_alter_ddl' (which might generate ALTER statements). There's no context about prerequisites, such as requiring the table to exist, or exclusions for when not to use it.
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 the full burden of behavioral disclosure. It does well by specifying the tool supports both single and multiple record insertion and provides important rules about data formatting and constraints. However, it doesn't mention critical behavioral aspects like transaction handling, error behavior, permission requirements, or whether the operation is idempotent - significant gaps for a database mutation 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 well-structured with clear sections (FORMAT EXAMPLES, GENERATED SQL FORMAT, IMPORTANT RULES) and front-loads the core purpose. While comprehensive, some information could be more concise - the examples are quite detailed and the rules section is lengthy. Every sentence adds value, but the overall length might benefit from tighter editing.
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 database mutation tool with no annotations and no output schema, the description does a good job covering the insertion mechanics and data formatting. However, it lacks critical context about what happens after insertion - whether it returns the inserted records, generated IDs, row counts, or error information. The absence of output information and permission/transaction context leaves significant gaps for agent understanding.
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?
With only 50% schema description coverage (only 'tableName' has a description in the schema), the description compensates excellently. It provides comprehensive examples for both single and multiple record insertion, explains the 'data' parameter's dual nature, specifies format rules, and adds crucial semantic information about column name matching, data types, and date formatting that goes far beyond the minimal schema documentation.
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 tool 'inserts data into an MSSQL Database table' with specific verbs ('inserts') and resources ('MSSQL Database table'). It distinguishes from siblings like 'update_data', 'delete_data', and 'read_data' by specifying insertion functionality. The mention of 'standard SQL INSERT with VALUES clause' further clarifies the technical approach.
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 about when to use this tool (for inserting data into tables) and implicitly distinguishes it from alternatives like 'update_data' for modifications or 'read_data' for queries. However, it doesn't explicitly state when NOT to use it or name specific alternative tools for related operations like bulk loading or upserts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tablesC
Lists tables in an MSSQL Database, or list tables in specific schemas
| Name | Required | Description | Default |
|---|---|---|---|
| schemas | No | Schemas to filter by (optional) |
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 it mentions the optional schema filtering, it doesn't describe what the tool returns (e.g., table names, counts, or metadata), whether it's paginated, if it requires specific permissions, or any performance considerations. For a read operation in a database context, this leaves significant gaps in understanding how the tool behaves.
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 purpose ('Lists tables in an MSSQL Database') and adds the optional filtering detail. There's no wasted verbiage or redundancy. However, it could be slightly improved by structuring it as two sentences for better readability (e.g., separating the base action from the filtering option).
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 for a database tool. It doesn't explain what information is returned (e.g., table names, schemas, row counts), how results are formatted, or any constraints (e.g., permission requirements, database connection details). For a tool that interacts with MSSQL, more context is needed to use it effectively without trial and error.
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 input schema has 100% description coverage, with the 'schemas' parameter clearly documented as optional for filtering. The description adds marginal value by restating this filtering capability ('or list tables in specific schemas'), but doesn't provide additional context like schema naming conventions, default behavior when omitted, or examples. With high schema coverage, the baseline score of 3 is appropriate.
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 ('Lists tables') and resource ('in an MSSQL Database'), making the purpose immediately understandable. It also specifies the optional filtering capability ('or list tables in specific schemas'), which adds useful detail. However, it doesn't explicitly differentiate this tool from its siblings like 'describe_table' or 'get_table_ddl', which prevents 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. With siblings like 'describe_table' (for detailed table info) and 'get_table_ddl' (for schema definitions), the description fails to clarify that this tool is for listing table names only, not for retrieving detailed metadata or definitions. There's no mention of prerequisites, limitations, or typical use cases.
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.
12 tool updates
v1.0.0- First observed
create_index - First observed
create_table - First observed
delete_data - First observed
describe_table - First observed
drop_table - First observed
execute_stored_proc - First observed
get_table_alter_ddl - First observed
get_table_ddl - First observed
insert_data - First observed
list_tables - First observed
read_data - First observed
update_data
TDQS
Scored across 12 tools
Each tool has a clearly distinct purpose with no ambiguity. Tools like create_table, describe_table, and drop_table target different table operations, while insert_data, update_data, delete_data, and read_data cover distinct CRUD actions. The descriptions reinforce these boundaries, such as the warning in delete_data about soft deletes versus update_data.
All tool names follow a consistent verb_noun pattern using snake_case, such as create_table, describe_table, and execute_stored_proc. There are no deviations in naming conventions, making the set predictable and easy to understand at a glance.
With 12 tools, this server is well-scoped for MSSQL database operations. The count covers essential tasks like table management, data manipulation, and schema inspection without being overwhelming. Each tool serves a clear purpose, such as get_table_ddl for DDL generation and list_tables for discovery.
The tool set provides comprehensive coverage for core database operations, including table creation, schema description, data CRUD, and stored procedure execution. Minor gaps exist, such as no explicit tools for managing indexes beyond create_index (e.g., drop_index) or handling transactions, but agents can work around these with existing tools like execute_stored_proc.
Maintenance
Related MCP Connectors
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.
Query your warehouse or a CSV with Claude/ChatGPT over MCP, governed by table-level ACL + audit.
The Instant MCP server is a wrapper around the Instant Platform SDK that enables creating, managing, and updating InstantDB applications directly within an editor. It provides tools for fetching rules files for LLMs, retrieving and pushing app schemas, managing permission rules, and executing database queries. Key capabilities include schema management (get-schema, push-schema), permission management (get-perms, push-perms), query execution, and listing recent query history.
- SupabaseOAuthcom.supabase
MCP server for interacting with the Supabase platform
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceAn MCP server for Microsoft SQL Server integration that enables users to query, monitor, and analyze databases directly through Claude. It supports schema exploration, performance analysis, and optional write operations via natural language commands.101MIT
- AlicenseAqualityDmaintenanceA read-only MCP server for SQL Server database introspection that enables Claude to explore and query databases via tools like listing objects and executing SELECT queries.201MIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude Code and other MCP clients to interact with Microsoft SQL Server databases through standardized tools for query execution, schema exploration, table management, and stored procedure execution.911MIT
- AlicenseNot gradedqualityCmaintenanceA Model Context Protocol server that enables Claude to query, monitor, and analyze SQL Server databases, with support for schema exploration, performance analysis, and optional write operations.331MIT