Sdílet prostřednictvím


Rychlý start: Použití SQL MCP Serveru s Azure Container Apps

Diagram znázorňující SQL MCP Server nasazený do Azure Container Apps

Důležité

Sql Model Context Protocol (MCP) Server je ve verzi Preview a tato dokumentace a implementace modulu se může změnit. I když je Tvůrce rozhraní API pro Data ve verzi 1.7 v režimu Preview, musíte explicitně použít předběžnou verzi (například 1.7.83-rc), protože funkce MCP ještě nejsou součástí značky :latest.

V tomto rychlém startu se dozvíte, jak nasadit SQL MCP Server do Azure Container Apps. Po nasazení se k němu můžete připojit z editoru Visual Studio Code (VS Code), Microsoft Foundry nebo jakéhokoli jiného klienta MCP (Model Context Protocol) jako vzdáleného koncového bodu serveru.

Sekvenční diagram znázorňující pracovní postup nasazení ACA

Požadavky

Předplatné Azure

Potřebujete aktivní předplatné Azure. Pokud ho nemáte, vytvořte si bezplatný účet Azure.

Azure CLI (příkazový řádek nástroje Azure)

Nainstalujte Azure CLI pro nasazení prostředků:

winget install Microsoft.AzureCLI

.NET 9 nebo novější

Tento nástroj už možná máte nainstalovaný. Spusťte dotnet --version a ověřte, že hlásí verzi 9 nebo novější.

winget install Microsoft.DotNet.Runtime.9

Rozhraní příkazového řádku pro tvůrce dat

dotnet new tool-manifest
dotnet tool install microsoft.dataapibuilder --prerelease

Poznámka:

SQL MCP Server je aktuálně v předběžné verzi. Použití příznaku --prerelease zajišťuje, že získáte nejnovější verzi Tvůrce rozhraní Data API se všemi funkcemi použitými v tomto rychlém startu.

PowerShell

Pokud ještě není nainstalovaný, nainstalujte PowerShell.

dotnet tool install --global PowerShell

Krok 1: Vytvoření a nasazení služby Azure SQL Database

1. Přihlášení k Azure

az login
az account set --subscription "<your-subscription-id>"

2. Nastavení proměnných pro vaše nasazení

$RESOURCE_GROUP = "rg-sql-mcp"
$LOCATION = "eastus"
$SQL_SERVER = "sql-mcp-$(Get-Random -Minimum 1000 -Maximum 9999)"
$SQL_DATABASE = "ProductsDB"
$SQL_ADMIN = "sqladmin"
$SQL_PASSWORD = "<YourStrongPassword123!>"

3. Vytvoření skupiny prostředků

az group create \
  --name $RESOURCE_GROUP \
  --location $LOCATION

4. Vytvoření Azure SQL Serveru

az sql server create \
  --name $SQL_SERVER \
  --resource-group $RESOURCE_GROUP \
  --location $LOCATION \
  --admin-user $SQL_ADMIN \
  --admin-password $SQL_PASSWORD

5. Konfigurace brány firewall pro povolení služeb Azure

az sql server firewall-rule create \
  --resource-group $RESOURCE_GROUP \
  --server $SQL_SERVER \
  --name AllowAzureServices \
  --start-ip-address 0.0.0.0 \
  --end-ip-address 0.0.0.0

6. Vytvoření databáze

az sql db create \
  --resource-group $RESOURCE_GROUP \
  --server $SQL_SERVER \
  --name $SQL_DATABASE \
  --service-objective S0

7. Vytvoření tabulky Products s ukázkovými daty

Nejprve získejte řetězec pro připojení:

$CONNECTION_STRING = "Server=tcp:$SQL_SERVER.database.windows.net,1433;Database=$SQL_DATABASE;User ID=$SQL_ADMIN;Password=$SQL_PASSWORD;Encrypt=true;TrustServerCertificate=false;Connection Timeout=30;"

Vytvoření souboru create-products.sqlskriptu SQL:

CREATE TABLE dbo.Products
(
    ProductID INT NOT NULL PRIMARY KEY IDENTITY(1,1),
    ProductName NVARCHAR(100) NOT NULL,
    Category NVARCHAR(50) NOT NULL,
    UnitPrice DECIMAL(10,2) NOT NULL,
    UnitsInStock INT NOT NULL,
    Discontinued BIT NOT NULL DEFAULT 0
);

INSERT INTO dbo.Products (ProductName, Category, UnitPrice, UnitsInStock, Discontinued) VALUES
('Laptop Pro 15', 'Electronics', 1299.99, 45, 0),
('Wireless Mouse', 'Electronics', 29.99, 150, 0),
('Office Chair', 'Furniture', 249.99, 30, 0),
('Standing Desk', 'Furniture', 599.99, 15, 0),
('Coffee Maker', 'Appliances', 89.99, 60, 0),
('Notebook Set', 'Office Supplies', 12.99, 200, 0),
('USB-C Hub', 'Electronics', 49.99, 80, 0),
('Desk Lamp', 'Furniture', 39.99, 100, 0),
('Bluetooth Headphones', 'Electronics', 149.99, 50, 0),
('Water Bottle', 'Office Supplies', 19.99, 120, 0);

Spusťte ho pomocí VS Code, SQL Server Management Studio nebo sqlcmd.

Krok 2: Konfigurace SQL MCP Serveru

1. Vytvořte svůj dab-config.json

Inicializujte konfiguraci:

dab init `
  --database-type mssql `
  --connection-string "@env('MSSQL_CONNECTION_STRING')" `
  --host-mode Production `
  --config dab-config.json

2. Přidejte entitu Produkty s popisy

dab add Products `
  --source dbo.Products `
  --permissions "anonymous:read" `
  --description "Product catalog with pricing, category, and inventory information"

3. Uveďte kontext agenta AI s popisy polí.

Přidejte popisy polí, které agentům AI pomůžou porozumět schématu databáze:

dab update Products `
  --fields.name ProductID `
  --fields.description "Unique product identifier" `
  --fields.primary-key true

dab update Products `
  --fields.name ProductName `
  --fields.description "Name of the product"

dab update Products `
  --fields.name Category `
  --fields.description "Product category (Electronics, Furniture, Office Supplies, Appliances)"

dab update Products `
  --fields.name UnitPrice `
  --fields.description "Retail price per unit in USD"

dab update Products `
  --fields.name UnitsInStock `
  --fields.description "Current inventory count available for purchase"

dab update Products `
  --fields.name Discontinued `
  --fields.description "True if product is no longer available for sale"

Krok 3: Nasazení SQL MCP Serveru do Azure Container Apps

1. Vytvoření služby Azure Container Registry a sestavení vlastní image

Vytvořte registr kontejneru a sestavte vlastní image s vloženou konfigurací:

$ACR_NAME = "acrsqlmcp$(Get-Random -Minimum 1000 -Maximum 9999)"

az acr create `
  --resource-group $RESOURCE_GROUP `
  --name $ACR_NAME `
  --sku Basic `
  --admin-enabled true

2. Vytvoření souboru Dockerfile

Vytvořte soubor s názvem Dockerfile ve stejné složce jako vaše dab-config.json:

FROM mcr.microsoft.com/azure-databases/data-api-builder:1.7.83-rc
COPY dab-config.json /App/dab-config.json

3. Sestavení a nahrání obrazu

az acr build `
  --registry $ACR_NAME `
  --image sql-mcp-server:1 `
  .

4. Vytvoření prostředí Container Apps

$CONTAINERAPP_ENV = "sql-mcp-env"
$CONTAINERAPP_NAME = "sql-mcp-server"

az containerapp env create `
  --name $CONTAINERAPP_ENV `
  --resource-group $RESOURCE_GROUP `
  --location $LOCATION

5. Nasazení kontejneru SQL MCP Serveru

$ACR_LOGIN_SERVER = az acr show `
  --name $ACR_NAME `
  --query loginServer `
  --output tsv

$ACR_USERNAME = az acr credential show `
  --name $ACR_NAME `
  --query username `
  --output tsv

$ACR_PASSWORD = az acr credential show `
  --name $ACR_NAME `
  --query "passwords[0].value" `
  --output tsv

az containerapp create `
  --name $CONTAINERAPP_NAME `
  --resource-group $RESOURCE_GROUP `
  --environment $CONTAINERAPP_ENV `
  --image "$ACR_LOGIN_SERVER/sql-mcp-server:1" `
  --registry-server $ACR_LOGIN_SERVER `
  --registry-username $ACR_USERNAME `
  --registry-password $ACR_PASSWORD `
  --target-port 5000 `
  --ingress external `
  --min-replicas 1 `
  --max-replicas 3 `
  --secrets "mssql-connection-string=$CONNECTION_STRING" `
  --env-vars "MSSQL_CONNECTION_STRING=secretref:mssql-connection-string" `
  --cpu 0.5 `
  --memory 1.0Gi

Vaše skupina prostředků by měla vypadat podobně jako v následujícím příkladu:

Snímek obrazovky skupiny prostředků portálu Azure po nasazení.

6. Získání adresy URL koncového bodu MCP

$MCP_URL = az containerapp show `
  --name $CONTAINERAPP_NAME `
  --resource-group $RESOURCE_GROUP `
  --query "properties.configuration.ingress.fqdn" `
  --output tsv

Write-Host "Your MCP Server URL: https://$MCP_URL/mcp"

Uložte tuto adresu URL – použijete ji pro připojení z klientů MCP.

Otestujte vaše nasazení

curl "https://$MCP_URL/health"

Měla by se zobrazit zdravá odpověď.

Připojení z klientů MCP

Váš SQL MCP Server je teď nasazený a připravený k použití. Tady je postup, jak se připojit z různých klientů:

Visual Studio Code (VS Code)

Postupujte podle pokynů k rychlému startu s průvodcem VS Code a místo místního spuštění použijte nasazenou adresu URL serveru MCP.

Pochází z Microsoft Foundry

Pokud chcete přidat server MCP jako vlastní nástroj MCP, postupujte podle pokynů v příručce Microsoft Foundry .

Ostatní klienti MCP

Pomocí adresy URL serveru MCP z kroku 3.6 se připojte z libovolného klienta kompatibilního s MCP.

Monitorování a řešení potíží

Zobrazení protokolů služby Container Apps

az containerapp logs show \
  --name $CONTAINERAPP_NAME \
  --resource-group $RESOURCE_GROUP \
  --follow

Kontrola stavu koncového bodu MCP

curl "https://$MCP_URL/health"

Běžné problémy

Chyba selhání připojení

  • Ujistěte se, že je ingresní nastavení Container Apps nastaveno na external
  • Ověření správnosti připojovacího řetězce SQL
  • Kontrola pravidel brány firewall v Azure SQL

Nevracená žádná data

  • Ověřte, zda byla tabulka Products vytvořena a naplněna.
  • Kontrola oprávnění entity v dab-config.json
  • Kontrola chyb v protokolech Container Apps

Výkon je pomalý

  • Zvažte zvýšení přidělení procesoru nebo paměti.
  • Ověřte, zda potřebujete navýšit počet replik
  • Prohlédnout metriky Application Insights

Osvědčené postupy zabezpečení pro produkční prostředí

  • Povolení ověřování – Konfigurace ověřování Microsoft Entra ID místo anonymního přístupu
  • Použití spravovaných identit – Povolit službě Container Apps ověřování v SQL pomocí spravované identity
  • Implementace CORS – Omezení domén, které mají přístup k vašemu serveru MCP
  • Povolení omezování rychlosti – ochrana před zneužitím
  • Bezpečné použití služby Azure Key Vault – Zabezpečené ukládání připojovacích řetězců
  • Monitorování pomocí Application Insights – Sledování využití a výkonu
  • Omezení oprávnění – Udělení potřebných úrovní přístupu

