noxctl 0.1.0 → 0.2.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.
Files changed (101) hide show
  1. package/README.md +186 -29
  2. package/dist/auth.d.ts +15 -7
  3. package/dist/auth.d.ts.map +1 -1
  4. package/dist/auth.js +123 -22
  5. package/dist/auth.js.map +1 -1
  6. package/dist/cli.d.ts +2 -1
  7. package/dist/cli.d.ts.map +1 -1
  8. package/dist/cli.js +948 -16
  9. package/dist/cli.js.map +1 -1
  10. package/dist/config-paths.d.ts +2 -0
  11. package/dist/config-paths.d.ts.map +1 -0
  12. package/dist/config-paths.js +7 -0
  13. package/dist/config-paths.js.map +1 -0
  14. package/dist/credentials-store.d.ts +13 -3
  15. package/dist/credentials-store.d.ts.map +1 -1
  16. package/dist/credentials-store.js +154 -48
  17. package/dist/credentials-store.js.map +1 -1
  18. package/dist/fortnox-client.d.ts.map +1 -1
  19. package/dist/fortnox-client.js +14 -2
  20. package/dist/fortnox-client.js.map +1 -1
  21. package/dist/index.d.ts +15 -1
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +86 -2
  24. package/dist/index.js.map +1 -1
  25. package/dist/operations/costcenters.d.ts +20 -0
  26. package/dist/operations/costcenters.d.ts.map +1 -0
  27. package/dist/operations/costcenters.js +38 -0
  28. package/dist/operations/costcenters.js.map +1 -0
  29. package/dist/operations/invoice-payments.d.ts +21 -0
  30. package/dist/operations/invoice-payments.d.ts.map +1 -0
  31. package/dist/operations/invoice-payments.js +40 -0
  32. package/dist/operations/invoice-payments.js.map +1 -0
  33. package/dist/operations/offers.d.ts +25 -0
  34. package/dist/operations/offers.d.ts.map +1 -0
  35. package/dist/operations/offers.js +48 -0
  36. package/dist/operations/offers.js.map +1 -0
  37. package/dist/operations/orders.d.ts +24 -0
  38. package/dist/operations/orders.d.ts.map +1 -0
  39. package/dist/operations/orders.js +44 -0
  40. package/dist/operations/orders.js.map +1 -0
  41. package/dist/operations/pricelists.d.ts +36 -0
  42. package/dist/operations/pricelists.d.ts.map +1 -0
  43. package/dist/operations/pricelists.js +52 -0
  44. package/dist/operations/pricelists.js.map +1 -0
  45. package/dist/operations/projects.d.ts +19 -0
  46. package/dist/operations/projects.d.ts.map +1 -0
  47. package/dist/operations/projects.js +33 -0
  48. package/dist/operations/projects.js.map +1 -0
  49. package/dist/operations/supplier-invoice-payments.d.ts +20 -0
  50. package/dist/operations/supplier-invoice-payments.d.ts.map +1 -0
  51. package/dist/operations/supplier-invoice-payments.js +34 -0
  52. package/dist/operations/supplier-invoice-payments.js.map +1 -0
  53. package/dist/operations/taxreductions.d.ts +19 -0
  54. package/dist/operations/taxreductions.d.ts.map +1 -0
  55. package/dist/operations/taxreductions.js +28 -0
  56. package/dist/operations/taxreductions.js.map +1 -0
  57. package/dist/profile-name.d.ts +9 -0
  58. package/dist/profile-name.d.ts.map +1 -0
  59. package/dist/profile-name.js +58 -0
  60. package/dist/profile-name.js.map +1 -0
  61. package/dist/profiles.d.ts +55 -0
  62. package/dist/profiles.d.ts.map +1 -0
  63. package/dist/profiles.js +210 -0
  64. package/dist/profiles.js.map +1 -0
  65. package/dist/tools/costcenters.d.ts +3 -0
  66. package/dist/tools/costcenters.d.ts.map +1 -0
  67. package/dist/tools/costcenters.js +79 -0
  68. package/dist/tools/costcenters.js.map +1 -0
  69. package/dist/tools/invoice-payments.d.ts +3 -0
  70. package/dist/tools/invoice-payments.d.ts.map +1 -0
  71. package/dist/tools/invoice-payments.js +60 -0
  72. package/dist/tools/invoice-payments.js.map +1 -0
  73. package/dist/tools/offers.d.ts +3 -0
  74. package/dist/tools/offers.d.ts.map +1 -0
  75. package/dist/tools/offers.js +130 -0
  76. package/dist/tools/offers.js.map +1 -0
  77. package/dist/tools/orders.d.ts +3 -0
  78. package/dist/tools/orders.d.ts.map +1 -0
  79. package/dist/tools/orders.js +114 -0
  80. package/dist/tools/orders.js.map +1 -0
  81. package/dist/tools/pricelists.d.ts +3 -0
  82. package/dist/tools/pricelists.d.ts.map +1 -0
  83. package/dist/tools/pricelists.js +104 -0
  84. package/dist/tools/pricelists.js.map +1 -0
  85. package/dist/tools/projects.d.ts +3 -0
  86. package/dist/tools/projects.d.ts.map +1 -0
  87. package/dist/tools/projects.js +80 -0
  88. package/dist/tools/projects.js.map +1 -0
  89. package/dist/tools/supplier-invoice-payments.d.ts +3 -0
  90. package/dist/tools/supplier-invoice-payments.d.ts.map +1 -0
  91. package/dist/tools/supplier-invoice-payments.js +60 -0
  92. package/dist/tools/supplier-invoice-payments.js.map +1 -0
  93. package/dist/tools/taxreductions.d.ts +3 -0
  94. package/dist/tools/taxreductions.d.ts.map +1 -0
  95. package/dist/tools/taxreductions.js +51 -0
  96. package/dist/tools/taxreductions.js.map +1 -0
  97. package/dist/views.d.ts +20 -0
  98. package/dist/views.d.ts.map +1 -1
  99. package/dist/views.js +177 -0
  100. package/dist/views.js.map +1 -1
  101. package/package.json +1 -1
@@ -0,0 +1,79 @@
1
+ import { z } from 'zod';
2
+ import { listCostCenters, getCostCenter, createCostCenter, updateCostCenter, deleteCostCenter, } from '../operations/costcenters.js';
3
+ import { costCenterListColumns, costCenterDetailColumns } from '../views.js';
4
+ import { detailResponse, dryRunResponse, listResponse, requireConfirmation, textResponse, } from '../tool-output.js';
5
+ export function registerCostCenterTools(server) {
6
+ server.tool('fortnox_list_costcenters', 'Lista kostnadsställen i Fortnox. Returnerar: Code, Description, Active.', {
7
+ page: z.number().optional().describe('Sidnummer (default 1)'),
8
+ limit: z.number().optional().describe('Antal per sida (default 100, max 500)'),
9
+ all: z.boolean().optional().describe('Hämta alla sidor (ignorerar page/limit)'),
10
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
11
+ }, async ({ page, limit, all, includeRaw }) => {
12
+ const data = await listCostCenters({ page, limit, all });
13
+ return listResponse(data.CostCenters ?? [], costCenterListColumns, data, data.MetaInformation, includeRaw);
14
+ });
15
+ server.tool('fortnox_get_costcenter', 'Hämta ett enskilt kostnadsställe från Fortnox. Returnerar: Code, Description, Active, Note.', {
16
+ code: z.string().describe('Kod för kostnadsstället'),
17
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
18
+ }, async ({ code, includeRaw }) => {
19
+ const data = await getCostCenter(code);
20
+ return detailResponse(data, costCenterDetailColumns, data, includeRaw);
21
+ });
22
+ server.tool('fortnox_create_costcenter', 'Skapa ett nytt kostnadsställe i Fortnox', {
23
+ Code: z.string().describe('Kod för kostnadsstället'),
24
+ Description: z.string().describe('Beskrivning'),
25
+ Active: z.boolean().optional().describe('Om kostnadsstället är aktivt'),
26
+ Note: z.string().optional().describe('Anteckning'),
27
+ confirm: z.boolean().optional().describe('Bekräfta att kostnadsstället ska skapas'),
28
+ dryRun: z
29
+ .boolean()
30
+ .optional()
31
+ .describe('Visa vad som skulle skickas utan att skapa kostnadsstället'),
32
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
33
+ }, async ({ confirm, dryRun, includeRaw, ...params }) => {
34
+ if (dryRun) {
35
+ return dryRunResponse(`create cost center "${params.Code}"`, { CostCenter: params });
36
+ }
37
+ if (!confirm)
38
+ requireConfirmation(`create cost center "${params.Code}"`);
39
+ const data = await createCostCenter(params);
40
+ return detailResponse(data, costCenterDetailColumns, data, includeRaw);
41
+ });
42
+ server.tool('fortnox_update_costcenter', 'Uppdatera ett befintligt kostnadsställe i Fortnox', {
43
+ code: z.string().describe('Kod för kostnadsstället att uppdatera'),
44
+ Description: z.string().optional().describe('Beskrivning'),
45
+ Active: z.boolean().optional().describe('Om kostnadsstället är aktivt'),
46
+ Note: z.string().optional().describe('Anteckning'),
47
+ confirm: z.boolean().optional().describe('Bekräfta att kostnadsstället ska uppdateras'),
48
+ dryRun: z
49
+ .boolean()
50
+ .optional()
51
+ .describe('Visa vad som skulle skickas utan att uppdatera kostnadsstället'),
52
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
53
+ }, async ({ code, confirm, dryRun, includeRaw, ...fields }) => {
54
+ if (dryRun) {
55
+ return dryRunResponse(`update cost center ${code}`, { CostCenter: fields });
56
+ }
57
+ if (!confirm)
58
+ requireConfirmation(`update cost center ${code}`);
59
+ const data = await updateCostCenter(code, fields);
60
+ return detailResponse(data, costCenterDetailColumns, data, includeRaw);
61
+ });
62
+ server.tool('fortnox_delete_costcenter', 'Ta bort ett kostnadsställe från Fortnox', {
63
+ code: z.string().describe('Kod för kostnadsstället att ta bort'),
64
+ confirm: z.boolean().optional().describe('Bekräfta att kostnadsstället ska tas bort'),
65
+ dryRun: z
66
+ .boolean()
67
+ .optional()
68
+ .describe('Visa vad som skulle göras utan att ta bort kostnadsstället'),
69
+ }, async ({ code, confirm, dryRun }) => {
70
+ if (dryRun) {
71
+ return dryRunResponse(`delete cost center ${code}`);
72
+ }
73
+ if (!confirm)
74
+ requireConfirmation(`delete cost center ${code}`);
75
+ await deleteCostCenter(code);
76
+ return textResponse(`Cost center ${code} deleted.`);
77
+ });
78
+ }
79
+ //# sourceMappingURL=costcenters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"costcenters.js","sourceRoot":"","sources":["../../src/tools/costcenters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerInvoicePaymentTools(server: McpServer): void;
3
+ //# sourceMappingURL=invoice-payments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoice-payments.d.ts","sourceRoot":"","sources":["../../src/tools/invoice-payments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAmBpE,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkFnE"}
@@ -0,0 +1,60 @@
1
+ import { z } from 'zod';
2
+ import { listInvoicePayments, getInvoicePayment, createInvoicePayment, deleteInvoicePayment, } from '../operations/invoice-payments.js';
3
+ import { invoicePaymentListColumns, invoicePaymentDetailColumns } from '../views.js';
4
+ import { confirmationResponse, detailResponse, dryRunResponse, listResponse, requireConfirmation, } from '../tool-output.js';
5
+ const PaymentNumberSchema = z.string().regex(/^\d+$/, 'Payment number must be numeric');
6
+ export function registerInvoicePaymentTools(server) {
7
+ server.tool('fortnox_list_invoice_payments', 'Lista inbetalningar (kundfakturor) i Fortnox. Returnerar: Number, InvoiceNumber, PaymentDate, Amount.', {
8
+ invoiceNumber: z.string().optional().describe('Filtrera på fakturanummer'),
9
+ page: z.number().optional().describe('Sidnummer'),
10
+ limit: z.number().optional().describe('Antal per sida'),
11
+ all: z.boolean().optional().describe('Hämta alla sidor'),
12
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
13
+ }, async ({ includeRaw, ...params }) => {
14
+ const data = await listInvoicePayments(params);
15
+ return listResponse(data.InvoicePayments ?? [], invoicePaymentListColumns, data, data.MetaInformation, includeRaw);
16
+ });
17
+ server.tool('fortnox_get_invoice_payment', 'Hämta en enskild inbetalning. Returnerar: Number, InvoiceNumber, PaymentDate, Amount, Currency, Source.', {
18
+ paymentNumber: PaymentNumberSchema.describe('Betalningsnummer'),
19
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
20
+ }, async ({ paymentNumber, includeRaw }) => {
21
+ const payment = await getInvoicePayment(paymentNumber);
22
+ return detailResponse(payment, invoicePaymentDetailColumns, payment, includeRaw);
23
+ });
24
+ server.tool('fortnox_create_invoice_payment', 'Registrera en inbetalning mot en kundfaktura i Fortnox', {
25
+ InvoiceNumber: z.number().describe('Fakturanummer'),
26
+ Amount: z.number().describe('Belopp'),
27
+ PaymentDate: z.string().describe('Betalningsdatum (YYYY-MM-DD)'),
28
+ Source: z.string().optional().describe('Betalningskälla'),
29
+ confirm: z.boolean().optional().describe('Bekräfta att betalningen ska registreras'),
30
+ dryRun: z
31
+ .boolean()
32
+ .optional()
33
+ .describe('Visa vad som skulle skickas utan att registrera betalningen'),
34
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
35
+ }, async ({ confirm, dryRun, includeRaw, ...params }) => {
36
+ if (dryRun) {
37
+ return dryRunResponse(`register payment for invoice ${params.InvoiceNumber}`, {
38
+ InvoicePayment: params,
39
+ });
40
+ }
41
+ if (!confirm)
42
+ requireConfirmation(`register payment for invoice ${params.InvoiceNumber}`);
43
+ const payment = await createInvoicePayment(params);
44
+ return detailResponse(payment, invoicePaymentDetailColumns, payment, includeRaw);
45
+ });
46
+ server.tool('fortnox_delete_invoice_payment', 'Ta bort en inbetalning i Fortnox', {
47
+ paymentNumber: PaymentNumberSchema.describe('Betalningsnummer att ta bort'),
48
+ confirm: z.boolean().optional().describe('Bekräfta att betalningen ska tas bort'),
49
+ dryRun: z.boolean().optional().describe('Visa åtgärden utan att ta bort betalningen'),
50
+ }, async ({ paymentNumber, confirm, dryRun }) => {
51
+ if (dryRun) {
52
+ return dryRunResponse(`delete invoice payment ${paymentNumber}`);
53
+ }
54
+ if (!confirm)
55
+ requireConfirmation(`delete invoice payment ${paymentNumber}`);
56
+ await deleteInvoicePayment(paymentNumber);
57
+ return confirmationResponse(`Inbetalning ${paymentNumber} borttagen.`, {});
58
+ });
59
+ }
60
+ //# sourceMappingURL=invoice-payments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoice-payments.js","sourceRoot":"","sources":["../../src/tools/invoice-payments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerOfferTools(server: McpServer): void;
3
+ //# sourceMappingURL=offers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"offers.d.ts","sourceRoot":"","sources":["../../src/tools/offers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgCpE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoK1D"}
@@ -0,0 +1,130 @@
1
+ import { z } from 'zod';
2
+ import { listOffers, getOffer, createOffer, updateOffer, createInvoiceFromOffer, createOrderFromOffer, } from '../operations/offers.js';
3
+ import { offerListColumns, offerDetailColumns, offerConfirmColumns } from '../views.js';
4
+ import { confirmationResponse, detailResponse, dryRunResponse, listResponse, requireConfirmation, } from '../tool-output.js';
5
+ const OfferRowSchema = z.object({
6
+ ArticleNumber: z.string().optional().describe('Artikelnummer'),
7
+ Description: z.string().describe('Beskrivning'),
8
+ DeliveredQuantity: z.number().describe('Antal'),
9
+ Price: z.number().describe('Pris per enhet (exkl. moms)'),
10
+ AccountNumber: z.number().optional().describe('Kontonummer (default: 3001)'),
11
+ VAT: z.number().optional().describe('Momssats i procent (default: 25)'),
12
+ Unit: z.string().optional().describe('Enhet (t.ex. "st", "tim")'),
13
+ Discount: z.number().optional().describe('Rabatt i procent'),
14
+ });
15
+ const DocumentNumberSchema = z.string().regex(/^\d+$/, 'Document number must be numeric');
16
+ export function registerOfferTools(server) {
17
+ server.tool('fortnox_list_offers', 'Lista/filtrera offerter i Fortnox. Returnerar: DocumentNumber, CustomerName, OfferDate, ExpireDate, Total.', {
18
+ filter: z
19
+ .enum(['cancelled', 'expired', 'ordercreated', 'invoicecreated'])
20
+ .optional()
21
+ .describe('Filtrera offerter'),
22
+ customerNumber: z.string().optional().describe('Filtrera på kundnummer'),
23
+ fromDate: z.string().optional().describe('Från datum (YYYY-MM-DD)'),
24
+ toDate: z.string().optional().describe('Till datum (YYYY-MM-DD)'),
25
+ page: z.number().optional().describe('Sidnummer'),
26
+ limit: z.number().optional().describe('Antal per sida'),
27
+ all: z.boolean().optional().describe('Hämta alla sidor'),
28
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
29
+ }, async ({ includeRaw, ...params }) => {
30
+ const data = await listOffers(params);
31
+ return listResponse(data.Offers ?? [], offerListColumns, data, data.MetaInformation, includeRaw);
32
+ });
33
+ server.tool('fortnox_get_offer', 'Hämta en enskild offert från Fortnox. Returnerar: DocumentNumber, CustomerNumber, CustomerName, OfferDate, ExpireDate, Total, Currency, OurReference, OfferRows.', {
34
+ documentNumber: DocumentNumberSchema.describe('Offertnummer'),
35
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
36
+ }, async ({ documentNumber, includeRaw }) => {
37
+ const offer = await getOffer(documentNumber);
38
+ return detailResponse(offer, offerDetailColumns, offer, includeRaw);
39
+ });
40
+ server.tool('fortnox_create_offer', 'Skapa en offert i Fortnox', {
41
+ CustomerNumber: z.string().describe('Kundnummer'),
42
+ OfferRows: z.array(OfferRowSchema).describe('Offertrader'),
43
+ ExpireDate: z.string().optional().describe('Utgångsdatum (YYYY-MM-DD)'),
44
+ OfferDate: z.string().optional().describe('Offertdatum (YYYY-MM-DD)'),
45
+ OurReference: z.string().optional().describe('Vår referens'),
46
+ YourReference: z.string().optional().describe('Er referens'),
47
+ Remarks: z.string().optional().describe('Anmärkning/kommentar'),
48
+ Currency: z.string().optional().describe('Valutakod (default: SEK)'),
49
+ confirm: z.boolean().optional().describe('Bekräfta att offerten ska skapas'),
50
+ dryRun: z
51
+ .boolean()
52
+ .optional()
53
+ .describe('Visa vad som skulle skickas utan att skapa offerten'),
54
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
55
+ }, async ({ confirm, dryRun, includeRaw, ...params }) => {
56
+ if (dryRun) {
57
+ return dryRunResponse(`create offer for customer ${params.CustomerNumber}`, {
58
+ Offer: params,
59
+ });
60
+ }
61
+ if (!confirm)
62
+ requireConfirmation(`create offer for customer ${params.CustomerNumber}`);
63
+ const offer = await createOffer(params);
64
+ return detailResponse(offer, offerDetailColumns, offer, includeRaw);
65
+ });
66
+ server.tool('fortnox_update_offer', 'Uppdatera en befintlig offert i Fortnox', {
67
+ documentNumber: DocumentNumberSchema.describe('Offertnummer att uppdatera'),
68
+ CustomerNumber: z.string().optional().describe('Kundnummer'),
69
+ OfferRows: z
70
+ .array(z.object({
71
+ ArticleNumber: z.string().optional().describe('Artikelnummer'),
72
+ Description: z.string().optional().describe('Beskrivning'),
73
+ DeliveredQuantity: z.number().optional().describe('Antal'),
74
+ Price: z.number().optional().describe('Pris per enhet (exkl. moms)'),
75
+ AccountNumber: z.number().optional().describe('Kontonummer'),
76
+ VAT: z.number().optional().describe('Momssats i procent'),
77
+ Unit: z.string().optional().describe('Enhet'),
78
+ Discount: z.number().optional().describe('Rabatt i procent'),
79
+ }))
80
+ .optional()
81
+ .describe('Offertrader (ersätter alla befintliga rader)'),
82
+ ExpireDate: z.string().optional().describe('Utgångsdatum (YYYY-MM-DD)'),
83
+ OfferDate: z.string().optional().describe('Offertdatum (YYYY-MM-DD)'),
84
+ OurReference: z.string().optional().describe('Vår referens'),
85
+ YourReference: z.string().optional().describe('Er referens'),
86
+ Remarks: z.string().optional().describe('Anmärkning/kommentar'),
87
+ Currency: z.string().optional().describe('Valutakod'),
88
+ confirm: z.boolean().optional().describe('Bekräfta att offerten ska uppdateras'),
89
+ dryRun: z
90
+ .boolean()
91
+ .optional()
92
+ .describe('Visa vad som skulle skickas utan att uppdatera offerten'),
93
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
94
+ }, async ({ documentNumber, confirm, dryRun, includeRaw, ...fields }) => {
95
+ if (dryRun) {
96
+ return dryRunResponse(`update offer ${documentNumber}`, { Offer: fields });
97
+ }
98
+ if (!confirm)
99
+ requireConfirmation(`update offer ${documentNumber}`);
100
+ const offer = await updateOffer(documentNumber, fields);
101
+ return detailResponse(offer, offerDetailColumns, offer, includeRaw);
102
+ });
103
+ server.tool('fortnox_create_invoice_from_offer', 'Skapa en faktura från en offert i Fortnox', {
104
+ documentNumber: DocumentNumberSchema.describe('Offertnummer'),
105
+ confirm: z.boolean().optional().describe('Bekräfta att faktura ska skapas från offerten'),
106
+ dryRun: z.boolean().optional().describe('Visa åtgärden utan att skapa fakturan'),
107
+ }, async ({ documentNumber, confirm, dryRun }) => {
108
+ if (dryRun) {
109
+ return dryRunResponse(`create invoice from offer ${documentNumber}`);
110
+ }
111
+ if (!confirm)
112
+ requireConfirmation(`create invoice from offer ${documentNumber}`);
113
+ const invoice = await createInvoiceFromOffer(documentNumber);
114
+ return confirmationResponse(`Faktura skapad från offert ${documentNumber}. Fakturanummer: ${invoice.DocumentNumber}`, invoice, offerConfirmColumns);
115
+ });
116
+ server.tool('fortnox_create_order_from_offer', 'Skapa en order från en offert i Fortnox', {
117
+ documentNumber: DocumentNumberSchema.describe('Offertnummer'),
118
+ confirm: z.boolean().optional().describe('Bekräfta att order ska skapas från offerten'),
119
+ dryRun: z.boolean().optional().describe('Visa åtgärden utan att skapa ordern'),
120
+ }, async ({ documentNumber, confirm, dryRun }) => {
121
+ if (dryRun) {
122
+ return dryRunResponse(`create order from offer ${documentNumber}`);
123
+ }
124
+ if (!confirm)
125
+ requireConfirmation(`create order from offer ${documentNumber}`);
126
+ const order = await createOrderFromOffer(documentNumber);
127
+ return confirmationResponse(`Order skapad från offert ${documentNumber}. Ordernummer: ${order.DocumentNumber}`, order, offerConfirmColumns);
128
+ });
129
+ }
130
+ //# sourceMappingURL=offers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"offers.js","sourceRoot":"","sources":["../../src/tools/offers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerOrderTools(server: McpServer): void;
3
+ //# sourceMappingURL=orders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orders.d.ts","sourceRoot":"","sources":["../../src/tools/orders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA+BpE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0I1D"}
@@ -0,0 +1,114 @@
1
+ import { z } from 'zod';
2
+ import { listOrders, getOrder, createOrder, updateOrder, createInvoiceFromOrder, } from '../operations/orders.js';
3
+ import { orderListColumns, orderDetailColumns, orderConfirmColumns } from '../views.js';
4
+ import { confirmationResponse, detailResponse, dryRunResponse, listResponse, requireConfirmation, } from '../tool-output.js';
5
+ const OrderRowSchema = z.object({
6
+ ArticleNumber: z.string().optional().describe('Artikelnummer'),
7
+ Description: z.string().describe('Beskrivning'),
8
+ DeliveredQuantity: z.number().describe('Antal'),
9
+ Price: z.number().describe('Pris per enhet (exkl. moms)'),
10
+ AccountNumber: z.number().optional().describe('Kontonummer (default: 3001)'),
11
+ VAT: z.number().optional().describe('Momssats i procent (default: 25)'),
12
+ Unit: z.string().optional().describe('Enhet (t.ex. "st", "tim")'),
13
+ Discount: z.number().optional().describe('Rabatt i procent'),
14
+ });
15
+ const DocumentNumberSchema = z.string().regex(/^\d+$/, 'Document number must be numeric');
16
+ export function registerOrderTools(server) {
17
+ server.tool('fortnox_list_orders', 'Lista/filtrera ordrar i Fortnox. Returnerar: DocumentNumber, CustomerName, OrderDate, DeliveryDate, Total.', {
18
+ filter: z
19
+ .enum(['cancelled', 'invoicecreated', 'invoicenotcreated'])
20
+ .optional()
21
+ .describe('Filtrera ordrar'),
22
+ customerNumber: z.string().optional().describe('Filtrera på kundnummer'),
23
+ fromDate: z.string().optional().describe('Från datum (YYYY-MM-DD)'),
24
+ toDate: z.string().optional().describe('Till datum (YYYY-MM-DD)'),
25
+ page: z.number().optional().describe('Sidnummer'),
26
+ limit: z.number().optional().describe('Antal per sida'),
27
+ all: z.boolean().optional().describe('Hämta alla sidor'),
28
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
29
+ }, async ({ includeRaw, ...params }) => {
30
+ const data = await listOrders(params);
31
+ return listResponse(data.Orders ?? [], orderListColumns, data, data.MetaInformation, includeRaw);
32
+ });
33
+ server.tool('fortnox_get_order', 'Hämta en enskild order från Fortnox. Returnerar: DocumentNumber, CustomerNumber, CustomerName, OrderDate, DeliveryDate, Total, Currency, OurReference, OrderRows.', {
34
+ documentNumber: DocumentNumberSchema.describe('Ordernummer'),
35
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
36
+ }, async ({ documentNumber, includeRaw }) => {
37
+ const order = await getOrder(documentNumber);
38
+ return detailResponse(order, orderDetailColumns, order, includeRaw);
39
+ });
40
+ server.tool('fortnox_create_order', 'Skapa en order i Fortnox', {
41
+ CustomerNumber: z.string().describe('Kundnummer'),
42
+ OrderRows: z.array(OrderRowSchema).describe('Orderrader'),
43
+ DeliveryDate: z.string().optional().describe('Leveransdatum (YYYY-MM-DD)'),
44
+ OrderDate: z.string().optional().describe('Orderdatum (YYYY-MM-DD)'),
45
+ OurReference: z.string().optional().describe('Vår referens'),
46
+ YourReference: z.string().optional().describe('Er referens'),
47
+ Remarks: z.string().optional().describe('Anmärkning/kommentar'),
48
+ Currency: z.string().optional().describe('Valutakod (default: SEK)'),
49
+ confirm: z.boolean().optional().describe('Bekräfta att ordern ska skapas'),
50
+ dryRun: z.boolean().optional().describe('Visa vad som skulle skickas utan att skapa ordern'),
51
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
52
+ }, async ({ confirm, dryRun, includeRaw, ...params }) => {
53
+ if (dryRun) {
54
+ return dryRunResponse(`create order for customer ${params.CustomerNumber}`, {
55
+ Order: params,
56
+ });
57
+ }
58
+ if (!confirm)
59
+ requireConfirmation(`create order for customer ${params.CustomerNumber}`);
60
+ const order = await createOrder(params);
61
+ return detailResponse(order, orderDetailColumns, order, includeRaw);
62
+ });
63
+ server.tool('fortnox_update_order', 'Uppdatera en befintlig order i Fortnox', {
64
+ documentNumber: DocumentNumberSchema.describe('Ordernummer att uppdatera'),
65
+ CustomerNumber: z.string().optional().describe('Kundnummer'),
66
+ OrderRows: z
67
+ .array(z.object({
68
+ ArticleNumber: z.string().optional().describe('Artikelnummer'),
69
+ Description: z.string().optional().describe('Beskrivning'),
70
+ DeliveredQuantity: z.number().optional().describe('Antal'),
71
+ Price: z.number().optional().describe('Pris per enhet (exkl. moms)'),
72
+ AccountNumber: z.number().optional().describe('Kontonummer'),
73
+ VAT: z.number().optional().describe('Momssats i procent'),
74
+ Unit: z.string().optional().describe('Enhet'),
75
+ Discount: z.number().optional().describe('Rabatt i procent'),
76
+ }))
77
+ .optional()
78
+ .describe('Orderrader (ersätter alla befintliga rader)'),
79
+ DeliveryDate: z.string().optional().describe('Leveransdatum (YYYY-MM-DD)'),
80
+ OrderDate: z.string().optional().describe('Orderdatum (YYYY-MM-DD)'),
81
+ OurReference: z.string().optional().describe('Vår referens'),
82
+ YourReference: z.string().optional().describe('Er referens'),
83
+ Remarks: z.string().optional().describe('Anmärkning/kommentar'),
84
+ Currency: z.string().optional().describe('Valutakod'),
85
+ confirm: z.boolean().optional().describe('Bekräfta att ordern ska uppdateras'),
86
+ dryRun: z
87
+ .boolean()
88
+ .optional()
89
+ .describe('Visa vad som skulle skickas utan att uppdatera ordern'),
90
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
91
+ }, async ({ documentNumber, confirm, dryRun, includeRaw, ...fields }) => {
92
+ if (dryRun) {
93
+ return dryRunResponse(`update order ${documentNumber}`, { Order: fields });
94
+ }
95
+ if (!confirm)
96
+ requireConfirmation(`update order ${documentNumber}`);
97
+ const order = await updateOrder(documentNumber, fields);
98
+ return detailResponse(order, orderDetailColumns, order, includeRaw);
99
+ });
100
+ server.tool('fortnox_create_invoice_from_order', 'Skapa en faktura från en order i Fortnox', {
101
+ documentNumber: DocumentNumberSchema.describe('Ordernummer'),
102
+ confirm: z.boolean().optional().describe('Bekräfta att faktura ska skapas från ordern'),
103
+ dryRun: z.boolean().optional().describe('Visa åtgärden utan att skapa fakturan'),
104
+ }, async ({ documentNumber, confirm, dryRun }) => {
105
+ if (dryRun) {
106
+ return dryRunResponse(`create invoice from order ${documentNumber}`);
107
+ }
108
+ if (!confirm)
109
+ requireConfirmation(`create invoice from order ${documentNumber}`);
110
+ const invoice = await createInvoiceFromOrder(documentNumber);
111
+ return confirmationResponse(`Faktura skapad från order ${documentNumber}. Fakturanummer: ${invoice.DocumentNumber}`, invoice, orderConfirmColumns);
112
+ });
113
+ }
114
+ //# sourceMappingURL=orders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orders.js","sourceRoot":"","sources":["../../src/tools/orders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerPriceListTools(server: McpServer): void;
3
+ //# sourceMappingURL=pricelists.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricelists.d.ts","sourceRoot":"","sources":["../../src/tools/pricelists.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAwBpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgK9D"}
@@ -0,0 +1,104 @@
1
+ import { z } from 'zod';
2
+ import { listPriceLists, getPriceList, createPriceList, updatePriceList, listPrices, getPrice, updatePrice, } from '../operations/pricelists.js';
3
+ import { priceListListColumns, priceListDetailColumns, priceListColumns, priceDetailColumns, } from '../views.js';
4
+ import { detailResponse, dryRunResponse, listResponse, requireConfirmation, } from '../tool-output.js';
5
+ export function registerPriceListTools(server) {
6
+ server.tool('fortnox_list_pricelists', 'Lista prislistor i Fortnox. Returnerar: Code, Description, Comments, PreSelected.', {
7
+ page: z.number().optional().describe('Sidnummer (default 1)'),
8
+ limit: z.number().optional().describe('Antal per sida (default 100, max 500)'),
9
+ all: z.boolean().optional().describe('Hämta alla sidor (ignorerar page/limit)'),
10
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
11
+ }, async ({ page, limit, all, includeRaw }) => {
12
+ const data = await listPriceLists({ page, limit, all });
13
+ return listResponse(data.PriceLists ?? [], priceListListColumns, data, data.MetaInformation, includeRaw);
14
+ });
15
+ server.tool('fortnox_get_pricelist', 'Hämta en enskild prislista från Fortnox. Returnerar: Code, Description, Comments, PreSelected.', {
16
+ code: z.string().describe('Prislistekod'),
17
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
18
+ }, async ({ code, includeRaw }) => {
19
+ const data = await getPriceList(code);
20
+ return detailResponse(data, priceListDetailColumns, data, includeRaw);
21
+ });
22
+ server.tool('fortnox_create_pricelist', 'Skapa en ny prislista i Fortnox', {
23
+ Code: z.string().describe('Prislistekod'),
24
+ Description: z.string().describe('Beskrivning'),
25
+ Comments: z.string().optional().describe('Kommentarer'),
26
+ PreSelected: z.boolean().optional().describe('Om prislistan är förvald'),
27
+ confirm: z.boolean().optional().describe('Bekräfta att prislistan ska skapas'),
28
+ dryRun: z
29
+ .boolean()
30
+ .optional()
31
+ .describe('Visa vad som skulle skickas utan att skapa prislistan'),
32
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
33
+ }, async ({ confirm, dryRun, includeRaw, ...params }) => {
34
+ if (dryRun) {
35
+ return dryRunResponse(`create price list "${params.Code}"`, { PriceList: params });
36
+ }
37
+ if (!confirm)
38
+ requireConfirmation(`create price list "${params.Code}"`);
39
+ const data = await createPriceList(params);
40
+ return detailResponse(data, priceListDetailColumns, data, includeRaw);
41
+ });
42
+ server.tool('fortnox_update_pricelist', 'Uppdatera en befintlig prislista i Fortnox', {
43
+ code: z.string().describe('Prislistekod att uppdatera'),
44
+ Description: z.string().optional().describe('Beskrivning'),
45
+ Comments: z.string().optional().describe('Kommentarer'),
46
+ PreSelected: z.boolean().optional().describe('Om prislistan är förvald'),
47
+ confirm: z.boolean().optional().describe('Bekräfta att prislistan ska uppdateras'),
48
+ dryRun: z
49
+ .boolean()
50
+ .optional()
51
+ .describe('Visa vad som skulle skickas utan att uppdatera prislistan'),
52
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
53
+ }, async ({ code, confirm, dryRun, includeRaw, ...fields }) => {
54
+ if (dryRun) {
55
+ return dryRunResponse(`update price list ${code}`, { PriceList: fields });
56
+ }
57
+ if (!confirm)
58
+ requireConfirmation(`update price list ${code}`);
59
+ const data = await updatePriceList(code, fields);
60
+ return detailResponse(data, priceListDetailColumns, data, includeRaw);
61
+ });
62
+ // --- Price tools ---
63
+ server.tool('fortnox_list_prices', 'Lista priser i en prislista i Fortnox. Returnerar: ArticleNumber, Price, FromQuantity, Percent.', {
64
+ priceListCode: z.string().describe('Prislistekod'),
65
+ articleNumber: z.string().optional().describe('Filtrera på artikelnummer'),
66
+ page: z.number().optional().describe('Sidnummer (default 1)'),
67
+ limit: z.number().optional().describe('Antal per sida (default 100, max 500)'),
68
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
69
+ }, async ({ priceListCode, articleNumber, page, limit, includeRaw }) => {
70
+ const data = await listPrices({ priceListCode, articleNumber, page, limit });
71
+ return listResponse(data.Prices ?? [], priceListColumns, data, data.MetaInformation, includeRaw);
72
+ });
73
+ server.tool('fortnox_get_price', 'Hämta ett enskilt pris från en prislista i Fortnox. Returnerar: ArticleNumber, PriceList, Price, FromQuantity, Percent.', {
74
+ priceListCode: z.string().describe('Prislistekod'),
75
+ articleNumber: z.string().describe('Artikelnummer'),
76
+ fromQuantity: z.number().optional().describe('Från antal (default 0)'),
77
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
78
+ }, async ({ priceListCode, articleNumber, fromQuantity, includeRaw }) => {
79
+ const data = await getPrice(priceListCode, articleNumber, fromQuantity);
80
+ return detailResponse(data, priceDetailColumns, data, includeRaw);
81
+ });
82
+ server.tool('fortnox_update_price', 'Uppdatera ett pris i en prislista i Fortnox', {
83
+ priceListCode: z.string().describe('Prislistekod'),
84
+ articleNumber: z.string().describe('Artikelnummer'),
85
+ fromQuantity: z.number().optional().describe('Från antal (default 0)'),
86
+ Price: z.number().optional().describe('Pris'),
87
+ Percent: z.number().optional().describe('Rabatt i procent'),
88
+ confirm: z.boolean().optional().describe('Bekräfta att priset ska uppdateras'),
89
+ dryRun: z
90
+ .boolean()
91
+ .optional()
92
+ .describe('Visa vad som skulle skickas utan att uppdatera priset'),
93
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
94
+ }, async ({ priceListCode, articleNumber, fromQuantity, confirm, dryRun, includeRaw, ...fields }) => {
95
+ if (dryRun) {
96
+ return dryRunResponse(`update price ${priceListCode}/${articleNumber}`, { Price: fields });
97
+ }
98
+ if (!confirm)
99
+ requireConfirmation(`update price ${priceListCode}/${articleNumber}`);
100
+ const data = await updatePrice(priceListCode, articleNumber, fields, fromQuantity);
101
+ return detailResponse(data, priceDetailColumns, data, includeRaw);
102
+ });
103
+ }
104
+ //# sourceMappingURL=pricelists.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricelists.js","sourceRoot":"","sources":["../../src/tools/pricelists.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerProjectTools(server: McpServer): void;
3
+ //# sourceMappingURL=projects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuG5D"}