MS SQL Server MCP Server
MCP Server for MS SQL Integration - Provides ModelContextProtocol support for Microsoft SQL Server
TerraCo89
README
MS SQL Server MCP Server
This project provides an MCP server for interacting with MS SQL Server databases via AI assistants using the Model Context Protocol (MCP).
It uses a secure profile management system leveraging the system's native credential store (via the keyring
library) to avoid sending passwords over MCP.
Prerequisites
For Direct Python Execution:
- Python 3.10+
- Pip (Python package installer)
- ODBC Driver for SQL Server installed on the machine running the server.
keyring
library dependencies might require system packages (e.g.,dbus-launch
,gnome-keyring
orkwallet
on Linux, seekeyring
documentation for details).
For Docker Execution:
- Docker installed and running.
- The Dockerfile is configured to use the
keyrings.cryptfile
backend for secure password storage within the container's filesystem. This requires mounting a volume for persistence.
Installation
Option 1: Direct Python Execution
- Clone the repository (if applicable):
git clone <repository_url> cd mcp-server-mssql
- Create and activate a Python virtual environment:
python -m venv venv # Activate (Windows PowerShell): .\venv\Scripts\Activate.ps1 # Activate (macOS/Linux): source venv/bin/activate
- Install dependencies:
pip install -r requirements.txt
Option 2: Docker Execution
- Clone the repository (if applicable).
- Build the Docker image:
(Note: The Dockerfile includes ODBC driver installation and configures thedocker build -t mcp-mssql-server .
keyrings.cryptfile
backend.)
Configuration: Profile Management
This server uses connection profiles to manage database credentials securely.
- Profiles File (
profiles.json
): Stores non-sensitive details (driver, server, database, username) locally in the server's directory. This file is created automatically if it doesn't exist. Ensure this file is added to your.gitignore
. - System Keyring: Passwords are stored securely in your operating system's credential manager (like Windows Credential Manager, macOS Keychain) using the
keyring
library under the service namemcp-mssql-server
. - Adding Profiles: Use the
add_connection_profile
tool. When first adding a profile, you will be prompted in the terminal where the server is running to securely enter the password. This password is never sent via MCP. - Managing Profiles: Use
list_connection_profiles
andremove_connection_profile
tools.
Usage
Option 1: Direct Python Execution (Stdio)
- Activate the virtual environment.
- Configure in MCP Client Settings (e.g.,
mcp_settings.json
):
Adjust paths accordingly.{ "mcpServers": { // ... other servers ... "mssql": { "command": "python", // Or full path to venv python "args": ["D:/path/to/your/mcp-server-mssql/server.py"], "cwd": "D:/path/to/your/mcp-server-mssql", "alwaysAllow": [ "add_connection_profile", "list_connection_profiles", "remove_connection_profile", "read_table_rows", "create_table_records", "update_table_records", "delete_table_records", "get_table_schema", "list_tables" ] } // ... other servers ... } }
- Restart your MCP Client/IDE Extension. Add profiles using the
add_connection_profile
tool (requires console interaction for password).
Option 2: Docker Execution (Stdio)
- Ensure the Docker image
mcp-mssql-server
is built. - Configure in MCP Client Settings:
{ "mcpServers": { // ... other servers ... "mssql-docker": { "command": "docker", "args": [ "run", "-i", "--rm", "--env-file", "./mcp-server-mssql/.env_docker", // Example: Store KEYRING_CRYPTFILE_PASSWORD here "-v", "mssql_keyring_data:/keyring_data", // Mount volume for keyring data "mcp-mssql-server" ], "alwaysAllow": [ "add_connection_profile", // Note: Password prompt will appear in container logs "list_connection_profiles", "remove_connection_profile", "read_table_rows", "create_table_records", "update_table_records", "delete_table_records", "get_table_schema", "list_tables" ] } // ... other servers ... } }
- Restart your MCP Client/IDE Extension.
- Important:
- The Dockerfile is configured to use the
keyrings.cryptfile
backend. You MUST provide a strong password for encrypting the keyring file via theKEYRING_CRYPTFILE_PASSWORD
environment variable when running the container. It is highly recommended to use a.env
file (like the example.env_docker
in theargs
) or Docker secrets, rather than passing the password directly on the command line. - A Docker volume (e.g.,
mssql_keyring_data
in the example) MUST be mounted to/keyring_data
inside the container to persist the encrypted keyring file (keyring_pass.cfg
) and theprofiles.json
file across container restarts. - The
add_connection_profile
password prompt will still appear in the container's logs/terminal.
- The Dockerfile is configured to use the
Available Tools
Profile Management:
add_connection_profile(profile_name: str, driver: str, server: str, database: str, username: str)
list_connection_profiles()
remove_connection_profile(profile_name: str)
Database Operations (Requires profile_name
):
read_table_rows(profile_name: str, table_name: str, ...)
create_table_records(profile_name: str, table_name: str, records: List[Dict])
update_table_records(profile_name: str, table_name: str, updates: Dict, filters: Dict)
delete_table_records(profile_name: str, table_name: str, filters: Dict)
get_table_schema(profile_name: str, table_name: str)
list_tables(profile_name: str, schema: Optional[str] = None)
Refer to the docstrings within server.py
for detailed argument descriptions.
Example Tool Usage (Conceptual)
- Add a profile (requires console interaction on server):
"Using the
mssql
server, calladd_connection_profile
with nameSalesDB_UK
, driver{ODBC Driver 17 for SQL Server}
, servermyserver.example.com
, databaseSalesDB
, usernamereport_user
." (Then enter password in server console). - Use the profile:
"Using the
mssql
server, callread_table_rows
using profileSalesDB_UK
for the tableCustomers
. Filter whereCountry
is 'UK'."
The AI assistant would construct the second call like:
// Conceptual MCP Tool Call
{
"tool_name": "read_table_rows",
"arguments": {
"profile_name": "SalesDB_UK",
"table_name": "Customers",
"filters": {
"Country": "UK"
}
}
}
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
MCP Package Docs Server
Facilitates LLMs to efficiently access and fetch structured documentation for packages in Go, Python, and NPM, enhancing software development with multi-language support and performance optimization.
Claude Code MCP
An implementation of Claude Code as a Model Context Protocol server that enables using Claude's software engineering capabilities (code generation, editing, reviewing, and file operations) through the standardized MCP interface.
@kazuph/mcp-taskmanager
Model Context Protocol server for Task Management. This allows Claude Desktop (or any MCP client) to manage and execute tasks in a queue-based system.
Linear MCP Server
Enables interaction with Linear's API for managing issues, teams, and projects programmatically through the Model Context Protocol.
mermaid-mcp-server
A Model Context Protocol (MCP) server that converts Mermaid diagrams to PNG images.
Jira-Context-MCP
MCP server to provide Jira Tickets information to AI coding agents like Cursor

Linear MCP Server
A Model Context Protocol server that integrates with Linear's issue tracking system, allowing LLMs to create, update, search, and comment on Linear issues through natural language interactions.

Sequential Thinking MCP Server
This server facilitates structured problem-solving by breaking down complex issues into sequential steps, supporting revisions, and enabling multiple solution paths through full MCP integration.