Execute seu aplicativo Delphi dentro do ChatGPT e do Claude

· Componentes
Execute seu aplicativo Delphi dentro do ChatGPT e do Claude

Um servidor M C P permite que um assistente chame o seu código. O que ele nunca permitiu foi mostrar alguma coisa: o assistente pergunta, sua ferramenta responde com texto, e o usuário lê um parágrafo. O sgcWebSockets 2026.10 adiciona MCP Apps ao sgcHTML, de modo que uma ferramenta pode responder com uma página em vez disso. O assistente a renderiza, o usuário clica nela, e os cliques voltam para o seu aplicativo Delphi.

A página é construída com os mesmos componentes sgcHTML que qualquer outra página usa. Sem framework JavaScript, sem front end separado, sem uma segunda base de código.

Uma ferramenta que responde com uma página

Um MCP App é composto por três elementos: uma ferramenta que o modelo pode chamar, um recurso que carrega a página, e os eventos que decidem o que ambos significam. TsgcHTMLComponent_MCPApp declara tudo isso em um servidor MCP que você já tem.

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;

Esse é todo o registro necessário. O componente declara a ferramenta com os metadados que informam ao host que ela carrega uma interface de usuário, declara o recurso que o host lê para obter a página, e declara uma ferramenta complementar que a própria página usa.

O que o modelo lê, o que o usuário vê

O resultado de uma ferramenta tem duas metades, e elas não são o mesmo público. OnToolCall escreve ambas: uma frase para o modelo raciocinar, e o conteúdo estruturado que a página lê.

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 responde com a página. É sgcHTML comum: um cartão, uma tabela, alguns botões. Nada nela é específico do assistente.

Botões que funcionam onde não há servidor

Esta é a parte que geralmente quebra. A página é executada dentro de um iframe isolado (sandbox) sem rede própria, então um hx-get não tem nada a alcançar. O sgcHTML resolve isso com uma ponte que registra uma extensão do htmx: cada hx-get e hx-post da página se torna uma chamada da ferramenta complementar, e o markup que volta é substituído exatamente como o htmx teria substituído uma resposta HTTP.

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;

O mesmo markup servido via HTTP é uma requisição htmx comum. Você escreve a página uma vez e ela funciona nos dois lugares.

Um único documento, nada vinculado

Como o frame não tem rede, o documento carrega tudo: a página, a folha de estilo, o script e a ponte, em um único arquivo. A nova opção InlineAssets do template de página faz isso, e vem ativada por padrão nas MCP Apps. Um documento de app típico gira em torno de 360 KB, e não precisa de mais nada para renderizar.

O host também é informado sobre o tamanho em que deve abrir o frame, por meio de PreferredWidth e PreferredHeight, e a página informa sua própria altura conforme o conteúdo muda.

Você pode ver isso sem instalar um assistente

A nova demo 19.MCPApp é um servidor de console na porta 5725 que publica dois apps, e vem com seu próprio host de referência. Abra http://localhost:5725/ e o painel esquerdo faz o papel do modelo: chama a ferramenta, lê o recurso, o renderiza em um frame isolado, responde ao handshake, redimensiona o frame quando a página solicita e encaminha o que a página chama. O log abaixo mostra cada mensagem nos dois sentidos.

Quando você quiser a coisa real, aponte o Claude, o ChatGPT ou o VS Code para http://localhost:5725/mcp. As ferramentas e os recursos já estão declarados lá.

O que não é

O componente não mantém estado algum. Quem pode chamar uma ferramenta, o que um registro significa e o que uma requisição de fragmento pode retornar são decisões do seu aplicativo, exatamente como acontece com uma rota em uma aplicação web. E a página não pode contrabandear nada: o que o modelo pode acionar é uma ferramenta que você registrou, respondendo com markup que você construiu.

Atualização

As MCP Apps fazem parte do sgcHTML e exigem SGC_AI_MCP, ou seja, as edições Enterprise e All-Access e o pacote sgcAI. Nada muda para um servidor MCP existente: o componente se conecta ao que você já tem e não mexe nas ferramentas que você já publica.

Leia também

Assista ao vídeo

Há um vídeo curto sobre isso no canal da eSeGeCe.

Dúvidas, feedback ou ajuda com a migração? Entre em contato — você receberá uma resposta das pessoas que escreveram o código.