In MCP repräsentieren Ressourcen adressierbare Datenobjekte, die der Server bereitstellt — etwa Dateien, Datenbankzeilen, erzeugte Dokumente oder dynamische API-Ausgaben.
Sie sind client-gesteuert: Der Client entscheidet, welche Ressource er anfordert und wie er den Inhalt interpretiert.
Die beiden zentralen Methoden sind:
- resources/list: Fragt die Liste aller verfügbaren Ressourcendefinitionen ab, die der Server bereitstellt. Wird intern von der Komponente TsgcWSAPIServer_MCP verarbeitet.
- resources/read: Holt den Inhalt und optionale Metadaten einer bestimmten Ressource. Das Ereignis OnMCPRequestResource wird aufgerufen, sobald eine neue Anfrage beim Server eintrifft. Eine Ressource enthält typischerweise:
- uri: Ressourcen-ID.
- mimeType: Content-Type (text/plain, application/json, image/png usw.).
- data oder content: der eigentliche Payload (Text oder Binärdaten).
Setzt der Server zusätzlich resources.listChanged = true in seinen Capabilities, kann er Benachrichtigungen wie notifications/resources/list_changed senden, wenn sich der Ressourcen-Katalog aktualisiert.
Ressourcenliste
Der Server hält einen In-Memory-Katalog der Ressourcen in TsgcAI_MCP_ResourcesList. Ressourcen sind per URI eindeutig, tragen Beschreibungen und liefern eine JSON-Schema-ähnliche Eingangs-URI, die in der Antwort auf die Spezifikationsmethode resources.list ausgegeben wird. Wenn ein Client resources.list aufruft, lädt TsgcWSAPIServer_MCP die Anfrage, serialisiert den aktuellen Katalog und sendet ihn mit HTTP-Statuscode 200 zurück.
Beispielcode, der eine Datei-Ressource veröffentlicht:
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;
Ressourcen-Request
Wenn ein Client einen JSON-RPC-Aufruf resource.read absetzt, füllt TsgcWSAPIServer_MCP das stark typisierte Request-Objekt (inklusive URI, Name und mitgegebenen Argumenten) und löst dann das Ereignis OnMCPRequestResource aus. Dein Handler füllt das Antwort-Payload, das anschließend serialisiert und zusammen mit einem Erfolgs-HTTP-Statuscode an den Client zurückgegeben wird.
So sieht ein typischer Handler aus:
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;
Mehr erfahren
Ausführliche Dokumentation und Komponentenreferenz findest du unter:
sgcWebSockets MCP-Ressourcen-Server-Guide
Hier findest du eine Delphi-MCP-Server-Demo für Windows:
