MCP → Local MSSQL Server

MCP → Local MSSQL Server

Exposes SQL Server stored procedures as tools for LLM clients (Claude Desktop, VS Code, Cursor, etc.) enabling direct database interaction through natural language.

Category
Visit Server

README

MCP → Local MSSQL Server

A local MCP server that exposes SQL Server stored procedures as tools for LLM clients (Claude Desktop, VS Code, Cursor, etc.).


Files in this project

File Purpose
mssql_server.py The MCP server — all tools live here
usp_SalesReport.sql Sample table + stored procedure to run in SQL Server
requirements.txt Python dependencies
.env.example Template for your connection credentials
claude_desktop_config.json Drop-in config snippet for Claude Desktop

Prerequisites

1 — Python 3.10+

python --version

2 — Microsoft ODBC Driver 18 for SQL Server

Windows: Download from https://aka.ms/odbc18

macOS:

brew install msodbcsql18

Linux (Ubuntu/Debian):

curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list \
  | sudo tee /etc/apt/sources.list.d/mssql-release.list
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18

Setup

Step 1 — Install Python packages

# with uv (recommended)
uv add "mcp[cli]" pyodbc

# or with pip
pip install -r requirements.txt

Step 2 — Create your .env file

cp .env.example .env
# Edit .env and fill in your SQL Server credentials

Step 3 — Create the sample stored procedure (optional)

Open SSMS or Azure Data Studio, switch to your target database, and run usp_SalesReport.sql. This creates a demo Sales table and the usp_SalesReport procedure.

Step 4 — Test the server with MCP Inspector

# Load .env first
export $(cat .env | xargs)          # macOS/Linux
# On Windows PowerShell: use $env:VAR = "value" for each line

mcp dev mssql_server.py

This opens a browser-based inspector. Call test_connection first to verify the DB link, then try run_sales_report.


Connecting to Claude Desktop

  1. Open (or create) claude_desktop_config.json:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %APPDATA%\Claude\claude_desktop_config.json
  2. Merge the contents of the provided claude_desktop_config.json into it, replacing /ABSOLUTE/PATH/TO/ with the real path to mssql_server.py.

  3. Restart Claude Desktop. The tools appear in the tools panel.


Tools exposed by the server

test_connection

Verifies the database connection. Returns server version, database name, and server time. Run this first to confirm everything is wired up.

list_procedures

Lists all stored procedures in the connected database.

run_sales_report(start_date, end_date)

Calls dbo.usp_SalesReport. Returns two result sets:

  • Row-level sale detail for the date range
  • Revenue summary grouped by region

Dates must be in YYYY-MM-DD format.


Adding your own procedures

  1. Add a new @mcp.tool() function in mssql_server.py.
  2. Hardcode the procedure name in the cursor.execute() call — never accept a proc name as a parameter (can't be bound with ?).
  3. Bind all user-supplied values with ? placeholders, never f-strings.
@mcp.tool()
def get_customer_orders(customer_id: int) -> dict:
    """Fetch all orders for a customer from dbo.usp_GetCustomerOrders."""
    conn = get_connection()
    try:
        cursor = conn.cursor()
        cursor.execute("EXEC dbo.usp_GetCustomerOrders @CustomerID = ?", customer_id)
        data = _rows_from_cursor(cursor)
        return {"row_count": len(data), "data": data}
    except pyodbc.Error as e:
        return {"error": str(e)}
    finally:
        conn.close()

Security notes

  • stdio transport runs with the same OS permissions as the host app. Use a least-privilege SQL login, not sa.
  • Store credentials in environment variables or .env, never in code.
  • Never commit .env — add it to .gitignore.
  • TrustServerCertificate=yes is fine for local dev; remove it in production and use a proper TLS certificate.

Recommended Servers

playwright-mcp

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.

Official
Featured
TypeScript
Magic Component Platform (MCP)

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.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured