Dans MCP, les ressources représentent des objets de données adressables que le serveur expose, comme des fichiers, des enregistrements de base de données, des documents générés ou des sorties d'API dynamiques.
Elles sont contrôlées par le client, ce qui signifie que le client peut décider quelle ressource demander et comment interpréter le contenu.
Les deux méthodes principales impliquées sont :
- resources/list : demande la liste de toutes les définitions de ressources disponibles que le serveur expose. Elle est gérée en interne par le composant TsgcWSAPIServer_MCP.
- resources/read : récupère le contenu et les métadonnées optionnelles d'une ressource spécifique. L'événement OnMCPRequestResource est appelé quand une nouvelle requête est reçue par le serveur. Une ressource inclut généralement :
- uri : identifiant de la ressource.
- mimeType : type de contenu (text/plain, application/json, image/png, etc.).
- data ou content : la charge utile réelle (texte ou binaire).
De plus, si le serveur définit resources.listChanged = true dans ses capacités déclarées, il peut envoyer des notifications comme notifications/resources/list_changed quand le catalogue de ressources est mis à jour.
Liste des ressources
Le serveur conserve un catalogue en mémoire des ressources dans TsgcAI_MCP_ResourcesList. Les ressources sont garanties uniques par uri, exposent des descriptions et fournissent un schéma JSON de type uri d'entrée qui est émis dans la réponse à la méthode resources.list de la spécification. Quand un client invoque resources.list, TsgcWSAPIServer_MCP charge la requête, sérialise le catalogue courant et le renvoie avec un code de statut HTTP 200.
Exemple de code qui publie une ressource fichier :
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;
Requête de ressource
Quand un client émet une requête JSON-RPC resource.read, TsgcWSAPIServer_MCP hydrate l'objet de requête fortement typé (incluant l'uri de la ressource, le nom et les arguments fournis) avant de lever l'événement OnMCPRequestResource. Ton gestionnaire remplit la charge utile de réponse qui est ensuite sérialisée vers le client, accompagnée d'un code de statut HTTP de succès.
Un gestionnaire typique ressemble à ceci :
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;
En savoir plus
Pour une documentation détaillée et une référence du composant, visite :
Guide des ressources serveur MCP sgcWebSockets
Tu trouveras ci-dessous une démo de serveur MCP Delphi pour Windows :
