MS SQL MCP 服务器 1.1
一个易于使用的桥梁,可让 Claude 等 AI 助手直接查询和探索 Microsoft SQL Server 数据库。无需编码经验!
1. 这个工具有什么作用?
-
此工具允许 AI 助手:
-
发现 SQL Server 数据库中的表
-
查看表结构(列、数据类型等)
-
安全地执行只读 SQL 查询
-
生成来自自然语言请求的 SQL 查询
2. 示例用例
- 无需编写 SQL 即可探索数据库结构
mcp_SQL_mcp_discover_database()
- 获取有关特定表的详细信息
mcp_SQL_mcp_table_details({ tableName: "Customers" })
- 运行安全查询
mcp_SQL_mcp_execute_query({ sql: "SELECT TOP 10 * FROM Customers", returnResults: true })
- 按名称模式查找表
mcp_SQL_mcp_discover_tables({ namePattern: "%user%" })
- 使用分页导航大型结果集
// First page
mcp_SQL_mcp_execute_query({
sql: "SELECT * FROM Users ORDER BY Username OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY",
returnResults: true
})
// Next page
mcp_SQL_mcp_execute_query({
sql: "SELECT * FROM Users ORDER BY Username OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY",
returnResults: true
})
- 基于游标的分页可实现最佳性能
// First page
mcp_SQL_mcp_execute_query({
sql: "SELECT TOP 10 * FROM Users ORDER BY Username",
returnResults: true
})
// Next page using the last value as cursor
mcp_SQL_mcp_execute_query({
sql: "SELECT TOP 10 * FROM Users WHERE Username > 'last_username' ORDER BY Username",
returnResults: true
})
- 询问自然语言问题
"Show me the top 5 customers with the most orders in the last month"
3. 实际应用
- 适用于商业智能
销售绩效分析: “显示过去一年的月度销售趋势,并按地区确定我们表现最好的产品。”
客户细分: “按购买频率、平均订单价值和地理位置分析我们的客户群。”
财务报告: “创建季度损益报告,将今年与去年进行比较。
- 用于数据库管理
架构优化:“通过检查查询性能数据,帮助我识别缺少索引的表。
数据质量审计:“查找信息不完整或值无效的所有客户记录。
Usage Analysis:“告诉我哪些表访问最频繁,哪些查询最耗费资源。
- 用于开发
API 探索:“我正在构建一个 API - 帮助我分析数据库架构以设计适当的终端节点。
查询优化:“查看此复杂查询并建议性能改进。
数据库文档:“创建数据库结构的综合文档,并解释关系。
4. 交互式客户端功能
- 列出可用资源 - 查看哪些信息可用
- 列出可用工具 - 查看您可以执行的作
- 执行 SQL 查询 - 运行只读 SQL 查询
- 获取表详细信息 - 任何表的视图结构
- 读取数据库架构 - 查看所有表及其关系
- 生成 SQL 查询 - 将自然语言转换为 SQL
5. 基本工具调用格式
例如:
- 检查我的数据库中存在哪些表
- 查询客户表并向我展示前10个记录
- 查找过去一个月的所有订单
基本命令和语法
// 分析数据库结构
mcp_SQL_mcp_discover_database()
// 获取特定表的详细信息
mcp_SQL_mcp_table_details({ tableName: "YourTableName" })
// 执行查询并返回结果
mcp_SQL_mcp_execute_query({
sql: "SELECT * FROM YourTable WHERE Condition",
returnResults: true
})
// 按模糊模式查找表
mcp_SQL_mcp_discover_tables({ namePattern: "%pattern%" })
// 访问保存的查询结果(对于大型结果集)
mcp_SQL_mcp_get_query_results({ uuid: "provided-uuid-here" })
何时使用每个工具:
- 数据库发现:当 AI 不熟悉您的数据库结构时,请从此开始。
- Table Details:在编写查询之前专注于特定表时使用。
- Query Execution(查询执行):当您需要检索或分析实际数据时。
- 按模式发现表:查找与特定域相关的表时。
6. 有效的提示模式(分步流程)
对于复杂任务,请指导 AI 完成一系列步骤:
- 我想分析一下我们的销售数据。请问
1.首先使用 mcp_SQL_mcp_discover_tables 查找与销售相关的表
2.使用 mcp_SQL_mcp_table_details 检查相关表的结构
3.使用 mcp_SQL_mcp_execute_query 创建一个查询,按产品类别显示每月销售额 - 先结构,后查询
首先,了解我的数据库中有哪些表。然后,查看
客户表的结构。最后,向我显示按总购买金额排序的前 10 位客户。 - 要求解释
根据销售额与预测值,查询表现不佳的前 5 种产品、
并解释您编写此查询的方法。
7. SQL Server 语法说明
提醒 AI 有关 SQL Server 的特定语法:
请使用 SQL Server 语法进行分页:
- 对于偏移/获取"偏移 10 行,只获取下 10 行"。
- 基于游标"WHERE ID > last_id ORDER BY ID
更正工具使用
如果 AI 使用了不正确的语法,您可以通过以下方式帮助它:
这完全不正确。请使用这种格式调用工具:
mcp_SQL_mcp_execute_query({
sql:“SELECT * FROM Customers WHERE Region = ‘West’”、
returnResults: true
})
8. 高级查询功能
MCP 服务器提供了用于探索数据库结构的强大工具:
- 基于模式的表发现:查找与特定模式匹配的表
mcp_SQL_mcp_discover_tables({ namePattern: "%order%" })
- Schema overview:按 schema 获取表的高级视图
mcp_SQL_mcp_execute_query({
sql: "SELECT TABLE_SCHEMA, COUNT(*) AS TableCount FROM INFORMATION_SCHEMA.TABLES GROUP BY TABLE_SCHEMA"
})
- 列浏览:检查任何表的列元数据
mcp_SQL_mcp_table_details({ tableName: "dbo.Users" })
分页技术
- Offset/Fetch 分页:使用 OFFSET 和 FETCH 的标准 SQL 分页
mcp_SQL_mcp_execute_query({
sql: "SELECT * FROM Users ORDER BY Username OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY"
})
- 基于游标的分页:对大型数据集更高效
// Get first page
mcp_SQL_mcp_execute_query({
sql: "SELECT TOP 10 * FROM Users ORDER BY Username"
})
// Get next page using last value as cursor
mcp_SQL_mcp_execute_query({
sql: "SELECT TOP 10 * FROM Users WHERE Username > 'last_username' ORDER BY Username"
})
- Count with Data:检索总计数以及分页数据
mcp_SQL_mcp_execute_query({
sql: "WITH TotalCount AS (SELECT COUNT(*) AS Total FROM Users) SELECT TOP 10 u.*, t.Total FROM Users u CROSS JOIN TotalCount t ORDER BY Username"
})
复杂的连接和关系
- 使用 join作探索表之间的关系:
mcp_SQL_mcp_execute_query({
sql: "SELECT u.Username, u.Email, r.RoleName FROM Users u JOIN UserRoles ur ON u.Username = ur.Username JOIN Roles r ON ur.RoleId = r.RoleId ORDER BY u.Username"
})
分析查询
- 运行聚合和分析查询以获取见解:
mcp_SQL_mcp_execute_query({
sql: "SELECT UserType, COUNT(*) AS UserCount, SUM(CASE WHEN IsActive = 1 THEN 1 ELSE 0 END) AS ActiveUsers FROM Users GROUP BY UserType"
})
9. 集成选项
- Claude 桌面集成
{
"mcpServers": {
"mssql": {
"command": "node",
"args": [
"/FULL/PATH/TO/mssql-mcp-server/server.mjs" //替换为克隆此存储库的实际路径/FULL/PATH/TO/
]
}
}
}
- 使用 Cursor IDE 连接
Cursor 是一个 AI 驱动的代码编辑器,可以利用此工具进行高级数据库交互。设置方法如下:
- 安装相关依赖
- 启动服务端命令:npm run start:sse 或 创建bat脚本
@echo off
echo 正在启动 MSSQL-MCP 服务器...
cd /d D:\wwwroot\ClaudeMCP\mcp\mssql-mcp
npm run start:sse
- 浏览器打开:localhost:3333/sse ,查看有无输出错误
{
"mcpServers": {
"context7": {
"command": "node",
"args": [
"D:/wwwroot/ClaudeMCP/mcp/context7/dist/index.js",
"--stdio"
]
},
"mssql-sse": {
"url": "http://localhost:3333/sse"
}
}
}
- 在 Cursor 中使用数据库命令
连接后,您可以直接在 Cursor 的 AI 聊天中使用 MCP 命令:
- 显示一下数据库中有哪些表
- 查询客户表中的10条记录
- 查找上个月的所有订单,价值超1000的客户
输出方法说明
- stdio Transport(默认) npm start
- HTTP/SSE 传输 npm run start:sse
9. 架构和核心模块
核心模块
- database.mjs - 数据库连接
- 管理 SQL Server 连接池
- 提供具有重试逻辑和错误处理的查询执行
- 处理数据库连接、事务和配置
- 包括用于清理 SQL 和格式错误的实用程序
- tools.mjs - 工具注册
- 向 MCP 服务器注册所有数据库工具
- 实施工具验证和参数检查
- 为 SQL 查询、表探索和数据库发现提供核心功能
- 将工具调用映射到数据库作
- resources.mjs - 数据库资源
- 通过资源端点公开数据库元数据
- 提供架构信息、表列表和过程文档
- 格式化数据库结构信息以供 AI 使用
- 包括用于数据库探索的发现实用程序
- pagination.mjs - 结果导航
- 为大型结果集实现基于游标的分页
- 提供用于生成下一页/上一页光标的实用程序
- 转换 SQL 查询以支持分页
- 处理 SQL Server 的 OFFSET/FETCH 分页语法
- errors.mjs - 错误处理
- 为不同的故障场景定义自定义错误类型
- 实现 JSON-RPC 错误格式
- 提供人类可读的错误消息
- 包括用于全局错误处理的中间件
- logger.mjs - 测井系统
- 使用多种传输方式配置 Winston 日志记录
- 提供上下文感知请求日志记录
- 处理日志轮换和格式设置
- 捕获未捕获的异常和未处理的拒绝
- 这些模块如何协同工作
- 收到工具调用后,MCP 服务器会将其路由到tools.mjs
- 工具处理程序验证参数并构建数据库查询
- 查询通过 中的函数执行,可能从database.mjspagination.mjs
- 结果将被格式化并返回给客户端
- 任何错误都会被捕获并处理errors.mjs
- 所有作都通过logger.mjs
环境配置说明
该文件控制 MS SQL MCP 服务器如何连接到您的数据库并运行。以下是每个设置的详细说明:.env
# Database Connection Settings
DB_USER=your_username # SQL Server username
DB_PASSWORD=your_password # SQL Server password
DB_SERVER=your_server_name # Server hostname or IP address (example: localhost, 10.0.0.1, myserver.database.windows.net)
DB_DATABASE=your_database_name # Name of the database to connect to
# Server Configuration
PORT=3333 # Port for the HTTP/SSE server to listen on
TRANSPORT=stdio # Connection method: 'stdio' (for Claude Desktop) or 'sse' (for network connections)
SERVER_URL=http://localhost:3333 # Base URL when using SSE transport (must match your PORT setting)
# Advanced Settings
DEBUG=false # Set to 'true' for detailed logging (helpful for troubleshooting)
QUERY_RESULTS_PATH=/path/to/query_results # Directory where query results will be saved as JSON files
连接类型说明
stdio 运输
- 在直接连接到 Claude Desktop 时使用
- 通信通过标准输入/输出流进行
- 在 .env 文件中设置TRANSPORT=stdio
- 运行方式npm start
HTTP/SSE 传输
- 通过网络连接时使用(如使用 Cursor IDE)
- 使用服务器发送事件 (SSE) 进行实时通信
- 在 .env 文件中设置TRANSPORT=sse
- 配置以匹配您的服务器地址SERVER_URL
- 运行方式npm run start:sse