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" })

分页技术

  1. 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" 
})
  1. 基于游标的分页:对大型数据集更高效
// 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" 
})
  1. 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 驱动的代码编辑器,可以利用此工具进行高级数据库交互。设置方法如下:
  1. 安装相关依赖
  2. 启动服务端命令:npm run start:sse 或 创建bat脚本
 @echo off
  echo 正在启动 MSSQL-MCP 服务器...
  cd /d D:\wwwroot\ClaudeMCP\mcp\mssql-mcp
  npm run start:sse 
  1. 浏览器打开: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 命令:

  1. 显示一下数据库中有哪些表
  2. 查询客户表中的10条记录
  3. 查找上个月的所有订单,价值超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 日志记录
    • 提供上下文感知请求日志记录
    • 处理日志轮换和格式设置
    • 捕获未捕获的异常和未处理的拒绝
  • 这些模块如何协同工作
  1. 收到工具调用后,MCP 服务器会将其路由到tools.mjs
  2. 工具处理程序验证参数并构建数据库查询
  3. 查询通过 中的函数执行,可能从database.mjspagination.mjs
  4. 结果将被格式化并返回给客户端
  5. 任何错误都会被捕获并处理errors.mjs
  6. 所有作都通过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

开源地址:https://github.com/dperussina/mssql-mcp-server