Working with Resources
The resource system enables LLM-powered applications to access structured content through a unified interface. Resources are identified by URIs and can represent any type of content that might be useful for an LLM to process. The AJ MCP client provides methods for discovering and accessing resources exposed by the server.
Listing Resources
To list available resources:
List<ResourceItem> resourceList = mcpClient.listResources();
assertEquals(2, resourceList.size(), "Expected exactly two resources");
ResourceItem blob = getResourceRef("blob", resourceList);
assertNotNull(blob, "Resource 'blob' should not be null");
assertEquals("blob", blob.getName(), "Name mismatch for 'blob'");
assertEquals("file:///blob", blob.getUri(), "URI mismatch for 'blob'");
assertEquals("image/jpg", blob.getMimeType(), "MIME type mismatch for 'blob'");
assertEquals("A nice pic", blob.getDescription(), "Description mismatch for 'blob'");
Reading Resource Contents
To read the contents of a resource:
GetResourceResult.ResourceResultDetail response = mcpClient.readResource("file:///text");
assertEquals(1, response.getContents().size(), "Expected exactly one content");
ResourceContent contents = response.getContents().get(0);
ResourceContentText textContents = (ResourceContentText) contents;
assertEquals("file:///text", textContents.getUri(), "URI should be 'file:///text'");
assertEquals("text888", textContents.getText(), "Text content should be 'text'");
The readResource()
method returns a ResourceResultDetail
containing an array of resource contents.
Each resource content can be either text content or binary content, depending on the resource's MIME type.
GetResourceResult.ResourceResultDetail response = mcpClient.readResource("file:///blob");
assertEquals(1, response.getContents().size(), "Expected exactly one content");
ResourceContent contents = response.getContents().get(0);
ResourceContentBinary blobContents = (ResourceContentBinary) contents;
assertEquals("file:///blob", blobContents.getUri(), "URI should be 'file:///blob'");
assertEquals("blob", blobContents.getBlob(), "Blob content should be 'blob'");
You can read the resource with template, that means, you can pass any parameters to the resource.
GetResourceResult.ResourceResultDetail response = mcpClient.readResource("file:///text-template/hello");
assertEquals(1, response.getContents().size(), "Expected exactly one content");
ResourceContent contents = response.getContents().get(0);
ResourceContentText textContents = (ResourceContentText) contents;
assertEquals("file:///text-template/hello", textContents.getUri(), "URI should be 'file:///text-template/hello'");
assertEquals("text hello", textContents.getText(), "Text content should be 'text hello'");