SQL MCP Server: 3 Adımda Güvenli ve Kolay Kurulum

Çağlar Özenç 14 dk okuma

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

  1. SQL MCP Server nedir?
  2. Neden SQL MCP Server? NL2SQL’in problemi
  3. Data API Builder nedir, nasıl kurulur?
  4. SQL MCP Server’ın sunduğu 7 araç
  5. Mimari nasıl çalışır?
  6. Başlamadan önce: ön gereksinimler
  7. Adım 1: Azure SQL Database oluşturup veri ekleyin
  8. Adım 2: SQL MCP Server’ı yapılandırın
  9. Adım 3: Azure Container Apps’e dağıtın
  10. On-premise dağıtım: kendi sunucunuzda Docker ile
  11. MCP istemcilerinden bağlanma
  12. Üretim için güvenlik önerileri
  13. Sorun giderme
  14. Temizlik
  15. Sık sorulan sorular (SSS)
  16. 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ıyla aggregate_records, stored procedure tabanlı custom-tool ve 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 using ile çağırmazsınız; ayrı bir süreç (process) olarak çalışır. Yerelde dab start ile, ü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ı dotnet komut setini sunar. SDK kurulduktan sonra dotnet tool install adımı işletim sisteminden bağımsız hale gelir. (Not: dotnet tool ve dotnet new komutları 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_entitiesKullanılabilir veri nesnelerini (entity) keşfeder
read_recordsVeri okur (sonuçlar önbelleğe alınır)
create_recordYeni kayıt oluşturur
update_recordMevcut kaydı günceller
delete_recordKayıt siler
execute_entityStored procedure çalıştırır
aggregate_recordsToplama (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:

SQL MCP Server, REST · GraphQL · MCP arayüzlerini tek yapılandırmadan üretir; ajan veritabanına hep DAB katmanından erişir.

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 --version ile 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ğin Category iç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

On-premise dağıtım: SQL MCP Server’ı kendi sunucunuzda Docker ile çalıştırır, önüne TLS sonlandıran bir reverse proxy koyarsınız.

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-stdio ile SQL MCP Server’ı stdio taşımasıyla çalıştırabilirsiniz; MCP istemcisi süreci doğrudan başlatır.

Azure mı, on-premise mi?

KonuAzure Container AppsOn-premise (Docker)
VeritabanıAzure SQLYerel SQL Server (SQL veya Windows auth)
İmaj kaydıAzure Container RegistryYerelde docker build / özel registry
Dış erişim + TLSIngress otomatik hallederSiz (nginx / IIS reverse proxy)
Kimlik doğrulamaEntra ID kolayEntra ID (hibrit) ya da ağ + proxy ile
İzlemeApplication InsightsYerel 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-Id baş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çin delete_record‘u, büyük tablolarda aggregate_records‘u kapatabilirsiniz.
  • Application Insights ile kullanımı ve performansı izleyin.

Sorun giderme

  • “Connection failed”: Ingress’in external olduğundan, bağlantı dizesinin doğruluğundan ve Azure SQL güvenlik duvarı kurallarından emin olun.
  • Veri gelmiyor: Products tablosunun 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 🙂

Kaynaklar

Yorum yaz

Yorumlar onaydan sonra yayınlanır. E-posta adresiniz yayınlanmaz ve üçüncü tarafla paylaşılmaz.