Vyčistěte zdroje

Až budete hotovi, smažte skupinu prostředků a tím odstraníte všechny prostředky.

az group delete --name $RESOURCE_GROUP --yes --no-wait

Kompletní ukázkový skript

Tady je kompletní skript PowerShellu, který provede všechny kroky v tomto rychlém startu. Před spuštěním aktualizujte ID tenanta, ID předplatného a proměnné hesel.

Návod

Pro nasazení připravené pro produkční prostředí s ověřováním spravované identity, kontrolami stavu a automatickým vyčištěním se podívejte na skript ukázkového prostředí Data API builder.

# ============================================
# Variables - UPDATE THESE VALUES
# ============================================
$RESOURCE_GROUP = "rg-sql-mcp"
$LOCATION = "centralus"
$SQL_SERVER = "sql-mcp-$(Get-Random -Minimum 1000 -Maximum 9999)"
$SQL_DATABASE = "ProductsDB"
$SQL_ADMIN = "sqladmin"
$SQL_PASSWORD = "P@ssw0rd!"  # Replace with a strong password
$ACR_NAME = "acrsqlmcp$(Get-Random -Minimum 1000 -Maximum 9999)"
$CONTAINERAPP_ENV = "sql-mcp-env"
$CONTAINERAPP_NAME = "sql-mcp-server"

# ============================================
# Sign in to Azure
# ============================================
az login --tenant "<your-tenant-id>"
az account set --subscription "<your-subscription-id>"

# ============================================
# Check if resource group exists and create unique name
# ============================================
$RG_COUNTER = 0
$ORIGINAL_RG = $RESOURCE_GROUP
while ($true) {
    $RG_EXISTS = az group exists --name $RESOURCE_GROUP
    if ($RG_EXISTS -eq "false") {
        break
    }
    $RG_COUNTER++
    $RESOURCE_GROUP = "$ORIGINAL_RG-$RG_COUNTER"
}
Write-Host "Using resource group: $RESOURCE_GROUP" -ForegroundColor Green

# ============================================
# Step 1: Create Azure SQL Database
# ============================================
az group create --name $RESOURCE_GROUP --location $LOCATION

az sql server create `
  --name $SQL_SERVER `
  --resource-group $RESOURCE_GROUP `
  --location $LOCATION `
  --admin-user $SQL_ADMIN `
  --admin-password $SQL_PASSWORD

az sql server firewall-rule create `
  --resource-group $RESOURCE_GROUP `
  --server $SQL_SERVER `
  --name AllowAzureServices `
  --start-ip-address 0.0.0.0 `
  --end-ip-address 0.0.0.0

# Add current client IP to firewall
$MY_IP = (Invoke-RestMethod -Uri 'https://api.ipify.org?format=text')
az sql server firewall-rule create `
  --resource-group $RESOURCE_GROUP `
  --server $SQL_SERVER `
  --name AllowMyIP `
  --start-ip-address $MY_IP `
  --end-ip-address $MY_IP

az sql db create `
  --resource-group $RESOURCE_GROUP `
  --server $SQL_SERVER `
  --name $SQL_DATABASE `
  --service-objective S0

$CONNECTION_STRING = "Server=tcp:$SQL_SERVER.database.windows.net,1433;Database=$SQL_DATABASE;User ID=$SQL_ADMIN;Password=$SQL_PASSWORD;Encrypt=true;TrustServerCertificate=false;Connection Timeout=30;"

# Create sample table using sqlcmd
Write-Host "Creating Products table and sample data..." -ForegroundColor Yellow

$SQL_SCRIPT = @"
CREATE TABLE dbo.Products (
    ProductID INT NOT NULL PRIMARY KEY IDENTITY(1,1),
    ProductName NVARCHAR(100) NOT NULL,
    Category NVARCHAR(50) NOT NULL,
    UnitPrice DECIMAL(10,2) NOT NULL,
    UnitsInStock INT NOT NULL,
    Discontinued BIT NOT NULL DEFAULT 0
);

INSERT INTO dbo.Products (ProductName, Category, UnitPrice, UnitsInStock, Discontinued) VALUES
('Laptop Pro 15', 'Electronics', 1299.99, 45, 0),
('Wireless Mouse', 'Electronics', 29.99, 150, 0),
('Office Chair', 'Furniture', 249.99, 30, 0),
('Standing Desk', 'Furniture', 599.99, 15, 0),
('Coffee Maker', 'Appliances', 89.99, 60, 0);
"@

# Use Invoke-Sqlcmd if available, otherwise skip table creation
try {
    $SQL_SCRIPT | Out-File -FilePath "create-table.sql" -Encoding utf8
    sqlcmd -S "$SQL_SERVER.database.windows.net" -d $SQL_DATABASE -U $SQL_ADMIN -P $SQL_PASSWORD -i "create-table.sql"
    Remove-Item "create-table.sql" -ErrorAction SilentlyContinue
    Write-Host "Products table created successfully!" -ForegroundColor Green
} catch {
    Write-Host "Note: Could not create table automatically. You can create it manually later." -ForegroundColor Yellow
    Write-Host "SQL Script saved for manual execution if needed." -ForegroundColor Yellow
}

# ============================================
# Step 2: Configure SQL MCP Server
# ============================================
# Remove existing config if present
if (Test-Path "dab-config.json") {
    Remove-Item "dab-config.json" -Force
}

dab init `
  --database-type mssql `
  --connection-string "@env('MSSQL_CONNECTION_STRING')" `
  --host-mode Production `
  --config dab-config.json

dab add Products `
  --source dbo.Products `
  --permissions "anonymous:read" `
  --description "Product catalog with pricing, category, and inventory information"

# ============================================
# Step 3: Deploy to Azure Container Apps
# ============================================
az acr create `
  --resource-group $RESOURCE_GROUP `
  --name $ACR_NAME `
  --sku Basic `
  --admin-enabled true

# Create Dockerfile
@"
FROM mcr.microsoft.com/azure-databases/data-api-builder:1.7.83-rc
COPY dab-config.json /App/dab-config.json
"@ | Out-File -FilePath Dockerfile -Encoding utf8

az acr build --registry $ACR_NAME --image sql-mcp-server:1 .

az containerapp env create `
  --name $CONTAINERAPP_ENV `
  --resource-group $RESOURCE_GROUP `
  --location $LOCATION

# Get ACR credentials for initial deployment
$ACR_LOGIN_SERVER = az acr show --name $ACR_NAME --query loginServer --output tsv
$ACR_USERNAME = az acr credential show --name $ACR_NAME --query username --output tsv
$ACR_PASSWORD = az acr credential show --name $ACR_NAME --query "passwords[0].value" --output tsv

az containerapp create `
  --name $CONTAINERAPP_NAME `
  --resource-group $RESOURCE_GROUP `
  --environment $CONTAINERAPP_ENV `
  --image "$ACR_LOGIN_SERVER/sql-mcp-server:1" `
  --registry-server $ACR_LOGIN_SERVER `
  --registry-username $ACR_USERNAME `
  --registry-password $ACR_PASSWORD `
  --target-port 5000 `
  --ingress external `
  --min-replicas 1 `
  --max-replicas 3 `
  --secrets "mssql-connection-string=$CONNECTION_STRING" `
  --env-vars "MSSQL_CONNECTION_STRING=secretref:mssql-connection-string" `
  --cpu 0.5 `
  --memory 1.0Gi

# ============================================
# Output
# ============================================
$MCP_URL = az containerapp show `
  --name $CONTAINERAPP_NAME `
  --resource-group $RESOURCE_GROUP `
  --query "properties.configuration.ingress.fqdn" `
  --output tsv

Write-Host ""
Write-Host "Deployment complete!" -ForegroundColor Green
Write-Host "MCP Server URL: https://$MCP_URL/mcp" -ForegroundColor Cyan
Write-Host "Health check:   https://$MCP_URL/health" -ForegroundColor Cyan