create-item.tool.ts•1.69 kB
import { createQuickbooksItem } from "../handlers/create-quickbooks-item.handler.js";
import { ToolDefinition } from "../types/tool-definition.js";
import { z } from "zod";
const toolName = "create_item";
const toolTitle = "Create Item";
const toolDescription = "Create an item in QuickBooks Online.";
const inputSchema = {
name: z.string().min(1),
type: z.string().min(1),
income_account_ref: z.string().min(1),
expense_account_ref: z.string().optional(),
unit_price: z.number().optional(),
description: z.string().optional(),
};
const outputSchema = {
success: z.boolean().describe("Whether the operation was successful"),
data: z.any().optional().describe("The result data"),
error: z.string().optional().describe("Error message if operation failed"),
};
const toolHandler = async (params: z.infer<z.ZodObject<typeof inputSchema>>) => {
const response = await createQuickbooksItem(params);
if (response.isError) {
const output = {
success: false,
error: response.error || "Unknown error occurred",
};
return {
content: [
{
type: "text" as const,
text: JSON.stringify(output, null, 2),
},
],
structuredContent: output,
isError: true,
};
}
return {
content: [
{ type: "text" as const, text: `Item created successfully:` },
{ type: "text" as const, text: JSON.stringify(response.result, null, 2) },
],
};
};
export const CreateItemTool: ToolDefinition<typeof inputSchema, typeof outputSchema> = {
name: toolName,
title: toolTitle,
description: toolDescription,
inputSchema: inputSchema,
outputSchema: outputSchema,
handler: toolHandler,
};