ReadResourceResult
The ReadResourceResult class wraps the result of a resource read with helper methods for accessing content.
When you call app.readResource(), it returns a ReadResourceResult instance instead of a raw response object.
Properties
raw
Get the raw result object.
const result = await app.readResource('file:///app/config.json');
const rawResult = result.raw;
// rawResult is the ReadResourceResult object
contents
Get the contents array containing all resources returned.
const result = await app.readResource('file:///app/test.txt');
const contents = result.contents;
// contents is an array of TextResourceContents or BlobResourceContents objects
Methods
getTextContent()
Get the text content from the first text resource in the contents array.
Returns string | undefined - The text content, or undefined if no text resources exist.
const result = await app.readResource('file:///app/test.txt');
const text = result.getTextContent();
// Returns the file contents as a string
getBlobContent()
Get the blob content (base64-encoded) from the first blob resource in the contents array.
Returns string | undefined - The blob content, or undefined if no blob resources exist.
const result = await app.readResource('file:///app/image.png');
const blob = result.getBlobContent();
// Returns the base64-encoded image data
findByUri(uri)
Find a resource by its URI.
Parameters:
uri: The URI of the resource to find
Returns: The resource with the matching URI, or undefined.
const result = await app.readResource('file:///app/test.txt');
const resource = result.findByUri('file:///app/test.txt');
if (resource && 'text' in resource) {
console.log('Text:', resource.text);
}
getAllTextResources()
Get all text resources from the contents array.
Returns: An array of text resources.
const result = await app.readResource('file:///app/data');
const textResources = result.getAllTextResources();
textResources.forEach(resource => {
console.log(`${resource.uri}: ${resource.text}`);
});
getAllBlobResources()
Get all blob resources from the contents array.
Returns: An array of blob resources.
const result = await app.readResource('file:///app/images');
const blobResources = result.getAllBlobResources();
blobResources.forEach(resource => {
console.log(`${resource.uri}: ${resource.mimeType}`);
});
hasTextContent()
Check if the result contains any text resources.
Returns: true if at least one text resource exists.
const result = await app.readResource('file:///app/test.txt');
if (result.hasTextContent()) {
console.log('Has text:', result.getTextContent());
}
hasBlobContent()
Check if the result contains any blob resources.
Returns: true if at least one blob resource exists.
const result = await app.readResource('file:///app/image.png');
if (result.hasBlobContent()) {
console.log('Has blob data');
}
Complete Example
import { mcpShell } from 'expect-mcp';
import { test, expect } from 'vitest';
test('read resource with ReadResourceResult', async () => {
const app = mcpShell('node file-server.js');
await app.initialize();
// Read a text file
const textResult = await app.readResource('file:///tmp/test.txt');
// Use helper methods
const text = textResult.getTextContent();
expect(text).toBeDefined();
// Or use matchers
await expect(textResult).toHaveResourceContent('file:///tmp/test.txt');
await expect(textResult).toHaveTextResource('Hello world');
// Read an image file
const imageResult = await app.readResource('file:///tmp/image.png');
const blob = imageResult.getBlobContent();
expect(blob).toBeDefined();
expect(imageResult.hasBlobContent()).toBe(true);
// Find by URI
const resource = textResult.findByUri('file:///tmp/test.txt');
expect(resource).toBeDefined();
expect(resource?.uri).toBe('file:///tmp/test.txt');
await app.close();
});
Resource Metadata
Resources may include additional metadata fields:
const result = await app.readResource('file:///app/config.json');
const resource = result.contents[0];
console.log('URI:', resource.uri);
console.log('Name:', resource.name); // Optional
console.log('Title:', resource.title); // Optional
console.log('MIME Type:', resource.mimeType); // Optional
// Annotations (optional)
if (resource.annotations) {
console.log('Audience:', resource.annotations.audience); // ['user', 'assistant']
console.log('Priority:', resource.annotations.priority); // 0.0 to 1.0
console.log('Last Modified:', resource.annotations.lastModified); // ISO 8601 timestamp
}
See Also
- readResource - Read a resource from an MCP server
- Matchers - Custom matchers for testing resource results