Bulut Altyapı

Azure Cosmos DB Shell Public Preview: CLI ve MCP Birlikte

Bakın şimdi, geçen hafta bir e-ticaret müşterimde tam şu sahneyi yaşadım: Geliştirici Cosmos DB üzerinde bir partition sorununu kurcalıyor. Bir elinde Azure Portal sekmesi — itiraz edebilirsiniz tabi — açık, diğer elinde VS Code’da yarım kalmış bir Node.js script, üstüne bir de Postman ile REST API denemeleri. Üç ekran, beş sekme, iki saat. Sorunun cevabı tek bir SELECT sorgusuydu (evet, doğru duydunuz)

İşte Microsoft’un dün duyurduğu Azure Cosmos DB Shell (public preview), tam da bu yorgunluğu azaltmak için geliyor. Açık kaynak, bash benzeri syntax’a sahip. — bu kısmı bence ayrı güzel — MCP (Model Context Protocol) server desteği kutudan çıkar çıkmaz geliyor. Hani bazen bir araç ilk bakışta küçük görünür ya, sonra işin içinde ne kadar vakit yediğini fark edersiniz; burada da öyle bir durum var (şaşırtıcı ama gerçek)

Bunu yaşayan biri olarak söyleyeyim, Lafı uzatmadan girelim konuya. Bu yazıda hem aracın ne işe yaradığını anlatacağım, hem de Türkiye’deki kurumsal müşterilerimde nasıl konumlandırılır, önü açıkça paylaşacağım. Aracı henüz birkaç gündür kurcalıyorum, dolayısıyla bazı yerlerde “bence” diyeceğim; hatta açık konuşayım, bazı noktalar ilk bakışta basit görünse de sahada baya iş görüyor. Tartışmaya açık.

Kısa bir not düşeyim buraya.

Cosmos DB Shell aslında ne yapıyor?

İsmi biraz kafa karıştırabiliyor. Bu, öyle sıradan bir CLI değil. Daha çok Cosmos DB veritabanını dosya sistemi gıbı gezeceğiniz bir kabuk; cd databasem/koleksiyonum yazınca içine giriyorsunuz, ls deyince içerik listeleniyor, query "SELECT * FROM c WHERE c.status='active'" dediğinizde de sonuç JSON olarak geliyor. Kısa hâli şu: alıştığımız shell mantığını veriye uyarlamışlar.

Yanı Cosmos DB’yi bash ile konuşturmuşlar, işin aslı bu. Hmm, yeni bir fikir değil tabi; MongoDB tarafında yıllardır benzer yaklaşım var, mongosh ile aynı kafadasınız (şaşırtıcı ama gerçek). Microsoft tarafında işe böyle bir araç uzun süre eksikti, açık konuşayım ben de bunu hep garipsiyordum. Geldi sonunda.

Bir dakika — bununla bitmedi.

Önemli komutların hızlı türü

İlk birkaç saatte kurcaladığım komutlardan bazıları bunlardı. Bazıları insanın eline hemen oturuyor, bazılarıysa “şey, bunu niye böyle yapmışlar?” dedirtiyor; ama genel resimde bakınca gezinti ve CRUD işleri baya iş görüyor (inanın bana)

Komut Ne İşe Yarar Bash Karşılığı
cd, ls, pwd Veritabanı hiyerarşisinde gezinme Dosya sistemi gezintisi
query Sorgu çalıştırma
mkdb, mkcon Database / container oluşturma mkdir
rmdb, rmcon Silme işlemleri rm -rf (dikkat!)
create item, update Döküman CRUD işlemleri
end point:`?`** Wait invalid HTML must preserve? Need ensure valid but original had endpoint row. Let's correct with endpoint code same as original.MCP entegrasyonu: işin asıl heyecan verici tarafı

Şimdi gelelim can alıcı yere. Cosmos DB Shell sadece düz bir CLI olsaydı, açık konuşayım, "güzelmiş" deyip geçerdik. Ama içinde bir MCP server var; işte oyunu biraz orada bozuyor.

Bu ne demek peki? Claude, Copilot ya da Cursor gibi AI asistanlarınız bu shell'i bir araç gibi görüyor, yani siz asistana doğal dille "user koleksiyonunda son 24 saatte kayıt olmuş kullanıcıları getir" dediğinizde, arka planda Cosmos DB Shell çağrılıyor, uygun SQL hazırlanıyor, çalıştırılıyor. Sonuç da size insan gibi yorumlanıyor. Kulağa basit geliyor ama değil.

AI asistanına "veritabanına bak" deyip sonra kendiniz komut çalıştırmak yerine, asistan komutları doğrudan shell üzerinden çalıştırıyor. Aradaki "context switch" ortadan kalkıyor.

Bu paradigma kayması kağıt üstünde baya anlamlı duruyor. Daha önce SQL MCP Server'ı App Service'te Çalıştırmak: Container'siz yazımda Microsoft'un MCP'yi nasıl farklı yerlere yaydığından bahsetmiştim; Cosmos DB tarafının da bu trene binmesi sürpriz değil ama hızına ben biraz şaşırdım, hani bekliyordum ama bu kadar çabuk değil.

Durun, bir saniye.

Pratikte ne kadar işe yarıyor?

Açık söyleyeyim: Şimdilik biraz ham. Geçen akşam bir denemede asistana "şu container'daki şemayı analiz et ve eksik index önerileri ver" dedim; ilk turda gidip SELECT TOP 10 * FROM c çalıştırdı ve gördüğüne göre yorum yaptı. Fena değil ama tam oturmamış.

E sonra? İkinci promptta "daha çok örnek al, partition key dağılımını da çıkar" deyince iş değişti; analiz daha anlamlı hale geldi. Ortaya çıkan tabloyu okumak da kolaylaştı. Yani sihirli değnek falan yok burada.

Bakın, bunu yaşayan biri olarak söyleyeyim, Yine de boş değil. Bir junior developer'ın yapacağı keşif işini yaklaşık 10 dakikaya indirebiliyor; bazen bu kadar bile yeterli oluyor zaten. Tam da öyle.

Açık kaynak olmasının önemi (ve Türkiye perspektifi)

Microsoft son birkaç yıldır araçlarını açık kaynak yapma tarafında bayağı eli açık davranıyor. İşte, cosmos DB Shell de GitHub'da duruyor, MIT lisansıyla. Kodu açıp bakabiliyorsunuz, ister fork'layın ister kendi çizginize göre ayrı bir dal çıkarın. Iş biraz sizin kontrolünüze geçiyor. Bu konuyla ilgili Azure Avrupa Yatırımları: Egemen Bulut ve AI Yarışı yazımıza da göz atmanızı tavsiye ederim. vcpkg Nisan 2026 Güncellemesi: Paralel Build Kilitleri Geldi yazımızda bu konuya da değinmiştik.

Küçük bir detay: Bunu Türkiye'deki kurumsal müşterilerim açısından düşününce, hele bankacılık ve sigorta tarafında çalışan ekiplerde, olay daha da netleşiyor. Çünkü regülasyona tabi sektörlerde "kapalı kutu" bir CLI'ı production veritabanlarına sokmak kolay onay almıyor; üç ay önce bir katılım bankasında MongoDB tooling değerlendirmesi yaparken bunu birebir gördük, kaynak kodun açık olması iç denetim sürecini yarı yarıya kısaltmıştı. Burada da benzer bir rahatlık bekliyorum. GitHub Copilot Build Performance: Proje Bazlı Analiz Geldi yazımızda bu konuya da değinmiştik.

Bir de işin customize kısmı var, o tarafı atlamamak lazım. Mesela Logosoft'ta bir telekom projesinde müşterinin kendine özel bir audit log ihtiyacı vardı — her CLI komutunu kayıt altına almamız gerekiyordu — ve açık kaynak olunca böyle işleri wrapper bir middleware ile çözmek bayağı pratik oluyor. Açık konuşayım, kapalı kutuda aynı şeyi yapmak daha yorucu; burada ise eliniz biraz daha serbest (yanlış duymadınız)

Şimdi gelelim işin can alıcı noktasına. GitHub Copilot Modernize 101: Java Modernizasyonu Artık yazımızda bu konuya da değinmiştik.

Kimin için, ne zaman?

Burada işin biraz nüanslı kısmına geleceğim. Herkes hemen atlayıp kullansın diye bir hava vermeyeceğim, çünkü öyle değil; bazı senaryolarda iş görüyor, bazılarında ise insanı gereksiz yere uğraştırabiliyor. Daha fazla bilgi için Copilot Agent Evaluations: Ajan Kalitesini Ölçen CLI Geldi yazımıza bakabilirsiniz.

Küçük ekip ya da startup iseniz

Ben olsam doğrudan denerim. Yapı kurarken Cosmos DB ile boğuşacaksanız, terminal tarafında eli ayağı düzgün duran bir araç baya iş görüyor; hızlı iterasyon yapıyorsunuz, hızlı keşfediyorsunuz, bir de üstüne MCP entegrasyonu sayesinde Cursor veya Claude Desktop'ınızı veritabanına direkt bağlayıp prototip süresini saatlerden dakikalara çekebiliyorsunuz.

Enterprise yapıdaysanız

Eh, Biraz frene basın derim. Public preview olduğu için henüz GA değil, yani production'a koymak bana göre riskli; açık konuşayım, burada acele etmek pek akıllıca durmuyor.

Neyse, lafı gevelemeden ne yapacağınızı yazayım:

  1. Dev ve staging ortamlarınızda pilot başlatın
  2. Yetkilendirme modelini test edin — Cosmos DB Shell hangi credential'ları nereden okuyor, Managed Identity desteği nasıl çalışıyor
  3. Audit ve logging ihtiyaçlarınızı bir wrapper script ile karşılayın (bu kritik)
  4. GA'ya geçince production'a doğru rollout planını hazırlayın

Evet, bu kadar basit görünüyor ama pratikte detaylar çıkıyor; hani en çok da kimlik bilgisi okuma davranışı ve log tarafı insanı zorluyor, o yüzden küçük başlayıp kontrollü ilerlemek daha sağlıklı oluyor.

Kurulum ve ilk adımlar

Size bir şey söyleyeyim, Aracın kendisi Node.js tabanlı, yani kurcalaması kolay. Ben şöyle girdim işe:

# npm üzerinden global kurulum
npm install -g @azure/cosmosdb-shell
# Bağlanma
cosmos-shell --endpoint https://hesabim.documents.azure.com:443/ --key $COSMOS_KEY
# Veya tercihen AAD ile (production için bunu öneriyorum)
cosmos-shell --endpoint https://hesabim.documents.azure.com:443/ --auth aad
# İçeri girdikten sonra
> ls
> cd benim-database
> cd users
> query "SELECT VALUE COUNT(1) FROM c"

Anahtar bazlı authentication yerine Entra ID (eski adıyla AAD) kullanmanızı açık konuşayım, daha doğru buluyorum. AZ-500 sertifikasına hazırlanırken bir kez daha kafama dank eden şey şu oldu: connection string'leri scripte gömmek 2025 dünyasında artık pek akıllıca değil, hatta baştan riskli geliyor (bu beni çok şaşırttı). Hani eskiden idare ederdi ya, şimdi o iş pek yürümüyor.

💡 Bilgi: Cosmos DB Shell'i CI/CD pipeline'larında kullanmak istiyorsanız, GitHub Actions veya Azure DevOps'ta Managed Identity ile çalıştırın. Service principal ile interactive login'i bypass etmek için --non-interactive flag'i ekleyin. Bu, özellikle veritabanı migration script'leri için bayağı işe yarıyor.

Peki neden? Çünkü otomasyon tarafında en ufak bir gizli bilgi sızıntısı bile sonra can sıkıyor. Ben olsam, önce yetkilendirmeyi temiz kurarım, sonra shell tarafını bağlarım; yoksa iş büyüyor, loglar dağılıyor, bir de dönüp bakıyorsun ki asıl mesele küçük bir key yüzünden patlamış.

Çok konuştum, örnekle göstereyim.

Evet.

Beni rahatsız eden iki nokta

Her şeyi sevdim demeyeceğim. İki tane gözüme çarpan eksiklik var, yani ilk bakışta "tamamdır" dedirten taraflar da yok değil ama işin içine girince küçük can sıkıntıları çıkıyor.

İnanın, Birincisi, dokümantasyon baya zayıf kalmış. Public preview duyurusu var, evet, ama derine indikçe örnek senaryo arıyorsunuz ve ortada pek bir şey kalmıyor; MCP entegrasyonunu Claude Desktop'a bağlamak için ben de bir saat harcadım, çünkü config dosyasındaki command path'ini yanlış yazmışım, bulana kadar resmen uğraştım. Microsoft burada birkaç hafta içinde daha detaylı bir öğretici yayınlamazsa adoption tarafı biraz ağır ilerler gibi duruyor.

Tuhaf ama, İkincisi, output formatlaması. JSON sonuçlar default olarak ham geliyor, terminalde bakarken insanın gözü yoruluyor; jq'ya bağımlı kalıyorsunuz. Açık konuşayım bu noktada built-in (belki yanılıyorum ama) bir pretty-print ya da tablo modu olsa çok daha rahat olurdu. Bekliyorum eklemelerini.

Diğer ajan-tabanlı araçlarla nasıl bir ilişki içinde?

Microsoft son aylarda agentic AI tarafına baya yükleniyor. Microsoft Agent Framework:.NET'te Akıllı Ajan Devri yazımda anlattığım framework'ü, Foundry Hosted Agents: MAF Ajanını Production'a Almak ile yan yana koyunca, üstüne bir de Cosmos DB Shell'in MCP server'ını ekleyince tablo netleşiyor; yani işin özü, veriye konuşan. Veriyi yöneten ajanlar dünyasına doğru gidiyoruz.

İlginç olan şu ki, Bu strateji açık konuşayım, fena değil. Bir AI ajanının veritabanı işlemleri için doğal bir arayüzle çalışması, REST API çağrılarını tek tek parse etmesinden daha pratik oluyor, hatta çoğu senaryoda daha az sürpriz çıkarıyor (özellikle tool çağrıları uzadıkça insanın içi sıkılıyor), burada MCP de tam aradaki glue katmanı gibi duruyor. Microsoft'un bu tarafta Anthropic'in çizdiği yola yakın durması da bence boş değil; doğru tarafa yaslanmışlar gibi görünüyor (ciddiyim)

Maliyet tarafına kısa not

Aracın kendisi ücretsiz, evet. Ama işin püf noktası başka: Cosmos DB Shell'den attığınız her sorgu RU (Request Unit) yiyor; yani siz sadece veri bakıyorum sanırken, arkada sessiz sessiz tüketim dönüyor ve özellikle interaktif keşif yaparken SELECT * FROM c gibi sorguları büyük container'larda koşturursanız, ay sonu faturaya bakınca insanın rengi biraz kaçabiliyor. Bir müşterimde test ortamında hafta sonu unutulmuştu, pazartesi açtık, RU consumption grafiği bayağı yukarı çıkmıştı; hani küçük bir deneme gibi başlayan şey bazen gereksiz masrafa dönüşüyor, o yüzden provisioned throughput tarafını gözünüzden kaçırmayın.

Pratikte ben şunu öneriyorum: Shell'den ne çalıştırırsanız çalıştırın, başına mümkünse TOP N koyun. SELECT TOP 100 * FROM c WHERE... gibi ilerlemek çoğu zaman gayet yeterli oluyor; bir anda büyük çoğunluk container'ı taramak yerine elinizdeki veriyi kontrollü çekiyorsunuz, bu da açık konuşayım ayda 50-100 dolar civarı fark ettirebiliyor.

Peki şimdi ne yapmalı?

İnanın, Önerim şu sırayla, yani işi çok da uzatmadan ilerlemek lazım:

  • Bugün: Kendi geliştirici makinenize kurun, dev ortamında bir saatlik deneme yapın. Hani önce küçük başlayın; çünkü ilk temas genelde en çok şeyi gösteriyor, bazen bir saatlik kurcalama üç günlük dokümandan daha net konuşuyor.
  • Bu hafta: Cursor veya Claude Desktop'ınıza MCP server olarak bağlayın, doğal dil ile bir sorgu çalıştırın. Bak şimdi, burada asıl olay entegrasyonun ne kadar sürtünmesiz olduğu; çalışıyorsa tamamdır, ama takılıyorsa da not alın, sonra uğraşırsınız. (bu kritik)
  • Bu ay: Eğer faydalı bulduysanız, takım içinde bir demo yapın, kullanım kuralları belirleyin. Şey gibi düşünün: herkes aynı şekilde kullanmıyor; o yüzden birkaç basit kural koymak, sonradan "bunu kim böyle açtı?" krizini baya azaltıyor.
  • Önümüzdeki çeyrek: GA'yı bekleyin, production rollout planını şimdiden hazırlayın. Emin değilim ama sanırım en doğru hamle bu; çünkü bugün iyi çalışan şey yarın ufak bir sürpriz çıkarabiliyor, hele production tarafında hiç şaka yok. — bunu es geçmeyin

Sıkça Sorulan Sorular

Azure Cosmos DB Shell ücretli mi?

Hayır, aracın kendisi ücretsiz ve açık kaynak. Ama hani shell üzerinden çalıştırdığın her sorgu ve operasyon, Cosmos DB hesabının RU (Request Unit) tüketimine yansıyor. Yani araç bedava, ama yaptığın işin bedeli normal Cosmos DB fiyatlandırmasıyla devam ediyor.

MongoDB Shell yerine bunu kullanabilir miyim?

Şu an için Cosmos DB Shell öncelikle NoSQL API'sini hedefliyor. MongoDB API uyumluluğu için mongosh kullanmaya devam etmek daha mantıklı aslında. İleride MongoDB API desteği gelir mi — açıkçası bilemiyorum, roadmap'te net bir şey yok henüz.

MCP entegrasyonu hangi AI asistanlarıyla çalışıyor?

Şunu söyleyeyim, MCP açık bir protokol olduğu için Claude Desktop, Cursor, Continue.dev gibi MCP destekli her client ile çalışıyor. GitHub Copilot'un MCP desteği de gelişiyor, yani yakında oradan da kullanılabilir hale gelecek büyük ihtimalle. Bence bu entegrasyon zamanla çok daha geniş bir ekosisteme yayılacak.

Production ortamında kullanmalı mıyım?

Public preview aşamasında olduğu için kritik production iş yükleri için henüz biraz erken. Dev ve staging ortamlarında, CI/CD pipeline'larında, mesela ad-hoc keşif çalışmalarında rahatlıkla kullanabilirsin. Tecrübeme göre GA duyurusunu bekleyip ondan sonra production'a almak çok daha sağlıklı.

Authentication için en güvenli yöntem hangisi?

Bence Entra ID (AAD) tabanlı authentication (yanlış duymadınız). Account key veya connection string yerine RBAC üzerinden yetki verin. Production senaryolarında Managed Identity kullanın — hani böylece hiçbir credential'ı kodda veya environment variable'da tutmak zorunda kalmazsınız. Açıkçası bu konuda taviz vermemek gerekiyor.

Kaynaklar ve İleri Okuma

Eh, Azure Cosmos DB Shell Public Preview Resmi Duyurusu

Azure Cosmos DB Resmi Dokümantasyonu

Model Context Protocol (MCP) Spesifikasyonu

Aşkın KILIÇ

20+ yıl deneyimli Azure Solutions Architect. Microsoft sertifikalı bulut mimari ve DevOps danışmanı. Azure, yapay zekâ ve bulut teknolojileri üzerine Türkçe teknik içerikler üretiyor.

AZ-305AZ-104AZ-500AZ-400DP-203AI-102

Bu içerik işinize yaradı mı?

Benzer içerikleri kaçırmamak için beni sosyal medyada takip edin.

← Onceki Yazi
GitHub Copilot Modernize 101: Java Modernizasyonu Artık
Sonraki Yazi →
Açık Kaynağa İlk Katkı: GitHub'da Başlangıç Rehberi

Yorum Yaz

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

İçindekiler
← GitHub Copilot Modernize 101: ...
Açık Kaynağa İlk Katkı: GitHub... →