SQL数据库协议服务器

一个为Microsoft SQL Server实现的模型上下文协议(MCP)服务器,使AI助手能够通过标准化接口与MSSQL数据库交互。

  • by combiz
  • Python
  • 本地部署
  • 6 星标
  • 更新于
在 GitHub 查看 combiz/mssql-mcp-server

使用说明

MSSQL MCP服务器

Microsoft SQL server的模型上下文协议(MCP)服务器实现。该服务器使像Claude这样的人工智能助手能够通过标准化的界面与MSSQL数据库进行交互。

特性

  • 🚀 执行SQL查询:运行任何具有适当错误处理和结果格式的SQL查询
  • 📊 浏览数据库架构:列出表、查看表结构和示例数据
  • 🔧 多行查询支持:正确处理带有换行符、注释和GO语句的查询
  • 🔐 灵活的身份验证:支持Windows(受信任)和SQL身份验证
  • ⚙️ 环境配置:通过环境变量轻松设置
  • 🛡️ 安全:连接字符串加密、证书信任选项和安全凭据处理

安装

来自PyPI

pip install mssql-mcp-server-enhanced

来源

git clone https://github.com/combiz/mssql-mcp-server.git
cd mssql-mcp-server
pip install -e .

先决条件

  1. Python 3.8+

  2. SQL Server的ODBC驱动程序 -安装以下之一:

    安装命令:

    # Ubuntu/Debian
    curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
    curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list
    sudo apt-get update
    sudo apt-get install -y msodbcsql17
    
    # macOS
    brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
    brew update
    brew install msodbcsql17
    
    # Windows - Download installer from Microsoft
    

配置

使用环境变量配置服务器:

必需变量

  • MSSQL_DATABASE -要连接的数据库名称

连接变量

  • MSSQL_HOST 或 MSSQL_SERVER -服务器主机名(默认值: localhost)
  • MSSQL_PORT -服务器端口(默认值: 1433)

身份验证变量

对于SQL身份验证:

  • MSSQL_USER -用户名
  • MSSQL_PASSWORD -密码
  • MSSQL_TRUSTED_CONNECTION -设置为 no (默认值: no)

对于Windows身份验证:

  • MSSQL_TRUSTED_CONNECTION -设置为 yes
  • 无需用户名/密码

可选变量

  • MSSQL_DRIVER -ODBC驱动程序名称(默认值: ODBC Driver 17 for SQL Server)
  • MSSQL_TRUST_SERVER_CERTIFICATE -信任服务器证书(默认值: yes)
  • MSSQL_ENCRYPT -加密连接(默认值: yes)
  • MSSQL_CONNECTION_TIMEOUT -连接超时(秒)(默认值: 30)
  • MSSQL_MULTI_SUBNET_FAILOVER -启用多子网故障切换(默认值: no)

用法

作为独立服务器

# Set environment variables
export MSSQL_SERVER=your-server.database.windows.net
export MSSQL_DATABASE=your-database
export MSSQL_USER=your-username
export MSSQL_PASSWORD=your-password

# Run the server
python -m mssql_mcp_server.server

与MCP兼容的客户端

添加到MCP配置文件中:

克劳德桌面:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • 窗户: %APPDATA%\Claude\claude_desktop_config.json

克劳德代码:有关配置位置,请参阅Claude Code文档

光标:添加到光标MCP设置

{
  "mcpServers": {
    "mssql": {
      "command": "python",
      "args": ["-m", "mssql_mcp_server.server"],
      "env": {
        "MSSQL_SERVER": "your-server.database.windows.net",
        "MSSQL_DATABASE": "your-database",
        "MSSQL_USER": "your-username",
        "MSSQL_PASSWORD": "your-password"
      }
    }
  }
}

示例配置

Azure SQL数据库

export MSSQL_SERVER=myserver.database.windows.net
export MSSQL_DATABASE=mydatabase
export MSSQL_USER=myuser@myserver
export MSSQL_PASSWORD=mypassword
export MSSQL_ENCRYPT=yes
export MSSQL_TRUST_SERVER_CERTIFICATE=no

具有Windows身份验证的本地SQL Server

export MSSQL_SERVER=localhost
export MSSQL_DATABASE=mydatabase
export MSSQL_TRUSTED_CONNECTION=yes

非标准端口上的SQL Server

export MSSQL_SERVER=myserver.company.com
export MSSQL_PORT=1434
export MSSQL_DATABASE=mydatabase
export MSSQL_USER=sa
export MSSQL_PASSWORD=mypassword

虚拟环境下的MCP配置

适用于Claude Desktop、Claude Code、Cursor或任何兼容MCP的客户端。如果您使用的是Python虚拟环境,请指定Python可执行文件的完整路径:

{
  "mcpServers": {
    "mssql": {
      "command": "/path/to/your/venv/bin/python",
      "args": ["-m", "mssql_mcp_server.server"],
      "env": {
        "MSSQL_SERVER": "your-server-name",
        "MSSQL_DATABASE": "your-database",
        "MSSQL_DRIVER": "ODBC Driver 17 for SQL Server",
        "MSSQL_TRUST_SERVER_CERTIFICATE": "yes",
        "MSSQL_TRUSTED_CONNECTION": "yes",
        "MSSQL_ENCRYPT": "yes",
        "MSSQL_CONNECTION_TIMEOUT": "60",
        "MSSQL_PORT": "1433"
      }
    }
  }
}

可用工具

execute_sql

在连接的数据库上执行任何SQL查询。

参数:

  • query (string,必填):要执行的SQL查询

示例:

-- Simple SELECT
SELECT * FROM Users WHERE active = 1

-- Multi-line query with JOIN
SELECT 
    u.username,
    u.email,
    COUNT(o.id) as order_count
FROM Users u
LEFT JOIN Orders o ON u.id = o.user_id
GROUP BY u.username, u.email
HAVING COUNT(o.id) > 5

-- Create table
CREATE TABLE Products (
    id INT PRIMARY KEY IDENTITY(1,1),
    name NVARCHAR(100) NOT NULL,
    price DECIMAL(10,2),
    created_at DATETIME DEFAULT GETDATE()
)

-- Insert data
INSERT INTO Products (name, price)
VALUES ('Widget', 19.99), ('Gadget', 29.99)

可用资源

服务器将数据库表作为资源公开:

  • 架构资源: mssql://database/schema.table/schema

    • 显示表结构、列类型、约束
  • 数据资源: mssql://database/schema.table/data

    • 显示表中的示例数据(限制为100行)

查询预处理

服务器自动处理:

  • ✅ 具有正确换行处理的多行查询
  • ✅ SQL注释(两者 -- 和 /* */ 样式)
  • ✅ GO批处理分隔符(仅在有警告的情况下执行第一批)
  • ✅ 内嵌换行符的字符串文字
  • ✅ 过多的空白清理

错误处理

服务器为以下对象提供详细的错误消息:

  • 连接失败
  • 身份验证错误
  • SQL语法错误
  • 查询执行错误
  • 配置无效

安全考虑

  1. 凭证:使用环境变量或安全凭据存储。永远不要硬编码凭据。
  2. 权限:使用具有最低所需权限的数据库用户。
  3. 连接加密:启用 MSSQL_ENCRYPT 对于生产环境。
  4. 证书验证:设置 MSSQL_TRUST_SERVER_CERTIFICATE=no 用于生产。
  5. 查询验证:服务器按原样执行查询。请确保在数据库级别进行适当的访问控制。

发展

运行测试

pip install -e ".[dev]"
pytest

代码格式化

black mssql_mcp_server
flake8 mssql_mcp_server
mypy mssql_mcp_server

故障排除

连接问题

  1. “找不到SQL Server的ODBC驱动程序X”

    • 安装ODBC驱动程序(请参阅先决条件)
    • 更新 MSSQL_DRIVER 以匹配您安装的驱动程序
  2. “用户登录失败”

    • 验证凭据
    • 检查服务器上是否启用了SQL身份验证
    • 对于Azure SQL,请确保用户名包含服务器名称: user@server
  3. “无法打开登录请求的服务器”

    • 验证服务器名称/地址
    • 检查防火墙规则
    • 确保SQL Server正在接受TCP/IP连接

查询问题

  1. “‘GO’附近的语法不正确”

    • 服务器通过仅执行第一批来处理GO语句
    • 将多批处理脚本拆分为单独的查询
  2. 挂起查询

    • 检查未关闭的交易记录
    • 验证查询中没有与换行符相关的语法错误
    • 通过以下方式监控查询执行时间 MSSQL_CONNECTION_TIMEOUT

贡献

欢迎投稿!拜托:

  1. 分叉存储库
  2. 创建要素分支
  3. 添加新功能的测试
  4. 确保所有测试通过
  5. 提交拉取请求

许可证

MIT许可证-有关详细信息,请参阅许可证文件

致谢