关于 Sql Server Mcp
MCPQL 是面向 SQL Server 的 MCP 服务,供数据库分析和开发工作使用。它提供表与存储过程分析、数据查询和对象发现,并以默认关闭修改及存储过程执行作为安全控制。
主要功能
- 01分析表结构与存储过程
- 02预览数据并获取列统计
- 03执行 SQL 查询和存储过程
- 04搜索数据库对象及依赖
- 05检查数据库安全状态
- 06支持多种身份验证方式
适用场景
- 01检查表结构、索引和约束
- 02统计列数据并查看样本值
- 03查找数据库对象及其依赖
- 04在启用权限后执行修改操作
MCP 相关
该服务通过 MCP 向兼容客户端提供 SQL Server 操作工具,包括结构分析、数据查询、对象搜索和依赖检查。修改操作和存储过程执行默认禁用。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
MCPQL - SQL Server MCP
一个功能全面的 Model Context Protocol (MCP) 服务,用于执行 SQL Server 数据库操作。该服务通过 MCP 协议提供 10 个强大的工具,用于数据库分析、对象发现和数据处理。
🚀 快速开始
前提条件
- Node.js 18+ 和 npm
- SQL Server 数据库及相应的连接凭据
- 兼容 MCP 的客户端(如 Claude Desktop、Cursor IDE 或任意 MCP 客户端)
安装与配置
选项 1:通过 GitHub 使用 npx(推荐)
无需安装!只需配置 MCP 客户端:
Claude Desktop 配置文件(claude_desktop_config.json):
{
"mcpServers": {
"mcpql": {
"command": "npx",
"args": ["-y", "hendrickcastro/mcpql"],
"env": {
"DB_AUTHENTICATION_TYPE": "sql",
"DB_SERVER": "your_server",
"DB_NAME": "your_database",
"DB_USER": "your_username",
"DB_PASSWORD": "your_password",
"DB_PORT": "1433",
"DB_ENCRYPT": "false",
"DB_TRUST_SERVER_CERTIFICATE": "true"
}
}
}
}
Cursor IDE:
{
"mcpServers": {
"mcpql": {
"command": "npx",
"args": ["-y", "hendrickcastro/mcpql"],
"env": {
"DB_AUTHENTICATION_TYPE": "sql",
"DB_SERVER": "your_server",
"DB_NAME": "your_database",
"DB_USER": "your_username",
"DB_PASSWORD": "your_password",
"DB_PORT": "1433",
"DB_ENCRYPT": "false",
"DB_TRUST_SERVER_CERTIFICATE": "true"
}
}
}
}
选项 2:本地开发安装
- 克隆并设置:
git clone https://github.com/hendrickcastro/MCPQL.git
cd MCPQL
npm install
npm run build
- 配置数据库连接:
创建
.env文件并填写数据库凭据:
# Basic SQL Server connection
DB_AUTHENTICATION_TYPE=sql
DB_SERVER=localhost
DB_NAME=MyDatabase
DB_USER=sa
DB_PASSWORD=YourPassword123!
DB_PORT=1433
DB_ENCRYPT=false
DB_TRUST_SERVER_CERTIFICATE=true
- 使用本地路径配置 MCP 客户端:
{
"mcpServers": {
"mcpql": {
"command": "node",
"args": ["path/to/MCPQL/dist/server.js"]
}
}
}
🛠️ 可用工具
MCPQL 提供 11 个全面的 SQL Server 数据库操作工具:
1. 🏗️ 表分析 - mcp_table_analysis
全面分析表结构,包括列、键、索引和约束。
2. 📋 存储过程分析 - mcp_sp_structure
分析存储过程结构,包括参数、依赖项和源代码。
3. 👀 数据预览 - mcp_preview_data
预览表数据,可选筛选条件和行数限制。
4. 📊 列统计信息 - mcp_get_column_stats
获取特定列的全面统计信息。
5. ⚙️ 执行存储过程 - mcp_execute_procedure
使用参数执行存储过程并返回结果。
6. 🔍 执行 SQL 查询 - mcp_execute_query
执行自定义 SQL 查询,并提供完整的错误处理。
7. ⚡ 快速数据分析 - mcp_quick_data_analysis
快速统计分析,包括行数、列分布和高频值。
8. 🔎 综合搜索 - mcp_search_comprehensive
根据可配置的条件,按名称和定义搜索数据库对象。
9. 🔗 对象依赖关系 - mcp_get_dependencies
获取数据库对象(表、视图、存储过程等)的依赖关系。
10. 🎯 示例值 - mcp_get_sample_values
获取表中特定列的示例值。
11. 🔒 安全状态 - mcp_get_security_status
获取数据库操作当前的安全配置和状态。
📋 使用示例
分析表
// Get complete table structure
const analysis = await mcp_table_analysis({
table_name: "dbo.Users"
});
// Get quick data overview
const overview = await mcp_quick_data_analysis({
table_name: "dbo.Users",
sample_size: 500
});
// Preview table data with filters
const data = await mcp_preview_data({
table_name: "dbo.Users",
filters: { "Status": "Active", "Department": "IT" },
limit: 25
});
查找数据库对象
// Find all objects containing "User"
const objects = await mcp_search_comprehensive({
pattern: "User",
search_in_names: true,
search_in_definitions: false
});
// Find procedures that query a specific table
const procedures = await mcp_search_comprehensive({
pattern: "FROM Users",
object_types: ["PROCEDURE"],
search_in_definitions: true
});
分析存储过程
// Get complete stored procedure analysis
const spAnalysis = await mcp_sp_structure({
sp_name: "dbo.usp_GetUserData"
});
// Execute a stored procedure
const result = await mcp_execute_procedure({
sp_name: "dbo.usp_GetUserById",
params: { "UserId": 123, "IncludeDetails": true }
});
数据分析
// Get column statistics
const stats = await mcp_get_column_stats({
table_name: "dbo.Users",
column_name: "Age"
});
// Get sample values from a column
const samples = await mcp_get_sample_values({
table_name: "dbo.Users",
column_name: "Department",
limit: 15
});
🔧 环境变量和连接类型
MCPQL 支持多种 SQL Server 连接类型,并提供全面的配置选项:
🔐 身份验证类型
将 DB_AUTHENTICATION_TYPE 设置为以下值之一:
sql- SQL Server 身份验证(默认)windows- Windows 身份验证azure-ad- Azure Active Directory 身份验证
📋 完整环境变量
| 变量 | 描述 | 默认值 | 适用场景 |
|---|---|---|---|
| 基本连接 | |||
DB_AUTHENTICATION_TYPE | 身份验证类型(sql/windows/azure-ad) | sql | 全部 |
DB_SERVER | SQL Server 主机名/IP | - | 全部 |
DB_NAME | 数据库名称 | - | 全部 |
DB_PORT | SQL Server 端口 | 1433 | 全部 |
DB_TIMEOUT | 连接超时时间(ms) | 30000 | 全部 |
DB_REQUEST_TIMEOUT | 请求超时时间(ms) | 30000 | 全部 |
| SQL Server 身份验证 | |||
DB_USER | SQL Server 用户名 | - | SQL 身份验证 |
DB_PASSWORD | SQL Server 密码 | - | SQL 身份验证 |
| Windows 身份验证 | |||
DB_DOMAIN | Windows 域 | - | Windows 身份验证 |
DB_USER | Windows 用户名 | 当前用户 | Windows 身份验证 |
DB_PASSWORD | Windows 密码 | - | Windows 身份验证 |
| Azure AD 身份验证 | |||
DB_USER | Azure AD 用户名 | - | Azure AD(密码) |
DB_PASSWORD | Azure AD 密码 | - | Azure AD(密码) |
DB_AZURE_CLIENT_ID | Azure AD 应用客户端 ID | - | Azure AD(服务主体) |
DB_AZURE_CLIENT_SECRET | Azure AD 应用客户端密钥 | - | Azure AD(服务主体) |
DB_AZURE_TENANT_ID | Azure AD 租户 ID | - | Azure AD(服务主体) |
| SQL Server Express | |||
DB_INSTANCE_NAME | 命名实例(例如 SQLEXPRESS) | - | Express 实例 |
| 安全设置 | |||
DB_ENCRYPT | 启用加密 | false | 全部 |
DB_TRUST_SERVER_CERTIFICATE | 信任服务器证书 | false | 全部 |
DB_ENABLE_ARITH_ABORT | 启用算术中止 | true | 全部 |
DB_USE_UTC | 日期使用 UTC | true | 全部 |
| 连接池 | |||
DB_POOL_MAX | 最大连接数 | 10 | 全部 |
DB_POOL_MIN | 最小连接数 | 0 | 全部 |
DB_POOL_IDLE_TIMEOUT | 空闲超时时间(ms) | 30000 | 全部 |
| 高级设置 | |||
DB_CANCEL_TIMEOUT | 取消超时时间(ms) | 5000 | 全部 |
DB_PACKET_SIZE | 数据包大小(字节) | 4096 | 全部 |
DB_CONNECTION_STRING | 完整连接字符串 | - | 可替代单独设置 |
| 安全控制 | |||
DB_ALLOW_MODIFICATIONS | 允许 DML/DDL 操作 | false | 全部 |
DB_ALLOW_STORED_PROCEDURES | 允许执行存储过程 | false | 全部 |
🔧 连接配置示例
1. 🏠 本地 SQL Server(SQL 身份验证)
{
"mcpServers": {
"mcpql": {
"command": "npx",
"args": ["-y", "hendrickcastro/mcpql"],
"env": {
"DB_AUTHENTICATION_TYPE": "sql",
"DB_SERVER": "localhost",
"DB_NAME": "MyDatabase",
"DB_USER": "sa",
"DB_PASSWORD": "YourPassword123!",
"DB_PORT": "1433",
"DB_ENCRYPT": "false",
"DB_TRUST_SERVER_CERTIFICATE": "true"
}
}
}
}
2. 🏢 SQL Server Express(命名实例)
{
"mcpServers": {
"mcpql": {
"command": "npx",
"args": ["-y", "hendrickcastro/mcpql"],
"env": {
"DB_AUTHENTICATION_TYPE": "sql",
"DB_SERVER": "localhost",
"DB_INSTANCE_NAME": "SQLEXPRESS",
"DB_NAME": "MyDatabase",
"DB_USER": "sa",
"DB_PASSWORD": "YourPassword123!",
"DB_ENCRYPT": "false",
"DB_TRUST_SERVER_CERTIFICATE": "true"
}
}
}
}
3. 🪟 Windows 身份验证
{
"mcpServers": {
"mcpql": {
"command": "npx",
"args": ["-y", "hendrickcastro/mcpql"],
"env": {
"DB_AUTHENTICATION_TYPE": "windows",
"DB_SERVER": "MYSERVER",
"DB_NAME": "MyDatabase",
"DB_DOMAIN": "MYDOMAIN",
"DB_USER": "myuser",
"DB_PASSWORD": "mypassword",
"DB_ENCRYPT": "false",
"DB_TRUST_SERVER_CERTIFICATE": "true"
}
}
}
}
4. ☁️ Azure SQL Database(Azure AD 密码)
{
"mcpServers": {
"mcpql": {
"command": "npx",
"args": ["-y", "hendrickcastro/mcpql"],
"env": {
"DB_AUTHENTICATION_TYPE": "azure-ad",
"DB_SERVER": "myserver.database.windows.net",
"DB_NAME": "MyDatabase",
"DB_USER": "[email protected]",
"DB_PASSWORD": "userpassword",
"DB_PORT": "1433",
"DB_ENCRYPT": "true",
"DB_TRUST_SERVER_CERTIFICATE": "false"
}
}
}
}
5. 🔐 Azure SQL Database(服务主体)
{
"mcpServers": {
"mcpql": {
"command": "npx",
"args": ["-y", "hendrickcastro/mcpql"],
"env": {
"DB_AUTHENTICATION_TYPE": "azure-ad",
"DB_SERVER": "myserver.database.windows.net",
"DB_NAME": "MyDatabase",
"DB_AZURE_CLIENT_ID": "your-client-id",
"DB_AZURE_CLIENT_SECRET": "your-client-secret",
"DB_AZURE_TENANT_ID": "your-tenant-id",
"DB_PORT": "1433",
"DB_ENCRYPT": "true",
"DB_TRUST_SERVER_CERTIFICATE": "false"
}
}
}
}
6. 🔗 使用连接字符串
{
"mcpServers": {
"mcpql": {
"command": "npx",
"args": ["-y", "hendrickcastro/mcpql"],
"env": {
"DB_CONNECTION_STRING": "Server=localhost;Database=MyDatabase;User Id=sa;Password=YourPassword123!;Encrypt=false;TrustServerCertificate=true;"
}
}
}
}
🔒 安全功能
MCPQL 包含全面的安全控制,可防止意外修改数据库,这在生产环境中尤为重要。
🛡️ 安全控制
数据库修改保护
DB_ALLOW_MODIFICATIONS:控制 DML/DDL 操作(INSERT、UPDATE、DELETE、ALTER、DROP、CREATE)DB_ALLOW_STORED_PROCEDURES:控制存储过程执行- 默认值:为最大限度保障安全,这两个变量的默认值均为
false
安全状态工具
使用 mcp_get_security_status 检查当前安全配置:
const status = await mcp_get_security_status({});
🔧 启用操作
开发环境
{
"mcpServers": {
"mcpql": {
"command": "npx",
"args": ["-y", "hendrickcastro/mcpql"],
"env": {
"DB_SERVER": "localhost",
"DB_NAME": "MyDatabase",
"DB_USER": "sa",
"DB_PASSWORD": "YourPassword123!",
"DB_ALLOW_MODIFICATIONS": "true",
"DB_ALLOW_STORED_PROCEDURES": "true"
}
}
}
}
生产环境(推荐)
{
"mcpServers": {
"mcpql": {
"command": "npx",
"args": ["-y", "hendrickcastro/mcpql"],
"env": {
"DB_SERVER": "prod-server",
"DB_NAME": "ProductionDB",
"DB_USER": "readonly_user",
"DB_PASSWORD": "secure_password",
"DB_ALLOW_MODIFICATIONS": "false",
"DB_ALLOW_STORED_PROCEDURES": "false"
}
}
}
}
🚨 安全错误消息
操作被阻止时,MCPQL 会提供明确的指导:
Error: Modification operations are disabled for security.
To enable modifications, configure: DB_ALLOW_MODIFICATIONS=true
Error: Stored procedure execution is disabled for security.
To enable stored procedures, configure: DB_ALLOW_STORED_PROCEDURES=true
📋 始终允许的操作
无论安全设置如何,以下操作始终允许:
- SELECT 查询
- 表分析和架构检查
- 列统计和数据预览
- 对象搜索和依赖关系分析
- 数据库元数据操作
完整的安全文档请参阅 SECURITY.md。
🚨 常见问题排查
连接问题
- “登录失败”:检查用户名和密码。对于 Windows 身份验证,请确保设置了
DB_AUTHENTICATION_TYPE=windows - “找不到服务器”:确认服务器名称和端口。对于 SQL Express,请添加
DB_INSTANCE_NAME - “证书”错误:对于本地开发,请设置
DB_TRUST_SERVER_CERTIFICATE=true - 超时错误:增大
DB_TIMEOUT或检查网络连接
SQL Server Express 设置
- 在 SQL Server Configuration Manager 中启用 TCP/IP 协议
- 设置静态端口(通常为 1433),或通过 Browser Service 使用动态端口
- 配置 Windows 防火墙以允许 SQL Server 流量
- 对于默认的 Express 安装,请使用
DB_INSTANCE_NAME=SQLEXPRESS
Azure SQL Database 设置
- 创建服务器防火墙规则以允许客户端 IP
- 服务器名称使用以下格式:
server.database.windows.net - 始终设置
DB_ENCRYPT=true和DB_TRUST_SERVER_CERTIFICATE=false - 对于 Service Principal 身份验证,请在 Azure AD 中注册应用并分配权限
🧪 测试
运行完整测试套件:
npm test
测试套件包含对全部 10 个工具的全面测试,涵盖真实数据库测试并实现完整覆盖。
🏗️ 架构
项目结构
MCPQL/
├── src/
│ ├── __tests__/ # Comprehensive test suite
│ ├── tools/ # Modular tool implementations
│ │ ├── tableAnalysis.ts # Table analysis tools
│ │ ├── storedProcedureAnalysis.ts # SP analysis tools
│ │ ├── dataOperations.ts # Data operation tools
│ │ ├── objectSearch.ts # Search and discovery tools
│ │ ├── types.ts # Type definitions
│ │ └── index.ts # Tool exports
│ ├── db.ts # Database connection management
│ ├── server.ts # MCP server setup and handlers
│ ├── tools.ts # Tool definitions and schemas
│ └── mcp-server.ts # Tool re-exports
├── dist/ # Compiled JavaScript output
└── package.json # Dependencies and scripts
主要功能
- ⚡ 连接池:高效管理数据库连接
- 🛡️ 健壮的错误处理:全面的错误处理和验证
- 📋 丰富的元数据:提供详细结果和全面的数据库信息
- 🔧 灵活的配置:基于环境的配置
- 📊 优化的查询:为所有操作提供高效的 SQL 查询
📝 重要说明
- 对象名称:始终使用带架构限定的名称(例如,
dbo.Users、api.Idiomas) - 错误处理:所有工具都会返回带有成功/错误标识的结构化响应
- 类型安全:全面支持 TypeScript,并提供正确的类型定义
- 连接管理:自动进行连接池管理和重试
- 安全性:使用参数化查询防止 SQL 注入
🤝 参与贡献
- Fork 此仓库
- 创建功能分支(
git checkout -b feature/amazing-feature) - 进行更改并添加测试
- 确保所有测试通过(
npm test) - 提交更改(
git commit -m 'Add amazing feature') - 推送到分支(
git push origin feature/amazing-feature) - 发起 Pull Request
📄 许可证
本项目采用 MIT License 许可,详情请参阅 LICENSE 文件。
🙏 致谢
- 使用 Model Context Protocol SDK 构建
- 使用 mssql 实现 SQL Server 连接
- 使用 Jest 进行全面测试
🏷️ 标签与关键词
数据库: sql-server azure-sql database-analysis database-tools mssql t-sql database-management database-administration database-operations data-analysis
MCP 与 AI: model-context-protocol mcp-server mcp-tools ai-tools claude-desktop cursor-ide anthropic llm-integration ai-database intelligent-database
技术: typescript nodejs npm-package cli-tool database-client sql-client database-sdk rest-api json-api database-connector
功能: table-analysis stored-procedures data-preview column-statistics query-execution database-search object-dependencies schema-analysis data-exploration database-insights
部署: docker azure-deployment cloud-ready enterprise-ready production-ready scalable secure authenticated encrypted configurable
使用场景: database-development data-science business-intelligence database-migration schema-documentation performance-analysis data-governance database-monitoring troubleshooting automation
🎯 MCPQL 通过 Model Context Protocol 提供全面的 SQL Server 数据库分析与操作能力。非常适合数据库管理员、开发者以及所有使用 SQL Server 数据库的人员! 🚀
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。