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:
- resources/list: solicita la lista de todas las definiciones de recursos disponibles que el servidor expone. Se gestiona internamente desde el componente TsgcWSAPIServer_MCP.
- resources/read: recupera el contenido y los metadatos opcionales de un recurso concreto. El evento OnMCPRequestResource se invoca cuando el servidor recibe una nueva petición. Un recurso normalmente incluye:
- uri: identificador del recurso.
- mimeType: tipo de contenido (text/plain, application/json, image/png, etc.).
- data o content: el payload real (texto o binario).
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:
