mcpengine/servers/toast/dist/tools/reporting-tools.js

133 lines
5.3 KiB
JavaScript

import { z } from 'zod';
export function registerReportingTools(client) {
return [
{
name: 'toast_sales_summary',
description: 'Get sales summary report for a date range',
inputSchema: z.object({
startDate: z.string().describe('Start date (ISO 8601 format)'),
endDate: z.string().describe('End date (ISO 8601 format)'),
}),
execute: async (args) => {
// This would aggregate data from orders and payments
const orders = await client.orders.list({
startDate: args.startDate,
endDate: args.endDate,
});
const payments = await client.payments.list(args.startDate, args.endDate);
// Calculate summary metrics
const summary = {
dateRange: { startDate: args.startDate, endDate: args.endDate },
orders: orders.data,
payments: payments.data,
summary: {
totalOrders: orders.totalCount,
totalPayments: payments.totalCount,
message: 'Sales summary data retrieved. Process orders and payments to calculate metrics.',
},
};
return {
content: [
{
type: 'text',
text: JSON.stringify(summary, null, 2),
},
],
};
},
},
{
name: 'toast_labor_cost_report',
description: 'Get labor cost report for a business date',
inputSchema: z.object({
businessDate: z.string().describe('Business date (YYYYMMDD format)'),
}),
execute: async (args) => {
const result = await client.labor.getLaborCost(args.businessDate);
return {
content: [
{
type: 'text',
text: JSON.stringify(result, null, 2),
},
],
};
},
},
{
name: 'toast_menu_item_performance',
description: 'Get menu item sales performance for a date range',
inputSchema: z.object({
startDate: z.string().describe('Start date (ISO 8601 format)'),
endDate: z.string().describe('End date (ISO 8601 format)'),
}),
execute: async (args) => {
// Fetch orders and aggregate item sales
const orders = await client.orders.list({
startDate: args.startDate,
endDate: args.endDate,
});
const report = {
dateRange: { startDate: args.startDate, endDate: args.endDate },
orders: orders.data,
message: 'Menu item performance data retrieved. Process order selections to calculate metrics.',
};
return {
content: [
{
type: 'text',
text: JSON.stringify(report, null, 2),
},
],
};
},
},
{
name: 'toast_revenue_by_hour',
description: 'Get revenue breakdown by hour for a date range',
inputSchema: z.object({
startDate: z.string().describe('Start date (ISO 8601 format)'),
endDate: z.string().describe('End date (ISO 8601 format)'),
}),
execute: async (args) => {
const orders = await client.orders.list({
startDate: args.startDate,
endDate: args.endDate,
});
const report = {
dateRange: { startDate: args.startDate, endDate: args.endDate },
orders: orders.data,
message: 'Hourly revenue data retrieved. Process order timestamps to calculate hourly breakdown.',
};
return {
content: [
{
type: 'text',
text: JSON.stringify(report, null, 2),
},
],
};
},
},
{
name: 'toast_tip_summary',
description: 'Get tip summary report for a date range',
inputSchema: z.object({
startDate: z.string().describe('Start date (ISO 8601 format)'),
endDate: z.string().describe('End date (ISO 8601 format)'),
}),
execute: async (args) => {
const tips = await client.payments.listTips(args.startDate, args.endDate);
return {
content: [
{
type: 'text',
text: JSON.stringify(tips, null, 2),
},
],
};
},
},
];
}
//# sourceMappingURL=reporting-tools.js.map