@codemill-solutions/yuki-mcp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +240 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/accounting.d.ts +13 -0
- package/dist/tools/accounting.d.ts.map +1 -0
- package/dist/tools/accounting.js +117 -0
- package/dist/tools/accounting.js.map +1 -0
- package/dist/tools/administrations.d.ts +14 -0
- package/dist/tools/administrations.d.ts.map +1 -0
- package/dist/tools/administrations.js +80 -0
- package/dist/tools/administrations.js.map +1 -0
- package/dist/tools/documents.d.ts +18 -0
- package/dist/tools/documents.d.ts.map +1 -0
- package/dist/tools/documents.js +269 -0
- package/dist/tools/documents.js.map +1 -0
- package/dist/tools/invoices.d.ts +22 -0
- package/dist/tools/invoices.d.ts.map +1 -0
- package/dist/tools/invoices.js +549 -0
- package/dist/tools/invoices.js.map +1 -0
- package/dist/tools/relations.d.ts +20 -0
- package/dist/tools/relations.d.ts.map +1 -0
- package/dist/tools/relations.js +271 -0
- package/dist/tools/relations.js.map +1 -0
- package/dist/tools/transactions.d.ts +19 -0
- package/dist/tools/transactions.d.ts.map +1 -0
- package/dist/tools/transactions.js +294 -0
- package/dist/tools/transactions.js.map +1 -0
- package/dist/yuki-client.d.ts +72 -0
- package/dist/yuki-client.d.ts.map +1 -0
- package/dist/yuki-client.js +227 -0
- package/dist/yuki-client.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1,549 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { XmlValue, escapeXml } from "../yuki-client.js";
|
|
3
|
+
/**
|
|
4
|
+
* Register tools for retrieving outstanding invoices from Yuki.
|
|
5
|
+
*
|
|
6
|
+
* Note: The Yuki SOAP API exposes outstanding (open) invoice items via
|
|
7
|
+
* the Accounting service. Full invoice history with date-range filtering
|
|
8
|
+
* is not available via SOAP — use the Yuki web interface or the
|
|
9
|
+
* ProcessSalesInvoices/ProcessPurchaseInvoices methods for write operations.
|
|
10
|
+
*
|
|
11
|
+
* Sales receivables: OutstandingDebtorItems
|
|
12
|
+
* Purchase payables: OutstandingCreditorItems
|
|
13
|
+
*
|
|
14
|
+
* Yuki service: Accounting.asmx
|
|
15
|
+
*/
|
|
16
|
+
export function registerInvoiceTools(server, client) {
|
|
17
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
18
|
+
// Sales invoices (debitors / receivables)
|
|
19
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
20
|
+
/**
|
|
21
|
+
* get_sales_invoices
|
|
22
|
+
*
|
|
23
|
+
* Retrieve outstanding (unpaid) sales invoice items for an administration.
|
|
24
|
+
* Returns debtor name, invoice reference, due date, open amount, and currency.
|
|
25
|
+
*
|
|
26
|
+
* Use this to track receivables: which customers still owe money, how much,
|
|
27
|
+
* and for how long. Optionally filter by due date.
|
|
28
|
+
*
|
|
29
|
+
* Rate cost: 1 request.
|
|
30
|
+
*/
|
|
31
|
+
server.registerTool("get_sales_invoices", {
|
|
32
|
+
description: "Retrieve outstanding (unpaid) sales invoices from Yuki. " +
|
|
33
|
+
"Returns debtor name, reference, due date, open amount, and currency for each item. " +
|
|
34
|
+
"Optionally filter by due date cutoff using dateOutstanding.",
|
|
35
|
+
inputSchema: {
|
|
36
|
+
dateOutstanding: z
|
|
37
|
+
.string()
|
|
38
|
+
.optional()
|
|
39
|
+
.describe("ISO date string (YYYY-MM-DD). When provided, returns only items " +
|
|
40
|
+
"outstanding as of this date. Omit for all outstanding items."),
|
|
41
|
+
sortOrder: z
|
|
42
|
+
.enum([
|
|
43
|
+
"ContactAsc",
|
|
44
|
+
"ContactDesc",
|
|
45
|
+
"AmountAsc",
|
|
46
|
+
"AmountDesc",
|
|
47
|
+
"DateAsc",
|
|
48
|
+
"DateDesc",
|
|
49
|
+
])
|
|
50
|
+
.optional()
|
|
51
|
+
.default("DateDesc")
|
|
52
|
+
.describe("Sort order for results."),
|
|
53
|
+
includeBankTransactions: z
|
|
54
|
+
.boolean()
|
|
55
|
+
.optional()
|
|
56
|
+
.default(false)
|
|
57
|
+
.describe("Include bank transaction data alongside invoice items."),
|
|
58
|
+
administrationId: z
|
|
59
|
+
.string()
|
|
60
|
+
.optional()
|
|
61
|
+
.describe("Administration ID (GUID). Defaults to YUKI_DOMAIN_ID env var."),
|
|
62
|
+
},
|
|
63
|
+
}, async ({ dateOutstanding, sortOrder, includeBankTransactions, administrationId }) => {
|
|
64
|
+
try {
|
|
65
|
+
const adminId = administrationId ?? client.defaultDomainId;
|
|
66
|
+
if (!adminId) {
|
|
67
|
+
throw new Error("administrationId is required (or set YUKI_DOMAIN_ID env var)");
|
|
68
|
+
}
|
|
69
|
+
const sessionID = await client.getSessionID();
|
|
70
|
+
let result;
|
|
71
|
+
if (dateOutstanding) {
|
|
72
|
+
// Filter by specific outstanding date
|
|
73
|
+
result = await client.callSoap({
|
|
74
|
+
service: "Accounting.asmx",
|
|
75
|
+
method: "OutstandingDebtorItemsByDateOutstanding",
|
|
76
|
+
params: {
|
|
77
|
+
sessionID,
|
|
78
|
+
administrationID: adminId,
|
|
79
|
+
DateOutstanding: dateOutstanding,
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
result = await client.callSoap({
|
|
85
|
+
service: "Accounting.asmx",
|
|
86
|
+
method: "OutstandingDebtorItems",
|
|
87
|
+
params: {
|
|
88
|
+
sessionID,
|
|
89
|
+
administrationID: adminId,
|
|
90
|
+
includeBankTransactions: includeBankTransactions ?? false,
|
|
91
|
+
sortOrder: sortOrder ?? "DateDesc",
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
const invoices = normalizeItems(result);
|
|
96
|
+
return {
|
|
97
|
+
content: [
|
|
98
|
+
{
|
|
99
|
+
type: "text",
|
|
100
|
+
text: JSON.stringify({
|
|
101
|
+
success: true,
|
|
102
|
+
count: invoices.length,
|
|
103
|
+
note: "Only outstanding (unpaid) items are returned.",
|
|
104
|
+
invoices,
|
|
105
|
+
}, null, 2),
|
|
106
|
+
},
|
|
107
|
+
],
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
112
|
+
return {
|
|
113
|
+
content: [
|
|
114
|
+
{
|
|
115
|
+
type: "text",
|
|
116
|
+
text: JSON.stringify({ success: false, error: message }, null, 2),
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
isError: true,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
124
|
+
// Purchase invoices (creditors / payables)
|
|
125
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
126
|
+
/**
|
|
127
|
+
* get_purchase_invoices
|
|
128
|
+
*
|
|
129
|
+
* Retrieve outstanding (unpaid) purchase invoice items for an administration.
|
|
130
|
+
* Returns creditor name, invoice reference, due date, open amount, and currency.
|
|
131
|
+
*
|
|
132
|
+
* Use this to track payables: which suppliers are still owed money.
|
|
133
|
+
*
|
|
134
|
+
* Rate cost: 1 request.
|
|
135
|
+
*/
|
|
136
|
+
server.registerTool("get_purchase_invoices", {
|
|
137
|
+
description: "Retrieve outstanding (unpaid) purchase invoices from Yuki. " +
|
|
138
|
+
"Returns creditor name, reference, due date, open amount, and currency for each item. " +
|
|
139
|
+
"Optionally filter by due date cutoff using dateOutstanding.",
|
|
140
|
+
inputSchema: {
|
|
141
|
+
dateOutstanding: z
|
|
142
|
+
.string()
|
|
143
|
+
.optional()
|
|
144
|
+
.describe("ISO date string (YYYY-MM-DD). When provided, returns only items " +
|
|
145
|
+
"outstanding as of this date. Omit for all outstanding items."),
|
|
146
|
+
sortOrder: z
|
|
147
|
+
.enum([
|
|
148
|
+
"ContactAsc",
|
|
149
|
+
"ContactDesc",
|
|
150
|
+
"AmountAsc",
|
|
151
|
+
"AmountDesc",
|
|
152
|
+
"DateAsc",
|
|
153
|
+
"DateDesc",
|
|
154
|
+
])
|
|
155
|
+
.optional()
|
|
156
|
+
.default("DateDesc")
|
|
157
|
+
.describe("Sort order for results."),
|
|
158
|
+
includeBankTransactions: z
|
|
159
|
+
.boolean()
|
|
160
|
+
.optional()
|
|
161
|
+
.default(false)
|
|
162
|
+
.describe("Include bank transaction data alongside invoice items."),
|
|
163
|
+
administrationId: z
|
|
164
|
+
.string()
|
|
165
|
+
.optional()
|
|
166
|
+
.describe("Administration ID (GUID). Defaults to YUKI_DOMAIN_ID env var."),
|
|
167
|
+
},
|
|
168
|
+
}, async ({ dateOutstanding, sortOrder, includeBankTransactions, administrationId }) => {
|
|
169
|
+
try {
|
|
170
|
+
const adminId = administrationId ?? client.defaultDomainId;
|
|
171
|
+
if (!adminId) {
|
|
172
|
+
throw new Error("administrationId is required (or set YUKI_DOMAIN_ID env var)");
|
|
173
|
+
}
|
|
174
|
+
const sessionID = await client.getSessionID();
|
|
175
|
+
let result;
|
|
176
|
+
if (dateOutstanding) {
|
|
177
|
+
result = await client.callSoap({
|
|
178
|
+
service: "Accounting.asmx",
|
|
179
|
+
method: "OutstandingCreditorItemsByDateOutstanding",
|
|
180
|
+
params: {
|
|
181
|
+
sessionID,
|
|
182
|
+
administrationID: adminId,
|
|
183
|
+
DateOutstanding: dateOutstanding,
|
|
184
|
+
},
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
result = await client.callSoap({
|
|
189
|
+
service: "Accounting.asmx",
|
|
190
|
+
method: "OutstandingCreditorItems",
|
|
191
|
+
params: {
|
|
192
|
+
sessionID,
|
|
193
|
+
administrationID: adminId,
|
|
194
|
+
includeBankTransactions: includeBankTransactions ?? false,
|
|
195
|
+
sortOrder: sortOrder ?? "DateDesc",
|
|
196
|
+
},
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
const invoices = normalizeItems(result);
|
|
200
|
+
return {
|
|
201
|
+
content: [
|
|
202
|
+
{
|
|
203
|
+
type: "text",
|
|
204
|
+
text: JSON.stringify({
|
|
205
|
+
success: true,
|
|
206
|
+
count: invoices.length,
|
|
207
|
+
note: "Only outstanding (unpaid) items are returned.",
|
|
208
|
+
invoices,
|
|
209
|
+
}, null, 2),
|
|
210
|
+
},
|
|
211
|
+
],
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
catch (err) {
|
|
215
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
216
|
+
return {
|
|
217
|
+
content: [
|
|
218
|
+
{
|
|
219
|
+
type: "text",
|
|
220
|
+
text: JSON.stringify({ success: false, error: message }, null, 2),
|
|
221
|
+
},
|
|
222
|
+
],
|
|
223
|
+
isError: true,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
// ── Zod schemas shared between write tools ────────────────────────────────────
|
|
229
|
+
/** Contact block used in both sales and purchase invoice XML documents. */
|
|
230
|
+
const ContactSchema = z.object({
|
|
231
|
+
contactCode: z.string().optional().describe("Existing Yuki contact code (e.g. 'CUST001'). When provided, Yuki will link to the existing contact."),
|
|
232
|
+
fullName: z.string().describe("Full company or person name"),
|
|
233
|
+
firstName: z.string().optional(),
|
|
234
|
+
lastName: z.string().optional(),
|
|
235
|
+
emailAddress: z.string().optional(),
|
|
236
|
+
phone: z.string().optional(),
|
|
237
|
+
countryCode: z.string().optional().default("NL").describe("ISO 3166-1 alpha-2 country code, e.g. 'NL'"),
|
|
238
|
+
city: z.string().optional(),
|
|
239
|
+
zipcode: z.string().optional(),
|
|
240
|
+
addressLine1: z.string().optional(),
|
|
241
|
+
addressLine2: z.string().optional(),
|
|
242
|
+
vatNumber: z.string().optional(),
|
|
243
|
+
cocNumber: z.string().optional(),
|
|
244
|
+
bankAccount: z.string().optional().describe("IBAN bank account number"),
|
|
245
|
+
bic: z.string().optional(),
|
|
246
|
+
contactType: z.enum(["Debtor", "Creditor", "Both", "Person"]).optional(),
|
|
247
|
+
});
|
|
248
|
+
// ── process_sales_invoice ─────────────────────────────────────────────────────
|
|
249
|
+
/**
|
|
250
|
+
* Register the write tools for sales and purchase invoices.
|
|
251
|
+
* Called from registerInvoiceTools — same server/client instance.
|
|
252
|
+
*/
|
|
253
|
+
export function registerInvoiceWriteTools(server, client) {
|
|
254
|
+
/**
|
|
255
|
+
* process_sales_invoice
|
|
256
|
+
*
|
|
257
|
+
* Create and book a sales invoice in Yuki.
|
|
258
|
+
* Yuki will send the invoice to the customer if emailToCustomer is true.
|
|
259
|
+
*
|
|
260
|
+
* Use this when:
|
|
261
|
+
* - A new sale needs to be invoiced
|
|
262
|
+
* - An order has been fulfilled and must be recorded in the ledger
|
|
263
|
+
* - An existing invoice from another system needs to be mirrored in Yuki
|
|
264
|
+
*
|
|
265
|
+
* Note: Sales.asmx uses sessionId / administrationId (lowercase d).
|
|
266
|
+
* Rate cost: 1 request.
|
|
267
|
+
*/
|
|
268
|
+
server.registerTool("process_sales_invoice", {
|
|
269
|
+
description: "Create and book a new sales invoice in Yuki. " +
|
|
270
|
+
"Accepts invoice header, contact, and line items. " +
|
|
271
|
+
"Optionally sends the invoice to the customer by email. " +
|
|
272
|
+
"Returns the Yuki response including the assigned document ID.",
|
|
273
|
+
inputSchema: {
|
|
274
|
+
reference: z.string().describe("Invoice number / reference (e.g. '2024-0042')"),
|
|
275
|
+
subject: z.string().describe("Invoice title shown to the customer"),
|
|
276
|
+
date: z.string().describe("Invoice date in YYYY-MM-DD format"),
|
|
277
|
+
dueDate: z.string().describe("Payment due date in YYYY-MM-DD format"),
|
|
278
|
+
contact: ContactSchema.describe("Customer contact details"),
|
|
279
|
+
lines: z.array(z.object({
|
|
280
|
+
description: z.string().describe("Line item description"),
|
|
281
|
+
quantity: z.number().optional().default(1).describe("Quantity (default 1)"),
|
|
282
|
+
salesPrice: z.number().describe("Unit price excluding VAT"),
|
|
283
|
+
vatPercentage: z.number().optional().default(21).describe("VAT percentage (default 21)"),
|
|
284
|
+
vatIncluded: z.boolean().optional().default(false).describe("Whether salesPrice already includes VAT"),
|
|
285
|
+
vatType: z.string().optional().default("NL_Normal").describe("VAT type code: NL_Normal (21%), NL_Reduced (9%), NL_Zero (0%), NL_None (exempt)"),
|
|
286
|
+
glAccountCode: z.string().optional().describe("GL account code to post this line to"),
|
|
287
|
+
productReference: z.string().optional().describe("Product/SKU reference code"),
|
|
288
|
+
})).min(1).describe("Invoice line items"),
|
|
289
|
+
paymentMethod: z.enum(["ElectronicTransfer", "DirectCollection", "Cash", "DebitCard", "CreditCard"])
|
|
290
|
+
.optional().default("ElectronicTransfer"),
|
|
291
|
+
currency: z.string().optional().default("EUR").describe("ISO 4217 currency code"),
|
|
292
|
+
process: z.boolean().optional().default(true).describe("Immediately process/finalise the invoice in Yuki"),
|
|
293
|
+
emailToCustomer: z.boolean().optional().default(false).describe("Send the invoice to the customer's email address"),
|
|
294
|
+
remarks: z.string().optional().describe("Internal remarks (not visible on invoice)"),
|
|
295
|
+
administrationId: z.string().optional().describe("Administration ID (GUID). Defaults to YUKI_DOMAIN_ID env var."),
|
|
296
|
+
},
|
|
297
|
+
}, async ({ reference, subject, date, dueDate, contact, lines, paymentMethod, currency, process: doProcess, emailToCustomer, remarks, administrationId }) => {
|
|
298
|
+
try {
|
|
299
|
+
const adminId = administrationId ?? client.defaultDomainId;
|
|
300
|
+
if (!adminId)
|
|
301
|
+
throw new Error("administrationId is required (or set YUKI_DOMAIN_ID env var)");
|
|
302
|
+
const sessionId = await client.getSessionID();
|
|
303
|
+
const xmlDoc = buildSalesInvoiceXml({ reference, subject, date, dueDate,
|
|
304
|
+
contact, lines, paymentMethod, currency, process: doProcess,
|
|
305
|
+
emailToCustomer, remarks });
|
|
306
|
+
// Sales.asmx uses sessionId / administrationId (lowercase d)
|
|
307
|
+
const result = await client.callSoap({
|
|
308
|
+
service: "Sales.asmx",
|
|
309
|
+
method: "ProcessSalesInvoices",
|
|
310
|
+
params: {
|
|
311
|
+
sessionId,
|
|
312
|
+
administrationId: adminId,
|
|
313
|
+
xmlDoc: new XmlValue(xmlDoc),
|
|
314
|
+
},
|
|
315
|
+
});
|
|
316
|
+
return {
|
|
317
|
+
content: [{ type: "text",
|
|
318
|
+
text: JSON.stringify({ success: true, reference, result }, null, 2) }],
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
catch (err) {
|
|
322
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
323
|
+
return {
|
|
324
|
+
content: [{ type: "text",
|
|
325
|
+
text: JSON.stringify({ success: false, error: message }, null, 2) }],
|
|
326
|
+
isError: true,
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
// ── process_purchase_invoice ───────────────────────────────────────────────
|
|
331
|
+
/**
|
|
332
|
+
* process_purchase_invoice
|
|
333
|
+
*
|
|
334
|
+
* Book an incoming purchase invoice in Yuki.
|
|
335
|
+
* Optionally attach the original PDF as a base64 string.
|
|
336
|
+
*
|
|
337
|
+
* Use this when:
|
|
338
|
+
* - An incoming invoice from a supplier needs to be booked
|
|
339
|
+
* - OCR has extracted invoice data from a PDF and it must be recorded
|
|
340
|
+
* - Automating the AP (accounts payable) workflow
|
|
341
|
+
*
|
|
342
|
+
* Note: Purchase.asmx uses sessionId / administrationId (lowercase d).
|
|
343
|
+
* Rate cost: 1 request.
|
|
344
|
+
*/
|
|
345
|
+
server.registerTool("process_purchase_invoice", {
|
|
346
|
+
description: "Book an incoming purchase invoice in Yuki. " +
|
|
347
|
+
"Accepts invoice totals, supplier contact, and line items. " +
|
|
348
|
+
"Optionally attach the original PDF as a base64 string. " +
|
|
349
|
+
"Returns the Yuki response including the assigned document ID.",
|
|
350
|
+
inputSchema: {
|
|
351
|
+
reference: z.string().optional().describe("Supplier's invoice number"),
|
|
352
|
+
date: z.string().describe("Invoice date in YYYY-MM-DD format"),
|
|
353
|
+
dueDate: z.string().optional().describe("Payment due date in YYYY-MM-DD format"),
|
|
354
|
+
invoiceAmount: z.number().describe("Total invoice amount including VAT"),
|
|
355
|
+
invoiceVatAmount: z.number().describe("Total VAT amount on the invoice"),
|
|
356
|
+
contact: ContactSchema.describe("Supplier contact details"),
|
|
357
|
+
lines: z.array(z.object({
|
|
358
|
+
description: z.string().optional().describe("Line item description"),
|
|
359
|
+
lineAmount: z.number().describe("Line amount excluding VAT"),
|
|
360
|
+
lineVatType: z.number().optional().default(2)
|
|
361
|
+
.describe("VAT type code: 1=None, 2=21% NL, 3=9% NL, 4=0% NL, 5=EU (see Yuki docs)"),
|
|
362
|
+
lineVatPercentage: z.number().optional().describe("VAT percentage (e.g. 21). Derived from lineVatType if omitted."),
|
|
363
|
+
glAccountCode: z.string().optional().describe("GL account code to post this line to (e.g. '4000' for cost of goods)"),
|
|
364
|
+
vatDeductibilityPercentage: z.number().optional().default(100)
|
|
365
|
+
.describe("Deductible VAT percentage (0-100). Use <100 for partially deductible costs."),
|
|
366
|
+
})).min(1).describe("Invoice line items"),
|
|
367
|
+
paymentMethod: z.enum(["Transfer", "DirectCollection", "Cash", "DebitCard", "CreditCard"])
|
|
368
|
+
.optional().default("Transfer"),
|
|
369
|
+
currency: z.string().optional().default("EUR"),
|
|
370
|
+
process: z.boolean().optional().default(true).describe("Immediately process/finalise in Yuki"),
|
|
371
|
+
documentFileName: z.string().optional().describe("PDF filename (e.g. 'invoice-2024-0042.pdf')"),
|
|
372
|
+
documentBase64: z.string().optional().describe("PDF content encoded as base64 string"),
|
|
373
|
+
remarks: z.string().optional(),
|
|
374
|
+
administrationId: z.string().optional().describe("Administration ID (GUID). Defaults to YUKI_DOMAIN_ID env var."),
|
|
375
|
+
},
|
|
376
|
+
}, async ({ reference, date, dueDate, invoiceAmount, invoiceVatAmount, contact, lines, paymentMethod, currency, process: doProcess, documentFileName, documentBase64, remarks, administrationId }) => {
|
|
377
|
+
try {
|
|
378
|
+
const adminId = administrationId ?? client.defaultDomainId;
|
|
379
|
+
if (!adminId)
|
|
380
|
+
throw new Error("administrationId is required (or set YUKI_DOMAIN_ID env var)");
|
|
381
|
+
const sessionId = await client.getSessionID();
|
|
382
|
+
const xmlDoc = buildPurchaseInvoiceXml({ reference, date, dueDate,
|
|
383
|
+
invoiceAmount, invoiceVatAmount, contact, lines, paymentMethod,
|
|
384
|
+
currency, process: doProcess, documentFileName, documentBase64, remarks });
|
|
385
|
+
// Purchase.asmx uses sessionId / administrationId (lowercase d)
|
|
386
|
+
const result = await client.callSoap({
|
|
387
|
+
service: "Purchase.asmx",
|
|
388
|
+
method: "ProcessPurchaseInvoices",
|
|
389
|
+
params: {
|
|
390
|
+
sessionId,
|
|
391
|
+
administrationId: adminId,
|
|
392
|
+
disableAutoCorrect: "",
|
|
393
|
+
xmlDoc: new XmlValue(xmlDoc),
|
|
394
|
+
},
|
|
395
|
+
});
|
|
396
|
+
return {
|
|
397
|
+
content: [{ type: "text",
|
|
398
|
+
text: JSON.stringify({ success: true, reference, result }, null, 2) }],
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
catch (err) {
|
|
402
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
403
|
+
return {
|
|
404
|
+
content: [{ type: "text",
|
|
405
|
+
text: JSON.stringify({ success: false, error: message }, null, 2) }],
|
|
406
|
+
isError: true,
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
// ── XML document builders ─────────────────────────────────────────────────────
|
|
412
|
+
/** Build the xmlDoc string for ProcessSalesInvoices. */
|
|
413
|
+
function buildSalesInvoiceXml(args) {
|
|
414
|
+
const x = escapeXml;
|
|
415
|
+
const { contact } = args;
|
|
416
|
+
const linesXml = args.lines.map(line => `
|
|
417
|
+
<InvoiceLine>
|
|
418
|
+
<Description>${x(line.description)}</Description>
|
|
419
|
+
<ProductQuantity>${line.quantity ?? 1}</ProductQuantity>
|
|
420
|
+
<Product>
|
|
421
|
+
<SalesPrice>${line.salesPrice}</SalesPrice>
|
|
422
|
+
<VATPercentage>${line.vatPercentage ?? 21}</VATPercentage>
|
|
423
|
+
<VATIncluded>${line.vatIncluded ?? false}</VATIncluded>
|
|
424
|
+
<VATType>${x(line.vatType ?? "NL_Normal")}</VATType>
|
|
425
|
+
${line.glAccountCode ? `<GLAccountCode>${x(line.glAccountCode)}</GLAccountCode>` : ""}
|
|
426
|
+
${line.productReference ? `<Reference>${x(line.productReference)}</Reference>` : ""}
|
|
427
|
+
</Product>
|
|
428
|
+
</InvoiceLine>`).join("");
|
|
429
|
+
return `<?xml version="1.0" encoding="utf-8"?>
|
|
430
|
+
<SalesInvoices xmlns="urn:xmlns:http://www.theyukicompany.com:salesinvoices"
|
|
431
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
|
432
|
+
<SalesInvoice>
|
|
433
|
+
<Reference>${x(args.reference)}</Reference>
|
|
434
|
+
<Subject>${x(args.subject)}</Subject>
|
|
435
|
+
<Date>${x(args.date)}</Date>
|
|
436
|
+
<DueDate>${x(args.dueDate)}</DueDate>
|
|
437
|
+
<PaymentMethod>${x(args.paymentMethod ?? "ElectronicTransfer")}</PaymentMethod>
|
|
438
|
+
<Currency>${x(args.currency ?? "EUR")}</Currency>
|
|
439
|
+
<Process>${args.process ?? true}</Process>
|
|
440
|
+
<EmailToCustomer>${args.emailToCustomer ?? false}</EmailToCustomer>
|
|
441
|
+
${args.remarks ? `<Remarks>${x(args.remarks)}</Remarks>` : ""}
|
|
442
|
+
<Contact>
|
|
443
|
+
${contact.contactCode ? `<ContactCode>${x(contact.contactCode)}</ContactCode>` : ""}
|
|
444
|
+
<FullName>${x(contact.fullName)}</FullName>
|
|
445
|
+
${contact.firstName ? `<FirstName>${x(contact.firstName)}</FirstName>` : ""}
|
|
446
|
+
${contact.lastName ? `<LastName>${x(contact.lastName)}</LastName>` : ""}
|
|
447
|
+
${contact.emailAddress ? `<EmailAddress>${x(contact.emailAddress)}</EmailAddress>` : ""}
|
|
448
|
+
${contact.countryCode ? `<CountryCode>${x(contact.countryCode)}</CountryCode>` : ""}
|
|
449
|
+
${contact.city ? `<City>${x(contact.city)}</City>` : ""}
|
|
450
|
+
${contact.zipcode ? `<Zipcode>${x(contact.zipcode)}</Zipcode>` : ""}
|
|
451
|
+
${contact.addressLine1 ? `<AddressLine_1>${x(contact.addressLine1)}</AddressLine_1>` : ""}
|
|
452
|
+
${contact.addressLine2 ? `<AddressLine_2>${x(contact.addressLine2)}</AddressLine_2>` : ""}
|
|
453
|
+
${contact.vatNumber ? `<VATNumber>${x(contact.vatNumber)}</VATNumber>` : ""}
|
|
454
|
+
${contact.cocNumber ? `<CoCNumber>${x(contact.cocNumber)}</CoCNumber>` : ""}
|
|
455
|
+
${contact.contactType ? `<ContactType>${x(contact.contactType)}</ContactType>` : ""}
|
|
456
|
+
</Contact>
|
|
457
|
+
<InvoiceLines>${linesXml}
|
|
458
|
+
</InvoiceLines>
|
|
459
|
+
</SalesInvoice>
|
|
460
|
+
</SalesInvoices>`;
|
|
461
|
+
}
|
|
462
|
+
/** Build the xmlDoc string for ProcessPurchaseInvoices. */
|
|
463
|
+
function buildPurchaseInvoiceXml(args) {
|
|
464
|
+
const x = escapeXml;
|
|
465
|
+
const { contact } = args;
|
|
466
|
+
const linesXml = args.lines.map(line => `
|
|
467
|
+
<InvoiceLine>
|
|
468
|
+
${line.description ? `<Description>${x(line.description)}</Description>` : ""}
|
|
469
|
+
<LineAmount>${line.lineAmount}</LineAmount>
|
|
470
|
+
<LineVATType>${line.lineVatType ?? 2}</LineVATType>
|
|
471
|
+
${line.lineVatPercentage !== undefined ? `<LineVATPercentage>${line.lineVatPercentage}</LineVATPercentage>` : ""}
|
|
472
|
+
${line.glAccountCode ? `<GLAccountCode>${x(line.glAccountCode)}</GLAccountCode>` : ""}
|
|
473
|
+
${line.vatDeductibilityPercentage !== undefined ? `<VATDeductibilityPercentage>${line.vatDeductibilityPercentage}</VATDeductibilityPercentage>` : ""}
|
|
474
|
+
</InvoiceLine>`).join("");
|
|
475
|
+
return `<?xml version="1.0" encoding="utf-8"?>
|
|
476
|
+
<PurchaseInvoices xmlns="urn:xmlns:http://www.theyukicompany.com:purchaseinvoices"
|
|
477
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
|
478
|
+
<PurchaseInvoice>
|
|
479
|
+
<Process>${args.process ?? true}</Process>
|
|
480
|
+
${args.reference ? `<Reference>${x(args.reference)}</Reference>` : ""}
|
|
481
|
+
<Date>${x(args.date)}</Date>
|
|
482
|
+
${args.dueDate ? `<DueDate>${x(args.dueDate)}</DueDate>` : ""}
|
|
483
|
+
<InvoiceAmount>${args.invoiceAmount}</InvoiceAmount>
|
|
484
|
+
<InvoiceVATAmount>${args.invoiceVatAmount}</InvoiceVATAmount>
|
|
485
|
+
<Currency>${x(args.currency ?? "EUR")}</Currency>
|
|
486
|
+
<PaymentMethod>${x(args.paymentMethod ?? "Transfer")}</PaymentMethod>
|
|
487
|
+
${args.remarks ? `<Remarks>${x(args.remarks)}</Remarks>` : ""}
|
|
488
|
+
${args.documentFileName ? `<DocumentFileName>${x(args.documentFileName)}</DocumentFileName>` : ""}
|
|
489
|
+
${args.documentBase64 ? `<DocumentBase64>${args.documentBase64}</DocumentBase64>` : ""}
|
|
490
|
+
<Contact>
|
|
491
|
+
${contact.contactCode ? `<ContactCode>${x(contact.contactCode)}</ContactCode>` : ""}
|
|
492
|
+
<FullName>${x(contact.fullName)}</FullName>
|
|
493
|
+
${contact.firstName ? `<FirstName>${x(contact.firstName)}</FirstName>` : ""}
|
|
494
|
+
${contact.lastName ? `<LastName>${x(contact.lastName)}</LastName>` : ""}
|
|
495
|
+
${contact.emailAddress ? `<EmailAddress>${x(contact.emailAddress)}</EmailAddress>` : ""}
|
|
496
|
+
${contact.countryCode ? `<CountryCode>${x(contact.countryCode)}</CountryCode>` : ""}
|
|
497
|
+
${contact.city ? `<City>${x(contact.city)}</City>` : ""}
|
|
498
|
+
${contact.zipcode ? `<Zipcode>${x(contact.zipcode)}</Zipcode>` : ""}
|
|
499
|
+
${contact.addressLine1 ? `<AddressLine_1>${x(contact.addressLine1)}</AddressLine_1>` : ""}
|
|
500
|
+
${contact.vatNumber ? `<VATNumber>${x(contact.vatNumber)}</VATNumber>` : ""}
|
|
501
|
+
${contact.cocNumber ? `<CoCNumber>${x(contact.cocNumber)}</CoCNumber>` : ""}
|
|
502
|
+
${contact.bankAccount ? `<BankAccount>${x(contact.bankAccount)}</BankAccount>` : ""}
|
|
503
|
+
${contact.bic ? `<BIC>${x(contact.bic)}</BIC>` : ""}
|
|
504
|
+
${contact.contactType ? `<ContactType>${x(contact.contactType)}</ContactType>` : ""}
|
|
505
|
+
</Contact>
|
|
506
|
+
<InvoiceLines>${linesXml}
|
|
507
|
+
</InvoiceLines>
|
|
508
|
+
</PurchaseInvoice>
|
|
509
|
+
</PurchaseInvoices>`;
|
|
510
|
+
}
|
|
511
|
+
/** Unwrap the parsed SOAP outstanding-items result into a flat array. */
|
|
512
|
+
function normalizeItems(result) {
|
|
513
|
+
if (!result)
|
|
514
|
+
return [];
|
|
515
|
+
if (Array.isArray(result))
|
|
516
|
+
return result;
|
|
517
|
+
const rec = result;
|
|
518
|
+
// Common Yuki wrappers for outstanding items
|
|
519
|
+
const wrappers = [
|
|
520
|
+
"DebtorItems", "CreditorItems",
|
|
521
|
+
"OutstandingItems", "Items", "Rows",
|
|
522
|
+
];
|
|
523
|
+
const itemTags = [
|
|
524
|
+
"DebtorItem", "CreditorItem",
|
|
525
|
+
"OutstandingItem", "Item", "Row",
|
|
526
|
+
];
|
|
527
|
+
for (const wrapper of wrappers) {
|
|
528
|
+
const c = rec[wrapper];
|
|
529
|
+
if (!c)
|
|
530
|
+
continue;
|
|
531
|
+
if (Array.isArray(c))
|
|
532
|
+
return c;
|
|
533
|
+
const inner = c;
|
|
534
|
+
for (const tag of itemTags) {
|
|
535
|
+
if (Array.isArray(inner[tag]))
|
|
536
|
+
return inner[tag];
|
|
537
|
+
if (inner[tag])
|
|
538
|
+
return [inner[tag]];
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
for (const tag of itemTags) {
|
|
542
|
+
if (Array.isArray(rec[tag]))
|
|
543
|
+
return rec[tag];
|
|
544
|
+
if (rec[tag])
|
|
545
|
+
return [rec[tag]];
|
|
546
|
+
}
|
|
547
|
+
return [result];
|
|
548
|
+
}
|
|
549
|
+
//# sourceMappingURL=invoices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoices.js","sourceRoot":"","sources":["../../src/tools/invoices.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { YukiClient } from "../yuki-client.js";
|
|
3
|
+
/**
|
|
4
|
+
* Register tools for working with Yuki relations (contacts).
|
|
5
|
+
*
|
|
6
|
+
* Relations are debitors (customers) and creditors (suppliers) in Yuki.
|
|
7
|
+
* The Contact service uses domainID (the same GUID as your administrationID).
|
|
8
|
+
*
|
|
9
|
+
* Yuki service: Contact.asmx
|
|
10
|
+
* Method: SearchContacts(sessionID, domainID, searchOption, searchValue,
|
|
11
|
+
* sortOrder, modifiedAfter, active, pageNumber)
|
|
12
|
+
* Max results: 100 per page — use pageNumber for pagination.
|
|
13
|
+
*/
|
|
14
|
+
export declare function registerRelationTools(server: McpServer, client: YukiClient): void;
|
|
15
|
+
/**
|
|
16
|
+
* Register the upsert_contact write tool.
|
|
17
|
+
* Call this from registerRelationTools — same server/client instance.
|
|
18
|
+
*/
|
|
19
|
+
export declare function registerContactWriteTools(server: McpServer, client: YukiClient): void;
|
|
20
|
+
//# sourceMappingURL=relations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relations.d.ts","sourceRoot":"","sources":["../../src/tools/relations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAuB,MAAM,mBAAmB,CAAC;AAEpE;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,UAAU,GACjB,IAAI,CA+HN;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,UAAU,GACjB,IAAI,CAwFN"}
|