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

By | Haziran 18, 2026

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_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:

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

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir