
Merhaba arkadaşlar,
Bir yapay zeka ajanının şirket veritabanınızla konuşmasını istediğinizde aslında iki ayrı endişeniz olur: doğru veriyi getirebilecek mi, bir de yanlışlıkla zarar verir mi? Piyasadaki çözümlerin çoğu bu işi “modele SQL yazdırarak” hallediyor. Ben bunu üretim ortamında hiçbir zaman güvenli bulmadım; çünkü modelin ürettiği sorgu her seferinde değişebiliyor. SQL MCP Server bu noktada farklı bir yol tutuyor, bence doğru olan yolu.
Bu rehberde SQL MCP Server’ın ne olduğunu, Data API Builder ile nasıl kurulduğunu ve iki ayrı senaryoda adım adım nasıl dağıtıldığını göstereceğim: önce Azure Container Apps üzerinde, sonra da kendi sunucunuzda (on-premise) Docker ile. Sonunda elinizde, VS Code veya Microsoft Foundry başta olmak üzere herhangi bir MCP istemcisinden bağlanabileceğiniz bir uzak MCP adresiniz olacak. Başlayalım 🙂
Özet — kısaca SQL MCP Server
- SQL MCP Server, Data API Builder’ın (1.7+) bir parçasıdır; AI ajanlarını SQL veritabanına güvenle bağlar.
- NL2SQL yerine NL2DAB: her zaman aynı girdiye aynı T-SQL’i üretir, öngörülebilirdir.
- Yalnızca veri işlemleri (DML); şema değiştiremez (DDL) — bu bir güvenlik tasarımıdır.
- Hem Azure Container Apps‘e hem de kendi sunucunuza (on-premise, Docker) dağıtılır.
İçindekiler
- SQL MCP Server nedir?
- Neden SQL MCP Server? NL2SQL’in problemi
- Data API Builder nedir, nasıl kurulur?
- SQL MCP Server’ın sunduğu 7 araç
- Mimari nasıl çalışır?
- Başlamadan önce: ön gereksinimler
- Adım 1: Azure SQL Database oluşturup veri ekleyin
- Adım 2: SQL MCP Server’ı yapılandırın
- Adım 3: Azure Container Apps’e dağıtın
- On-premise dağıtım: kendi sunucunuzda Docker ile
- MCP istemcilerinden bağlanma
- Üretim için güvenlik önerileri
- Sorun giderme
- Temizlik
- Sık sorulan sorular (SSS)
- Kapanış
SQL MCP Server nedir?
SQL MCP Server, yapay zeka ajanlarının SQL veritabanlarıyla güvenli biçimde çalışmasını sağlayan, Microsoft’un açık kaynak ve ücretsiz motorudur. Önemli bir ayrıntı var: bu ayrı bir ürün değil. Zaten bildiğimiz Data API Builder (DAB) içine, 1.7 sürümünden itibaren gelen bir yetenek.
Bunun pratik karşılığı şu: SQL MCP Server, DAB’in yıllardır olgunlaşmış altyapısını olduğu gibi kullanıyor. Yani entity (varlık) soyutlaması, rol tabanlı erişim (RBAC), önbellekleme ve telemetri… Hepsi hazır geliyor. REST, GraphQL ve MCP üçü de aynı
dab-config.json
dosyasından, aynı güvenlik kurallarıyla besleniyor. Bir kez yapılandırıyorsunuz, üç arayüz birden ortaya çıkıyor.
Bir adım geri çekilip MCP’nin kendisine bakalım. Model Context Protocol (MCP), yapay zeka ajanlarının dış araçları nasıl keşfedip çağıracağını tanımlayan bir standart. Buradaki “araç” tek bir işlem demek: bir kayıt oluşturmak, veri okumak gibi. Her araç kendi girdisini, çıktısını ve davranışını tarif ettiği için ajan karşısındaki sistemi tahmin etmek zorunda kalmıyor. Sözleşme baştan belli.
Sürüm notu (GA / Preview): SQL MCP Server, Data API Builder 1.7 ile kullanıma hazır durumda. En güncel yetenekler için Microsoft 2.0 önizleme (preview) sürümünü öneriyor. Bu rehberde resmi quickstart’ı izleyerek
2.0.1-rc(release candidate) imajını kullanacağız. Dolayısıylaaggregate_records, stored procedure tabanlıcustom-toolve MCP için OpenTelemetry izleme gibi bazı ileri özellikler hala önizleme kapsamında ve genel kullanıma (GA) çıkmadan değişebilir. Bir POC için sorun yok; üretime almadan önce bunu hatırlayın.
Neden SQL MCP Server? NL2SQL’in problemi
SQL MCP Server’ı anlamanın en kolay yolu, çözmediği problemden başlamak. Piyasadaki pek çok veritabanı MCP sunucusu kullanıcının cümlesini doğrudan SQL’e çeviriyor; kısaca NL2SQL. İlk bakışta pratik görünür, ama bir açığı var: dil modellerinin çıktısı her zaman aynı olmaz. Aynı soruyu iki kez sorduğunuzda farklı, hatta gözden kaçacak kadar ince hatalı bir sorgu üretebilir. İşin kötüsü, kullanıcıların yapay zekadan en çok beklediği karmaşık sorgular, tam da en çok kontrol gerektiren sorgulardır.
SQL MCP Server bilinçli olarak NL2SQL’i desteklemiyor. Bunun yerine, isteği DAB’in güvenli varlık katmanından ve dahili Query Builder’ından geçiriyor. Sonuç, her zaman aynı girdiye aynı çıktıyı veren, düzgün biçimlendirilmiş T-SQL oluyor. Microsoft bu yaklaşıma NL2DAB diyor. Pratikte size kazandırdığı şey öngörülebilirlik: üreteceği sorguyu test edebilir, otomasyona güvenle bırakabilirsiniz.
İkinci bir tasarım kararı daha var ve üretim için kritik: SQL MCP Server veriyle çalışır, şemayla değil. Ajan kayıt ekleyip okuyabilir, güncelleyip silebilir, stored procedure çalıştırabilir (yani DML işlemleri). Ama tablo oluşturup değiştiremez (DDL). İş açısından kritik bir veritabanında bir ajanın yanlışlıkla
DROP TABLE
çalıştırması ihtimalini düşünün; bu sınır tam da onun için var.
Üçüncüsü, şemanız dışarı sızmaz. Hangi tablonun, view’ın veya stored procedure’ün açılacağına siz karar verirsiniz. Sütunlara takma ad verebilir, alanları rollere göre kısıtlayabilirsiniz. DAB rol farkındalıklı çalıştığı için bir rolün erişmesine izin verilmeyen hiçbir şeyi göstermez. RBAC, önbellek ve telemetri ise zaten kutudan çıkıyor; REST, GraphQL ve MCP’de aynı güvenlik tutarlı biçimde geçerli oluyor.
Data API Builder nedir, nasıl kurulur?
SQL MCP Server’ı kurmak demek, aslında Data API Builder’ı kurmak demek. O yüzden temeli netleştirelim.
Tek cümleyle: Data API Builder, veritabanınızı (Azure SQL, SQL Server, PostgreSQL, MySQL, Cosmos DB) kod yazmadan, tek bir JSON yapılandırma dosyasıyla REST + GraphQL + MCP API’sine dönüştürür. Açık kaynak ve ücretsizdir.
Normalde bir veritabanının üstüne API yazarken controller’lar, sorgular, yetkilendirme ve önbelleği elle kodlarsınız. DAB’de bunların hiçbirini yazmıyorsunuz. Ona hangi tabloyu, hangi rolün, hangi izinle göreceğini söylüyorsunuz; gerisini motor hallediyor. Sizin işiniz
dab-config.json
dosyasını yönetmekle sınırlı.
Küçük ama önemli ayrım: DAB bir kütüphane değil, bir uygulama. Projenizin içine
usingile çağırmazsınız; ayrı bir süreç (process) olarak çalışır. Yereldedab startile, üretimde bir konteyner olarak.
DAB’i edinmenin 3 yolu
İyi haber şu: DAB CLI kurulumu Windows, macOS ve Linux’ta birebir aynı. İşletim sistemine göre değişen tek adım, önce .NET 9 SDK’sını kurmak.
Sisteminize uygun .NET 9 SDK komutunu seçin:
Windows · winget (PowerShell)winget install Microsoft.DotNet.SDK.9
macOS · Homebrewbrew install dotnet@9
Linux · Ubuntu/Debiansudo apt-get update
sudo apt-get install -y dotnet-sdk-9.0
# Dağıtımdan bağımsız alternatif — her Linux'ta çalışır:
curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --channel 9.0
Kurulumu doğrulayın (komut her sistemde aynı):
bashdotnet --version # 9.x veya üstü görmelisiniz
Buradan sonrası tüm işletim sistemlerinde aynı. DAB CLI’ı kurun:
Windows · macOS · Linuxdotnet new tool-manifest
dotnet tool install microsoft.dataapibuilder
dab --version # çalışıyorsa DAB'e sahipsiniz 🎉
Neden aynı? DAB CLI bir .NET aracıdır; .NET 9 SDK her platformda aynı
dotnetkomut setini sunar. SDK kurulduktan sonradotnet tool installadımı işletim sisteminden bağımsız hale gelir. (Not:dotnet toolvedotnet newkomutları için yalnızca runtime değil, SDK gerekir.)
Bu Yol 1‘di ve öğrenmek için en rahatı. İki yol daha var. Yol 2, Docker konteyneri: hiçbir şey kurmadan hazır imajı çekersiniz; bu komut da üç işletim sisteminde aynıdır ve birazdan Azure’a dağıtırken tam olarak bunu kullanacağız:
bashdocker pull mcr.microsoft.com/azure-databases/data-api-builder:2.0.1-rc
Yol 3, kaynaktan: içine bakmak veya katkı vermek isterseniz proje github.com/Azure/data-api-builder adresinde. Çoğu kişinin buna ihtiyacı olmaz.
İlk çalıştırma
“Gerçekten çalışıyor mu” diye bakmak isterseniz üç komut yeter:
bashdab init --database-type mssql \
--connection-string "@env('MSSQL_CONNECTION_STRING')" \
--host-mode development
dab add Products --source dbo.Products --permissions "anonymous:read"
dab start
dab start
dediğiniz an makinenizde şu adresler ayağa kalkar:
- REST →
http://localhost:5000/api/Products - GraphQL →
http://localhost:5000/graphql - MCP →
http://localhost:5000/mcp(bizim asıl ilgilendiğimiz)
Yani “DAB kurmak” pratikte şu kadar: .NET 9 +
dotnet tool install microsoft.dataapibuilder
. Gerisi bir JSON dosyası ve
dab start
.
SQL MCP Server’ın sunduğu 7 araç
MCP’yi etkinleştirdiğinizde araçları tek tek tanımlamazsınız; SQL MCP Server bunları yapılandırmanıza bakarak otomatik üretir. Bu yaklaşım küçük şemalardan çok büyük veritabanlarına kadar rahat ölçeklenir. Ortaya çıkan yedi DML aracı şunlar:
| Araç | Ne işe yarar |
|---|---|
describe_entities
| Kullanılabilir veri nesnelerini (entity) keşfeder |
read_records
| Veri okur (sonuçlar önbelleğe alınır) |
create_record
| Yeni kayıt oluşturur |
update_record
| Mevcut kaydı günceller |
delete_record
| Kayıt siler |
execute_entity
| Stored procedure çalıştırır |
aggregate_records
| Toplama (aggregation) sorguları yapar (2.0 önizleme) |
Bu araçların hepsi RBAC’a, varlık izinlerine ve politikalara uyar. Ajan veritabanınıza asla doğrudan dokunmaz; her zaman güvenli DAB katmanından geçer.
Protokol tarafında bir ayrıntı: SQL MCP Server, MCP protokol sürümü 2025-06-18’i sabit varsayılan olarak uygular. İki taşıma (transport) destekler: standart barındırma için streamable HTTP, yerel ve CLI senaryoları için stdio.
Mimari nasıl çalışır?
Akışı zihninizde şöyle canlandırın:

Azure Container Apps tarafındaki akış da şu mantıkta ilerliyor: yapılandırmanızı (
dab-config.json
) bir Docker imajına gömüyorsunuz, imajı Azure Container Registry (ACR)‘de derliyorsunuz, ardından bunu Azure Container Apps‘te internete açık bir konteyner olarak çalıştırıyorsunuz. Sonuçta elinizde
https://<host>/mcp
biçiminde bir uzak adres oluyor.
Başlamadan önce: ön gereksinimler
Kuruluma geçmeden makinenizde şunlar olmalı:
- Aktif bir Azure aboneliği (yoksa ücretsiz hesap açabilirsiniz)
- Azure CLI — Windows:
winget install Microsoft.AzureCLI· macOS:brew install azure-cli - .NET 9+ —
dotnet --versionile doğrulayın - Data API Builder CLI:
bashdotnet new tool-manifest
dotnet tool install microsoft.dataapibuilder
- PowerShell (quickstart’taki betikler PowerShell söz dizimini kullanıyor)
Not: Aşağıdaki komutlarda Azure CLI çağrıları platform bağımsız. Ama değişken tanımları ve çok satırlı blokların bir kısmı PowerShell söz dizimindedir (satır devamı için
`). macOS veya Linux’ta çalışıyorsanız bu değişkenleri kendi shell’inize uyarlamayı unutmayın.
Adım 1: Azure SQL Database oluşturup veri ekleyin
Önce Azure’a giriş yapın ve değişkenleri tanımlayın:
bashaz login
az account set --subscription "<your-subscription-id>"
powershell$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!>"
Kaynak grubunu, SQL sunucusunu, güvenlik duvarı kuralını ve veritabanını oluşturun:
bashaz 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
az sql db create \
--resource-group $RESOURCE_GROUP --server $SQL_SERVER \
--name $SQL_DATABASE --service-objective S0
Bağlantı dizesini hazırlayın ve örnek bir
Products
tablosu oluşturun:
powershell$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;"
sqlCREATE 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);
Bu betiği VS Code, SQL Server Management Studio ya da
sqlcmd
ile çalıştırabilirsiniz.
Adım 2: SQL MCP Server’ı yapılandırın
Bu adımda hiç kod yazmıyoruz; DAB CLI ile bir
dab-config.json
üretiyoruz.
powershelldab init `
--database-type mssql `
--connection-string "@env('MSSQL_CONNECTION_STRING')" `
--host-mode Production `
--config dab-config.json
Products
varlığını bir açıklamayla, anonim okuma izniyle ekleyin:
powershelldab add Products `
--source dbo.Products `
--permissions "anonymous:read" `
--description "Product catalog with pricing, category, and inventory information"
İpucu: Alan açıklamaları, dil modellerinin şemanızı anlamasına gerçekten katkı yapar. Quickstart her sütun için
dab update Products --fields.name ... --fields.description ...ile açıklama ekliyor. ÖrneğinCategoryiçin “Product category (Electronics, Furniture, Office Supplies, Appliances)”. Bu küçük dokunuş, ajanın doğru aracı doğru parametrelerle çağırmasını kolaylaştırır.
Dikkat: bağlantı dizesini doğrudan yazmadık,
@env('MSSQL_CONNECTION_STRING')
ile bir ortam değişkenine bağladık. Konteyner dağıtımında bunu bir secret olarak vereceğiz.
Adım 3: Azure Container Apps’e dağıtın
3.1 Container Registry oluşturun
powershell$ACR_NAME = "acrsqlmcp$(Get-Random -Minimum 1000 -Maximum 9999)"
az acr create `
--resource-group $RESOURCE_GROUP --name $ACR_NAME `
--sku Basic --admin-enabled true
3.2 Dockerfile yazın
dab-config.json
ile aynı klasöre bir
Dockerfile
koyun. Hazır DAB imajını temel alıp yapılandırmamızı içine kopyalıyoruz:
DockerfileFROM mcr.microsoft.com/azure-databases/data-api-builder:2.0.1-rc
COPY dab-config.json /App/dab-config.json
3.3 İmajı derleyip gönderin
powershellaz acr build --registry $ACR_NAME --image sql-mcp-server:1 .
3.4 Container Apps ortamı oluşturun
powershell$CONTAINERAPP_ENV = "sql-mcp-env"
$CONTAINERAPP_NAME = "sql-mcp-server"
az containerapp env create `
--name $CONTAINERAPP_ENV --resource-group $RESOURCE_GROUP --location $LOCATION
3.5 Konteyneri dağıtın
ACR kimlik bilgilerini alıp konteyneri internete açık (
ingress external
) olarak çalıştırıyoruz. Bağlantı dizesini secret olarak verip ortam değişkenine
secretref
ile bağlıyoruz:
powershell$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
3.6 MCP adresinizi alın
powershell$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"
Bu adresi saklayın; MCP istemcilerinden bağlanırken kullanacaksınız.
3.7 Dağıtımı test edin
powershellcurl "https://$MCP_URL/health"
Sağlıklı bir yanıt alıyorsanız SQL MCP Server’ınız ayakta demektir 🙂
On-premise dağıtım: kendi sunucunuzda Docker ile

SQL MCP Server’ı Azure’a bağımlı sanmak kolay, ama aslında kendi kendine barındırılan bir motor. Aynı
dab-config.json
ve aynı konteyner imajı, kendi sunucunuzda da çalışır. Değişen sadece üç başlık var: veritabanı bağlantısı, imajı nerede derleyip çalıştırdığınız, bir de dış erişim ile TLS’i kimin üstlendiği.
Azure bölümündeki Dockerfile’ın aynısını kullanıyoruz; tek fark, Azure Container Registry yerine imajı yerelde derleyip yerelde çalıştırmamız.
1. İmajı yerelde derleyin (Adım 3.2’deki
Dockerfile
ile aynı klasörde):
bashdocker build -t sql-mcp-server:1 .
2. Konteyneri çalıştırın — bağlantı dizesini kendi SQL Server’ınıza yöneltin:
bashdocker run -d -p 5000:5000 \
-e MSSQL_CONNECTION_STRING="Server=SQLSERVER01;Database=ProductsDB;User ID=appuser;Password=***;TrustServerCertificate=true;" \
--name sql-mcp-server \
sql-mcp-server:1
Windows (entegre) kimlik doğrulaması kullanıyorsanız bağlantı dizesini
Trusted_Connection
ile kurarsınız:
connection stringServer=SQLSERVER01;Database=ProductsDB;Trusted_Connection=True;TrustServerCertificate=true;
3. Önüne TLS koyun. Azure’da Container Apps ingress’inin sizin yerinize yaptığı sertifika ve dış erişim işini burada bir reverse proxy (nginx, IIS, Traefik) üstlenir. HTTPS’i orada sonlandırıp
https://<sunucu>/mcp
adresini dışarı açarsınız. İstemci tarafında hiçbir şey değişmez; MCP adresiniz yine
https://<host>/mcp
biçiminde olur.
Tamamen yerel mi istiyorsunuz? Tek makinede, ağsız bir masaüstü ajan senaryosunda Docker’a bile gerek yok.
dab start --mcp-stdioile SQL MCP Server’ı stdio taşımasıyla çalıştırabilirsiniz; MCP istemcisi süreci doğrudan başlatır.
Azure mı, on-premise mi?
| Konu | Azure Container Apps | On-premise (Docker) |
|---|---|---|
| Veritabanı | Azure SQL | Yerel SQL Server (SQL veya Windows auth) |
| İmaj kaydı | Azure Container Registry | Yerelde
docker build
/ özel registry |
| Dış erişim + TLS | Ingress otomatik halleder | Siz (nginx / IIS reverse proxy) |
| Kimlik doğrulama | Entra ID kolay | Entra ID (hibrit) ya da ağ + proxy ile |
| İzleme | Application Insights | Yerel dosya logları / kendi OTEL toplayıcınız |
Kısacası motor aynı; etrafındaki Azure servislerini on-premise’de siz sağlıyorsunuz. En kritik iki başlık TLS ve kimlik doğrulama; yani Container Apps’in sizin yerinize hallettiği işler.
MCP istemcilerinden bağlanma
- VS Code: Resmi “Quickstart with VS Code” rehberini izleyin; yerel adres yerine dağıttığınız MCP adresini girin.
- Microsoft Foundry: Sunucuyu bir Custom MCP Tool olarak ekleyin (Foundry quickstart’ında anlatılıyor).
- Diğer istemciler: 3.6’daki adresle herhangi bir MCP uyumlu istemciden bağlanabilirsiniz.
- Yerel test için MCP Inspector: HTTP uç noktalarında Inspector’ı proxy modunda çalıştırmak, CORS ve
Mcp-Session-Idbaşlık sorunlarını aşmanıza yardımcı olur:
bashnpx -y @modelcontextprotocol/inspector https://<host>/mcp
Üretim için güvenlik önerileri
Quickstart hızlı başlamak için
anonymous:read
kullanıyor. Gerçek bir üretim senaryosunda mutlaka şunları yapın:
- Kimlik doğrulama: Anonim erişim yerine Microsoft Entra ID kullanın.
- Managed Identity: Container Apps’in SQL’e managed identity ile bağlanmasını sağlayın; bağlantı dizesinde parola taşımayın.
- Azure Key Vault: Bağlantı dizesi gibi sırları Key Vault’ta saklayın (DAB
@akv(...)fonksiyonunu destekler). - CORS ve rate limiting: Hangi domain’lerin eriştiğini kısıtlayın, kötüye kullanıma karşı sınır koyun.
- İzinleri daraltın:
dab-config.json‘da yalnızca gereken araçları açık tutun. Örneğin veri kaybını önlemek içindelete_record‘u, büyük tablolardaaggregate_records‘u kapatabilirsiniz. - Application Insights ile kullanımı ve performansı izleyin.
Sorun giderme
- “Connection failed”: Ingress’in
externalolduğundan, bağlantı dizesinin doğruluğundan ve Azure SQL güvenlik duvarı kurallarından emin olun. - Veri gelmiyor:
Productstablosunun oluşturulup doldurulduğunu, varlık izinlerini ve logları kontrol edin:
bashaz containerapp logs show --name $CONTAINERAPP_NAME --resource-group $RESOURCE_GROUP --follow
- Yavaşlık: CPU/bellek artırın veya replika sayısını yükseltin; Application Insights metriklerine bakın.
Temizlik
Denemeyi bitirdiyseniz tüm kaynakları tek komutla silebilirsiniz:
bashaz group delete --name $RESOURCE_GROUP --yes --no-wait
Sık sorulan sorular (SSS)
SQL MCP Server ücretli mi?
Hayır. SQL MCP Server, Data API Builder’ın bir parçası olarak gelir ve DAB açık kaynak ve ücretsizdir. Ücretlendirme yalnızca kullandığınız Azure kaynaklarında (SQL Database, Container Apps, Container Registry) geçerlidir.
SQL MCP Server ile NL2SQL arasındaki fark nedir?
NL2SQL, kullanıcı cümlesini doğrudan SQL’e çevirir ve sonuç her seferinde değişebilir. SQL MCP Server ise isteği Data API Builder’ın güvenli katmanından geçirip her zaman aynı çıktıyı veren T-SQL üretir. Bu yaklaşım NL2DAB olarak adlandırılır ve öngörülebilir olduğu için üretime daha uygundur.
Hangi veritabanlarını destekliyor?
Data API Builder; Azure SQL, SQL Server, PostgreSQL, MySQL ve Azure Cosmos DB ile çalışır. Bu yazıdaki örnek Azure SQL üzerinedir.
SQL MCP Server şema değiştirebilir mi (CREATE, ALTER, DROP)?
Hayır. Tasarım gereği yalnızca veri işlemleriyle (DML) çalışır; şema değişiklikleri (DDL) kapsam dışıdır. Bu, ajanların kritik tabloları yanlışlıkla bozmasını engeller.
Azure Container Apps şart mı?
Hayır. SQL MCP Server kendi kendine barındırılır; yerelde
dab start
ile, ya da herhangi bir konteyner ortamında çalışabilir. Azure Container Apps yalnızca pratik ve ölçeklenebilir bir barındırma seçeneği.
Hangi Data API Builder sürümü gerekiyor?
Temel SQL MCP Server yeteneği 1.7 ile gelir. Bu rehberdeki ileri özellikler için 2.0 önizleme (
2.0.1-rc
) imajını kullandık.
Kapanış
SQL MCP Server, yapay zeka ajanlarını verinize bağlamanın güvenli ve öngörülebilir bir yolu. En çok değer verdiğim tarafı, yeni bir güvenlik modeli öğrenmeye gerek bırakmaması: Data API Builder’ın olgun RBAC, önbellek ve telemetri altyapısı REST, GraphQL ve MCP için tek bir dosyadan çalışıyor. NL2SQL’in belirsizliği yerine her zaman aynı sonucu veren T-SQL üretmesi de bence işin can alıcı noktası.
Bir kez daha hatırlatayım: temel özellik DAB 1.7 ile geliyor; burada kullandığımız
2.0.1-rc
imajı önizleme kanalı, yani bazı ileri yetenekler GA öncesi değişebilir. POC için harika, ama üretime almadan önce Entra ID, Managed Identity ve Key Vault üçlüsünü kurmadan çıkmayın.
Bir sonraki yazıda bu MCP sunucusunu Microsoft Foundry ajanına bağlayıp uçtan uca bir senaryo deneyeceğiz. Sorularınızı ve denemelerinizi yorumlarda bekliyorum. Kendinize iyi bakın, bol üretimli günler 🙂
