重要
SQL MCP Server 以预览版提供,本文档和引擎实现在此评估期间可能会更改。
SQL MCP Server 向 AI 代理公开六种数据作语言(DML)工具。 这些工具为数据库操作提供类型化的 CRUD 接口 - 创建、读取、更新和删除记录以及执行存储过程。 所有工具都遵循基于角色的访问控制(RBAC)、实体权限和配置中定义的策略。
什么是 DML 工具?
DML(数据操作语言)工具处理数据操作:创建、读取、更新和删除记录,以及执行存储过程。 与修改架构的 DDL (数据定义语言)不同,DML 仅在现有表和视图中的数据平面上运行。
六个 DML 工具包括:
-
describe_entities- 发现可用的实体和操作 -
create_record- 插入新行 -
read_records- 查询表和视图 -
update_record- 修改现有行 -
delete_record- 删除行 -
execute_entity- 运行存储过程
全局和实体启用 DML 工具后,SQL MCP Server 会通过 MCP 协议公开它们。 代理永远不会直接与数据库架构交互 - 它们通过数据 API 生成器抽象层工作。
工具
list_tools响应
代理调用 list_tools时,SQL MCP Server 返回:
{
"tools": [
{ "name": "describe_entities" },
{ "name": "create_record" },
{ "name": "read_records" },
{ "name": "update_record" },
{ "name": "delete_record" },
{ "name": "execute_entity" }
]
}
describe_entities
返回当前角色能够使用的实体。 每个条目包括字段名称、数据类型、主键和允许的操作。 此工具不会查询数据库。 而是从配置文件构建的内存配置中读取。
{
"entities": [
{
"name": "Products",
"description": "Product catalog with pricing and inventory",
"fields": [
{
"name": "ProductId",
"type": "int",
"isKey": true,
"description": "Unique product identifier"
},
{
"name": "ProductName",
"type": "string",
"description": "Display name of the product"
},
{
"name": "Price",
"type": "decimal",
"description": "Retail price in USD"
}
],
"operations": [
"read_records",
"update_record"
]
}
]
}
注释
任何 CRUD 和执行 DML 工具使用的实体选项都直接来自 describe_entities。 附加到每个工具的内部语义说明强制实施这两个步骤流。
创建记录
在表中创建新行。 需要对当前角色的实体创建权限。 该工具根据实体架构验证输入,强制实施字段级权限,应用创建策略,并返回具有任何生成的值的已创建记录。
read_records
查询表或视图。 支持筛选、排序、分页和字段选择。 该工具从结构化参数生成确定性的 SQL,应用读取权限和字段投影,并强制实施行级安全策略。
使用数据 API 生成器的缓存系统对来自 read_records 的结果进行自动缓存。 可以全局或每个实体配置缓存生存时间(TTL),以减少数据库负载。
更新记录
修改现有行。 需要主键和字段才能更新。 该工具验证主键是否存在,执行更新权限和策略,并且仅更新当前角色可以修改的字段。
删除记录
删除现有行。 需要主键。 该工具验证主密钥是否存在、强制实施删除权限和策略,并使用事务支持执行安全删除。
警告
某些生产方案将全局禁用此工具以广泛限制模型。
执行实体
运行存储过程。 支持输入参数和输出结果。 该工具根据过程签名验证输入参数,强制实施执行权限,并安全地传递参数。
运行时配置
在
{
"runtime": {
"mcp": {
"enabled": true,
"path": "/mcp",
"dml-tools": {
"describe-entities": true,
"create-record": true,
"read-records": true,
"update-record": true,
"delete-record": true,
"execute-entity": true
}
}
}
}
使用 CLI
使用数据 API 生成器 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以防止生产中数据丢失 - 对只读报告端点禁用
create-record - 在不使用存储过程时禁用
execute-entity
全局禁用工具时,该工具会隐藏在响应中 list_tools ,并且无法调用。
实体设置
除非对实体进行明确限制,否则它们会自动参与 MCP。 该 dml-tools 属性存在,因此你可以从 MCP 中排除实体或缩小其功能,但无需设置任何内容即可正常使用。
{
"entities": {
"Products": {
"mcp": {
"dml-tools": true
}
},
"SensitiveData": {
"mcp": {
"dml-tools": false
}
}
}
}
如果未在实体上指定 mcp.dml-tools ,则当 MCP 在全局启用时,true 为默认值。
细粒度控制
您可以针对单个实体禁用特定工具:
{
"entities": {
"AuditLogs": {
"mcp": {
"dml-tools": {
"create-record": true,
"read-records": true,
"update-record": false,
"delete-record": false
}
}
}
}
}
此配置允许代理创建和读取审核日志,但会阻止修改或删除。
RBAC 集成
每个 DML 工具操作都会强制实施基于角色的访问控制规则。 代理的角色决定了哪些实体可见,允许哪些操作,包含哪些字段,以及行级策略是否适用。
如果anonymous角色仅允许对Products只具有读取权限:
-
describe_entities仅在操作中显示read_records -
create_record、update_record和delete_record不可用 - 仅允许
anonymous在架构中显示的字段
在dab-config.json中配置角色
{
"entities": {
"Products": {
"permissions": [
{
"role": "anonymous",
"actions": [
{
"action": "read",
"fields": {
"include": ["ProductId", "ProductName", "Price"],
"exclude": ["Cost"]
}
}
]
},
{
"role": "admin",
"actions": ["*"]
}
]
}
}
}