In MCP le risorse rappresentano oggetti di dati indirizzabili che il server espone, come file, record di database, documenti generati o output dinamici di API.
Sono client-controlled, il che significa che il client può decidere quale risorsa richiedere e come interpretarne il contenuto.
I due metodi principali coinvolti sono:
- resources/list: richiede la lista di tutte le definizioni di risorse disponibili esposte dal server. È gestito internamente dal componente TsgcWSAPIServer_MCP.
- resources/read: recupera il contenuto e i metadati opzionali di una risorsa specifica. L'evento OnMCPRequestResource viene chiamato quando una nuova richiesta viene ricevuta dal server. Una risorsa include tipicamente:
- uri: identificatore della risorsa.
- mimeType: tipo di contenuto (text/plain, application/json, image/png, ecc.).
- data o content: il payload effettivo (testo o binario).
Inoltre, se il server imposta resources.listChanged = true tra le capability dichiarate, può inviare notifiche come notifications/resources/list_changed quando il catalogo delle risorse viene aggiornato.
Lista delle risorse
Il server mantiene un catalogo in memoria delle risorse in TsgcAI_MCP_ResourcesList. Le risorse sono garantite uniche per uri, espongono descrizioni e forniscono un input uri tipo JSON Schema che viene emesso nella risposta al metodo resources.list della specifica. Quando un client invoca resources.list, TsgcWSAPIServer_MCP carica la richiesta, serializza il catalogo corrente e lo rispedisce con uno stato HTTP 200.
Esempio di codice che pubblica una risorsa di tipo file:
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;
Richiesta di risorse
Quando un client invia una richiesta JSON-RPC resource.read, TsgcWSAPIServer_MCP popola l'oggetto richiesta fortemente tipizzato (inclusi uri della risorsa, nome e gli argomenti forniti) prima di sollevare l'evento OnMCPRequestResource. Il tuo handler popola il payload di risposta che viene poi serializzato e rispedito al client insieme a uno stato HTTP di successo.
Un handler tipico è il seguente:
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;
Scopri di più
Per documentazione approfondita e riferimento dei componenti, visita:
sgcWebSockets MCP Prompts Resources Guide
Trovi qui sotto una demo Delphi MCP Server per Windows:
