/ 目录 / 演练场 / Azure Data API Builder (MCP)
● 官方 Azure 🔑 需要你的密钥

Azure Data API Builder (MCP)

作者 Azure · Azure/data-api-builder

微软官方开源工具,通过一个配置文件将 Azure SQL、Cosmos DB、Postgres 或 MySQL 变成 REST + GraphQL + MCP 端点——无需编写代码。

Data API Builder(DAB)是 Azure 官方推荐的方式,用于将关系型或 NoSQL 数据库暴露到常见协议上,包括 MCP。你编写一个 JSON 配置文件,列出实体、关系和策略;DAB 启动一个进程,将它们以 REST、GraphQL 和(自 2026 年起)MCP 工具的形式对外提供。支持 Azure SQL、SQL Server、Cosmos DB(NoSQL + PostgreSQL)、Postgres、MySQL 和 Azure Data Lake。认证方式支持 Static Web Apps、Easy Auth 或 JWT。

为什么要用

核心特性

实时演示

实际使用效果

azure-data-api-builder-mcp.replay ▶ 就绪
0/0

安装

选择你的客户端

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "azure-data-api-builder-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-v",
        "${PWD}/dab-config.json:/App/dab-config.json:ro",
        "-e",
        "DAB_ENVIRONMENT=Production",
        "mcr.microsoft.com/azure-databases/data-api-builder:latest",
        "--ConfigFileName",
        "/App/dab-config.json"
      ]
    }
  }
}

打开 Claude Desktop → Settings → Developer → Edit Config。保存后重启应用。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "azure-data-api-builder-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-v",
        "${PWD}/dab-config.json:/App/dab-config.json:ro",
        "-e",
        "DAB_ENVIRONMENT=Production",
        "mcr.microsoft.com/azure-databases/data-api-builder:latest",
        "--ConfigFileName",
        "/App/dab-config.json"
      ]
    }
  }
}

Cursor 使用与 Claude Desktop 相同的 mcpServers 格式。项目级配置优先于全局。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "azure-data-api-builder-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-v",
        "${PWD}/dab-config.json:/App/dab-config.json:ro",
        "-e",
        "DAB_ENVIRONMENT=Production",
        "mcr.microsoft.com/azure-databases/data-api-builder:latest",
        "--ConfigFileName",
        "/App/dab-config.json"
      ]
    }
  }
}

点击 Cline 侧栏中的 MCP Servers 图标,然后选 "Edit Configuration"。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "azure-data-api-builder-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-v",
        "${PWD}/dab-config.json:/App/dab-config.json:ro",
        "-e",
        "DAB_ENVIRONMENT=Production",
        "mcr.microsoft.com/azure-databases/data-api-builder:latest",
        "--ConfigFileName",
        "/App/dab-config.json"
      ]
    }
  }
}

格式与 Claude Desktop 相同。重启 Windsurf 生效。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "azure-data-api-builder-mcp",
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-v",
        "${PWD}/dab-config.json:/App/dab-config.json:ro",
        "-e",
        "DAB_ENVIRONMENT=Production",
        "mcr.microsoft.com/azure-databases/data-api-builder:latest",
        "--ConfigFileName",
        "/App/dab-config.json"
      ]
    }
  ]
}

Continue 使用服务器对象数组,而非映射。

~/.config/zed/settings.json
{
  "context_servers": {
    "azure-data-api-builder-mcp": {
      "command": {
        "path": "docker",
        "args": [
          "run",
          "--rm",
          "-i",
          "-v",
          "${PWD}/dab-config.json:/App/dab-config.json:ro",
          "-e",
          "DAB_ENVIRONMENT=Production",
          "mcr.microsoft.com/azure-databases/data-api-builder:latest",
          "--ConfigFileName",
          "/App/dab-config.json"
        ]
      }
    }
  }
}

加入 context_servers。Zed 保存后热重载。

claude mcp add azure-data-api-builder-mcp -- docker run --rm -i -v ${PWD}/dab-config.json:/App/dab-config.json:ro -e DAB_ENVIRONMENT=Production mcr.microsoft.com/azure-databases/data-api-builder:latest --ConfigFileName /App/dab-config.json

一行命令搞定。用 claude mcp list 验证,claude mcp remove 卸载。

使用场景

实战用法: Azure Data API Builder (MCP)

将 Azure SQL 数据库以基于角色的权限暴露给 Claude

👤 Azure 技术栈团队;需要查询而非全量导出的分析师 ⏱ ~30 min intermediate

何时使用: 你有一个内部 Azure SQL 数据库,希望 AI agent 在严格的表级权限下读取,而不是以管理员身份访问所有内容。

前置条件
  • Azure SQL 连接字符串 — 从 Azure Portal → SQL DB → 连接字符串中获取
  • 本地已安装 Docker — Docker Desktop 或任意 OCI 运行时
步骤
  1. 生成 dab-config.json
    Create a DAB config that exposes the Customers and Orders tables read-only over MCP. Connect to my Azure SQL via env var DAB_CONN.✓ 已复制
    → dab-config.json 已写入,包含两个实体且 actions: ["read"]
  2. 本地运行
    Spin up DAB locally via Docker on port 5000 and verify the MCP endpoint responds.✓ 已复制
    → GET /api/Customers 返回数据行;MCP 工具列表显示对应实体
  3. 接入 Claude
    Add the local DAB MCP to my Claude config and ask: 'Top 10 customers by orders in 2026.'✓ 已复制
    → Claude 通过组合 read 调用返回结果

结果: Claude 可以在严格配置的边界内查询数据库,而非通过直接 SQL 访问。

注意事项
  • Azure SQL 防火墙拦截了本地 Docker 的 IP — 在 Azure Portal → SQL Server → 网络中添加你的 IP,或在 Azure 内部运行 DAB

为 Cosmos DB NoSQL 添加 GraphQL + MCP 层

👤 已使用 Cosmos 但需要 LLM 访问而不想自建 API 的团队 ⏱ ~40 min advanced

何时使用: 你有一个 Cosmos NoSQL 容器,需要 Claude 在字段级策略下进行读写访问。

前置条件
  • Cosmos DB 账户 + 容器 — 从 Azure Portal 获取——记下连接字符串和数据库/容器名称
步骤
  1. 配置实体
    Add an entity for Cosmos container products with a JSON schema mapped from the actual docs. Allow read+update; require role 'editor' for updates.✓ 已复制
    → 更新后的 dab-config.json 包含 permissions 块
  2. 设置 Easy Auth
    Add a JWT auth provider config with the issuer of my Entra tenant.✓ 已复制
    → 认证块已添加;DAB 对其进行强制执行
  3. 验证策略
    Try a write as anonymous (should fail), then with editor token (should succeed).✓ 已复制
    → 先返回 401,再返回 200——证明策略已生效

结果: 为 Claude 提供安全的 Cosmos 访问面——读取开放,写入受控。

注意事项
  • Cosmos schema 是动态的,但 DAB 需要 GraphQL 类型定义 — 提供 GraphQL schema 文件;不提供时 DAB 会回退到仅 REST 模式

将存储过程暴露为 MCP 工具

👤 在 T-SQL 中沉淀了业务逻辑的 DBA ⏱ ~25 min advanced

何时使用: 现有存储过程已封装了业务规则,相比直接表访问,更愿意将其暴露给 Claude。

步骤
  1. 定义实体
    In dab-config, add entity GetSalesByRegion of type stored-procedure pointing to dbo.usp_GetSalesByRegion. Map parameters to MCP tool inputs.✓ 已复制
    → 存储过程以可调用 MCP 工具的形式出现
  2. 测试
    Call GetSalesByRegion for region='APAC', period='2026Q1'.✓ 已复制
    → 返回结果行

结果: 业务逻辑留在数据库中,AI 只需调用即可。

注意事项
  • 存储过程返回多个结果集 — DAB 只返回第一个结果集;重构为单一结果集或拆分成多个存储过程

组合

与其他 MCP 搭配,撬动十倍杠杆

azure-data-api-builder-mcp + filesystem

将 dab-config.json 和生成的 GraphQL schema 持久化到仓库

Save dab-config.json and schema.graphql under /db/dab/.✓ 已复制
azure-data-api-builder-mcp + github

DAB 配置变更时自动开 PR

Diff against main; if changed, open PR titled 'DAB config update'.✓ 已复制

工具

此 MCP 暴露的能力

工具输入参数何时调用成本
list_entities (无) 发现已暴露的实体 免费
<entity>.read filter?, top?, select?, orderby? 标准读取;将 <entity> 替换为具体实体名 每次调用 1 个 DB 查询
<entity>.create fields object 仅在权限允许创建时使用 1 次 DB 插入
<storedproc> configured params 调用封装了业务逻辑的存储过程 1 次 DB 调用

成本与限制

运行它的成本

API 配额
取决于你的 Azure DB 服务层级
每次调用 Token 数
100–2000,视返回行数而定
费用
DAB 免费;你自行承担 DB 费用。本地 Docker 无额外成本。
提示
使用 top + select 限制结果集大小,让 token 成本保持可预测

安全

权限、密钥、影响范围

最小权限: DB 读取角色(如只读时使用 db_datareader)
凭据存储: 通过环境变量或 Azure 托管标识(在 Azure 内部署时优先选择)传入连接字符串
数据出站: 如果将 DAB 部署在 Azure 内,数据留在 Azure 内部
切勿授予: db_owner DDL 权限

故障排查

常见错误与修复

用户登录失败

检查连接字符串——DAB 需要一个存在的 SQL 或 Entra 账号,且主机已通过防火墙

验证: 在相同主机上使用相同凭据运行 `sqlcmd`
MCP 工具列表中找不到实体

编辑 dab-config.json 后重启 DAB——配置在启动时加载一次

验证: 检查容器日志中是否有「Entity X registered」
Cosmos 缺少 GraphQL 类型

在 dab-config.json 旁放置 schema.graphql,或将 GraphQL.Mode 设为仅 REST

替代方案

Azure Data API Builder (MCP) 对比其他方案

替代方案何时用它替代权衡
Hasura你需要更完善的 GraphQL 界面,暂时不需要 MCPHasura 功能更全但更重;DAB 与 Azure 对齐且更轻量
直接 Postgres MCP / Postgres MCP 服务器你不在 Azure 上,只需要原始 Postgres 访问Postgres MCP 更简单;DAB 强制执行实体级和行级策略

更多

资源

📖 阅读 GitHub 上的官方 README

🐙 查看未解决的 issue

🔍 浏览全部 400+ MCP 服务器和 Skills