快速入门:将 SQL MCP 服务器与 Azure 容器应用配合使用

重要

SQL MCP Server 以预览版提供,本文档和引擎实现在此评估期间可能会更改。

本快速入门介绍如何将 SQL MCP Server 部署到 Azure 容器应用。 部署后,可以从 Visual Studio Code(VS Code)、Microsoft Foundry 或任何其他模型上下文协议(MCP)客户端作为远程服务器终结点连接到它。

显示 SQL MCP 服务器部署到 Azure 容器应用程序的图表。

先决条件

Azure 订阅

你需要一个有效的 Azure 订阅。 如果您没有账号

https://azure.microsoft.com/free

Azure CLI

安装 Azure CLI 以部署资源:

Windows操作系统

winget install Microsoft.AzureCLI

macOS

brew install azure-cli

.NET 9+

可能已安装此工具。 运行 dotnet --version 并确认其报告的版本为 9 或更高。

Windows操作系统

winget install Microsoft.DotNet.Runtime.9

数据 API 生成器 CLI

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

注释

SQL MCP Server 当前处于预发行版中。 使用--prerelease 标志可确保您获取具备本快速入门中使用的所有功能的最新版本数据 API 生成器。

PowerShell

安装 PowerShell(如果尚未安装)。

dotnet tool install --global PowerShell

步骤 1:创建和部署 Azure SQL 数据库

1.登录到 Azure

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

2. 为部署设置变量

$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.创建资源组

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

4.创建 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.配置防火墙以允许 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. 创建数据库

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

7. 使用示例数据创建产品表

首先获取连接字符串:

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

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

使用 VS Code、SQL Server Management Studio 或 sqlcmd 执行它。

步骤 2:配置 SQL MCP 服务器

1. 创建你的 dab-config.json

初始化配置:

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

2.添加包含说明的产品实体

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

3.提供具有字段说明的 AI 代理上下文

添加字段说明以帮助 AI 代理了解数据库架构:

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"

步骤 3:将 SQL MCP 服务器部署到 Azure 容器应用

1. 创建容器应用环境

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

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

2. 创建 base64 编码的配置

$CONFIG_JSON = Get-Content dab-config.json -Raw
$CONFIG_BYTES = [System.Text.Encoding]::UTF8.GetBytes($CONFIG_JSON)
$CONFIG_BASE64 = [Convert]::ToBase64String($CONFIG_BYTES)

3.部署 SQL MCP 服务器容器

az containerapp create `
  --name $CONTAINERAPP_NAME `
  --resource-group $RESOURCE_GROUP `
  --environment $CONTAINERAPP_ENV `
  --image mcr.microsoft.com/azure-databases/data-api-builder:latest `
  --target-port 5000 `
  --ingress external `
  --min-replicas 1 `
  --max-replicas 3 `
  --secrets "mssql-connection-string=$CONNECTION_STRING" "dab-config-base64=$CONFIG_BASE64" `
  --env-vars "MSSQL_CONNECTION_STRING=secretref:mssql-connection-string" "DAB_CONFIG_BASE64=secretref:dab-config-base64" `
  --cpu 0.5 `
  --memory 1.0Gi

资源组应类似于以下示例:

部署后 Azure 门户资源组的屏幕截图。

4. 获取 MCP 端点 URL

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

保存此 URL - 使用它从 MCP 客户端进行连接。

5. 测试部署

curl "https://$MCP_URL/health"

应会看到一个正常的响应。

从 MCP 客户端进行连接

SQL MCP Server 现已部署并可供使用。 下面介绍如何从各种客户端进行连接:

Visual Studio Code (VS Code)

按照 VS Code 快速入门指南 进行操作,并使用您已部署的 MCP 服务器 URL,而不是在本地运行。

来自微软工坊

若要将 MCP 服务器添加为自定义 MCP 工具,请按照 Microsoft Foundry 快速入门指南 进行操作。

其他 MCP 客户端

使用步骤 3.4 中的 MCP 服务器 URL 从任何 MCP 兼容的客户端进行连接。

监视和故障排除

查看容器应用日志

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

检查 MCP 终结点运行状况

curl "https://$MCP_URL/health"

常见问题

连接失败错误

  • 确保容器应用入口设置为 external
  • 验证 SQL 连接字符串是否正确
  • 检查 Azure SQL 上的防火墙规则

未返回任何数据

  • 验证产品表是否已创建并填充
  • dab-config.json 中检查实体权限
  • 查看容器应用日志中出现的错误

性能缓慢

  • 考虑增加 CPU/内存分配
  • 检查是否需要纵向扩展副本
  • 查看 Application Insights 指标

生产安全最佳做法

  • 启用身份验证 - 配置 Microsoft Entra ID 身份验证,而不是匿名访问
  • 使用托管标识 - 让容器应用使用托管标识向 SQL 进行身份验证
  • 实现 CORS - 限制哪些域可以访问 MCP 服务器
  • 启用速率限制 - 防止滥用
  • 使用 Azure Key Vault - 安全地存储连接字符串
  • 使用 Application Insights 进行监视 - 跟踪使用情况和性能
  • 限制权限 - 仅授予必要的访问级别

清理资源

完成后,删除资源组以删除所有资源:

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

外部内容