在 MCP 中,资源代表服务器公开的可寻址数据对象,如文件、数据库记录、生成的文档或动态 API 输出。
它们由客户端控制,客户端可以决定请求哪个资源以及如何解释内容。
涉及的两种主要方法是:
- resources/list:请求服务器公开的所有可用资源定义列表。由 TsgcWSAPIServer_MCP 组件在内部处理。
- resources/read:检索特定资源的内容和可选元数据。当服务器收到新请求时,将调用事件 OnMCPRequestResource。资源通常包含:
- uri:资源标识符。
- mimeType:内容类型(text/plain、application/json、image/png 等)。
- 数据或内容:实际有效载荷(文本或二进制)。
此外,如果服务器在其声明的能力中将 resources.listChanged 设置为 true,则可以在资源目录更新时发送 notifications/resources/list_changed 等通知。
资源列表
服务器在 TsgcAI_MCP_ResourcesList 中保存资源的内存目录。资源通过 uri 保证唯一性,公开描述并提供类似 JSON Schema 的输入 uri,该 uri 在响应规范的 resources.list 方法时发出。当客户端调用 resources.list 时,TsgcWSAPIServer_MCP 加载请求,序列化当前目录并以 200 HTTP 状态码返回。
发布文件资源的示例代码:
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;
资源请求
当客户端发出 resource.read JSON-RPC 请求时,TsgcWSAPIServer_MCP 在触发 OnMCPRequestResource 事件之前,会将强类型请求对象(包括 uri 资源、名称和提供的参数)进行水化处理。您的处理程序填充响应载荷,该载荷随后会连同成功的 HTTP 状态码一起序列化并返回给客户端。
典型的处理程序如下所示:
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;
了解更多
如需深入文档和组件参考,请访问:
以下提供 Delphi MCP 服务器 Windows 演示:
