什么是 SQL MCP Server?

重要

SQL MCP Server 以预览版提供,本文档和引擎实现在此评估期间可能会更改。

SQL MCP Server 为开发人员提供了一种简单、可预测且安全的方法来将 AI 代理引入其数据工作流。 它无需公开数据库或依赖脆弱的自然语言分析即可实现此目的。 通过利用数据 API 生成器的实体抽象、RBAC、缓存和遥测,SQL MCP Server 提供了一个适用于生产环境的界面,在 REST、GraphQL 和 MCP 中均能正常运行。 配置一次,引擎处理其余部分。

模型上下文协议 (MCP)

模型上下文协议(MCP)是一个标准,用于定义 AI 代理如何发现和调用外部工具。 一个工具是单个操作,例如创建记录或读取数据。 每个工具描述其输入、输出和行为。 MCP 为代理提供了一种可预测的方法来发现和使用功能。

适用于 SQL 的 MCP 服务器

SQL MCP Server 是Microsoft代理应用的动态开源引擎。 使用定义以下项的 JSON 文件对其进行配置:

  • 如何连接到数据库
  • 要公开的表、视图或存储过程
  • 应用于每个对象的权限

从版本 1.7 开始,SQL MCP Server 包含在数据 API 生成器(DAB)中。 它以小型 MCP 工具系列 的形式公开 SQL作,以便代理可以通过受控协定与数据库实体进行交互。 服务器是自承载的,但对于开发人员,它还可以通过 DAB 命令行在本地运行。

小窍门

数据 API 生成器是开源的,可以自由使用。

用例

下面是 SQL MCP Server 的一些典型用例:

  • 允许副手或聊天机器人执行安全的 CRUD 操作
  • 在不编写 SQL 的情况下生成内部自动化
  • 在不直接公开数据库的情况下添加代理功能

保护架构

数据 API 生成器使用定义完善的实体抽象层,该层列出配置中通过 API 公开的所有表、视图和存储过程。 此层允许你对名称和列进行别名和列,描述对象和参数,并限制哪些字段可用于不同的角色。

重要

数据 API 生成器(DAB)具有角色感知能力,只公开那些当前角色被允许访问的实体和操作。

由于 SQL MCP Server 是数据 API 生成器的一项功能,因此它还使用此抽象层。 此方法可防止内部架构向外部使用者公开,并允许在 API 层定义复杂甚至跨数据源、对象系列和关系。

解决 NL2SQL

SQL MCP Server 采用与目前可用的许多短视数据库 MCP 服务器 不同的方法 。 一个关键示例是 ,我们有意不支持 NL2SQL

为什么? 模型不是确定性的,复杂的查询最有可能产生细微的错误。 这些复杂的查询通常是用户希望 AI 生成的查询,但它们也是以不确定方式生成时需要最严格审查的查询。

注释

确定性意味着同一输入始终生成相同的输出。 调用之间没有随机性或变化,这使得结果可以预测、可测试且安全自动执行。

相反,SQL MCP Server 支持可能称为 NL2DAB 模型的模型。 此方法使用安全的数据 API 生成器实体抽象层和内置的 DAB 查询生成器。 它们共同以完全确定的方式生成准确、格式正确的 Transact-SQL(T-SQL)。 此方法消除了与 NL2SQL 关联的风险、开销和滋扰,同时为代理生成的查询保留安全性和可靠性。

支持 DDL

DDL (数据定义语言)是用于创建和更改对象(如表和视图)的数据库语言。 SQL MCP Server 围绕 DML(数据操作语言)构建,这是一种用于在现有表和视图中创建、读取、更新和删除数据的数据库语言。 DML 还介绍了存储过程的执行。 因此,SQL MCP Server 旨在处理数据,而不是架构。 此设计与生产 MCP 用例保持一致,其中 AI 代理与任务关键型或业务敏感型系统交互。

小窍门

若要在本地开发期间修改架构,工程师可以使用 Visual Studio Code (VS Code)中的 MSSQL 扩展,该扩展提供全面的 DDL 支持。

对 RBAC 的支持

SQL MCP 服务器受益于在整个数据 API 生成器中使用的相同经过验证的基于角色的访问控制 (RBAC) 系统。 配置中的每个实体定义哪些角色可以读取、创建、更新或删除数据,以及为这些角色包括或排除哪些字段。 这些规则自动应用于每个 MCP 工具,确保安全性在 REST、GraphQL 和 MCP 之间保持一致,无需额外配置。

重要

基于角色的约束适用于代理交互的每个步骤。

支持缓存

SQL MCP Server 会自动缓存 read_records 工具的结果。 数据 API 生成器中的缓存 是全局启用的,可以按实体配置缓存。 一级缓存和二级缓存都有助于减少数据库负载、防止请求风暴,并支持水平扩展环境中的暖启动场景。

支持监控功能

SQL MCP Server 发出日志和遥测数据,使企业能够从单个玻璃窗格中监视和验证活动。 此功能包括容器内的 Azure Log Analytics、 Application Insights 和本地文件日志。

遥测

SQL MCP Server 完全利用 OpenTelemetry(OTEL)的 Span 和活动进行监测。 跟踪每个作,以便开发人员可以跨分布式系统关联行为。 了解更多关于数据 API 生成器对 Open Telemetry 的原生支持。

健康检查

SQL MCP Server 提供跨 REST、GraphQL 和 MCP 终结点的详细健康检查和实体检查。 数据 API 生成器运行状况 允许开发人员定义性能预期、设置阈值,并验证每个终结点是否按预期运行。

如何配置 SQL MCP Server?

MCP 在 DAB 配置文件中配置。 如果已有可用的数据 API 生成器配置,则升级到版本 1.7 或更高版本会自动为你提供一个工作 SQL MCP Server,无需执行额外的步骤。

配置

可以在全局或实体级别启用 MCP。 此功能允许你选择哪些实体会显示 MCP 工具,哪些实体仍然无法访问代理。 MCP 遵循用于 REST 和 GraphQL 的相同规则,因此配置仍然是权限、投影和策略的单一事实来源。

启用 MCP 后,SQL MCP Server 会根据配置自动生成其工具图面。 不手动定义 MCP 工具。 内置 dml-tools 系统以程序化方式发现并公开实体,从小型模式扩展到非常大的数据库。

开始

入门意味着创建 dab-config.json 来控制引擎。 可以手动执行此任务,也可以使用 数据 API 生成器 (DAB) CLI。 CLI 简化了任务,允许使用单个命令初始化文件。 配置属性值可以使用文本字符串、 环境变量Azure Key Vault 机密。

dab init --database-type mssql --connection-string "<your-connection-string>" --config dab-config.json --host-mode development

可以通过将这些表、视图或存储过程添加到配置来指定希望 SQL MCP Server 公开的每个表、视图或存储过程。 CLI 允许你轻松添加别名、分配别名、配置其权限,以及根据需要映射列。 最重要的是,借助 description 该属性,可以包含语义详细信息,以帮助语言模型更好地了解数据。

dab add {entity-name} \                          # object alias (Employees)
  --source {table-or-view-name} \                # database object (dbo.Employees)
  --source.type {table|view|stored-procedure} \  # object type (table)
  --permissions "{role:actions}" \               # role and allowed actions (anonymous:*)
  --description "{text}"                         # semantic description (Company employee records)

运行时设置

默认情况下,SQL MCP 服务器在数据 API 生成器配置中处于启用状态。 在大多数情况下,无需添加任何设置。 服务器会自动遵循 API 和数据库相同的权限和安全规则。 仅当想要缩小或限制代理可以执行的操作时,配置 MCP。

"runtime": {
  "mcp": {
    "enabled": true,              // default: true
    "path": "/mcp",               // default: /mcp
    "dml-tools": {
      "describe-entities": true,  // default: true
      "create-record": true,      // default: true
      "read-records": true,       // default: true
      "update-record": true,      // default: true
      "delete-record": true,      // default: true
      "execute-entity": true      // default: true
    }
  }
}

CLI 还允许通过脚本单独或以编程方式设置每个属性。

dab configure --runtime.mcp.enabled true
dab configure --runtime.mcp.path "/mcp"
dab configure --runtime.mcp.dml-tools.describe-entities true
dab configure --runtime.mcp.dml-tools.create-record true
dab configure --runtime.mcp.dml-tools.read-records true
dab configure --runtime.mcp.dml-tools.update-record true
dab configure --runtime.mcp.dml-tools.delete-record true
dab configure --runtime.mcp.dml-tools.execute-entity true

为何禁用单个工具?

开发人员可能需要限制特定动作,即使角色或实体权限允许这些动作。 在运行时级别禁用工具可确保它永远不会出现在代理上。 例如,关闭 delete_record 将完全隐藏删除功能,无论在其他位置如何配置。 在需要严格操作界限时,这种情况虽然不常见,但很有用。

实体设置

也不需要在每个实体上启用 MCP。 除非你选择限制实体,否则实体会自动参与。 该 dml-tools 属性存在,因此你可以从 MCP 中排除实体或缩小其功能,但无需设置任何内容即可正常使用。 默认值处理所有内容。

"entities": {
  "products": {
    "mcp": {
      "dml-tools": true
    }
  }
}

DML 工具

SQL MCP Server 公开六种数据操作语言(DML)工具,使 AI 代理能够执行安全、类型安全的数据库操作:describe_entitiescreate_recordread_recordsupdate_recorddelete_recordexecute_entity。 这些工具构成了一个可预测的 CRUD 图面,始终反映配置、权限和架构。

每个工具都遵循基于角色的访问控制(RBAC)、实体权限和策略。 代理永远不会直接与数据库交互 - 它们通过安全的数据 API 生成器抽象层工作。

有关每个工具、配置选项和最佳做法的完整详细信息,请参阅 DML 工具参考