/ 디렉터리 / 플레이그라운드 / Azure Data API Builder (MCP)
● 공식 Azure 🔑 본인 키 필요

Azure Data API Builder (MCP)

제작: Azure · Azure/data-api-builder

Microsoft의 공식 오픈소스 도구 — Azure SQL, Cosmos DB, Postgres, MySQL을 설정 파일 하나로 REST + GraphQL + MCP 엔드포인트로 전환합니다. 코드 작성 불필요.

Data API Builder(DAB)는 관계형 또는 NoSQL 저장소를 MCP를 포함한 잘 알려진 프로토콜 뒤에 두는 Azure 공식 방법입니다. 엔티티, 관계, 정책을 나열하는 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 DB가 있고 AI 에이전트가 전체 관리자 권한이 아닌 엄격한 테이블별 권한으로 읽기를 원할 때.

사전 조건
  • Azure SQL 연결 문자열 — Azure Portal → SQL DB → Connection strings에서 확인
  • 로컬에 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.✓ 복사됨
    → 두 엔티티와 actions: ["read"]가 포함된 dab-config.json 작성됨
  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가 읽기 호출을 조합하여 결과를 반환

결과: Claude가 직접 SQL이 아닌 엄격하게 설정된 경계 내에서 데이터베이스를 조회할 수 있음.

함정
  • Azure SQL 방화벽이 로컬 Docker IP를 차단 — Azure Portal → SQL Server → Networking에서 IP를 허용하거나 Azure 내부에서 DAB를 실행하세요

Cosmos DB NoSQL을 GraphQL+MCP 레이어로 감싸기

👤 커스텀 API 없이 LLM 접근이 필요한 Cosmos 사용 팀 ⏱ ~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
  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 스키마는 동적이지만 DAB는 GraphQL 타입 필요 — GraphQL 스키마 파일을 제공하세요; 없으면 DAB가 REST로 폴백합니다

저장 프로시저를 MCP 도구로 노출

👤 TSQL로 비즈니스 로직이 강화된 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'.✓ 복사됨
    → 결과 행 반환됨

결과: 비즈니스 로직은 DB에 유지되고 AI는 그것을 호출만 함.

함정
  • 저장 프로시저가 여러 결과 세트를 반환 — DAB는 첫 번째만 반환합니다; 단일 세트로 리팩토링하거나 여러 프로시저로 분리하세요

조합

다른 MCP와 조합해 10배 효율

azure-data-api-builder-mcp + filesystem

dab-config.json과 생성된 GraphQL 스키마를 저장소에 유지

azure-data-api-builder-mcp + github

DAB 설정 변경 시 PR 열기

도구

이 MCP가 노출하는 것

도구입력언제 호출비용
list_entities (none) 노출된 항목 확인 free
<entity>.read filter?, top?, select?, orderby? 표준 읽기; <entity>를 실제 이름으로 교체 1 DB query per call
<entity>.create fields object 권한이 create를 허용할 때만 1 DB insert
<storedproc> configured params 캡슐화된 비즈니스 로직 1 DB call

비용 및 제한

운영 비용

API 쿼터
Azure DB 티어에 따라 결정
호출당 토큰
반환된 행에 따라 100~2000
금액
DAB는 무료; DB 비용은 별도. 로컬 Docker는 추가 비용 없음.
top + select를 사용하여 결과 세트를 제한하면 token 비용을 예측 가능하게 유지할 수 있습니다

보안

권한, 시크릿, 파급범위

최소 스코프: DB 읽기 역할 (예: 읽기 전용의 경우 db_datareader)
자격 증명 저장: 환경 변수 또는 Azure Managed Identity로 연결 문자열 관리 (Azure에서 선호)
데이터 외부 송신: Azure 내에서 DAB를 배포하면 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-only로 설정하세요

대안

Azure Data API Builder (MCP) 다른 것과 비교

대안언제 쓰나단점/장점
Hasura더 완성도 높은 GraphQL 표면이 필요하고 아직 MCP가 필요 없을 때Hasura가 더 광범위하지만 무거우며 DAB는 Azure에 최적화되어 있고 가볍습니다
직접 Postgres MCP / Postgres MCP 서버Azure를 사용하지 않고 단순히 Postgres 접근이 필요할 때Postgres MCP가 더 간단하지만 DAB는 엔티티/행 수준 정책을 적용합니다

더 보기

리소스

📖 GitHub에서 공식 README 읽기

🐙 열린 이슈 보기

🔍 400+ MCP 서버 및 Skills 전체 보기