MCP
MCP(Model Context Protocol,模型上下文协议)是一项开放标准,定义了 AI 代理如何发现和调用外部工具。数据墙DBW 内置了 MCP 服务端能力,将数据库操作以标准 MCP 工具的形式暴露给 AI 代理和 MCP 客户端。
MCP 与 REST、GraphQL 的关系
三种访问方式共享同一套实体配置和权限模型:
| 协议 | 主要消费方 | 特点 |
|---|---|---|
| REST | Web、移动端、低代码 | 标准 HTTP API,支持 OData 风格查询 |
| GraphQL | 数据分析、灵活查询 | 声明式查询,按需取字段 |
| MCP | AI 代理、智能应用 | 工具发现,代理自主调用 |
配置一次实体和权限,三种协议同时可用。MCP 的工具描述、参数定义、权限边界都从实体配置自动生成。
七个 DML 工具
数据墙DBW 通过 MCP 暴露七个 DML(数据操作语言)工具:
| 工具 | 对应数据库操作 |
|---|---|
describe_entities | 列出可访问的实体、字段和描述 |
read_records | 查询数据,支持筛选排序分页 |
create_record | 创建记录 |
update_record | 更新记录 |
delete_record | 删除记录 |
execute_entity | 调用存储过程 |
aggregate_records | 聚合统计 |
代理通过 tools/list 发现可用工具,通过 tools/call 执行操作。引擎根据调用参数生成确定性的 SQL,代理不需要理解 SQL 语法。
代理调用 describe_entities 工具可以了解当前角色有权访问的实体列表、字段结构和描述信息,这有助于代理理解数据含义后再决定调用哪个数据操作工具。
两种传输模式
| 模式 | 端点 | 适用场景 |
|---|---|---|
| Streamable HTTP | /mcp | 标准服务部署 |
| Stdio | 进程管道 | 本地开发、CLI 工作流 |
Stdio 模式下可通过 dab start --mcp-stdio 启动,适用于 MCP 客户端以子进程方式连接数据墙DBW。
安全模型
MCP 工具完全遵守数据墙DBW 的 RBAC 体系。代理只能看到当前角色有权限的实体和操作,未授权的实体不出现在工具列表中。字段过滤和行级策略同样对 MCP 调用生效。
可以在全局或按实体控制是否启用 MCP 工具。某个表只想给 REST 客户端用——不在该实体的 MCP 权限中配置即可。
设计边界
数据墙DBW 的 MCP 实现有两个明确的设计边界:
- 只支持 DML,不支持 DDL:代理不能建表、改结构或执行原始 SQL。聚焦数据操作,这是生产环境中 AI 代理与数据库交互的推荐安全边界。
- 不支持 NL2SQL:代理不生成 SQL 语句。它描述想做什么,引擎生成确定性的查询。这避免了 SQL 注入风险、语法错误和模型不确定性问题。
自定义工具与语义描述
存储过程可以注册为命名 MCP 工具(mcp.custom-tool: true),代理按名称直接调用。为实体、字段和参数添加 description 能帮助代理理解数据含义——描述越清晰,代理表现越准确。
