import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { z } from "zod"; import { getDateRange, merchantArg, merchantInstruction, promptMerchantSchema } from "./common.js"; export function registerFindTransactionPrompt(server: McpServer) { server.prompt( "find-transaction", "Пошук транзакції за email, сумою або частиною orderReference", { query: z.string().describe("Email клієнта, сума або частина orderReference"), days: z.string().optional().describe("Кількість днів для пошуку (за замовчуванням 14)"), merchant: promptMerchantSchema, }, ({ query, days, merchant }) => { const numDays = Number.parseInt(days ?? "14", 10); const { startDate, endDate } = getDateRange(numDays); return { messages: [ { role: "user" as const, content: { type: "text" as const, text: `Знайди транзакцію за запитом "${query}" за період ${startDate} — ${endDate}. ${merchantInstruction(merchant)} Workflow: 1. Якщо запит схожий на email, виклич wfp_search_transactions з email_contains="${query}". 2. Якщо запит схожий на число, виклич wfp_search_transactions з amount_min і amount_max навколо цієї суми. 3. Інакше виклич wfp_search_transactions з orderReference_contains="${query}". 4. Використай dateFrom="${startDate}", dateTo="${endDate}"${merchantArg(merchant)} і limit<=20. 5. Для кожного збігу покажи: - orderReference - createdDate - amount / currency - transactionStatus - clientName / email - products, якщо вони є у v2 payload 6. Якщо рівно один релевантний збіг, додатково виклич wfp_check_status для найактуальнішого стану.`, }, }, ], }; }, ); }