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:
- resources/list: solicita a lista de todas as definições de recursos disponíveis que o servidor expõe. É tratado internamente pelo componente TsgcWSAPIServer_MCP.
- resources/read: recupera o conteúdo e metadados opcionais de um recurso específico. O evento OnMCPRequestResource é chamado quando uma nova requisição é recebida pelo servidor. Um recurso normalmente inclui:
- uri: identificador do recurso.
- mimeType: tipo do conteúdo (text/plain, application/json, image/png, etc.).
- data ou content: o payload em si (texto ou binário).
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:
