Servidor Delphi MCP: Recursos (4/4)

· Recursos

No MCP, recursos representam objetos de dados endereçáveis que o servidor expõe, como arquivos, registros de banco de dados, documentos gerados ou saídas dinâmicas de API.

Eles são controlados pelo cliente, ou seja, o cliente pode decidir qual recurso solicitar e como interpretar o conteúdo.





Os dois principais métodos envolvidos são:

Além disso, se o servidor definir resources.listChanged = true em suas capabilities declaradas, ele pode enviar notificações como notifications/resources/list_changed quando o catálogo de recursos é atualizado.

Lista de Recursos

O servidor mantém um catálogo em memória de recursos em TsgcAI_MCP_ResourcesList. Garante-se que os recursos sejam únicos pelo uri, expõem descrições e fornecem um JSON Schema como o uri de entrada que é emitido na resposta ao método resources.list da especificação. Quando um cliente invoca resources.list, o TsgcWSAPIServer_MCP carrega a requisição, serializa o catálogo atual e o envia de volta com código de status HTTP 200.

Exemplo de código que publica um recurso de arquivo: 

procedure TMainForm.FormCreate(Sender: TObject);
begin
  MCPServer.Resources.Clear;
  MCPServer.Resources.AddResource(
	'file:///project/src/main.rs', // URI
    'main.rs',  // Name
	'Rust Software Application Main File', // Title
    'Primary application entry point', // Description
	'text/x-rust');
end;

Requisição de Recurso

Quando um cliente emite uma requisição JSON-RPC resource.read, o TsgcWSAPIServer_MCP hidrata o objeto de requisição fortemente tipado (incluindo uri do recurso, nome e os argumentos fornecidos) antes de disparar o evento OnMCPRequestResource. Seu handler preenche o payload da resposta que é então serializado de volta para o cliente, junto com um código de status HTTP de sucesso.

Um handler típico se parece com isto: 

procedure OnMCPRequestResource(Sender: TObject;
  const aSession: TsgcAI_MCP_Session; const aRequest: TsgcAI_MCP_Request_ResourcesRead;
  const aResponse: TsgcAI_MCP_Response_ResourcesRead);
begin
  if aRequest.Params.Uri = 'file:///project/src/main.rs' then
    aResponse.Result.Contents.AddContentText('file:///project/src/main.rs',
      'main.rs', 'Rust Software Application Main File', 'text/x-rust',
      'fn main() {\n    println!(\"Hello world!\");\n}');
end;

Saiba mais

Para documentação aprofundada e referência do componente, visite:


Guia de Recursos do sgcWebSockets MCP 

Veja abaixo um demo do Delphi MCP Server para windows: