使用说明
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
构建和测试
本地建设
- 安装依赖项并构建:
npm install
npm run build
- 测试构建:
node build/index.js
Docker构建
- 构建Docker镜像:
docker build -t sql-server-mcp:latest .
- 使用Docker Compose进行测试:
docker-compose up
部署
本地安装(Visual Studio代码)
要与Visual Studio Code和启用MCP的扩展一起使用,请执行以下操作:
-
安装Roo-Cline扩展 (或另一个MCP兼容扩展):
- 打开VS代码
- 转到扩展(Ctrl+Shift+X)
- 搜索“Roo-Cline”或您首选的MCP客户端扩展
- 单击安装
-
在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"
}
}
}
}
-
替代方案:使用特定于工作区的配置:
创建
.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
-
分叉此存储库
-
设置GitHub秘密:
AZURE_CREDENTIALS-服务主体JSONDB_USER-数据库用户名DB_PASSWORD-数据库密码DB_SERVER-服务器URLDB_NAME-数据库名称DB_ENCRYPT-“真”或“假”DB_TRUST_CERT-“真”或“假”
-
推送到主分支以触发部署
选项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
故障排除
常见问题
-
连接超时
- 检查SQL Server上的防火墙规则
- 验证连接字符串格式
- 确保可以从部署环境访问数据库服务器
-
认证失败
- 验证中的凭据
.env文件 - 检查SQL Server身份验证模式
- 确保用户具有必要的权限
- 验证中的凭据
-
构建错误
- 确保已安装Node.js 20+
- 删除
node_modules然后跑npm install再次 - 使用检查TypeScript编译错误
npm run build
安全最佳实践
-
凭据管理
- 使用环境变量,永远不要硬编码凭据
- 为生产环境实施Azure密钥库
- 尽可能使用托管身份
-
网络安全
- 严格配置防火墙规则
- 为Azure SQL使用专用端点
- 实现容器的Direct3D集成
-
访问控制
- 使用最低权限数据库帐户
- 在需要的地方实施行级安全
- 定期审核数据库访问
许可证
麻省理工学院
支持
对于问题和疑问: