Skip to content

Conversation

@anushakolan
Copy link
Contributor

@anushakolan anushakolan commented Nov 13, 2025

Why make this change?

This change adds documented instructions on integrating the DAB MCP with AI Foundry using an Azure Container Instance.

image

@anushakolan
Copy link
Contributor Author

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 6 pipeline(s).

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR adds comprehensive documentation for integrating Data API Builder (DAB) Model Context Protocol (MCP) server with Azure AI Foundry using Azure Container Instances.

Key Changes:

  • New end-to-end integration guide covering architecture, prerequisites, and deployment steps
  • Documentation of DAB container deployment to Azure Container Instances with MCP endpoint configuration
  • Instructions for connecting Azure AI Foundry agents to DAB MCP endpoints

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +30 to +33
Create tables and stored procedures:
- Tables
- Stored Procedures

Copy link

Copilot AI Nov 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Section 3 "Prepare the Database" lacks sufficient documentation. The section only lists bullet points ("Tables" and "Stored Procedures") without providing any actual instructions, examples, or SQL scripts for creating the necessary database objects.

Suggested change
Create tables and stored procedures:
- Tables
- Stored Procedures
You need to create the necessary tables and stored procedures in your Azure SQL Database. Below is an example of how to create a simple `Products` table and a stored procedure to retrieve products by category.
**Example:**
1. Connect to your Azure SQL Database using Azure Data Studio, SQL Server Management Studio, or the Azure Portal's Query Editor.
2. Run the following SQL script to create a sample table and stored procedure:
```sql
-- Create Products table
CREATE TABLE Products (
ProductID INT IDENTITY(1,1) PRIMARY KEY,
Name NVARCHAR(100) NOT NULL,
Category NVARCHAR(50) NOT NULL,
Price DECIMAL(10,2) NOT NULL
);
-- Create stored procedure to get products by category
CREATE PROCEDURE GetProductsByCategory
@Category NVARCHAR(50)
AS
BEGIN
SET NOCOUNT ON;
SELECT ProductID, Name, Category, Price
FROM Products
WHERE Category = @Category;
END;
  1. You can modify the table and stored procedure definitions to fit your application's needs. Make sure to note the table and procedure names, as you will reference them in your dab-config.json file.

Copilot uses AI. Check for mistakes.
Comment on lines +50 to +51
## 5. Add entities and stored procedure to `dab-config.json` and enable MCP tools in the config.

Copy link

Copilot AI Nov 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Section 5 lacks specific instructions. This section mentions adding entities and stored procedures to dab-config.json and enabling MCP tools, but provides no examples, commands, or detailed steps on how to accomplish this.

Suggested change
## 5. Add entities and stored procedure to `dab-config.json` and enable MCP tools in the config.
## 5. Add entities and stored procedures to `dab-config.json` and enable MCP tools in the config.
Here is how to add a table entity and a stored procedure to your `dab-config.json`, and ensure MCP tools are enabled:
1. **Open your `dab-config.json` file.**
2. **Add an entity (table) definition** under the `"entities"` section. For example, to expose a `Customers` table:
```json
"entities": {
"Customers": {
"source": "Customers",
"rest": true,
"graphql": true,
"mcp": true,
"permissions": [
{
"role": "anonymous",
"actions": [ "read", "create", "update", "delete" ]
}
]
},
  1. Add a stored procedure under the "entities" section. For example, to expose a stored procedure called GetCustomerOrders:

      "GetCustomerOrders": {
        "source": {
          "object": "GetCustomerOrders",
          "type": "stored-procedure"
        },
        "rest": true,
        "graphql": true,
        "mcp": true,
        "permissions": [
          {
            "role": "anonymous",
            "actions": [ "execute" ]
          }
        ]
      }
    }

    Note: Make sure the "entities" section is a valid JSON object. If you have multiple entities, separate them with commas.

  2. Ensure MCP is enabled in the "runtime" section:

    "runtime": {
      "rest": { "enabled": true },
      "graphql": { "enabled": true },
      "mcp": {
        "enabled": true,
        "path": "/mcp"
      }
    }
  3. Example dab-config.json structure:

    {
      "data-source": {
        "database-type": "mssql",
        "connection-string": "@env('DATABASE_CONNECTION_STRING')"
      },
      "entities": {
        "Customers": {
          "source": "Customers",
          "rest": true,
          "graphql": true,
          "mcp": true,
          "permissions": [
            {
              "role": "anonymous",
              "actions": [ "read", "create", "update", "delete" ]
            }
          ]
        },
        "GetCustomerOrders": {
          "source": {
            "object": "GetCustomerOrders",
            "type": "stored-procedure"
          },
          "rest": true,
          "graphql": true,
          "mcp": true,
          "permissions": [
            {
              "role": "anonymous",
              "actions": [ "execute" ]
            }
          ]
        }
      },
      "runtime": {
        "rest": { "enabled": true },
        "graphql": { "enabled": true },
        "mcp": {
          "enabled": true,
          "path": "/mcp"
        }
      }
    }
  4. Save the file.

For more details, see the DAB documentation on entities and stored procedures and MCP configuration.

Copilot uses AI. Check for mistakes.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I also think we should add more specific instructions in this step, at the very least add a link to a place in the DAB documentation that shows how the user is supposed to add the entities to the config file and how to enable the MCP tools.

Comment on lines +53 to +56
- Create a Storage Account and File Share.
- Upload dab-config.json.
- Record account name and key for mounting in ACI.

Copy link

Copilot AI Nov 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Section 6 lacks detailed instructions. The section only provides high-level bullet points without actual commands or step-by-step instructions for creating the Storage Account, File Share, uploading the configuration file, or retrieving the necessary credentials.

Suggested change
- Create a Storage Account and File Share.
- Upload dab-config.json.
- Record account name and key for mounting in ACI.
1. **Create a Storage Account** (if you don't have one):

az storage account create
--name
--resource-group
--location
--sku Standard_LRS


2. **Create a File Share**:

az storage share create
--name
--account-name


3. **Upload `dab-config.json` to the File Share**:

az storage file upload
--account-name
--share-name
--source ./dab-config.json
--path dab-config.json


4. **Retrieve the Storage Account key** (needed for mounting in ACI):

az storage account keys list
--account-name
--resource-group

Use the value of `key1` or `key2` as `<StorageAccountKey>` in the next step.

Copilot uses AI. Check for mistakes.
Comment on lines +82 to +85
- Create or open a Project.
- Add an Agent.
- Add MCP tool with URL: http://<fqdn>/mcp.
- Test in Playground No newline at end of file
Copy link

Copilot AI Nov 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Section 8 lacks detailed instructions. The section only lists high-level steps without specific guidance on how to create a project, add an agent, configure the MCP tool, or what to expect when testing in the Playground.

Suggested change
- Create or open a Project.
- Add an Agent.
- Add MCP tool with URL: http://<fqdn>/mcp.
- Test in Playground
Follow these steps to connect your DAB MCP endpoint to Azure AI Foundry and test the integration:
1. **Create or Open a Project**
- Navigate to the [Azure AI Foundry portal](https://ai.azure.com/foundry) and sign in.
- On the dashboard, click **Projects** in the left navigation pane.
- To create a new project, click **New Project**, enter a name (e.g., `DAB-MCP-Demo`), and click **Create**.
- To use an existing project, select it from the list.
2. **Add an Agent**
- Within your project, go to the **Agents** tab.
- Click **Add Agent**.
- Enter an agent name (e.g., `DAB-MCP-Agent`).
- (Optional) Add a description.
- Click **Create**.
3. **Configure the MCP Tool**
- In the agent's configuration page, go to the **Tools** section.
- Click **Add Tool** and select **MCP** from the tool type dropdown.
- In the **MCP Endpoint URL** field, enter your DAB MCP endpoint, e.g., `http://<fqdn>/mcp`.
- (Optional) Configure authentication if your endpoint requires it.
- Click **Save** to add the tool.
4. **Test in Playground**
- Go to the **Playground** tab in your project.
- Select the agent you created from the agent dropdown.
- In the input box, enter a prompt that will trigger the MCP tool, such as:
```
Get all records from the Customers entity.
```
- Click **Run**.
- The agent should invoke the MCP tool, which will call your DAB MCP endpoint and return the results.
- **Expected Result:** You should see the data returned from your DAB instance displayed in the Playground output panel.
- If there are errors, check the DAB container logs and ensure the MCP endpoint is reachable from Azure AI Foundry.

Copilot uses AI. Check for mistakes.
Comment on lines +76 to +79
```
REST: http://<fqdn>/api/<EntityName>
GraphQL: http://<fqdn>/graphql
MCP: http://<fqdn>/mcp
Copy link

Copilot AI Nov 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing code block formatting. Lines 77-79 appear to be endpoint URLs that should be formatted as a code block or properly structured list for better readability.

Suggested change
```
REST: http://<fqdn>/api/<EntityName>
GraphQL: http://<fqdn>/graphql
MCP: http://<fqdn>/mcp
REST: http://<fqdn>/api/<EntityName>
GraphQL: http://<fqdn>/graphql
MCP: http://<fqdn>/mcp

Copilot uses AI. Check for mistakes.

```

## 5. Add entities and stored procedure to `dab-config.json` and enable MCP tools in the config.
Copy link

Copilot AI Nov 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Inconsistent formatting: This section title uses a period at the end while other section titles (sections 1-4, 6-8) do not. Section titles should have consistent formatting throughout the document.

Suggested change
## 5. Add entities and stored procedure to `dab-config.json` and enable MCP tools in the config.
## 5. Add entities and stored procedure to `dab-config.json` and enable MCP tools in the config

Copilot uses AI. Check for mistakes.
--azure-file-volume-share-name <FileShareName> \
--azure-file-volume-account-name <StorageAccountName> \
--azure-file-volume-account-key <StorageAccountKey> \
--azure-file-volume-mount-path "/aci"
Copy link

Copilot AI Nov 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing backslash continuation character. The az container create command has a line break before --os-type Linux but is missing the backslash (\) at the end of line 71 to continue the command.

Suggested change
--azure-file-volume-mount-path "/aci"
--azure-file-volume-mount-path "/aci" \

Copilot uses AI. Check for mistakes.
--os-type Linux \
--cpu 1 \
--memory 1.5 \
--command-line "dotnet Azure.DataApiBuilder.Service.dll --ConfigFileName $configFile --LogLevel Debug"
Copy link

Copilot AI Nov 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Incorrect variable reference in command. The --command-line argument references $configFile, but this variable is never defined. It should be /aci/dab-config.json or reference the DAB_CONFIG_PATH environment variable defined earlier.

Suggested change
--command-line "dotnet Azure.DataApiBuilder.Service.dll --ConfigFileName $configFile --LogLevel Debug"
--command-line "dotnet Azure.DataApiBuilder.Service.dll --ConfigFileName $DAB_CONFIG_PATH --LogLevel Debug"

Copilot uses AI. Check for mistakes.
Copy link
Contributor

@RubenCerna2079 RubenCerna2079 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should add some instructions under step 5

## 5. Add entities and stored procedure to `dab-config.json` and enable MCP tools in the config.

## 6. Store dab-config.json in Azure Files
- Create a Storage Account and File Share.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is a Storage Account and a File Share? Are these resources in Azure? Is there any specific way in which they need to be set up?

Comment on lines +61 to +73
--resource-group <RG> \
--name dab-mcp-demo \
--image mcr.microsoft.com/azure-databases/data-api-builder:1.7.81-rc \
--dns-name-label <globally-unique-label> \
--ports 5000 \
--location <location> \
--environment-variables DAB_CONFIG_PATH="/aci/dab-config.json" \
--azure-file-volume-share-name <FileShareName> \
--azure-file-volume-account-name <StorageAccountName> \
--azure-file-volume-account-key <StorageAccountKey> \
--azure-file-volume-mount-path "/aci"
--os-type Linux \
--cpu 1 \
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some of the variables are easy to know where to get. But I am not sure if that is the case for all of them. I think this ties to my previous comment of showing the user how are the resources supposed to be set up.

--memory 1.5 \
--command-line "dotnet Azure.DataApiBuilder.Service.dll --ConfigFileName $configFile --LogLevel Debug"
```
REST: http://<fqdn>/api/<EntityName>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What does fqdn mean?

@Aniruddh25
Copy link
Collaborator

step No. 6 is missing in the diagram.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants