Servidor MCP en Delphi: Recursos

· Características

En MCP, los recursos representan objetos de datos direccionables que el servidor expone, como archivos, registros de base de datos, documentos generados o salidas dinámicas de API.

Están controlados por el cliente, lo que significa que el cliente puede decidir qué recurso solicitar y cómo interpretar su contenido.





Los dos métodos principales que intervienen son:

Adicionalmente, si el servidor establece resources.listChanged = true en sus capacidades declaradas, puede enviar notificaciones como notifications/resources/list_changed cuando se actualice el catálogo de recursos.

Lista de recursos

El servidor mantiene un catálogo en memoria de recursos en TsgcAI_MCP_ResourcesList. Se garantiza que los recursos son únicos por uri, exponen descripciones y proporcionan una uri de entrada al estilo JSON Schema que se emite en la respuesta al método resources.list de la especificación. Cuando un cliente invoca resources.list, TsgcWSAPIServer_MCP carga la petición, serializa el catálogo actual y lo devuelve con un código HTTP 200.

Ejemplo de código que publica un recurso de archivo: 

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; 

Petición de recursos

Cuando un cliente lanza una petición JSON-RPC resource.read, TsgcWSAPIServer_MCP hidrata el objeto de petición fuertemente tipado (incluyendo la uri del recurso, el nombre y los argumentos proporcionados) antes de disparar el evento OnMCPRequestResource. Tu manejador rellena el payload de respuesta, que después se serializa y se envía al cliente junto con un código HTTP de éxito.

Un manejador típico tiene este aspecto: 

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; 

Más información

Para documentación detallada y referencia de componentes, visita:


Guía del servidor MCP Resources de sgcWebSockets 

A continuación tienes una demo del servidor MCP en Delphi para Windows: