使用说明
MSSQL MCP服务器
一个全面的模型上下文协议(MCP)服务器,提供对Microsoft SQL server数据库的安全、只读访问。该服务器使AI助手能够发现数据库模式,安全执行查询,并通过标准化的界面生成商业智能见解。
🌟 特性
🔍 架构发现
- 自动发现表、视图、列和关系
- 详细的元数据,包括数据类型、约束和索引
- 外键关系映射和依赖性分析
- 支持多种数据库模式
🛡️ 安全第一
- 只读执行 -阻止所有DML/DDL操作(INSERT、UPDATE、DELETE、DROP等)
- SQL注入预防 -全面的查询验证和清理
- 资源保护 -可配置的行限制和查询超时
- 访问控制 -基于环境的数据库凭据管理
📊 强大的查询工具
- 执行带有自动安全限制的SELECT查询
- 查询性能分析和执行计划生成
- 表搜索和过滤功能
- 查询优化建议
🎯 商业智能
- 常见数据分析场景的预构建提示
- 特定领域的BI查询生成器(销售、财务、运营、客户分析)
- 数据质量评估模板
- 性能分析工作流程
🚀 快速开始
安装
选项1:从npm安装(推荐)
# Global installation
npm install -g @harshad-webx/mssql-mcp-server
# Or use without installing
npx @harshad-webx/mssql-mcp-server
选项2:从源代码安装
先决条件
- Node.js 18+ - 点击此处下载
- TypeScript -自动安装,带有依赖关系
- Microsoft SQL Server -启用TCP/IP的任何版本
- 数据库访问 -具有SELECT权限的用户帐户
# Clone the repository
git clone https://github.com/harshad-webx/mssql-mcp-server.git
cd mssql-mcp-server
# Install dependencies
npm install
# Build the project
npm run build
2.配置
创建一个 .env 项目根目录中的文件:
# Copy the example environment file
cp .env.example .env
编辑 .env 使用您的数据库详细信息:
# MSSQL Database Configuration
DB_SERVER=your-sql-server.com
DB_DATABASE=YourDatabaseName
DB_USERNAME=your_username
DB_PASSWORD=your_secure_password
DB_PORT=1433
DB_ENCRYPT=true
DB_TRUST_SERVER_CERTIFICATE=false
3.测试连接
# Start the server to test
npm start
您应该看到: MSSQL MCP Server running on stdio
🔧 MCP客户端集成
Claude桌面集成
添加到您的Claude Desktop MCP配置(%APPDATA%\Claude\claude_desktop_config.json 在Windows或 ~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上):
选项1:使用npm全局安装(推荐)
{
"mcpServers": {
"mssql": {
"command": "mssql-mcp-server",
"env": {
"DB_SERVER": "your-server.com",
"DB_DATABASE": "YourDatabase",
"DB_USERNAME": "your_username",
"DB_PASSWORD": "your_password",
"DB_PORT": "1433",
"DB_ENCRYPT": "true"
}
}
}
}
选项2:使用npx(无需安装)
{
"mcpServers": {
"mssql": {
"command": "npx",
"args": ["@harshad-webx/mssql-mcp-server"],
"env": {
"DB_SERVER": "your-server.com",
"DB_DATABASE": "YourDatabase",
"DB_USERNAME": "your_username",
"DB_PASSWORD": "your_password",
"DB_PORT": "1433",
"DB_ENCRYPT": "true"
}
}
}
}
选项3:使用源代码安装
{
"mcpServers": {
"mssql": {
"command": "node",
"args": ["C:/path/to/mssql-mcp-server/build/index.js"],
"env": {
"DB_SERVER": "your-server.com",
"DB_DATABASE": "YourDatabase",
"DB_USERNAME": "your_username",
"DB_PASSWORD": "your_password",
"DB_PORT": "1433",
"DB_ENCRYPT": "true"
}
}
}
}
其他MCP客户端
对于其他MCP兼容客户端,请使用stdio传输:
node build/index.js
🛠️ 可用工具
1. execute_query
对数据库执行只读SQL SELECT查询。
参数:
query(字符串,必填):要执行的SQL SELECT查询maxRows(数字,可选):返回的最大行数(默认值:100,最大值:1000)includeExecutionPlan(布尔值,可选):包括查询执行计划(默认值:false)
例子:
SELECT TOP 10
CustomerID,
CustomerName,
Country,
YEAR(OrderDate) as OrderYear
FROM Customers c
INNER JOIN Orders o ON c.CustomerID = o.CustomerID
WHERE Country = 'USA'
ORDER BY OrderDate DESC
2. get_table_schema
获取特定表的全面架构信息。
参数:
schema(字符串,必填):数据库架构名称(例如“dbo”)table(字符串,必填):表名
退货:
- 表元数据(名称、类型、行数)
- 列详细信息(数据类型、约束、描述)
- 索引信息
- 外键关系
3. search_tables
按名称模式搜索表和视图。
参数:
searchTerm(字符串,必填):搜索模式以匹配表/视图名称
例子: 搜索所有包含“customer”的表
4. analyze_query
分析SQL查询性能并获得优化建议。
参数:
query(字符串,必填):要分析的SQL查询
退货:
- 执行统计信息
- 查询执行计划
- 业绩建议
- 优化建议
🎯 可用提示
1. analyze_table_relationships
生成数据库表关系和外键约束的全面分析。
论据:
schema(可选):要分析的特定模式
输出示例:
- 外键关系映射
- 依赖层次结构
- 孤立表标识
- 关系强度分析
2. find_data_quality_issues
生成SQL查询以识别常见的数据质量问题。
论据:
table(可选):要检查的特定表(格式:schema.table)
检查包括:
- 按列进行NULL值分析
- 重复记录检测
- 违反参考完整性
- 数据格式不一致
- 异常值识别
3. performance_analysis
生成查询以进行全面的数据库性能分析。
论据:
focus(可选):焦点区域-“索引”、“查询”或“表”
分析领域:
- 缺少索引建议
- 未使用的索引标识
- 昂贵的查询检测
- 表统计回顾
- 等待统计分析
4. business_intelligence_starter
为业务分析生成特定于域的BI查询。
论据:
domain(可选):业务领域-“销售”、“财务”、“运营”或“客户”
查询类别:
- 时间序列趋势分析
- 同期对比分析
- 客户细分
- 绩效关键绩效指标
- 收入分析
📋 使用示例
基本查询执行
// Through MCP client
{
"tool": "execute_query",
"arguments": {
"query": "SELECT COUNT(*) as total_customers FROM Customers WHERE Country = 'USA'",
"maxRows": 1
}
}
架构发现
// Get detailed table information
{
"tool": "get_table_schema",
"arguments": {
"schema": "dbo",
"table": "Customers"
}
}
数据质量分析
// Using prompt for data quality assessment
{
"prompt": "find_data_quality_issues",
"arguments": {
"table": "Sales.Orders"
}
}
🔒 安全功能
查询验证
- 关键词过滤:块INSERT、UPDATE、DELETE、DROP、CREATE、ALTER、EXEC等。
- 报表分析:只允许SELECT和WITH(CTE)语句
- 评论监控:记录带有注释的查询以供安全审查
资源保护
- 行限制:用于无界查询的自动TOP子句注入
- 超时控制:可配置的查询超时(默认值:30秒)
- 连接池:高效的数据库连接管理
访问控制
- 环境变量:安全的凭据管理
- 最低权限:专为只读数据库用户设计
- 连接加密:对安全连接的TLS/SSL支持
🏗️ 数据库设置
推荐的数据库用户设置
-- Create a dedicated read-only user
CREATE LOGIN mcp_reader WITH PASSWORD = 'SecurePassword123!';
USE YourDatabase;
CREATE USER mcp_reader FOR LOGIN mcp_reader;
-- Grant minimal required permissions
GRANT SELECT ON SCHEMA::dbo TO mcp_reader;
GRANT VIEW DEFINITION ON SCHEMA::dbo TO mcp_reader;
-- Grant access to system views for schema discovery
GRANT VIEW ANY DEFINITION TO mcp_reader;
-- Optional: Grant access to specific schemas only
GRANT SELECT ON SCHEMA::Sales TO mcp_reader;
GRANT SELECT ON SCHEMA::Marketing TO mcp_reader;
网络配置
确保SQL Server配置为接受TCP/IP连接:
- 配置管理器 → SQL Server网络配置
- 启用TCP/IP协议
- 配置防火墙 允许端口1433(或您的自定义端口)
- 重新启动SQL Server服务
🐳 Docker支持
构建Docker镜像
docker build -t mssql-mcp-server .
使用Docker运行
docker run -e DB_SERVER=your-server \
-e DB_DATABASE=YourDB \
-e DB_USERNAME=user \
-e DB_PASSWORD=pass \
mssql-mcp-server
Docker Compose
version: '3.8'
services:
mcp-server:
build: .
environment:
- DB_SERVER=sql-server
- DB_DATABASE=MyDatabase
- DB_USERNAME=mcp_reader
- DB_PASSWORD=securepassword
depends_on:
- sql-server
🔧 发展
可用脚本
# Development with auto-reload
npm run dev
# Build TypeScript
npm run build
# Watch mode for development
npm run watch
# Start production server
npm start
项目结构
src/
├── database/
│ ├── config.ts # Database connection management
│ ├── schema.ts # Schema discovery utilities
│ └── queryExecutor.ts # Query execution and validation
└── index.ts # Main MCP server implementation
添加新功能
- 新工具:添加到
ListToolsRequestSchema和CallToolRequestSchema处理器 - 新提示:添加到
ListPromptsRequestSchema和GetPromptRequestSchema处理器 - 安全规则:扩展
QueryExecutor.validateReadOnlyQuery()方法
🐛 故障排除
常见问题
连接被拒绝
Error: connect ECONNREFUSED
- 验证SQL Server是否正在运行且可访问
- 检查防火墙设置和端口配置
- 确保TCP/IP协议已启用
认证失败
Error: Login failed for user
- 在中验证用户名和密码
.env - 确保用户具有所需的数据库权限
- 检查SQL Server是否使用Windows身份验证与SQL身份验证
查询超时
Error: Query execution failed: Timeout
- 优化查询性能
- 增加超时时间
queryExecutor.ts - 检查是否阻止对数据库的查询 权限不足
Error: The SELECT permission was denied
- 向数据库用户授予SELECT权限
- 验证架构访问权限
- 检查元数据查询的查看定义权限
调试模式
通过设置环境变量启用详细日志记录:
DEBUG=mcp:* npm start
📊 性能优化
查询优化提示
- 使用特定列:避免
SELECT *为了获得更好的性能 - 添加WHERE子句:始终过滤数据以减少结果集
- 利用索引:确保对频繁查询的列进行索引
- 限制结果:使用TOP子句或maxRows参数
数据库优化
- 更新统计:保持表统计信息的最新状态
- 重建索引:保持指数健康
- 监测性能:使用内置分析工具
- 优化查询:定期审查执行计划
🤝 贡献
我们欢迎捐款!请参阅我们的投稿指南:
入门指南
- 分叉存储库
- 创建要素分支:
git checkout -b feature/amazing-feature - 通过适当的测试进行更改
- 提交您的更改:
git commit -m 'Add amazing feature' - 推到分支:
git push origin feature/amazing-feature - 打开拉取请求
开发指南
- 遵循TypeScript的最佳实践
- 添加新功能的测试
- 更新变更文档
- 确保维护安全验证
📄 许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
🆘 支持
- 文档:查看此README和代码注释
- 问题: 创建GitHub问题
- 讨论: GitHub讨论
🙏 致谢
- 模型上下文协议 用于标准化的AI工具界面
- Microsoft SQL Server 用于健壮的数据库平台
- Node.js MSSQL库 用于数据库连接
准备好用AI探索你的数据库了吗?现在就开始吧! 🚀