MCP server that connects Claude to a Microsoft SQL Server database
Project description
SQL Assistant MCP Server
Connects Claude to a Microsoft SQL Server database over stdio. Ask Claude to query your database, inspect table structures, or preview execution plans — without leaving the chat.
Installation
pip install sql-mcp-server
You also need the ODBC Driver for SQL Server:
https://learn.microsoft.com/en-us/sql/connect/odbc/download-odbc-driver-for-sql-server
Tools
list_tables : Lists all user-created tables, grouped by schema.
describe_table : Shows columns, data types, nullability, and defaults for a table.
run_query : Runs a SELECT query and returns results. Write operations (INSERT, UPDATE, DELETE, DROP, etc.) are blocked.
explain_query : Returns SQL Server's estimated execution plan via SET SHOWPLAN_TEXT. Good to run before a slow or unfamiliar query.
get_table_sample : Returns the first N rows from a table (max 20, default 5). Pass rows=10 for more.
Project Structure
sql-mcp-server/
├── server.py # MCP server and tool definitions
├── db.py # SQL Server connection helper (loads .env)
├── pyproject.toml # Project metadata and dependencies
├── uv.lock # Locked dependency versions (uv)
├── .env # Connection config (not committed)
└── README.md
Setup
1. Configure the database connection
Create a .env file in the project root:
Windows Authentication:
DB_DRIVER=ODBC Driver 17 for SQL Server
DB_SERVER=YOUR_SERVER_NAME\SQLEXPRESS
DB_NAME=your_database_name
SQL Server Authentication:
DB_DRIVER=ODBC Driver 17 for SQL Server
DB_SERVER=YOUR_SERVER_NAME\SQLEXPRESS
DB_NAME=your_database_name
DB_USER=your_username
DB_PASSWORD=your_password
If you're using the Claude Desktop config below, put credentials in the env block — no .env file needed.
2. Register with Claude Desktop
Add this to claude_desktop_config.json — usually at %APPDATA%\Claude\claude_desktop_config.json on Windows.
Method 1 — Installed from PyPI (Recommended)
Windows Authentication:
{
"mcpServers": {
"sql-assistant": {
"command": "sql-mcp-server",
"args": [],
"env": {
"DB_SERVER": "YOUR_SERVER_NAME\\\\SQLEXPRESS",
"DB_NAME": "your_database_name",
"DB_DRIVER": "ODBC Driver 17 for SQL Server"
}
}
}
}
SQL Server Authentication:
{
"mcpServers": {
"sql-assistant": {
"command": "sql-mcp-server",
"args": [],
"env": {
"DB_SERVER": "YOUR_SERVER_NAME\\\\SQLEXPRESS",
"DB_NAME": "your_database_name",
"DB_DRIVER": "ODBC Driver 17 for SQL Server",
"DB_USER": "your_username",
"DB_PASSWORD": "your_password"
}
}
}
}
Method 2 — Run with uvx (no install)
{
"mcpServers": {
"sql-assistant": {
"command": "uvx",
"args": ["sql-mcp-server"],
"env": {
"DB_SERVER": "YOUR_SERVER_NAME\\\\SQLEXPRESS",
"DB_NAME": "your_database_name",
"DB_DRIVER": "ODBC Driver 17 for SQL Server",
"DB_USER": "your_username",
"DB_PASSWORD": "your_password"
}
}
}
}
Method 3 — Local Installation (For Development)
If you cloned the repository and want to run it from source, use uv and specify the absolute path to your project directory.
Windows Authentication:
{
"mcpServers": {
"sql-assistant": {
"command": "uv",
"args": [
"--directory",
"C:/path/to/sql-mcp-server",
"run",
"server.py"
],
"env": {
"DB_SERVER": "YOUR_SERVER_NAME\\\\SQLEXPRESS",
"DB_NAME": "your_database_name",
"DB_DRIVER": "ODBC Driver 17 for SQL Server"
}
}
}
}
SQL Server Authentication:
{
"mcpServers": {
"sql-assistant": {
"command": "uv",
"args": [
"--directory",
"C:/path/to/sql-mcp-server",
"run",
"server.py"
],
"env": {
"DB_SERVER": "YOUR_SERVER_NAME\\\\SQLEXPRESS",
"DB_NAME": "your_database_name",
"DB_DRIVER": "ODBC Driver 17 for SQL Server",
"DB_USER": "your_username",
"DB_PASSWORD": "your_password"
}
}
}
}
Replace C:/path/to/sql-mcp-server with the actual path to your cloned repo.
Replace all placeholder values with your actual credentials. Restart Claude Desktop after saving.
Usage
With the server connected, try asking Claude:
- "What tables are in the database?"
- "Describe the Orders table."
- "Show me 10 rows from Customers."
- "Run: SELECT TOP 5 * FROM Sales.Orders WHERE Status = 'Pending'"
- "Explain this query: SELECT * FROM Products WHERE Price > 100"
Safety
Only SELECT queries run. These keywords are blocked before reaching the database:
INSERT UPDATE DELETE DROP TRUNCATE ALTER CREATE EXEC
Table and schema names are validated against injection patterns. Results are capped at 200 rows.
⚠️ Don't commit your
.envfile — it contains your connection credentials.
Requirements
- Python 3.10+
- SQL Server with ODBC Driver 17 or 18
- Claude Desktop with MCP support
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sql_mcp_server-0.1.2.tar.gz.
File metadata
- Download URL: sql_mcp_server-0.1.2.tar.gz
- Upload date:
- Size: 44.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0da7cf33da691c6e322a112968252380ee5a345c97006b854a6ca27a88341828
|
|
| MD5 |
75457770068c867d61570ff0e7a39843
|
|
| BLAKE2b-256 |
b297d7a0b53d804cdb6f7d62415ae8b6377b6379c23a0dc8f0792a2b7438456e
|
Provenance
The following attestation bundles were made for sql_mcp_server-0.1.2.tar.gz:
Publisher:
publish.yml on snehangshu2002/sql-mcp-server
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sql_mcp_server-0.1.2.tar.gz -
Subject digest:
0da7cf33da691c6e322a112968252380ee5a345c97006b854a6ca27a88341828 - Sigstore transparency entry: 1155270146
- Sigstore integration time:
-
Permalink:
snehangshu2002/sql-mcp-server@9bc0edd931cf73968609b90fc38bff8402129bb3 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/snehangshu2002
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9bc0edd931cf73968609b90fc38bff8402129bb3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file sql_mcp_server-0.1.2-py3-none-any.whl.
File metadata
- Download URL: sql_mcp_server-0.1.2-py3-none-any.whl
- Upload date:
- Size: 6.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ffed3d25192d6259d290b9cb1b2404b848106c55e87799f2566ffad8376f7dc
|
|
| MD5 |
ed55e9af5a360680c78ffed97e744ffd
|
|
| BLAKE2b-256 |
e62a7e0237f8e56eafd7ab321bef77376e6ed6cf6aa59660b74d869b387233c0
|
Provenance
The following attestation bundles were made for sql_mcp_server-0.1.2-py3-none-any.whl:
Publisher:
publish.yml on snehangshu2002/sql-mcp-server
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sql_mcp_server-0.1.2-py3-none-any.whl -
Subject digest:
0ffed3d25192d6259d290b9cb1b2404b848106c55e87799f2566ffad8376f7dc - Sigstore transparency entry: 1155270152
- Sigstore integration time:
-
Permalink:
snehangshu2002/sql-mcp-server@9bc0edd931cf73968609b90fc38bff8402129bb3 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/snehangshu2002
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9bc0edd931cf73968609b90fc38bff8402129bb3 -
Trigger Event:
push
-
Statement type: