Sandbox
@Azure/data-api-builder

MCP server and REST GraphQL API for databases

Data API builder turns a database into a REST, GraphQL, and MCP surface. You point it at a connection string, define entities in a JSON config, and start the service with the `dab` CLI.

1,512 stars370 forksC#Updated 7d ago
Who it's for

Builders who want their agent or app to query and mutate database data through REST, GraphQL, or MCP.

What it delivers

You can expose database tables and procedures as agent-friendly tools and APIs without writing a custom backend.

What it does

REST, GraphQL, and MCP endpoints

Creates REST and GraphQL routes for entities and exposes MCP tools for database access.

Database-backed entity mapping

Maps tables, views, and stored procedures to named entities in a JSON config file.

CLI-driven setup and run

Uses `dab init`, `dab add`, and `dab start` to create config, add entities, and run the service.

Container and local runtime

Runs locally during development and in a container for production.

Database support

Supports Azure SQL, SQL Server, SQLDW, Cosmos DB, PostgreSQL, and MySQL.

How to get it

  1. 1Run
    dotnet --version
  2. 2The Data API builder (DAB) command line is cross-platform and intended for local…
    dotnet tool install microsoft.dataapibuilder -g
  3. 3Run
    dab --version
  4. 4Run
    echo my-connection-string=%database_connection_string% > .env
  5. 5Run
    echo "my-connection-string=$database_connection_string" > .env
  6. 6The file .env is automatically created through this process. These are the resulting…
    "my-connection-string=$env:database_connection_string"

README

Data API builder for Azure Databases

NuGet Package Nuget Downloads Documentation License: MIT

What's new?

Join the community

Want to be part of our priorities and roadmap? Sign up here.

About Data API builder

Data API builder (DAB) is an open-source, no-code tool that creates secure, full-featured REST and GraphQL endpoints for your database. It’s a CRUD data API engine that runs in a container—on Azure, any other cloud, or on-premises. DAB is built for developers with integrated tooling, telemetry, and other productivity features.

[!IMPORTANT] Data API builder (DAB) is open source and always free.

Which databases does Data API builder support?

Azure SQLSQL ServerSQLDWCosmos DBPostgreSQLMySQL
SupportedYesYesYesYesYesYes

Which environments does Data API builder support?

On-PremAzureAWSGCPOther
SupportedYesYesYesYesYes

Which endpoints does Data API builder support?

RESTGraphQLMCP
SupportedYesYesYes

Getting started

Use the Getting Started tutorial to quickly explore the core tools and concepts.

1. Install the dotnet command line

https://get.dot.net

[!NOTE] You may already have .NET installed!

The Data API builder (DAB) command line requires the .NET runtime version 8 or later.

Validate your installation

dotnet --version

2. Install the dab command line

The Data API builder (DAB) command line is cross-platform and intended for local developer use.

dotnet tool install microsoft.dataapibuilder -g

Validate your installation

dab --version

3. Create your database (example: Azure SQL database / T-SQL)

This example uses a single table for simplicity.

CREATE TABLE dbo.Todo
(
    Id INT PRIMARY KEY IDENTITY,
    Title NVARCHAR(500) NOT NULL,
    IsCompleted BIT NOT NULL DEFAULT 0
);
INSERT dbo.Todo (Title, IsCompleted)
VALUES
    ('Walk the dog', 0),
    ('Feed the fish', 0),
    ('Clean the cat', 1);

4. Prepare your connection string

Data API builder (DAB) supports .env files for testing process-level environment variables.

PowerShell (Windows)

echo "my-connection-string=$env:database_connection_string" > .env

cmd.exe (Windows)

echo my-connection-string=%database_connection_string% > .env

bash (macOS/Linux)

echo "my-connection-string=$database_connection_string" > .env

Resulting .env file

The file .env is automatically created through this process. These are the resulting contents:

"my-connection-string=$env:database_connection_string" 

[!NOTE] Be sure and replace database_connection_string with your actual database connection string.

[!IMPORTANT] Adding .env to your .gitignore file will help ensure your secrets are not added to source control.

5. Create your initial configuration file

Data API builder (DAB) requires a JSON configuration file. Use dab --help for syntax options.

dab init
  --database-type mssql
  --connection-string "@env('my-connection-string')"
  --host-mode development

[!NOTE] Including --host-mode development enables Swagger for REST and Nitro for GraphQL.

Resulting configuration

The file dab-config.json is automatically created through this process. These are the resulting contents:

{
  "$schema": "https://github.com/Azure/data-api-builder/releases/download/v1.5.56/dab.draft.schema.json",
  "data-source": {
    "database-type": "mssql",
    "connection-string": "@env('my-connection-string')",
    "options": {
      "set-session-context": false
    }
  },
  "runtime": {
    "rest": {
      "enabled": true,
      "path": "/api",
      "request-body-strict": true
    },
    "graphql": {
      "enabled": true,
      "path": "/graphql",
      "allow-introspection": true
    },
    "host": {
      "cors": {
        "origins": [],
        "allow-credentials": false
      },
      "authentication": {
        "provider": "AppService"
      },
      "mode": "development"
    }
  },
  "entities": { }
}

