Bir M C P sunucusu, bir asistanın kodunuzu çağırmasına izin verir. Size hiçbir zaman izin vermediği şey ise bir şey göstermektir: asistan sorar, aracınız metinle yanıt verir, ve kullanıcı bir paragraf okur. sgcWebSockets 2026.10, sgcHTML'e MCP Apps ekliyor, böylece bir araç bunun yerine bir sayfayla yanıt verebilir. Asistan onu görüntüler, kullanıcı içinde gezinerek tıklar, ve tıklamalar Delphi uygulamanıza geri döner.
Sayfa, her diğer sayfanın kullandığı aynı sgcHTML bileşenleriyle oluşturulur. JavaScript framework'ü yok, ayrı bir ön uç yok, ikinci bir kod tabanı yok.
Bir Sayfayla Yanıt Veren Araç
Bir MCP App üç şeyden oluşur: modelin çağırabileceği bir araç, sayfayı taşıyan bir kaynak, ve ikisinin ne anlama geldiğine karar veren olaylar. TsgcHTMLComponent_MCPApp, tüm bunları zaten sahip olduğunuz bir MCP sunucusunda tanımlar.
uses
sgcAI, sgcHTML_MCPApp;
FMCP := TsgcWSAPIServer_MCP.Create(nil);
FMCP.Server := FHTTPServer;
FMCP.EndpointOptions.Endpoint := '/mcp';
FApps := TsgcHTMLComponent_MCPApp.Create(nil);
FApps.MCPServer := FMCP.MCPServer;
FApps.OnRender := DoRender;
FApps.OnToolCall := DoToolCall;
FApps.OnFragment := DoFragment;
with FApps.Apps.Add do
begin
ToolName := 'orders.board';
Title := 'Orders board';
Description := 'Shows the orders of the company as a board ' +
'that can be filtered by status.';
InputSchema.Text := '{"type":"object","properties":{"status":' +
'{"type":"string","description":"open, shipped or closed"}}}';
end;
FApps.RegisterApps;
Yapılması gereken kayıt bundan ibaret. Bileşen, host'a bir kullanıcı arayüzü taşıdığını bildiren meta verilerle aracı tanımlar, host'un sayfayı almak için okuduğu kaynağı tanımlar, ve sayfanın kendisinin kullandığı tamamlayıcı bir aracı tanımlar.
Modelin Okuduğu, Kullanıcının Gördüğü
Bir araç sonucunun iki yarısı vardır, ve bunlar aynı kitleye hitap etmez. OnToolCall her ikisini de yazar: modelin akıl yürütmesi için bir cümle, ve sayfanın okuduğu yapılandırılmış içerik.
procedure TMyLogic.DoToolCall(Sender: TObject; aApp: TsgcHTMLMCPApp;
const aArguments: string; var aText, aStructured: string);
begin
aText := Format('%d open orders, %s in total.', [vCount, vTotal]);
aStructured := '{"orders":' + IntToStr(vCount) + '}';
end;
OnRender sayfayla yanıt verir. Bu sıradan bir sgcHTML'dir: bir kart, bir tablo, birkaç düğme. Hiçbir şeyi asistana özgü değildir.
Sunucunun Olmadığı Yerde Çalışan Düğmeler
Genellikle bozulan kısım burasıdır. Sayfa, kendi ağı olmayan sanal alanlı (sandboxed) bir iframe içinde çalışır, bu yüzden bir hx-get'in ulaşabileceği hiçbir şey yoktur. sgcHTML bunu, bir htmx uzantısı kaydeden bir köprüyle çözer: sayfanın her hx-get ve hx-post'u tamamlayıcı aracın bir çağrısı haline gelir, ve geri gelen işaretleme, htmx'in bir HTTP yanıtını değiştireceği şekilde tam olarak değiştirilir.
procedure TMyLogic.DoFragment(Sender: TObject; aApp: TsgcHTMLMCPApp;
const aTarget, aArguments: string; var aHTML: string);
begin
{ aTarget is what the element asked for, for instance orders?status=open }
if StartsText('orders', aTarget) then
aHTML := BuildOrdersTable(StatusOf(aTarget));
end;
HTTP üzerinden sunulan aynı işaretleme, sıradan bir htmx isteğidir. Sayfayı bir kez yazarsınız ve her iki yerde de çalışır.
Tek Belge, Hiçbir Şey Bağlantılı Değil
Frame'in ağı olmadığından, belge her şeyi taşır: sayfa, stil sayfası, script ve köprü, tek bir dosyada. Sayfa şablonunun yeni InlineAssets seçeneği bunu yapar, ve MCP Apps için varsayılan olarak açıktır. Tipik bir uygulama belgesi yaklaşık 360 KB'dır, ve görüntülenmek için başka hiçbir şeye ihtiyaç duymaz.
Host'a ayrıca PreferredWidth ve PreferredHeight aracılığıyla frame'i hangi boyutta açacağı bildirilir, ve sayfa, içerik değiştikçe kendi yüksekliğini bildirir.
Bir Asistan Kurmadan Görebilirsiniz
Yeni 19.MCPApp demosu, iki uygulama yayınlayan, 5725 numaralı bağlantı noktasında bir konsol sunucusudur, ve kendi referans host'unu içerir. http://localhost:5725/ adresini açın ve soldaki panel modelin yerine geçer: aracı çağırır, kaynağı okur, sanal alanlı bir frame içinde görüntüler, el sıkışmayı (handshake) yanıtlar, sayfa istediğinde frame'i yeniden boyutlandırır ve sayfanın çağırdığı şeyi iletir. Altındaki günlük, her iki yöndeki her mesajı gösterir.
Gerçeğini istediğinizde, Claude, ChatGPT veya VS Code'u http://localhost:5725/mcp adresine yönlendirin. Araçlar ve kaynaklar orada zaten tanımlanmıştır.
Ne Olmadığı
Bileşen hiçbir durum tutmaz. Bir aracı kimin çağırabileceği, bir kaydın ne anlama geldiği ve bir parça isteğinin neyi döndürebileceği, tıpkı bir web uygulamasındaki bir rota için olduğu gibi, uygulamanızın kararlarıdır. Ve sayfa hiçbir şeyi gizlice sokamaz: modelin tetikleyebileceği şey, sizin kaydettiğiniz bir araçtır ve sizin oluşturduğunuz işaretlemeyle yanıt verir.
Yükseltme
MCP Apps, sgcHTML'in bir parçasıdır ve Enterprise ve All-Access sürümleri ile sgcAI paketi anlamına gelen SGC_AI_MCP gerektirir. Mevcut bir MCP sunucusu için hiçbir şey değişmez: bileşen, zaten sahip olduğunuz sunucuya bağlanır ve zaten yayınladığınız araçlara dokunmaz.
Sırada Ne Var
- Bir Ekran Görüntüsünü Delphi Web Sayfasına Dönüştürün
- OpenSSL DLL'leri Olmadan Delphi TLS 1.3
- sgcWebSockets 2026.10, bu sürümdeki diğer her şey
İzleyin
Bununla ilgili kısa bir video, eSeGeCe kanalında yer alıyor.
Sorularınız, geri bildiriminiz veya taşıma konusunda yardıma mı ihtiyacınız var? İletişime geçin — kodu yazan kişilerden yanıt alacaksınız.
