MCP 客户端 SDK

MCP 服务端 SDK

其他

资源(Resource)使用

资源系统使 LLM 驱动的应用能够通过统一接口访问结构化内容。每个资源通过 URI 标识,可以表示任何对 LLM 有用的内容类型。AJ MCP 客户端提供发现和访问服务器端资源的方法。

列出资源

列出所有可用资源:

List<ResourceItem> resourceList = mcpClient.listResources();
assertEquals(2, resourceList.size(), "期望恰好有两个资源");

ResourceItem blob = getResourceRef("blob", resourceList);
assertNotNull(blob, "资源 'blob' 不应为 null");
assertEquals("blob", blob.getName(), "资源名不符('blob')");
assertEquals("file:///blob", blob.getUri(), "URI 不符('blob')");
assertEquals("image/jpg", blob.getMimeType(), "MIME 类型不符('blob')");
assertEquals("A nice pic", blob.getDescription(), "描述不符('blob')");

listResources() 请求并缓存第一页(默认页)。如需获取其他页,请调用 listResources(int pageNo)。各页独立缓存,请求第 2 页不会覆盖第 0 页。

List<ResourceItem> resourceList = mcpClient.listResources(1);
assertEquals(2, resourceList.size(), "Expected exactly two resources");

读取资源内容

读取某个资源内容:

GetResourceResult.ResourceResultDetail response = mcpClient.readResource("file:///text");
assertEquals(1, response.getContents().size(), "期望内容数量为 1");

ResourceContent contents = response.getContents().get(0);

ResourceContentText textContents = (ResourceContentText) contents;
assertEquals("file:///text", textContents.getUri(), "URI 应为 'file:///text'");
assertEquals("text888", textContents.getText(), "文本内容应为 'text888'");

readResource() 方法返回 ResourceResultDetail,其中包含资源内容数组。每项内容类型根据 MIME 类型决定,可能是文本内容,也可能是二进制内容。

GetResourceResult.ResourceResultDetail response = mcpClient.readResource("file:///blob");
assertEquals(1, response.getContents().size(), "期望内容数量为 1");

ResourceContent contents = response.getContents().get(0);

ResourceContentBinary blobContents = (ResourceContentBinary) contents;
assertEquals("file:///blob", blobContents.getUri(), "URI 应为 'file:///blob'");
assertEquals("blob", blobContents.getBlob(), "二进制内容应为 'blob'");

SDK 已包含资源模板的协议模型,但当前版本尚未完整实现基于注解的模板注册和服务端分发。在服务端模板功能补齐前,请勿依赖下面的调用方式。