Agent'lar ve Orchestration
MCP Apps'e Hızlı Bakış: Tool'lar Artık Sohbet İçinde Arayüz Döndürüyor
MCP Apps at a Glance
MCP Apps, MCP sunucularının araç sonucunu düz metin yerine sohbetin içinde çalışan sandbox'lı etkileşimli bir HTML arayüzüyle döndürmesini sağlayan resmi uzantı; Ekim 2026 itibarıyla Claude, ChatGPT, VS Code GitHub Copilot, Microsoft 365 Copilot ve Cursor dahil geniş bir host yelpazesinde destekleniyor.
Kullanıcının seçeceği, ayarlayacağı ya da onaylayacağı bir iş varsa MCP aracı metin değil arayüz döndürmeli; MCP Apps bunu host'lar arası güvenli standarda çevirdi.
Anthropic, OpenAI ve Microsoft host'ları standardı destekliyor; host'lar arası özellik farkı ve sohbet içi HTML'in güvenlik yüzeyi hâlâ tartışılıyor.
Zihinsel model
Araç sonucu artık bir mektup değil bir kiosk: model kapıyı açar, kullanıcı ekranda kendisi seçer.
Neden
- Metin sonucu her filtre, sıralama ya da onay için yeni bir model turu ister; arayüz bu döngüyü doğrudan kullanıcıya devreder.
- Şablon araçtan önce ui:// kaynağı olarak bildirildiği için host onu önceden çekip önbelleğe alabilir ve güvenlik incelemesinden geçirebilir.
- Sandbox'lı iframe, varsayılan kapalı ağ erişimi ve loglanabilir JSON-RPC, güvenilmeyen HTML'i sohbet içinde çalıştırılabilir kılar.
Kanıt
MCP-UI kurucuları ile Anthropic ve OpenAI'daki MCP bakımcıları, iki ayrı arayüz yaklaşımını tek açık standartta birleştirmeyi ortak önerdi.
MCP Blog, MCP Apps duyurusu, 2025Resmi destek tablosu Claude, ChatGPT, VS Code GitHub Copilot, Microsoft 365 Copilot ve Cursor'ı MCP Apps host'u olarak listeliyor.
modelcontextprotocol.io, Extension Support Matrix, 2026OpenAI, ChatGPT uygulamalarını ve Codex eklentilerini MCP sunucusu, skill ve isteğe bağlı arayüzden oluşan tek bir Plugins çatısında birleştirdi.
Alpic, 2026Karşı görüş
Her araç arayüze ihtiyaç duymaz; arayüz, modelin görmediği eylemler ve kullanıcıyı yanıltabilecek formlarla yeni bir şeffaflık ve güvenlik yüzeyi açar. Host desteği de eşit değil, bu yüzden metin geri dönüşü hâlâ zorunlu.
Kavramlar
Pratikte
- Araç tasarlarken sor: kullanıcı burada seçecek, ayarlayacak ya da onaylayacak mı; evetse UI döndür.
- Şablonu herkes için aynı tut, veriyi araç sonucundan ver; gerekli kökenleri CSP'de beyan et.
- Modelin tetiklememesi gereken butonları yalnızca app görünürlüğüne al ve her araçta metin sonucu da döndür.
MCP (Model Context Protocol) araçları uzun süre yalnızca metin ve yapılandırılmış veri döndürebiliyordu; tablo, harita, form ya da onay ekranı gereken işlerde kullanıcı deneyimi zayıf kalıyordu. MCP Apps (SEP-1865), Kasım 2025'te MCP-UI topluluğu ile OpenAI ve Anthropic'teki MCP bakımcılarının ortak önerisi olarak ortaya çıktı ve 26 Ocak 2026 tarihli sürümle kararlı hale geldi. 28 Temmuz 2026 tarihli MCP spesifikasyonu uzantılar için resmi bir çerçeve getirdi; MCP Apps io.modelcontextprotocol/ui kimliğiyle resmi uzantılar arasında yer alıyor. Ekim 2026 itibarıyla resmi destek tablosunda Claude, ChatGPT, VS Code GitHub Copilot, Microsoft 365 Copilot, Cursor ve Goose gibi host'lar var; OpenAI de Temmuz 2026'da ChatGPT uygulamalarını ve Codex eklentilerini MCP tabanlı tek bir “Plugins” çatısında birleştirdi. Konu artık bir deney değil, MCP sunucusu yazan herkesin “bu araç UI döndürmeli mi” sorusunu tasarım aşamasında sorması gereken bir standart.
Çıkarımlar
- Kullanıcının bakıp seçeceği, ayarlayacağı ya da onaylayacağı bir şey varsa araç UI döndürmeli; düz bilgi aktarımı için metin yeterli.
- Şablon (ui:// kaynağı) ile veri (araç sonucu) ayrı; şablona kullanıcıya özel veri koymayın.
- Ağ erişimi varsayılan olarak kapalı; ihtiyaç duyulan her kökeni CSP alanlarında açıkça beyan edin.
- Modelin tetiklememesi gereken eylemler için visibility değerini ["app"] yapın.
- Her UI aracı okunabilir bir metin sonucu da döndürsün ve 2026-07-28 sürümüne göre her istekte token doğrulasın; host desteği genişledi ama hâlâ eşit değil.
Alt başlıklar
Ekim 2026 itibarıyla durum
MCP Apps son 12 ayda öneriden yaygın bir standarda dönüştü. SEP-1865 Kasım 2025'te önerildi ve 26 Ocak 2026 tarihli sürümle kararlı (Stable) statüye geçti. 28 Temmuz 2026 MCP spesifikasyonu çekirdeği durumsuz hale getirdi: initialize el sıkışması ve Mcp-Session-Id kalktı, uzantılar her istekte _meta içindeki istemci yetenekleriyle müzakere ediliyor. Aynı sürümde Tasks çekirdekten resmi uzantıya taşındı; resmi uzantılar listesinde MCP Apps, Tasks, Skills over MCP ve yetkilendirme uzantıları yer alıyor.
Host tarafında resmi destek tablosu Claude (web ve masaüstü), ChatGPT, VS Code GitHub Copilot, Microsoft 365 Copilot, Cursor, Goose, Postman, MCPJam, Archestra.AI ve PostHog Code'u listeliyor. OpenAI 9 Temmuz 2026'da ChatGPT uygulama dizinini ve Codex eklentilerini MCP tabanlı tek bir “Plugins” çatısında birleştirdi; bir plugin, skill, MCP sunucusu ve isteğe bağlı arayüzden oluşuyor. Resmi ext-apps deposu 2.800'ü aşkın yıldıza ulaştı ve @modelcontextprotocol/ext-apps paketi 1.x sürümünde. Kimlik doğrulamada da değişiklik var: Dynamic Client Registration kullanımdan kaldırıldı, yerine Client ID Metadata Documents öneriliyor.
Problem: metin her işe yetmiyor
Bir MCP aracı “son 30 günün satış verisini getir” çağrısına 400 satırlık JSON ya da uzun bir markdown tablo döndürdüğünde iki şey oluyor: model bu veriyi özetlemek için bağlam harcıyor ve kullanıcı filtrelemek, sıralamak ya da bir satıra tıklayıp detay görmek istediğinde yeni bir mesaj yazmak zorunda kalıyor. Her etkileşim bir model turu demek.
MCP Apps bu döngüyü kısaltıyor. Araç, verinin yanında bir arayüz şablonuna işaret ediyor; istemci (host) bu arayüzü sohbetin içinde gösteriyor ve kullanıcı filtreyi, haritayı ya da formu doğrudan kullanıyor. Örnek senaryolar: bir takvim aracında uygun toplantı saatlerini sürükleyerek seçme, bir CRM aracında birden fazla kaydı seçip toplu güncellemeye onay verme, bir analitik aracında etkileşimli grafik. Kural şu: kullanıcının bakıp seçeceği, ayarlayacağı ya da onaylayacağı bir şey varsa UI düşünün; yalnızca bilgi aktarılıyorsa metin yeterli.
Nereden geldi: MCP-UI ve OpenAI Apps SDK
MCP Apps sıfırdan doğmadı. Ido Salomon ve Liad Yosef'in başlattığı MCP-UI topluluk projesi, UI'ı MCP kaynağı olarak taşıma fikrini ve iframe ile host arasındaki iki yönlü iletişim modelini önce denedi; Postman, Hugging Face, Shopify, Goose ve ElevenLabs gibi kullanıcılarla olgunlaştırdı. OpenAI'ın Apps SDK'sı ise MCP'yi temel alarak ChatGPT içinde etkileşimli uygulamaların talebini gösterdi.
İki yaklaşımın ayrı yaşaması, geliştiricilerin her host için ayrı adaptör yazması anlamına geliyordu. SEP-1865, 21 Kasım 2025'te bu iki çizgiyi tek bir açık standartta birleştirme önerisi olarak yayımlandı; yazarları arasında MCP-UI kurucuları ile Anthropic ve OpenAI'daki MCP bakımcıları vardı. Spesifikasyon modelcontextprotocol/ext-apps deposunda geliştirildi ve 26 Ocak 2026 tarihli sürümle kararlı hale geldi. Bu, “bir kez yaz, destekleyen her host'ta çalışsın” vaadinin temeli. MCP-UI projesi de artık kendini MCP Apps standardına taşınmış olarak tanımlıyor; paketleri hem MCP Apps host'larıyla hem eski MCP-UI host'larıyla çalışıyor.
Mimari: ui:// kaynağı, araç metaverisi ve iframe
Mekanizma üç parçadan oluşuyor. Birincisi UI kaynağı: sunucu, ui:// şemasıyla adreslenen bir kaynak (resource) yayımlıyor; içeriği text/html;profile=mcp-app MIME tipinde tam bir HTML dokümanı. İkincisi bağlantı: araç tanımındaki _meta.ui.resourceUri alanı bu kaynağa işaret ediyor, örneğin ui://takvim/planlayici. Üçüncüsü veri: araç çalıştığında sonucu her zamanki gibi content ve structuredContent olarak dönüyor; host bu sonucu arayüze iletiyor.
Şablon ile verinin ayrılması bilinçli bir tasarım kararı. Arayüz araç çalışmadan önce bildirildiği için host onu önceden çekebiliyor, önbelleğe alabiliyor ve güvenlik incelemesinden geçirebiliyor; önceden yükleme sayesinde araç girdisi arayüze akış halinde de gönderilebiliyor. Eski düz _meta["ui/resourceUri"] anahtarı kullanımdan kaldırıldı, iç içe _meta.ui.resourceUri kullanılmalı. Ekip, UI'ı araç sonucunun içine gömme seçeneğini performans ve inceleme zorlukları nedeniyle ilk sürüme almadı. Pratik sonuç: ui:// şablonuna kullanıcıya özel veri koymayın; şablon herkes için aynı, veri araç sonucundan gelir.
İletişim protokolü: postMessage üzerinden JSON-RPC
Arayüz (spesifikasyondaki adıyla View) host ile özel bir API değil, MCP'nin kendi JSON-RPC mesajlarıyla konuşuyor; taşıyıcı tarayıcının postMessage mekanizması. Yaşam döngüsü şöyle: View ui/initialize ile başlar, host tema, dil, saat dilimi, görüntüleme modu ve kapsayıcı boyutu gibi bağlam bilgisini döner; View ui/notifications/initialized ile hazır olduğunu bildirir. Ardından host aracın girdisini ui/notifications/tool-input, sonucunu ui/notifications/tool-result ile gönderir; kapanırken ui/resource-teardown gelir.
View tarafı da istek başlatabilir: tools/call ile sunucudaki bir aracı çağırmak, ui/message ile sohbete mesaj eklemek, ui/update-model-context ile modelin bağlamını güncellemek, ui/open-link ile bağlantı açmak. Görüntüleme modları inline, fullscreen ve pip; View mod isteyebilir ama kararı host verir. Resmi @modelcontextprotocol/ext-apps paketi bu mesajları saran bir App sınıfı ve sunucu tarafı yardımcıları sağlıyor.
Güvenlik modeli: sandbox, CSP ve görünürlük
Güvenilmeyen bir sunucudan gelen HTML'i sohbetin içinde çalıştırmak ciddi bir saldırı yüzeyi. Spesifikasyonun cevabı katmanlı: tüm UI içeriği kısıtlı izinlerle sandbox'lı iframe'de çalışıyor, şablonlar önceden bildirildiği için incelenebiliyor, View ile host arasındaki her mesaj loglanabilir JSON-RPC ve host, arayüzden başlatılan araç çağrıları için kullanıcı onayı isteyebiliyor.
Ağ erişimi varsayılan olarak kapalı. Kaynak metaverisindeki CSP alanında connectDomains (fetch istekleri), resourceDomains (script, stil, font, görsel) ve frameDomains (iç içe iframe) beyan edilmeyen her köken engelleniyor. Kamera gibi izinler talep edilebilir ama garanti değil. Araç görünürlüğü de bir güvenlik aracı: varsayılan değer ["model", "app"]; _meta.ui.visibility değeri yalnızca ["app"] olan bir araç modelin araç listesinden çıkarılır ve yalnızca aynı sunucu bağlantısındaki arayüz tarafından çağrılabilir. “Yenile” ya da “formu gönder” gibi butonlar için ideal; modelin kendi kararıyla tetiklememesi gereken eylemleri bu şekilde ayırın.
Sunucu yazarken dikkat edilecekler
Host'lar arasında farklar sürüyor; örneğin bazı istemcilerde tam ekran modu ya da arayüzden araç çağırma henüz desteklenmiyor. Bu yüzden dört kural önemli. Birincisi, istemcinin uzantıyı destekleyip desteklemediğini yetenek müzakeresiyle kontrol edin; 2026-07-28 sürümünde istemci yetenekleri her istekte _meta içinde, sunucu yetenekleri server/discover cevabında taşınıyor. İkincisi, her UI aracı okunabilir bir metin content da döndürsün; desteklemeyen istemcide araç yine işe yarasın. Üçüncüsü, prefersBorder gibi görsel tercihleri açıkça ayarlayın, çünkü host varsayılanları farklı.
Dördüncüsü kimlik doğrulama. Temmuz 2026 sürümüyle session kavramı kalktığı için her istek kendi token'ını taşıyor ve sunucu her istekte doğrulama yapmalı. Dynamic Client Registration kullanımdan kaldırıldı, yerine Client ID Metadata Documents öneriliyor; eski akış en az on iki ay geri dönüş yolu olarak kalıyor. Başlangıç için resmi ext-apps deposunda React, Vue, Svelte, Preact, Solid ve vanilla JavaScript şablonları ile harita, PDF görüntüleyici ve bütçe dağıtıcı gibi örnek sunucular var.
Son gelişmeler
Ekim 2026 itibarıyla
Önce kendi cevabını düşün, sonra aç.
Bu, sohbetin içine web sitesi gömmek değil mi? Neden ayrı bir standart gerekiyor?
Teknik olarak bir iframe, ama fark sözleşmede. Şablon önceden bildiriliyor, ağ erişimi CSP ile sınırlanıyor, tüm iletişim loglanabilir JSON-RPC ile oluyor ve arayüz modelin bağlamını kontrollü şekilde güncelleyebiliyor. Bunlar olmadan her host kendi kuralını yazar ve sunucu geliştiricisi her biri için ayrı entegrasyon yapar.
OpenAI Apps SDK ile yazdığım uygulama MCP Apps'te çalışır mı?
İki yaklaşım aynı fikirlerden besleniyor ve MCP Apps, Apps SDK ile MCP-UI deneyimlerini tek standartta birleştirmek için tasarlandı. Ekim 2026 itibarıyla ChatGPT resmi destek tablosunda MCP Apps host'u olarak listeleniyor ve OpenAI eklenti dokümantasyonu MCP sunucusuna arayüz eklemeyi anlatıyor. Yine de alan adları ve bazı özellikler farklı olabilir; yeni projeye başlıyorsanız doğrudan MCP Apps spesifikasyonunu hedeflemek ve hedef host'ta test etmek mantıklı.
Kötü niyetli bir MCP sunucusu arayüz üzerinden kullanıcı verisi çalabilir mi?
Risk sıfır değil. Sandbox, beyan edilmeyen kökenlere ağ erişimini engelleyen CSP ve kullanıcı onaylı araç çağrıları bu riski azaltıyor. Ama arayüz kullanıcıyı yanıltacak bir form gösterebilir; bu yüzden hangi sunucuları bağladığınız hâlâ temel güvenlik kararı.
Arayüz, modelin görmediği bir şey yapabilir mi? Bu şeffaflık sorunu değil mi?
Evet, visibility değeri ["app"] olan araçları yalnızca arayüz çağırabilir. Bu, kullanıcının bilinçli olarak bastığı butonları modelin otonom kararlarından ayırmak için var. Modelin bilmesi gereken sonuçlar ui/update-model-context ile bağlama aktarılabilir.
Mobil istemcilerde de çalışıyor mu?
Spesifikasyon, host bağlamında platform bilgisini (web, masaüstü, mobil) taşıyor ve View bu bilgiye göre uyum sağlayabiliyor. Fiili destek host'tan host'a değişiyor; yayına almadan önce hedeflediğiniz her istemcide test etmek gerekiyor.
Notun kaynakları
- SEP-1865: MCP Apps - Interactive User Interfaces for MCP
- MCP Apps duyurusu (MCP Blog, 21 Kasım 2025)
- @modelcontextprotocol/ext-apps genel bakış ve API dokümantasyonu
- MCP 2026-07-28 makes the protocol stateless and the app extensions official (Alpic)
- MCP 2026-07-28 spesifikasyon değişiklik listesi
- Extension Support Matrix (modelcontextprotocol.io)
- SEP-1865 spesifikasyon metni, 2026-01-26 (ext-apps)
- In ChatGPT-Codex merge, OpenAI combines apps and plugins, all based on MCP (Alpic)
- The July 2026 MCP release changes how AI assistants sign users into MCP Apps (Alpic)
Sunum stili
12 slayt. Tıklarsan sunum o slayttan başlar.
Slayt notları
Açılışta 400 satırlık bir JSON tool sonucunun ekran görüntüsünü göster ve “bunu kim okuyor?” diye sor.
Filtrelemek, sıralamak, detay görmek için her seferinde yeni mesaj. MCP Apps bu döngüyü kırmak için var.
Örnek senaryolar: takvimde slot seçmek, CRM'de toplu güncellemeye onay, analitikte etkileşimli grafik.
İki ayrı çizgi her host için ayrı adaptör demekti. SEP-1865 bunları tek açık standartta birleştirdi; Ekim 2026'da resmi destek tablosu on host'u aşıyor: bir kez yaz, destekleyen her host'ta çalışsın.
Şablon önceden bildirildiği için host onu çekip önbelleğe alabilir ve inceleyebilir. Şablona kullanıcıya özel veri konmaz; veri tool sonucundan gelir.
Özel API yok: MCP'nin kendi JSON-RPC mesajları, postMessage üzerinden. Görüntüleme modları inline, fullscreen, pip; kararı host verir.
Kural: kullanıcı bakıp seçecek, ayarlayacak ya da onaylayacaksa UI. Yalnızca bilgi alacaksa metin yeter.
Örnek: takvim tool'u sohbette haftalık görünüm açar, kullanıcı slotu sürükler, onayla butonu yalnızca View'un çağırabildiği tool'u tetikler. Kullanıcının bilinçli tıklaması modelin otonom kararından ayrılır.
Risk sıfır değil. Hangi sunucuları bağladığınız hâlâ temel güvenlik kararı.
connectDomains, resourceDomains, frameDomains: beyan edilmeyen her köken engellenir. Kamera gibi izinler talep edilebilir ama garanti değil.
Temmuz 2026'dan beri session yok; istemci yetenekleri her istekte _meta içinde gelir. Host'lar arası farklar sürüyor; prefersBorder gibi görsel tercihleri açıkça ayarla, hedeflediğin her istemcide test et.
Next.js ve React bilen herkes View yazabilir; resmi ext-apps paketiyle başlayın. Teşekkür et.