内容
# 🗄️ MSSQL MCP 服务器 🚀 快速入门
1. **📦 安装**: `npm install && npm run build`
2. **⚙️ 配置**: 设置个别环境变量(参见下面的配置)
3. **🔗 连接**: 工具自动使用您配置的连接
4. **🔍 探索**: 使用自然语言查询和会话式探索数据库
5. **📄 提取**: 获取完整的存储过程 SQL 代码用于业务逻辑分析
6. **🏗️ 现代化**: 使用全面的架构工具规划应用程序现代化。这个全面的 Microsoft SQL Server 数据库分析和现代化模型上下文协议(MCP)服务器提供广泛的数据库架构探索和转换能力。有关完整的配置详细信息、文件位置和故障排除,请参阅 [**配置指南**](CONFIGURATION_GUIDE.md)。
## 💬 会话式用法
配置多个连接后,您可以自然地在数据库之间切换:这个全面的服务器提供广泛的工具用于分析 Classic ASP 应用程序、探索数据库架构和规划现代化到 .NET/Angular 架构。
使用 [tedious](https://github.com/tediousjs/tedious) 库构建,提供纯 JavaScript SQL Server 连接,支持 Windows 身份验证(NTLM)。
**🆕 最新更新**: 增强的存储过程工具现在提供完整的 SQL 源代码访问,用于全面的业务逻辑分析和现代化规划。
## ❓ 为什么在环境变量中使用 Windows 凭证?
**NTLM 直通身份验证要求:** 当使用 Windows 身份验证(`Integrated Security=SSPI`)连接到 SQL Server 时,MSSQL MCP 服务器必须提供明确的域凭证,因为:
1. **没有交互式会话**: MCP 服务器作为后台进程运行,无访问当前用户 Windows 会话的权限
2. **NTLM 协议**: Windows 身份验证需要明确的用户名、密码和域以建立 NTLM 握手
3. **安全上下文**: tedious 库需要这些凭证来模拟域用户进行数据库访问
4. **跨进程身份验证**: 与在用户上下文中运行的应用程序不同,MCP 服务器需要明确的凭证委托
**环境变量是提供这些凭证的安全标准方式,不在配置文件中硬编码。**
## 🛠️ 可用工具(29 个综合数据库分析工具)
### 🔧 核心数据库工具(8 个工具)
- **🔌 test_connection** - 测试数据库连接性并获取服务器信息
- **📋 list_connections** - 列出所有可用的命名数据库连接
- **📚 list_databases** - 列出 SQL Server 实例上的所有可用数据库
- **📊 list_tables** - 列出特定架构(默认为 dbo)中的所有表
- **📝 describe_table** - 获取详细的架构信息,包括列、数据类型和约束
- **🎯 sample_data** - 从表中检索样本数据(默认为 10 行,最大 100 行)
- **💻 execute_query** - 执行自定义 SELECT 查询(默认禁用;设置 `MSSQL_ENABLE_EXECUTE_QUERY=true` 启用)
- **🔗 get_relationships** - 获取表之间的外键关系
### 🏗️ 架构发现工具(7 个工具)
- **📋 list_stored_procedures** - 列出和分析带有参数和定义的存储过程
- **🔍 describe_stored_procedure** - 获取过程参数和定义
- **📋 list_views** - 分析视图、其定义和依赖项
- **🔍 describe_view** - 获取视图定义和依赖项
- **⚡ list_triggers** - 确定触发器和业务逻辑
- **🔍 describe_trigger** - 提取触发器逻辑和事件
- **🔧 list_functions** - 按类型(标量、表值等)列出用户定义函数
### ⚡ 索引和性能工具(5 个工具)
- **📊 list_indexes** - 综合索引使用统计和建议
- **🎯 find_missing_indexes** - 根据查询模式识别潜在的缺失索引
- **📈 analyze_table_stats** - 分析表大小、行数和空间使用情况
- **💾 analyze_database_size** - 完整的数据库存储分析
- **🔍 analyze_index_usage** - 确定未使用和利用不足的索引
### 🔒 约束分析工具(5 个工具)
- **📋 list_constraints** - 列出所有约束(检查、唯一、外键等)
- **✅ analyze_check_constraints** - 从检查约束中提取业务规则
- **🔧 list_default_constraints** - 分析默认值模式
- **📝 list_user_defined_types** - 目录自定义数据类型
- **🧮 find_computed_columns** - 确定计算字段和业务逻辑
### 📊 数据模式工具(4 个工具)
- **📈 analyze_data_distribution** - 分析数据模式和质量
- **🔍 find_lookup_tables** - 自动识别参考/查找表
- **❓ analyze_null_patterns** - 查找具有高空值百分比的列
- **🔍 detect_audit_columns** - 确定审计列和跟踪模式
### 🚀 增强的存储过程工具(4 个工具)
- **📄 get_stored_procedure_definition** - 获取单个存储过程的完整 SQL 源代码
- **📚 get_multiple_stored_procedure_definitions** - 同时获取多个过程的 SQL 定义
- **📦 get_all_stored_procedure_definitions** - 获取架构中所有过程的完整 SQL 定义
- **🔍 search_stored_procedures_by_content** - 按 SQL 定义中的文本模式搜索过程
所有工具都接受一个可选的 `connectionName` 参数,以便在会话式查询中切换不同的数据库。
## ✨ 功能
- **🎯 个别环境变量**: 最干净的配置方法 - 不需要 JSON 字符串
- **🔄 多数据库支持**: 会话式切换不同数据库
- **🔐 Windows 身份验证支持**: 完整的 NTLM 身份验证,带域凭证
- **🏗️ 深入的架构分析**: 综合的数据库对象探索,包括存储过程、视图、触发器
- **📄 完整的 SQL 代码访问**: 从存储过程中提取完整的源代码用于分析和现代化
- **⚡ 性能工具**: 索引分析、缺失索引检测、表统计
- **🔒 业务逻辑提取**: 从约束、计算列和数据库对象中提取业务规则
- **📊 数据模式分析**: 确定查找表、审计列和数据质量模式
- **🔍 旧系统分析**: 专门用于 Classic ASP 到现代栈迁移规划的工具
- **📊 数据采样**: 安全的数据检索,带有可配置的限制
- **🛡️ 只读安全**: 内置的查询验证和安全限制
- **🔄 连接池**: 使用 tedious 进行高效的连接重用
- **🎛️ 多种配置格式**: 支持多种配置方法
## 📦 安装
```bash
npm install
npm run build
```
## 🔐 环境设置
**注意:** `.env` 文件仅用于本地测试/开发。对于生产使用,请直接使用环境变量配置您的 MCP 客户端。
1. **复制示例环境文件:**
```bash
cp .env.example .env
```
2. **使用凭证更新 `.env`:**
```bash
# 用于 NTLM 的 Windows 身份验证凭证
MSSQL_USERNAME=您的域名-用户名
MSSQL_PASSWORD=您的安全密码
MSSQL_DOMAIN=您的域名
# 数据库的默认连接字符串
MSSQL_CONNECTION_STRING=Data Source=您的服务器; Initial Catalog=您的数据库; Integrated Security=SSPI; TrustServerCertificate=False;
```
3. **安全注意:** `.env` 文件自动被 Git 忽略,以防止提交凭证。
## ⚙️ 配置
### 🎯 推荐方法:个别环境变量
使用个别环境变量的最干净、最专业的方法(不需要 JSON 字符串):
```jsonc
{
"servers": {
"mssql-mcp": {
"type": "stdio",
"command": "npx",
"args": ["mssql-mcp-server"],
"env": {
// Windows 凭证(个别变量 - 最干净)
"WINDOWS_USERNAME": "您的域名-用户名",
"WINDOWS_PASSWORD": "您的安全密码",
"WINDOWS_DOMAIN": "您的域名",
// 可选的默认连接
"MSSQL_CONNECTION_STRING": "Data Source=主服务器; Initial Catalog=主数据库; Integrated Security=SSPI; TrustServerCertificate=False;",
// 多个数据库连接(个别变量)
"CONNECTION_CRM": "Data Source=crm-服务器; Initial Catalog=CRM_数据库; Integrated Security=SSPI; TrustServerCertificate=False;",
"CONNECTION_ERP": "Data Source=erp-服务器; Initial Catalog=ERP_系统; Integrated Security=SSPI; TrustServerCertificate=False;",
"CONNECTION_ANALYTICS": "Data Source=分析服务器; Initial Catalog=数据仓库; Integrated Security=SSPI; TrustServerCertificate=False;",
"CONNECTION_HR": "Data Source=hr-服务器; Initial Catalog=人力资源; Integrated Security=SSPI; TrustServerCertificate=False;"
}
}
}
}
```
### 🎯 **连接名称映射**
使用 `CONNECTION_*` 变量时,会自动生成连接名称:
| 环境变量 | 连接名称(用于工具) |
| ---------------------- | --------------------------- |
| `CONNECTION_CRM` | `crm` |
| `CONNECTION_ERP` | `erp` |
| `CONNECTION_ANALYTICS` | `analytics` |
| `CONNECTION_HR_SYSTEM` | `hr_system` |
**在会话式查询中的用法:**
- _"显示我 CRM 数据库中的表"_ → 使用 `crm` 连接
- _"分析仓库中的数据"_ → 使用 `analytics` 连接
- _"查询 HR 系统中的员工数据"_ → 使用 `hr_system` 连接
### 🔧 **替代配置方法**
服务器支持多种配置方法以保持向后兼容:
- **JSON 字符串变量**: `windows_credentials`, `connections`
- **旧变量**: `MSSQL_WINDOWS_CREDENTIALS`, `MSSQL_CONNECTIONS`
- **个别旧变量**: `MSSQL_USERNAME`, `MSSQL_PASSWORD`, `MSSQL_DOMAIN`
有关完整的配置详细信息、文件位置和故障排除,请参阅 [**配置指南**](CONFIGURATION_GUIDE.md)。
## 🔐 安全配置
#### **全局/用户级** (推荐用于个人开发)
- **位置**: `%APPDATA%\Claude\claude_desktop_config.json` (Windows)
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Linux**: `~/.config/claude/claude_desktop_config.json`
- **范围**: 在所有 Claude Desktop 会话中可用
- **用例**: 个人开发设置、本地数据库
**注意**: Claude Desktop 仅支持全局配置(无项目级配置)
### 📝 **VS Code**
#### **全局/用户级** (在所有工作区中可用)
- **位置**: 用户设置 JSON
- **Windows**: `%APPDATA%\Code\User\settings.json`
- **macOS**: `~/Library/Application Support/Code/User/settings.json`
- **Linux**: `~/.config/Code/User/settings.json`
- **访问**: `Ctrl+Shift+P` → "首选项:打开用户设置(JSON)"
- **范围**: 所有 VS Code 工作区
- **用例**: 适用于所有项目的统一开发环境
#### **工作区级** (特定工作区)
- **位置**: `.vscode/settings.json` 在工作区根目录
- **范围**: 仅限特定工作区
- **用例**: 工作区特定的数据库连接
#### **项目/仓库级** (推荐用于团队)
- **位置**: `.vscode/mcp.json` 在项目根目录
- **范围**: 仅限特定项目/仓库
- **用例**: 项目特定的数据库、团队协作、版本控制
### 🎯 **Cursor**
#### **全局/用户级**
- **位置**: `%APPDATA%\Cursor\User\settings.json` (Windows)
- **macOS**: `~/Library/Application Support/Cursor/User/settings.json`
- **Linux**: `~/.config/Cursor/User/settings.json`
- **范围**: 所有 Cursor 工作区
#### **工作区/项目级**
- **位置**: `.vscode/settings.json` 或 `.vscode/mcp.json` 在项目根目录
- **范围**: 特定工作区/项目(Cursor 使用 VS Code 格式)
### 🏢 **Visual Studio Professional**
#### **系统级**
- **位置**: Windows 系统环境变量
- **用例**: 系统范围的凭证和连接
- **注意**: VS Professional 目前没有原生 MCP 支持
#### **项目级**
- **位置**: `.vs/mcp.json` 或类似(取决于扩展程序)
- **状态**: 取决于 MCP 扩展程序的实现
### 🎯 **配置优先级层次**
**覆盖顺序** (从最高优先级到最低优先级):
1. **项目/仓库级**: `.vscode/mcp.json`
2. **工作区级**: `.vscode/settings.json`
3. **用户/全局级**: `User/settings.json` 或 Claude 配置
4. **系统级**: Windows 环境变量
**示例**: 如果您在全局和项目配置中都设置了 `WINDOWS_USERNAME`, 则项目值将用于该特定项目。
### 💡 **文件位置的最佳实践**
#### **适用于个人开发者:**
- **全局凭证**: 在系统环境变量中设置 Windows 身份验证
- **全局默认连接**: 在 Claude Desktop 全局配置或 VS Code 用户设置中配置
- **项目连接**: 使用 `.vscode/mcp.json` 进行项目特定的数据库
#### **适用于团队:**
- **共享设置**: 在项目 README 中记录配置
- **版本控制**: 将 `.vscode/mcp.json` 包含在仓库中以实现团队一致性
- **安全**: 永远不要提交实际的密码 - 使用环境变量引用
#### **适用于不同用例:**
- **个人项目**: 在 Claude Desktop 或 VS Code 用户设置中进行全局配置
- **团队项目**: 项目级 `.vscode/mcp.json` 带有环境变量引用
- **企业**: 结合系统环境变量 + 项目特定配置
### 🔗 连接字符串示例
**🔐 Windows 身份验证(推荐):**
```
Data Source=服务器名称; Initial Catalog=数据库名称; Integrated Security=SSPI; TrustServerCertificate=False;
```
**🔑 SQL Server 身份验证:
```
Server=localhost,1433;Database=AdventureWorks;User Id=sa;Password=YourPassword123!;Encrypt=true;TrustServerCertificate=false;
```
**☁️ Azure SQL 数据库:
```
Server=您的服务器.database.windows.net;Database=您的数据库;User Id=您的用户名;Password=您的密码;Encrypt=true;
```
**🏷️ 命名实例:```
Server=localhost\\SQLEXPRESS;Database=TestDB;Integrated Security=true;TrustServerCertificate=false;
```
### 🎛️ 配置选项
**🎯 个别变量(推荐 - 最干净):**
- **`WINDOWS_USERNAME`**: Windows 域用户名
- **`WINDOWS_PASSWORD`**: Windows 域密码
- **`WINDOWS_DOMAIN`**: Windows 域名称
- **`CONNECTION_*`**: 个别连接字符串(例如 `CONNECTION_CRM`, `CONNECTION_ANALYTICS`)
- **`MSSQL_CONNECTION_STRING`**: 可选的默认连接字符串
**连接映射**: `CONNECTION_CRM` → `crm`, `CONNECTION_HR_SYSTEM` → `hr_system`
**💡 技术说明:Windows 身份验证要求**
Windows 凭证 (`WINDOWS_USERNAME`, `WINDOWS_PASSWORD`, `WINDOWS_DOMAIN`) **需要** 进行 Windows 身份验证,因为:
1. **MCP 服务上下文**: 服务器作为后台进程运行,无访问您的 Windows 会话权限
2. **NTLM 身份验证**: SQL Server Windows 身份验证需要明确的凭证进行 NTLM 握手
3. **凭证委托**: tedious 库必须以您的域用户身份验证以访问 SQL Server
4. **安全协议**: 这是服务间身份验证的 NTLM 工作原理 - 必须提供明确的凭证
**🔄 替代方法(向后兼容):**
- **JSON 字符串变量**: `windows_credentials`, `connections`
- **旧变量**: `MSSQL_WINDOWS_CREDENTIALS`, `MSSQL_CONNECTIONS`
- **个别旧变量**: `MSSQL_USERNAME`, `MSSQL_PASSWORD`, `MSSQL_DOMAIN`
**💡 为什么使用个别变量?**
- **🚀 最干净**: 没有 JSON 字符串需要转义或解析
- **📋 清晰**: 每个设置立即可见
- **🔧 标准**: 行业标准的环境变量方法
- ✅ **无错误**: 没有 JSON 语法问题可能
- **🔄 兼容**: 所有现有配置继续有效
## 💬 会话式用法
配置多个连接后,您可以在对话中自然地切换数据库:
```
用户: "我有哪些可用的数据库连接?"
助手: 我将列出您配置的所有数据库连接...
[显示:crm、erp、analytics、hr 等]
用户: "显示 CRM 系统中的表"
助手: 我将探索 CRM 数据库以查找相关表...
[使用连接名称:"crm"]
用户: "现在检查分析仓库的销售数据"
助手: 切换到分析数据库以查找销售数据...
[使用连接名称:“analytics”]
用户: "比较 HR 系统和 ERP 的员工计数"
助手: 我将检查两个数据库的员工信息...
[使用连接名称:“hr”,然后连接名称:“erp”]
```
### 多数据库场景
```
用户: "列出我可用的连接"
助手: [显示所有已配置的数据库连接]
用户: "切换到分析数据库并显示销售表"
助手: [连接到分析数据库并列出销售相关表]
用户: "查询CRM和ERP系统以查找客户重叠"
助手: [查询两个系统并比较结果]
```
## 🏗️ 经典ASP现代化工作流
该MCP服务器提供专门的工具,用于分析和规划经典ASP应用程序的现代化:
### 阶段1:发现和评估
```javascript
// 1. 分析包含业务逻辑的存储过程
await mcp.call("list_stored_procedures", {
schema: "MyApp",
includeSystemObjects: false,
});
// 2. 从数据库约束中提取业务规则
await mcp.call("analyze_check_constraints", {
schema: "MyApp",
});
// 3. 确定查找表和参考数据
await mcp.call("find_lookup_tables", {
schema: "MyApp",
});
// 4. 分析性能瓶颈
await mcp.call("find_missing_indexes", {
schema: "MyApp",
});
```
### 阶段2:业务逻辑提取
```javascript
// 提取详细的存储过程逻辑
await mcp.call("describe_stored_procedure", {
procedureName: "CalculateOrderTotal",
schema: "MyApp",
includeDefinition: true,
});
// 获取完整的SQL源代码进行分析
await mcp.call("get_stored_procedure_definition", {
procedureName: "ProcessOrder",
schema: "MyApp",
formatOutput: true,
});
// 批量提取所有存储过程进行现代化改造
await mcp.call("get_all_stored_procedure_definitions", {
schema: "MyApp",
maxResults: 50,
});
// 搜索使用特定表或业务逻辑的过程
await mcp.call("search_stored_procedures_by_content", {
searchText: "Customer",
schema: "MyApp",
includeDefinitions: true,
});
// 查找包含业务规则的计算列
await mcp.call("find_computed_columns", {
schema: "MyApp",
});
// 分析数据验证规则
await mcp.call("analyze_check_constraints", {
schema: "MyApp",
});
```
### 阶段3:迁移规划
```javascript
// 确定审计跟踪和跟踪模式
await mcp.call("detect_audit_columns", {
schema: "MyApp",
});
// 分析数据模式以进行规范化
await mcp.call("analyze_data_distribution", {
tableName: "Orders",
schema: "MyApp",
});
// 为新应用程序规划索引策略
await mcp.call("analyze_index_usage", {
schema: "MyApp",
});
```
## 💬 高级用法示例
### 模式发现
```
用户: "我需要了解遗留应用程序数据库中的业务逻辑"
助手: 我将分析您的数据库以查找业务逻辑模式...
[使用list_stored_procedures, analyze_check_constraints, find_computed_columns]
用户: "哪些存储过程处理订单处理?"
助手: 让我搜索与订单相关的过程...
[使用search_stored_procedures_by_content和"order",然后使用get_stored_procedure_definition进行详细分析]
用户: "显示CalculateOrderTotal过程的完整SQL代码"
助手: 我将检索存储过程的完整定义...
[使用get_stored_procedure_definition和formatOutput: true]
用户: "获取销售模式的所有存储过程代码以进行现代化改造"
助手: 我将从销售模式中提取所有存储过程定义...
[使用get_all_stored_procedure_definitions和schema: "sales"]
```
### 性能分析
```
用户: "查找数据库中的性能问题"
助手: 我将分析索引和表性能...
[使用find_missing_indexes, analyze_table_stats, analyze_index_usage]
用户: "哪些表增长太快?"
助手: 让我检查表大小和增长模式...
[使用analyze_table_stats, analyze_database_size]
```
### 多数据库分析
```
用户: "比较CRM和ERP系统之间的客户数据"
助手: 我将分析两个系统中的客户表...
[在connectionName: "crm"和connectionName: "erp"之间切换]
用户: "查找所有数据库中的数据质量问题"
助手: 让我检查系统中的数据模式...
[使用analyze_null_patterns, analyze_data_distribution跨多个连接]
```
## 🔧 开发
```bash
# 开发模式
npm run dev
# 构建生产环境
npm run build
# 运行测试
npm test
```
## 📝 许可证
MIT License - 参见LICENSE文件了解详情。
## 🤝 贡献
欢迎贡献!请阅读CONTRIBUTING.md了解指南。
## 📚 其他资源
- [**配置指南**](CONFIGURATION_GUIDE.md) - 完整的设置和配置详情
- [**工具参考**](TOOLS-REFERENCE.md) - 综合的工具文档
- [**存储过程指南**](STORED_PROCEDURES_GUIDE.md) - 增强的存储过程工具文档
- [模型上下文协议文档](https://modelcontextprotocol.io/)
- [Tedious SQL Server Driver](https://github.com/tediousjs/tedious)
- [Microsoft SQL Server 文档](https://docs.microsoft.com/en-us/sql/)
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器