SQL Server数据库访问服务

一个实现Model Context Protocol (MCP)的服务,提供对SQL Server数据库的安全访问,使AI助手和其他MCP客户端能够通过标准化接口查询和交互。

  • by PlanetMarc
  • PowerShell
  • 本地部署
  • 更新于
在 GitHub 查看 planetmarc/sqldb-mcp-server

使用说明

SQL Server MCP服务器

一种模型上下文协议(MCP)服务器实现,提供对SQL server数据库的安全访问。该服务器使AI助手和其他MCP客户端能够通过标准化的接口查询SQL server数据库并与之交互。

概述

此MCP服务器充当MCP客户端(如Claude Desktop或其他AI助手)和SQL server数据库之间的桥梁,提供受控访问以执行查询和检索模式信息。它通过stdio通信实现了MCP协议,使其适合与各种AI工具和应用程序集成。

特性

工具

服务器为数据库交互提供了两个主要工具:

1. execute_query

  • 描述:在连接的数据库上执行任何SQL查询
  • 输入:SQL查询字符串
  • 输出:JSON格式的查询结果
  • 用例:
    • 数据检索(SELECT语句)
    • 数据操作(插入、更新、删除)
    • 存储过程执行
    • 复杂的连接和聚合

2. get_schema_info

  • 描述:检索全面的数据库架构信息
  • 输入:无需
  • 输出:JSON格式的所有表和存储过程列表
  • 用例:
    • 数据库探索
    • 了解表结构
    • 发现可用的存储过程
    • 架构文档

先决条件

  • Node.js 20或更高版本
  • npm 7或更高版本
  • 访问SQL Server数据库(Azure SQL、SQL Server或SQL Server Express)
  • Docker桌面(用于容器化部署)
  • Azure CLI(用于Azure部署)

配置

环境变量

服务器需要以下环境变量进行数据库连接。创建一个 .env 项目根目录中的文件:

# Copy the example file
cp .env.example .env

编辑 .env 使用您的数据库凭据:

# Database Configuration
DB_USER=your_database_username
DB_PASSWORD=your_database_password
DB_SERVER=your_server.database.windows.net
DB_NAME=your_database_name
DB_ENCRYPT=true                    # Use encryption (recommended for Azure SQL)
DB_TRUST_CERT=false                 # Don't trust self-signed certificates

安全说明

  • 永不承诺 .env 文件 到版本控制
  • 将Azure密钥库或类似服务用于生产部署
  • 考虑在Azure部署中使用托管身份
  • 为数据库访问实施适当的防火墙规则

发展

安装依赖项:

npm install

构建服务器:

npm run build

对于自动重建的开发:

npm run watch

构建和测试

本地建设

  1. 安装依赖项并构建:
npm install
npm run build
  1. 测试构建:
node build/index.js

Docker构建

  1. 构建Docker镜像:
docker build -t sql-server-mcp:latest .
  1. 使用Docker Compose进行测试:
docker-compose up

部署

本地安装(Visual Studio代码)

要与Visual Studio Code和启用MCP的扩展一起使用,请执行以下操作:

  1. 安装Roo-Cline扩展 (或另一个MCP兼容扩展):

    • 打开VS代码
    • 转到扩展(Ctrl+Shift+X)
    • 搜索“Roo-Cline”或您首选的MCP客户端扩展
    • 单击安装
  2. 在VS代码设置中配置MCP服务器:

    打开VS代码设置(settings.json):

    • 按 Ctrl+Shift+P (或 Cmd+Shift+P 在Mac上)
    • 键入“首选项:打开设置(JSON)”
    • 添加MCP服务器配置:
{
  "roo-cline.mcpServers": {
    "sql-server": {
      "command": "node",
      "args": ["C:/path/to/sql-server-mcp/build/index.js"],
      "env": {
        "DB_USER": "your_username",
        "DB_PASSWORD": "your_password",
        "DB_SERVER": "your_server.database.windows.net",
        "DB_NAME": "your_database",
        "DB_ENCRYPT": "true",
        "DB_TRUST_CERT": "false"
      }
    }
  }
}
  1. 替代方案:使用特定于工作区的配置:

    创建 .vscode/settings.json 在您的工作区根目录中:

