Freigeben über


Schnellstart: Verwenden von SQL MCP Server mit Azure Container Apps

Diagramm, das einen SQL MCP-Server zeigt, der in Azure Container Apps bereitgestellt wird.

Von Bedeutung

Der SQL Model Context Protocol (MCP)-Server ist in Daten-API-Generator, Version 1.7 und höher, verfügbar.

In dieser Schnellstartanleitung erfahren Sie, wie Sie SQL MCP Server für Azure Container Apps bereitstellen. Nach der Bereitstellung können Sie über Visual Studio Code (VS Code), Microsoft Foundry oder einen anderen MCP-Client (Model Context Protocol) als Remoteserverendpunkt eine Verbindung damit herstellen.

Sequenzdiagramm, das den ACA-Bereitstellungsworkflow zeigt.

Voraussetzungen

Azure-Abonnement

Sie benötigen ein aktives Azure-Abonnement. Wenn Sie kein Konto haben, create a free Azure account.

Azure CLI

Installieren Sie die Azure CLI, um Ressourcen bereitzustellen:

winget install Microsoft.AzureCLI

.NET 9+

Möglicherweise ist dieses Tool bereits installiert. Führen Sie aus und bestätigen Sie, dass die Version 9 oder höher angezeigt wird.

winget install Microsoft.DotNet.Runtime.9

CLI des Daten-API-Builders

dotnet new tool-manifest
dotnet tool install microsoft.dataapibuilder

Hinweis

SQL MCP Server-Features sind in Data API Builder Version 1.7 und höher verfügbar.

PowerShell

Installieren Sie PowerShell , wenn sie noch nicht installiert ist.

dotnet tool install --global PowerShell

Schritt 1: Erstellen und Bereitstellen von Azure SQL-Datenbank

1. Melden Sie sich bei Azure an

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

2. Variablen für Ihre Bereitstellung festlegen

$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. Erstellen einer Ressourcengruppe

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

4. Erstellen von Azure SQL Server

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

5. Konfigurieren der Firewall, um Azure Dienste zuzulassen

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. Erstellen der Datenbank

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

7. Erstellen einer Products-Tabelle mit Beispieldaten

Rufen Sie Ihre Connection String zuerst ab:

$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;"

Erstellen einer SQL-Skriptdatei :

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);

Führen Sie sie mithilfe von VS Code, SQL Server Management Studio oder sqlcmd aus.

Schritt 2: Konfigurieren des SQL MCP-Servers

1. Erstellen Sie Ihre dab-config.json

Initialisieren Sie die Konfiguration:

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

2. Hinzufügen der Entität "Products" mit Beschreibungen

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

3. Bereitstellen des KI-Agent-Kontexts mit Feldbeschreibungen

Fügen Sie Feldbeschreibungen hinzu, um KI-Agents dabei zu helfen, Ihr Datenbankschema zu verstehen:

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"

Schritt 3: Bereitstellen von SQL MCP Server für Azure Container Apps

1. Erstellen Sie ein Azure Container Registry und ein benutzerdefiniertes Image.

Erstellen Sie eine Containerregistrierung, und erstellen Sie ein benutzerdefiniertes Image mit eingebetteter Konfiguration:

$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. Erstellen einer Dockerfile-Datei

Erstellen Sie eine Datei im selben Ordner wie Ihr :

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

3. Erstellen und Übertragen des Images

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

4. Erstellen einer Container-Apps-Umgebung

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

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

5. Bereitstellen des SQL MCP Server-Containers

$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

Ihre Ressourcengruppe sollte dem folgenden Beispiel ähneln:

Screenshot der Azure-Portal-Ressourcengruppe nach der Bereitstellung.

Rufen Sie Ihre MCP-Endpunkt-URL ab

$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"

Speichern Sie diese URL – Sie verwenden sie, um eine Verbindung von MCP-Clients herzustellen.

Testen Sie Ihre Bereitstellung

curl "https://$MCP_URL/health"

Es sollte eine gesunde Antwort erscheinen.

Verbindung von MCP-Clients herstellen

Ihr SQL MCP-Server wird jetzt bereitgestellt und kann verwendet werden. Hier erfahren Sie, wie Sie eine Verbindung von verschiedenen Clients herstellen:

Visual Studio Code (VS-Code)

Folgen Sie der Schnellstartanleitung mit VS Code , und verwenden Sie die bereitgestellte MCP-Server-URL, anstatt lokal auszuführen.

Von Microsoft Foundry

Wenn Sie Ihren MCP-Server als benutzerdefiniertes MCP-Tool hinzufügen möchten, folgen Sie der Schnellstartanleitung mit microsoft Foundry .

Andere MCP-Clients

Verwenden Sie die MCP-Server-URL aus Schritt 3.6, um eine Verbindung von einem beliebigen MCP-kompatiblen Client herzustellen.

Überwachung und Problembehandlung

Container-App-Protokolle anzeigen

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

Überprüfen der MCP-Endpunktintegrität

curl "https://$MCP_URL/health"

Häufig auftretende Probleme

Verbindungsfehler aufgetreten

  • Stellen Sie sicher, dass der Ingress von Container-Apps auf festgelegt ist
  • Überprüfen, ob die SQL-Verbindungszeichenfolge korrekt ist
  • Überprüfen von Firewallregeln für Azure SQL

Es wurden keine Daten zurückgegeben.

  • Überprüfen, ob die Tabelle "Produkte" erstellt und ausgefüllt wurde
  • Entitätsberechtigungen in überprüfen
  • Überprüfen Sie die Container-Apps-Protokolle auf Fehler

Die Leistung ist langsam.

  • Erwägen Sie, die CPU-/Speicherzuweisung zu erhöhen
  • Überprüfen Sie, ob die Replikate skaliert werden müssen.
  • Anwendungseinblicke-Metriken überprüfen

Bewährte Methoden für die Sicherheit für die Produktion

  • Enable authentication – Konfigurieren Microsoft Entra ID Authentifizierung anstelle des anonymen Zugriffs
  • Verwaltete Identitäten verwenden – Ermöglichen Sie, dass Container-Apps sich bei SQL mithilfe von verwalteten Identitäten authentifizieren
  • Implementieren von CORS – Einschränken, welche Domänen auf Ihren MCP-Server zugreifen können
  • Aktivieren von Ratenbeschränkungen – Schutz vor Missbrauch
  • Use Azure Key Vault – Speichern von Verbindungszeichenfolgen sicher
  • Überwachen mit Application Insights – Nachverfolgen der Nutzung und Leistung
  • Berechtigungen einschränken – Nur erforderliche Zugriffsebenen gewähren

Bereinigen von Ressourcen

Wenn Sie fertig sind, löschen Sie die Ressourcengruppe, um alle Ressourcen zu entfernen:

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

Vollständiges Beispielskript

Hier ist ein vollständiges PowerShell-Skript, das alle Schritte in dieser Schnellstartanleitung ausführt. Aktualisieren Sie vor der Ausführung die Mandanten-ID, die Abonnement-ID und die Kennwortvariablen.

Tipp

Eine produktionsbereite Bereitstellung mit verwalteter Identitätsauthentifizierung, Integritätsprüfungen und automatischer Bereinigung finden Sie im Demoumgebungsskript des Daten-API-Generators.

# ============================================
# 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
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
  • Übersicht über SQL MCP Server
  • Datenmanipulationstools in SQL MCP Server
  • Hinzufügen von semantischen Beschreibungen zu SQL MCP Server