mssql-mcp

作者 Aaronontheweb已验证

MSSQL Server MCP implementation written in C#

155
Stars
22
Forks
C#
语言
2026/8/23
添加时间

⚠️ 第三方软件声明

本 Skill 为第三方开源软件,独立托管于 GitHub。SkillTip 仅为信息目录,不控制或维护底层仓库。所显示的安全检查为自动化且范围有限,安装前请自行审查源码。

阅读服务条款

安装

添加到你的 Claude Code skills 目录:

# Add to your Claude Code skills
git clone https://github.com/Aaronontheweb/mssql-mcp

快速入门

使用 mssql-mcp 等 Skills 的指南。

安全报告

已验证

上次扫描:—

{
  "status": "PASSED",
  "issues": []
}

README.md

mssql-mcp

A .NET-powered Model Context Protocol (MCP) server for Microsoft SQL Server.

Abstract

Why does this exist? Because the other MCP solutions in market for this are generally janky pieces of shit that don't work - certainly not on Windows.

This MCP server provides AI agents with robust, reliable access to Microsoft SQL Server databases through a clean, well-architected .NET application using Akka.NET for internal coordination and the official MCP C# SDK for protocol compliance.

Features

  • Schema Discovery: AI agents can explore database structure without writing complex SQL
  • Query Execution: Full SQL support for SELECT, INSERT, UPDATE, DELETE, and DDL operations
  • Connection Validation: Automatic database connectivity validation on startup
  • Error Handling: Comprehensive error handling with clear, actionable error messages
  • Table Formatting: Query results formatted in readable tables for AI consumption
  • Docker Support: Easy deployment with built-in .NET Docker tooling

Available Tools

ToolDescription
execute_sqlExecute any SQL query against the database
list_tablesList all tables with schema, name, type, and row count
list_schemasList all available schemas/databases in the SQL Server instance

Configuration

Required Environment Variables

The MCP server requires a single environment variable:

  • MSSQL_CONNECTION_STRING: Complete SQL Server connection string

Example Connection Strings

Windows Authentication:

MSSQL_CONNECTION_STRING="Server=localhost;Database=MyDatabase;Trusted_Connection=true;"

SQL Server Authentication:

MSSQL_CONNECTION_STRING="Server=localhost;Database=MyDatabase;User Id=myuser;Password=mypassword;"

Azure SQL Database:

MSSQL_CONNECTION_STRING="Server=myserver.database.windows.net;Database=mydatabase;User Id=myuser;Password=mypassword;Encrypt=true;"

Running the MCP Server

Option 1: Docker (Recommended)

The easiest way to run the MCP server is using Docker with .NET's built-in container support.

Build and Run with Docker

Clone the repository

# Clone the repository
git clone https://github.com/Aaronontheweb/mssql-mcp.git
cd mssql-mcp

Build the Docker image

dotnet publish --os linux --arch x64 /t:PublishContainer

You can run the container directly if you wish, but it's probably best to let the MCP server spin up the client:

# Run the container
docker run -it --rm \
  -e MSSQL_CONNECTION_STRING="Server=host.docker.internal;Database=MyDB;Trusted_Connection=true;" \
  mssql-mcp:latest

MCP Client Configuration

Cursor IDE

Add to your Cursor settings (Cursor Settings > Features > Model Context Protocol):

{
  "mcpServers": {
    "mssql": {
      "command": "docker",
      "args": [
          "run",
          "-i",
          "--rm",
          "-e",
          "MSSQL_CONNECTION_STRING",
          "mssql-mcp:latest"
      ],
      "env": {
          "MSSQL_CONNECTION_STRING": "Server=host.docker.internal,1533; Database=MyDb; User Id=myUser; Password=My(!)Password;TrustServerCertificate=true;"
      }
    }
  }
}

Claude Desktop

Add to your Claude Desktop configuration file:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "mssql": {
      "command": "docker",
      "args": [
          "run",
          "-i",
          "--rm",
          "-e",
          "MSSQL_CONNECTION_STRING",
          "mssql-mcp:latest"
      ],
      "env": {
          "MSSQL_CONNECTION_STRING": "Server=host.docker.internal,1533; Database=MyDb; User Id=myUser; Password=My(!)Password;TrustServerCertificate=true;"
      }
    }
  }
}

You might need to create that file and restart Claude Desktop for the changes to take effect.

Understanding Your Claude Desktop MCP Server Configuration

This JSON configuration is for Claude Desktop's Model Context Protocol (MCP) servers. It essentially teaches Claude how to connect to and use a custom "tool" that interacts with a Microsoft SQL Server (MSSQL) database.

Let's break down each part:

mcpServers

This is the top-level section where you define all your custom MCP servers. You can set up multiple servers here, each with its own unique name.

"mssql"

This is the unique name you've chosen for this particular SQL Server integration. Claude will use this name to refer to this database connection.

"command": "docker"

This line tells Claude Desktop to launch the MCP server using Docker. This means the actual server software runs inside an isolated container, and you'll need Docker Desktop installed and running on your Windows/mac/Linux machine for this to work. Alternatively, you can use remote Docker server using custon context.

"args": [...]

These are the arguments Claude Desktop passes to the docker command when starting the container:

  • "run": This standard Docker command creates and starts a new container.
  • "-i": Stands for "interactive," keeping the standard input open for communication between the MCP server and Claude Desktop.
  • "--rm": This important argument tells Docker to automatically remove the container when it stops. This helps keep your Docker environment tidy.
  • "-e", "MSSQL_CONNECTION_STRING": This passes an environment variable named MSSQL_CONNECTION_STRING into the Docker container.
  • "mssql-mcp:latest": This specifies the Docker image to use. This image (mssql-mcp with the latest tag) contains the actual MCP server application designed to interact with SQL Server. You'll need to ensure this image is available (either built locally or pulled from a Docker registry).
"env": {...}

This section defines the environment variables that will be set when Docker executes the command.

  • "MSSQL_CONNECTION_STRING": "Server=host.docker.internal,1533; Database=MyDb; User Id=myUser; Password=My(!)Password;TrustServerCertificate=true;"
    • This is the SQL Server connection string that the mssql-mcp Docker container will use to connect to your database.
    • Server=host.docker.internal,1533: host.docker.internal is a special Docker DNS name that lets the container reach your host machine's IP address. This is how the MCP server inside Docker can connect to your SQL Server instance, which is presumably running directly on your machine. 1533 is the port your SQL Server is listening on.
    • Database=MyDb: The name of the specific database you want to connect to.
    • User Id=myUser; Password=My(!)Password;: The credentials for a user (myUser) to log into your SQL Server.
    • TrustServerCertificate=true;: This tells the client to skip validating the server's SSL/TLS certificate. While convenient for development or when using self-signed certificates, be aware this reduces security by making you vulnerable to man-in-the-middle attacks in production environments.

In a Nutshell:

This configuration enables Claude Desktop to run a SQL Server-specific MCP server inside a Docker container. This server then uses the provided connection string to establish a connection to your SQL Server database, allowing Claude to interact with your data through this custom tool.

Local Binary Configuration

If running the built binary directly instead of Docker:

{
  "mcpServers": {
    "mssql": {
      "command": "/path/to/mssql-mcp/src/MSSQL.MCP/bin/Release/net9.0/MSSQL.MCP",
      "env": {
        "MSSQL_CONNECTION_STRING": "Server=localhost;Database=MyDB;Trusted_Connection=true;"
      }
    }
  }
}

Docker Networking Issues

Understanding the Problem

When running the MCP server as a Docker container, you'll encounter networking challenges when trying to connect to SQL Server instances running on your host machine or in other containers. Docker containers are isolated from the host network by default, making localhost connections impossible.

Solutions by Scenario

Scenario 1: SQL Server Running on Host Machine

Problem: Your SQL Server is installed directly on Windows/macOS/Linux, and you want the containerized MCP server to connect to it.

Solution: Use host.docker.internal instead of localhost in your connection string.

# ❌ This won't work - localhost refers to the container itself
docker run -it --rm \
  -e MSSQL_CONNECTION_STRING="Server=localhost;Database=MyDB;User Id=sa;Password=YourPassword123!;" \
  mssql-mcp:latest

# ✅ This works - host.docker.internal refers to the host machine
docker run -it --rm \
  -e MSSQL_CONNECTION_STRING="Server=host.docker.internal;Database=MyDB;User Id=sa;Password=YourPassword123!;" \
  mssql-mcp:latest

Updated MCP Client Configuration:

{
  "mcpServers": {
    "mssql": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "MSSQL_CONNECTION_STRING=Server=host.docker.internal;Database=MyDB;User Id=sa;Password=YourPassword123!;",
        "mssql-mcp:latest"
      ]
    }
  }
}

Scenario 2: SQL Server in Another Docker Container

Solution: Use Docker Compose with a custom network and reference containers by service name.

version: '3.8'
networks:
  sql-network:
    driver: bridge

services:
  mssql-mcp:
    build: .
    environment:
      # Use the service name 'sqlserver' as the hostname
      - MSSQL_CONNECTION_STRING=Server=sqlserver;Database=MyDatabase;User Id=sa;Password=YourPassword123!;
    stdin_open: true
    tty: true
    networks:
      - sql-network
    depends_on:
      - sqlserver
      
  sqlserver:
    image: mcr.microsoft.com/mssql/server:2022-latest
    environment:
      - ACCEPT_EULA=Y
      - SA_PASSWORD=YourPassword123!
    networks:
      - sql-network
    ports:
      - "1433:1433"  # Expose to host for external tools

Scenario 3: Linux with Host Network Mode

Linux Only Solution: Use Docker's host networking mode for direct host network access.

# Linux only - shares the host's network stack
docker run -it --rm --network host \
  -e MSSQL_CONNECTION_STRING="Server=localhost;Database=MyDB;User Id=sa;Password=YourPassword123!;" \
  mssql-mcp:latest

Platform-Specific Considerations

Platformhost.docker.internalHost Network ModeRecommended Solution
Windows✅ Works out of box❌ Not supportedUse host.docker.internal
macOS✅ Works out of box❌ Not supportedUse host.docker.internal
Linux⚠️ Requires --add-host✅ SupportedUse --network host or host.docker.internal

Linux host.docker.internal setup:

docker run -it --rm \
  --add-host=host.docker.internal:host-gateway \
  -e MSSQL_CONNECTION_STRING="Server=host.docker.internal;Database=MyDB;User Id=sa;Password=YourPassword123!;" \
  mssql-mcp:latest

Testing Network Connectivity

To verify your container can reach the SQL Server:

# Test from inside a running container
docker exec -it <container_name> ping host.docker.internal

# Test SQL Server port specifically
docker run --rm -it mcr.microsoft.com/mssql-tools \
  /bin/bash -c "sqlcmd -S host.docker.internal -U sa -P 'YourPassword123!' -Q 'SELECT @@VERSION'"

Common Networking Troubleshooting

  1. Connection Refused:

    • Verify SQL Server is listening on all interfaces: netstat -an | grep 1433
    • Check Windows Firewall allows Docker subnet access
  2. DNS Resolution:

    • Test: docker run --rm busybox nslookup host.docker.internal
    • Ensure Docker Desktop is running (for Windows/macOS)
  3. Container-to-Container:

    • Verify both containers are on the same Docker network
    • Use container service names, not localhost
  4. Port Conflicts:

    • Ensure port 1433 isn't already bound by another process
    • Check with: netstat -tlnp | grep 1433

Usage Examples

Once configured, AI agents can use natural language to interact with your database:

"Show me all the tables in the database" → Uses list_tables tool

"Describe the structure of the Users table" → Uses execute_sql with an INFORMATION_SCHEMA query

"Find all users created in the last 30 days" → Uses execute_sql with appropriate SELECT query

"Create a new customer record" → Uses execute_sql with INSERT statement

Security Considerations

⚠️ Important Security Warnings

  • Database Permissions: Only grant the minimum required permissions to the database user
  • Connection Security: Use encrypted connections for production environments
  • Access Control: This MCP server provides full SQL execution capabilities - ensure proper access controls
  • Audit Logging: Consider enabling SQL Server audit logging for production use
  • Network Security: Restrict network access to the database server appropriately

Recommended Database Permissions

For read-only access:

-- Create a dedicated user with minimal permissions
CREATE LOGIN mcp_readonly WITH PASSWORD = 'SecurePassword123!';
CREATE USER mcp_readonly FOR LOGIN mcp_readonly;

-- Grant only necessary permissions
GRANT SELECT ON SCHEMA::dbo TO mcp_readonly;
GRANT VIEW DEFINITION ON SCHEMA::dbo TO mcp_readonly;

For read-write access:

-- Create a dedicated user
CREATE LOGIN mcp_readwrite WITH PASSWORD = 'SecurePassword123!';
CREATE USER mcp_readwrite FOR LOGIN mcp_readwrite;

-- Grant necessary permissions
GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::dbo TO mcp_readwrite;
GRANT VIEW DEFINITION ON SCHEMA::dbo TO mcp_readwrite;

Troubleshooting

Connection Issues

  1. Verify connection string: Test with SQL Server Management Studio or Azure Data Studio
  2. Check firewall: Ensure SQL Server port (default 1433) is accessible
  3. Enable TCP/IP: Ensure TCP/IP protocol is enabled in SQL Server Configuration Manager
  4. Authentication mode: Verify SQL Server is configured for the appropriate authentication mode

Container Issues

  1. Network connectivity: Use host.docker.internal instead of localhost when connecting from container to host
  2. Environment variables: Ensure the connection string is properly escaped in Docker commands
  3. Logs: Check container logs with docker logs <container_id>

License

This software is licensed under Apache 2.0 and is available "as is" - this means that if you turbo-nuke your database because you gave an AI agent sa access through this MCP server, we're not responsible.

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests if applicable
  5. Submit a pull request

Architecture

  • Akka.NET: Used for internal actor system coordination and database validation
  • MCP C# SDK: Official Model Context Protocol implementation
  • Microsoft.Data.SqlClient: High-performance SQL Server connectivity

常见问题

What is mssql-mcp?

mssql-mcp is an open-source mcp servers skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by Aaronontheweb. MSSQL Server MCP implementation written in C#. It has 155 GitHub stars.

Is mssql-mcp safe to use?

Yes. mssql-mcp passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.

How do I install mssql-mcp?

Clone the repository with "git clone https://github.com/Aaronontheweb/mssql-mcp" and add it to your Claude Code skills directory (see the Installation section above).

What programming language is mssql-mcp written in?

mssql-mcp is primarily written in C#. It is open-source under Aaronontheweb on GitHub, so you can review or fork the full source.

Are there alternatives to mssql-mcp?

Yes. SkillsLLM lists many other MCP Servers skills you can browse and compare side by side. Open the MCP Servers category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh mssql-mcp against similar tools.

评论 (0)

暂无评论,成为第一个分享想法的人!

n8n

by n8n-io

12

Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

201,88160,308TypeScript
MCP 服务器apisai-tools
查看详情

Scrapling

by D4Vinci

🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!

75,9137,581Python
MCP 服务器
查看详情

TrendRadar

by sansan0

⭐AI-driven public opinion & trend monitor with multi-platform aggregation, RSS, and smart alerts.🎯 告别信息过载,你的 AI 舆情监控助手与热点筛选工具!聚合多平台热点 + RSS 订阅,支持关键词精准筛选。AI 智能筛选新闻 + AI 翻译 + AI 分析简报直推手机,也支持接入 MCP 架构,赋能 AI 自然语言对话分析、情感洞察与趋势预测等。支持 Docker ,数据本地/云端自持。集成微信/飞书/钉钉/Telegram/邮件/ntfy/bark/slack 等渠道智能推送。

61,65224,883Python
MCP 服务器
查看详情

context7

by upstash

Context7 Platform -- Up-to-date code documentation for LLMs and AI code editors

61,0602,938TypeScript
MCP 服务器
查看详情

High-performance code intelligence MCP server. Indexes codebases into a persistent knowledge graph — average repo in milliseconds. 158 languages, sub-ms queries, 99% fewer tokens. Single static binary, zero dependencies.

39,9393,219C
MCP 服务器
查看详情

开发者还喜欢

基于喜欢此 Skill 的开发者投票和收藏

ECC

by affaan-m

10

The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

242,21936,702JavaScript
AI 智能体ai-agentsanthropicclaude-code
查看详情
15

An agentic skills framework & software development methodology that works.

234,96620,863Shell
AI 智能体ai-agentsbrainstorming
查看详情

hermes-agent

by NousResearch

10

The agent that grows with you

234,43747,175Python
AI 智能体ai-agentsagent-orchestration
查看详情

n8n

by n8n-io

12

Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

201,88160,308TypeScript
MCP 服务器apisai-tools
查看详情

The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

185,94028,768JavaScript
AI 智能体ai-agentsanthropicclaude-code
查看详情

cc-switch

by farion1231

3

A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io

128,8688,826Rust
AI 智能体claude-codeai-tools
查看详情