{
  "roo-cline.mcpServers": {
    "sql-server": {
      "command": "node",
      "args": ["${workspaceFolder}/sql-server-mcp/build/index.js"],
      "env": {
        "DB_USER": "${env:DB_USER}",
        "DB_PASSWORD": "${env:DB_PASSWORD}",
        "DB_SERVER": "${env:DB_SERVER}",
        "DB_NAME": "${env:DB_NAME}",
        "DB_ENCRYPT": "true",
        "DB_TRUST_CERT": "false"
      }
    }
  }
}

备注:确切的配置密钥(例如。, roo-cline.mcpServers)可能因您的MCP客户端扩展而异。有关正确的配置格式,请参阅扩展的文档。

Azure部署

此项目包括全面的Azure部署支持,并提供多种选项:

选项1:快速部署脚本

使用附带的PowerShell脚本进行自动部署:

# Login to Azure
az login

# Run deployment script
.\deploy-azure.ps1 `
  -ResourceGroupName "mcp-sql-rg" `
  -Location "eastus" `
  -ContainerName "mcp-sql-server"

选项2:GitHub操作CI/CD

  1. 分叉此存储库

  2. 设置GitHub秘密:

    • AZURE_CREDENTIALS -服务主体JSON
    • DB_USER -数据库用户名
    • DB_PASSWORD -数据库密码
    • DB_SERVER -服务器URL
    • DB_NAME -数据库名称
    • DB_ENCRYPT -“真”或“假”
    • DB_TRUST_CERT -“真”或“假”
  3. 推送到主分支以触发部署

选项3:手动Azure容器实例

# Create resource group
az group create --name mcp-sql-rg --location eastus

# Create container registry
az acr create --resource-group mcp-sql-rg --name mcpsqlregistry --sku Basic

# Build and push image
az acr build --registry mcpsqlregistry --image mcp-sql-server:latest .

# Deploy container instance
az container create \
  --resource-group mcp-sql-rg \
  --name mcp-sql-server \
  --image mcpsqlregistry.azurecr.io/mcp-sql-server:latest \
  --cpu 1 --memory 1 \
  --environment-variables \
    DB_USER=$DB_USER \
    DB_SERVER=$DB_SERVER \
    DB_NAME=$DB_NAME \
    DB_ENCRYPT=true \
    DB_TRUST_CERT=false \
  --secure-environment-variables \
    DB_PASSWORD=$DB_PASSWORD

有关详细的部署说明,请参阅 部署.md.

调试

MCP检查员

使用MCP检查器进行交互式调试:

npm run inspector

这将启动检查器,并提供一个URL来访问浏览器中的调试工具。

容器日志

对于容器化部署:

# Docker
docker logs <container-id>

# Azure Container Instance
az container logs --resource-group mcp-sql-rg --name mcp-sql-server

故障排除

常见问题

  1. 连接超时

    • 检查SQL Server上的防火墙规则
    • 验证连接字符串格式
    • 确保可以从部署环境访问数据库服务器
  2. 认证失败

    • 验证中的凭据 .env 文件
    • 检查SQL Server身份验证模式
    • 确保用户具有必要的权限
  3. 构建错误

    • 确保已安装Node.js 20+
    • 删除 node_modules 然后跑 npm install 再次
    • 使用检查TypeScript编译错误 npm run build

安全最佳实践

  1. 凭据管理

    • 使用环境变量,永远不要硬编码凭据
    • 为生产环境实施Azure密钥库
    • 尽可能使用托管身份
  2. 网络安全

    • 严格配置防火墙规则
    • 为Azure SQL使用专用端点
    • 实现容器的Direct3D集成
  3. 访问控制

    • 使用最低权限数据库帐户
    • 在需要的地方实施行级安全
    • 定期审核数据库访问

许可证

麻省理工学院

支持

对于问题和疑问: