andrew-dataverse-mcp
Version:
A Model Context Protocol server for Microsoft Dataverse with comprehensive CRUD operations
70 lines (69 loc) • 2.39 kB
JavaScript
import { validateTableName, validateGuid } from '../utils/validation.js';
import { createLogger } from '../utils/logger.js';
const logger = createLogger('ReadRecordTool');
export const readRecordTool = {
name: 'dataverse_read_record',
description: 'Read a single record from a Dataverse table by ID',
inputSchema: {
type: 'object',
properties: {
table: {
type: 'string',
description: 'The name of the Dataverse table (e.g., "contacts", "accounts")',
},
id: {
type: 'string',
description: 'The GUID of the record to read',
},
select: {
type: 'string',
description: 'Comma-separated list of columns to select (optional)',
},
expand: {
type: 'string',
description: 'Related entities to expand (optional)',
},
},
required: ['table', 'id'],
},
};
export async function handleReadRecord(args, dataverseService) {
try {
logger.info('Processing read record request');
// Validate inputs
const table = validateTableName(args.table, 'table');
const id = validateGuid(args.id, 'id');
const select = args.select ? String(args.select).trim() : undefined;
const expand = args.expand ? String(args.expand).trim() : undefined;
logger.debug(`Reading record ${id} from table: ${table}`);
// Read the record
const record = await dataverseService.readRecord({
table,
id,
select,
expand,
});
const successMessage = `Successfully retrieved record from table '${table}':`;
logger.info(successMessage);
return {
content: [
{
type: 'text',
text: `${successMessage}\n\n${JSON.stringify(record, null, 2)}`,
},
],
};
}
catch (error) {
const errorMessage = `Failed to read record: ${error instanceof Error ? error.message : 'Unknown error'}`;
logger.error(errorMessage, error);
return {
content: [
{
type: 'text',
text: errorMessage,
},
],
};
}
}