Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penting
Server Protokol Konteks Model SQL (MCP) sedang dalam pratinjau, dan dokumentasi ini serta implementasi mesin dapat berubah. Saat Data API Builder versi 1.7 dalam pratinjau, Anda harus menggunakan versi prarilis secara eksplisit (misalnya, 1.7.83-rc) karena fitur MCP belum disertakan dalam tag :latest.
Panduan cepat ini menunjukkan kepada Anda cara mendeploy SQL MCP Server ke Azure Container Apps. Setelah disebarkan, Anda dapat menyambungkannya dari Visual Studio Code (VS Code), Microsoft Foundry, atau klien Model Context Protocol (MCP) lainnya sebagai titik akhir server jarak jauh.
Prasyarat
Langganan Azure
Anda memerlukan langganan Azure aktif. Jika Anda tidak memilikinya, buat akun Azure gratis.
Azure CLI (antarmuka baris perintah Azure)
Instal Azure CLI untuk menyebarkan sumber daya:
.NET 9+
Anda mungkin sudah menginstal alat ini. Jalankan dotnet --version dan konfirmasikan laporan versi 9 atau yang lebih baru.
CLI pembangun API Data
dotnet new tool-manifest
dotnet tool install microsoft.dataapibuilder --prerelease
Nota
SQL MCP Server saat ini sedang dalam prarilis. Menggunakan tanda --prerelease memastikan Anda mendapatkan versi terbaru dari Data API Builder dengan semua fitur yang digunakan dalam panduan cepat ini.
PowerShell
Instal PowerShell jika belum diinstal.
dotnet tool install --global PowerShell
Langkah 1: Membuat dan menyebarkan Azure SQL Database
1. Masuk ke Azure
az login
az account set --subscription "<your-subscription-id>"
2. Atur variabel untuk penerapan Anda
$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. Membuat grup sumber daya
az group create \
--name $RESOURCE_GROUP \
--location $LOCATION
4. Buat 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. Mengonfigurasi firewall untuk mengizinkan layanan 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. Buat database
az sql db create \
--resource-group $RESOURCE_GROUP \
--server $SQL_SERVER \
--name $SQL_DATABASE \
--service-objective S0
7. Buat tabel Produk dengan data sampel
Dapatkan string koneksi Anda terlebih dahulu:
$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;"
Buat file skrip SQL create-products.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);
Jalankan menggunakan VISUAL Code, SQL Server Management Studio, atau sqlcmd.
Langkah 2: Mengonfigurasi SQL MCP Server
1. Buat dab-config.json Anda
Menginisialisasi konfigurasi:
dab init `
--database-type mssql `
--connection-string "@env('MSSQL_CONNECTION_STRING')" `
--host-mode Production `
--config dab-config.json
2. Tambahkan entitas Produk dengan deskripsi
dab add Products `
--source dbo.Products `
--permissions "anonymous:read" `
--description "Product catalog with pricing, category, and inventory information"
3. Berikan konteks agen AI dengan deskripsi bidang
Tambahkan deskripsi bidang untuk membantu agen AI memahami skema database Anda:
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"
Langkah 3: Menyebarkan SQL MCP Server ke Azure Container Apps
1. Buat Azure Container Registry dan buat gambar kustom
Buat registri kontainer dan buat gambar kustom dengan konfigurasi Anda yang disematkan:
$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. Buat Dockerfile
Buat file bernama Dockerfile di folder yang sama dengan :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. Bangun dan dorong citra
az acr build `
--registry $ACR_NAME `
--image sql-mcp-server:1 `
.
4. Buat lingkungan Aplikasi Kontainer
$CONTAINERAPP_ENV = "sql-mcp-env"
$CONTAINERAPP_NAME = "sql-mcp-server"
az containerapp env create `
--name $CONTAINERAPP_ENV `
--resource-group $RESOURCE_GROUP `
--location $LOCATION
5. Sebarkan kontainer SQL MCP Server
$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
Grup sumber daya Anda harus menyerupai contoh berikut:
6. Dapatkan URL titik akhir MCP Anda
$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"
Simpan URL ini - Anda menggunakannya untuk menyambungkan dari klien MCP.
7. Uji penyebaran Anda
curl "https://$MCP_URL/health"
Anda akan melihat respons yang baik.
Menghubungkan dari klien MCP
Server MCP SQL Anda sekarang disebarkan dan siap digunakan. Berikut cara terhubung dari berbagai klien:
Visual Studio Code (Visual Studio Code)
Ikuti panduan Mulai Cepat dengan Visual Studio Code dan gunakan URL server MCP yang Anda sebarkan alih-alih berjalan secara lokal.
Dari Microsoft Foundry
Untuk menambahkan server MCP Anda sebagai Alat MCP Kustom, ikuti panduan Mulai Cepat dengan Microsoft Foundry .
Klien MCP lainnya
Gunakan URL server MCP dari Langkah 3.6 untuk menyambungkan dari klien yang kompatibel dengan MCP.
Pemantauan dan pemecahan masalah
Menampilkan log aplikasi container
az containerapp logs show \
--name $CONTAINERAPP_NAME \
--resource-group $RESOURCE_GROUP \
--follow
Memeriksa kesehatan titik akhir MCP
curl "https://$MCP_URL/health"
Masalah umum
Kesalahan koneksi gagal
- Pastikan pengaturan ingress pada Container Apps diatur ke
external - Verifikasi string koneksi SQL sudah benar
- Memeriksa aturan firewall di Azure SQL
Tidak ada data yang dikembalikan
- Verifikasi bahwa tabel Produk telah dibuat dan diisi
- Periksa izin entitas di
dab-config.json - Tinjau log Container Apps untuk kesalahan
Kinerja terlalu lambat
- Pertimbangkan untuk meningkatkan alokasi CPU/memori
- Periksa apakah Anda perlu meningkatkan replika
- Memeriksa metrik Application Insights
Praktik terbaik keamanan untuk produksi
- Mengaktifkan autentikasi - Mengonfigurasi autentikasi ID Microsoft Entra alih-alih akses anonim
- Menggunakan identitas terkelola - Biarkan Container Apps mengautentikasi ke SQL menggunakan identitas terkelola
- Menerapkan CORS - Membatasi domain mana yang dapat mengakses server MCP Anda
- Mengaktifkan pembatasan tarif - Melindungi dari penyalahgunaan
- Menggunakan Azure Key Vault - Menyimpan string koneksi dengan aman
- Memantau dengan Application Insights - Melacak penggunaan dan performa
- Membatasi izin - Hanya berikan tingkat akses yang diperlukan
Membersihkan sumber daya
Setelah selesai, hapus grup sumber daya untuk menghapus semua sumber daya:
az group delete --name $RESOURCE_GROUP --yes --no-wait
Skrip sampel lengkap
Berikut adalah skrip PowerShell lengkap yang melakukan semua langkah-langkah dalam panduan memulai cepat ini. Sebelum berjalan, perbarui ID penyewa, ID langganan, dan variabel kata sandi.
Petunjuk / Saran
Untuk penyebaran siap produksi dengan autentikasi identitas terkelola, pemeriksaan kesehatan, dan pembersihan otomatis, lihat skrip lingkungan demo penyusun API Data.
# ============================================
# 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