mssql-mcp

Installation
SKILL.md

Microsoft SQL Server MCP Skill

Query and manage SQL Server databases through natural language interface with built-in safety features.

Configuration

Required Environment Variables

SERVER_NAME=myserver.database.windows.net
DATABASE_NAME=MyDatabase

Optional Environment Variables

READONLY=true                  # Enable read-only mode
CONNECTION_TIMEOUT=30          # Connection timeout (seconds)
TRUST_SERVER_CERTIFICATE=true  # Accept self-signed certificates

Authentication Options

SQL Authentication:

USER=dbusername
PASSWORD=dbpassword

Windows/Azure AD: Use integrated authentication (no explicit credentials needed)


Core Capabilities

1. Query Execution

Execute SQL queries through natural language requests.

Examples:

  • "Get all users from California"
  • "Show top 100 orders by date"
  • "Calculate total revenue by month"
  • "Find products with price > $50"

Security: Requires WHERE clauses for safety.

2. Data Modification

Create, update, and delete records.

Insert:

Update:

  • "Update user ID 123 email to new@example.com"
  • "Change order status to 'shipped' for order 456"

Delete:

  • "Delete orders older than 1 year"
  • "Remove user with ID 789"

Security: UPDATE and DELETE require WHERE clauses.

3. Schema Management

Create and modify database structures.

Create Tables:

  • "Create users table with id, name, email"
  • "Add products table with id, name, price, category"

Modify Schema:

  • "Add phone column to customers table"
  • "Create index on email in users"
  • "Add foreign key from orders to customers"

Drop Objects:

  • "Drop table temp_data"
  • "Remove index idx_email from users"

4. Database Inspection

Explore database structure and metadata.

Tables:

  • "List all tables"
  • "Show tables in database"

Schema:

  • "Describe users table"
  • "Show structure of orders table"
  • "What columns are in products table?"

Relationships:

  • "List foreign keys"
  • "Show table relationships"
  • "Display indexes on orders table"

Common Query Patterns

Filtering

"WHERE" conditions for targeting specific records:
- "users from New York"
- "orders created this month"
- "products with price between $10 and $50"
- "customers who signed up in 2024"

Aggregations

Calculations across datasets:
- "count of users by state"
- "total revenue by quarter"
- "average order value"
- "maximum price in each category"

Sorting & Limiting

Ordering and constraining results:
- "top 10 orders by amount"
- "latest 50 users"
- "highest grossing products"
- "most recent transactions"

Joins & Relationships

Combining data from multiple tables:
- "orders with customer names"
- "products with their category names"
- "users with their order counts"
- "customers and their total spend"

Safety Features

Mandatory WHERE Clauses

SELECT Queries: Must include filtering conditions to prevent full table scans.

Good: "Get users where state = 'CA'" Bad: "Get all users" (blocked)

UPDATE Statements: Must specify which records to update.

Good: "Update email for user ID 123" Bad: "Update all emails" (blocked)

DELETE Statements: Must specify which records to delete.

Good: "Delete orders older than 2 years" Bad: "Delete all orders" (blocked)

Read-Only Mode

Set READONLY=true to:

  • Disable INSERT, UPDATE, DELETE
  • Allow only SELECT and schema inspection
  • Safe for production database exploration
  • Prevent accidental data changes

SQL Server Data Types

Numeric

  • INT, BIGINT, SMALLINT, TINYINT
  • DECIMAL(p,s), NUMERIC(p,s)
  • FLOAT, REAL
  • MONEY, SMALLMONEY

String

  • VARCHAR(n), NVARCHAR(n)
  • CHAR(n), NCHAR(n)
  • TEXT, NTEXT (deprecated)

Date/Time

  • DATE, TIME
  • DATETIME, DATETIME2
  • SMALLDATETIME
  • DATETIMEOFFSET

Binary

  • BINARY(n), VARBINARY(n)
  • IMAGE (deprecated)

Other

  • BIT (boolean)
  • UNIQUEIDENTIFIER (GUID)
  • XML
  • JSON (via NVARCHAR)

Common Schema Patterns

Users Table

CREATE TABLE users (
    id INT IDENTITY(1,1) PRIMARY KEY,
    username NVARCHAR(50) UNIQUE NOT NULL,
    email NVARCHAR(255) UNIQUE NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    created_at DATETIME2 DEFAULT GETUTCDATE(),
    updated_at DATETIME2 DEFAULT GETUTCDATE(),
    is_active BIT DEFAULT 1
);

Orders Table

CREATE TABLE orders (
    id INT IDENTITY(1,1) PRIMARY KEY,
    customer_id INT NOT NULL FOREIGN KEY REFERENCES customers(id),
    order_date DATETIME2 DEFAULT GETUTCDATE(),
    total_amount DECIMAL(10,2) NOT NULL,
    status VARCHAR(20) DEFAULT 'pending',
    created_at DATETIME2 DEFAULT GETUTCDATE()
);

Products Table

CREATE TABLE products (
    id INT IDENTITY(1,1) PRIMARY KEY,
    name NVARCHAR(100) NOT NULL,
    description NVARCHAR(MAX),
    price DECIMAL(10,2) NOT NULL,
    category_id INT FOREIGN KEY REFERENCES categories(id),
    stock_quantity INT DEFAULT 0,
    created_at DATETIME2 DEFAULT GETUTCDATE()
);

Best Practices

1. Query Optimization

  • Limit result sets: "top N records"
  • Include time ranges: "in the last 30 days"
  • Use specific filters: "where status = 'active'"
  • Aggregate when possible: "count by category"

2. Data Safety

  • Query before modifying: verify target records
  • Use transactions: for related changes
  • Backup before schema changes
  • Test in development first

3. Performance

  • Add indexes on frequently queried columns
  • Filter early with WHERE clauses
  • Avoid SELECT * patterns
  • Use appropriate data types

4. Security

  • Use read-only mode for analysis
  • Minimum privilege accounts
  • Never hardcode credentials
  • Audit all modifications
  • Review generated queries

Troubleshooting

Connection Failures

  • Verify SERVER_NAME format
  • Check network/firewall
  • Confirm SQL Server is running
  • Validate credentials
  • Set TRUST_SERVER_CERTIFICATE if needed

Query Errors

  • Add WHERE clauses for filtering
  • Reduce result set size
  • Check syntax in generated SQL
  • Verify column names exist

Permission Denied

  • Check account permissions
  • Verify READONLY mode isn't blocking writes
  • Confirm database user roles
  • Review table-level permissions

Timeout Issues

  • Increase CONNECTION_TIMEOUT
  • Optimize queries with indexes
  • Reduce data volume with filters
  • Check server performance

T-SQL Quick Reference

Common Functions

-- String functions
LEN(column), SUBSTRING(col, start, length), CONCAT(a, b)
UPPER(col), LOWER(col), TRIM(col), REPLACE(col, old, new)

-- Date functions
GETDATE(), GETUTCDATE(), DATEADD(day, 7, date)
DATEDIFF(day, start, end), YEAR(date), MONTH(date)
FORMAT(date, 'yyyy-MM-dd')

-- Aggregate functions
COUNT(*), SUM(col), AVG(col), MIN(col), MAX(col)
COUNT(DISTINCT col)

-- NULL handling
ISNULL(col, default), COALESCE(col1, col2, default)
NULLIF(a, b)

Window Functions

-- Ranking
ROW_NUMBER() OVER (ORDER BY col)
RANK() OVER (PARTITION BY cat ORDER BY col)
DENSE_RANK() OVER (ORDER BY col DESC)

-- Aggregates
SUM(amount) OVER (ORDER BY date)
AVG(price) OVER (PARTITION BY category)
LAG(col, 1) OVER (ORDER BY date)
LEAD(col, 1) OVER (ORDER BY date)

Common Table Expressions

WITH cte AS (
    SELECT column1, column2
    FROM table
    WHERE condition
)
SELECT * FROM cte;

Additional Resources

Related skills

More from housegarofalo/claude-code-base

Installs
4
GitHub Stars
2
First Seen
Mar 15, 2026