6. Add your table to the configuration

dab add Todo
  --source "dbo.Todo"
  --permissions "anonymous:*"

[!NOTE] DAB supports tables, views, and stored procedures. When the type is not specified, the default is table.

Resulting configuration

The entities section of the configuration is no longer empty:

{
  "entities": {
    "Todo": {
      "source": {
        "object": "dbo.Todo",
        "type": "table"
      },
      "graphql": {
        "enabled": true,
        "type": {
          "singular": "Todo",
          "plural": "Todos"
        }
      },
      "rest": {
        "enabled": true
      },
      "permissions": [
        {
          "role": "anonymous",
          "actions": [
            {
              "action": "*"
            }
          ]
        }
      ]
    }
  }
}

7. Run Data API builder

In production, DAB runs in a container. In development, it’s locally self-hosted.

dab start

[!IMPORTANT] The DAB CLI assumes your configuration file is called dab-config.json and is in the local folder.

8. Access your data!

By default, DAB enables both REST and GraphQL.

GET http://localhost:5000/api/Todo

[!NOTE] Change the URL to match your port if it is different.

Other things you should try

  • DAB’s Health endpoint: http://localhost:5000/health
  • DAB’s Swagger UI: http://localhost:5000/swagger
  • DAB’s Nitro UI: http://localhost:5000/graphql

How does it work?

DAB dynamically creates endpoints and translates requests to SQL, returning JSON.

sequenceDiagram
  actor Client as Client
  participant Endpoint as Endpoint
  participant QueryBuilder as QueryBuilder
  participant DB as Database

  %% Initialization / Warming up section (light grey)
  rect rgba(120,120,120,0.10)
    Endpoint -->>+ Endpoint: Read Config
    Endpoint ->> DB: Query Metadata
    DB -->> Endpoint: Metadata Response
    Endpoint ->>- Endpoint: Start Engine
  end

  %% Request/Response section (very light purple)
  rect rgba(180,150,255,0.11)
    Client ->>+ Endpoint: HTTP Request
      Endpoint ->> Endpoint: Authorize
    Endpoint ->> QueryBuilder: Invoke
    QueryBuilder -->> Endpoint: SQL Query
      Endpoint ->> DB: Submit Query
      DB -->> Endpoint: Data Response
    Endpoint -->>- Client: HTTP Response
  end

Additional resources

References

How to contribute

To contribute, see these documents:

Third-party component notice

Nitro (formerly Banana Cake Pop by ChilliCream, Inc.) may optionally store work in its cloud service via your ChilliCream account. Microsoft is not affiliated with or endorsing this service. Use at your discretion.

Trademarks

This project may use trademarks or logos. Use of Microsoft trademarks must follow Microsoft’s Trademark & Brand Guidelines. Use of third-party marks is subject to their policies.

Files in the repo

Repository payload27 top-level entries
  • .aspire
  • .config
  • .devcontainer
  • .github
  • .pipelines
  • config-generators
  • docker
  • docs
  • external_licenses
  • nuget
  • samples
  • schemas
  • scripts
  • src
  • templates
  • .gitattributes
  • .gitignore
  • CODE_OF_CONDUCT.md
  • CODEOWNERS
  • CONTRIBUTING.md
  • Dockerfile
  • global.json
  • LICENSE.txt
  • Nuget.config
  • README.md
  • SECURITY.md
  • SUPPORT.md

Discussion (0)

Ask about usage, or say what you built with it

Sign in to join the discussion.

No comments yet. Be the first to say what this is good for.

More connectors

Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface

86k

High-performance code intelligence MCP server. Indexes codebases into a persistent knowledge graph — average repo in milliseconds. 158 languages, sub-ms queries, 99% fewer tokens. Single static binary, zero dependencies.

43k

Universal provider proxy for OpenAI Codex & Claude Code — use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code

14k
okf-memory/
okf-agent-memory

Git-native persistent memory for AI coding agents. Implements Google OKF v0.2 with sub-300µs in-memory BM25 search, embedded MCP server, and progressive disclosure. Slashes token bloat by 80% with zero external databases or dependencies. Built in pure Go.

547
tirth8205/
code-review-graph

Local-first code intelligence graph for MCP and CLI. Builds a persistent map of your codebase so AI coding tools read only what matters, with benchmarked context reductions on reviews and large-repo workflows.

31k
2akouwu/
reverify

Stop your AI from making things up — it proposes, deterministic tools decide, every claim checked against ground truth with evidence. Grounded facts and context survive resets. Reverse engineering is the proving ground. MCP server + CLI.

1.1k