@energio/holded-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.
Files changed (243) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1040 -0
  3. package/dist/constants.d.ts +60 -0
  4. package/dist/constants.d.ts.map +1 -0
  5. package/dist/constants.js +72 -0
  6. package/dist/constants.js.map +1 -0
  7. package/dist/index.d.ts +11 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +86 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/schemas/accounting/account-balances.d.ts +19 -0
  12. package/dist/schemas/accounting/account-balances.d.ts.map +1 -0
  13. package/dist/schemas/accounting/account-balances.js +28 -0
  14. package/dist/schemas/accounting/account-balances.js.map +1 -0
  15. package/dist/schemas/accounting/accounts.d.ts +49 -0
  16. package/dist/schemas/accounting/accounts.d.ts.map +1 -0
  17. package/dist/schemas/accounting/accounts.js +50 -0
  18. package/dist/schemas/accounting/accounts.js.map +1 -0
  19. package/dist/schemas/accounting/daily-ledger.d.ts +45 -0
  20. package/dist/schemas/accounting/daily-ledger.d.ts.map +1 -0
  21. package/dist/schemas/accounting/daily-ledger.js +57 -0
  22. package/dist/schemas/accounting/daily-ledger.js.map +1 -0
  23. package/dist/schemas/common.d.ts +118 -0
  24. package/dist/schemas/common.d.ts.map +1 -0
  25. package/dist/schemas/common.js +126 -0
  26. package/dist/schemas/common.js.map +1 -0
  27. package/dist/schemas/crm/bookings.d.ts +108 -0
  28. package/dist/schemas/crm/bookings.d.ts.map +1 -0
  29. package/dist/schemas/crm/bookings.js +96 -0
  30. package/dist/schemas/crm/bookings.js.map +1 -0
  31. package/dist/schemas/crm/events.d.ts +57 -0
  32. package/dist/schemas/crm/events.d.ts.map +1 -0
  33. package/dist/schemas/crm/events.js +53 -0
  34. package/dist/schemas/crm/events.js.map +1 -0
  35. package/dist/schemas/crm/funnels.d.ts +60 -0
  36. package/dist/schemas/crm/funnels.d.ts.map +1 -0
  37. package/dist/schemas/crm/funnels.js +48 -0
  38. package/dist/schemas/crm/funnels.js.map +1 -0
  39. package/dist/schemas/crm/leads.d.ts +146 -0
  40. package/dist/schemas/crm/leads.d.ts.map +1 -0
  41. package/dist/schemas/crm/leads.js +129 -0
  42. package/dist/schemas/crm/leads.js.map +1 -0
  43. package/dist/schemas/invoicing/contacts.d.ts +352 -0
  44. package/dist/schemas/invoicing/contacts.d.ts.map +1 -0
  45. package/dist/schemas/invoicing/contacts.js +187 -0
  46. package/dist/schemas/invoicing/contacts.js.map +1 -0
  47. package/dist/schemas/invoicing/documents.d.ts +424 -0
  48. package/dist/schemas/invoicing/documents.d.ts.map +1 -0
  49. package/dist/schemas/invoicing/documents.js +217 -0
  50. package/dist/schemas/invoicing/documents.js.map +1 -0
  51. package/dist/schemas/invoicing/expenses-accounts.d.ts +47 -0
  52. package/dist/schemas/invoicing/expenses-accounts.d.ts.map +1 -0
  53. package/dist/schemas/invoicing/expenses-accounts.js +43 -0
  54. package/dist/schemas/invoicing/expenses-accounts.js.map +1 -0
  55. package/dist/schemas/invoicing/numbering-series.d.ts +94 -0
  56. package/dist/schemas/invoicing/numbering-series.d.ts.map +1 -0
  57. package/dist/schemas/invoicing/numbering-series.js +43 -0
  58. package/dist/schemas/invoicing/numbering-series.js.map +1 -0
  59. package/dist/schemas/invoicing/payments.d.ts +50 -0
  60. package/dist/schemas/invoicing/payments.d.ts.map +1 -0
  61. package/dist/schemas/invoicing/payments.js +46 -0
  62. package/dist/schemas/invoicing/payments.js.map +1 -0
  63. package/dist/schemas/invoicing/products.d.ts +176 -0
  64. package/dist/schemas/invoicing/products.d.ts.map +1 -0
  65. package/dist/schemas/invoicing/products.js +149 -0
  66. package/dist/schemas/invoicing/products.js.map +1 -0
  67. package/dist/schemas/invoicing/remittances.d.ts +21 -0
  68. package/dist/schemas/invoicing/remittances.d.ts.map +1 -0
  69. package/dist/schemas/invoicing/remittances.js +20 -0
  70. package/dist/schemas/invoicing/remittances.js.map +1 -0
  71. package/dist/schemas/invoicing/sales-channels.d.ts +45 -0
  72. package/dist/schemas/invoicing/sales-channels.d.ts.map +1 -0
  73. package/dist/schemas/invoicing/sales-channels.js +41 -0
  74. package/dist/schemas/invoicing/sales-channels.js.map +1 -0
  75. package/dist/schemas/invoicing/services.d.ts +55 -0
  76. package/dist/schemas/invoicing/services.d.ts.map +1 -0
  77. package/dist/schemas/invoicing/services.js +51 -0
  78. package/dist/schemas/invoicing/services.js.map +1 -0
  79. package/dist/schemas/invoicing/taxes.d.ts +12 -0
  80. package/dist/schemas/invoicing/taxes.d.ts.map +1 -0
  81. package/dist/schemas/invoicing/taxes.js +12 -0
  82. package/dist/schemas/invoicing/taxes.js.map +1 -0
  83. package/dist/schemas/invoicing/treasury.d.ts +42 -0
  84. package/dist/schemas/invoicing/treasury.d.ts.map +1 -0
  85. package/dist/schemas/invoicing/treasury.js +39 -0
  86. package/dist/schemas/invoicing/treasury.js.map +1 -0
  87. package/dist/schemas/invoicing/warehouses.d.ts +61 -0
  88. package/dist/schemas/invoicing/warehouses.d.ts.map +1 -0
  89. package/dist/schemas/invoicing/warehouses.js +43 -0
  90. package/dist/schemas/invoicing/warehouses.js.map +1 -0
  91. package/dist/schemas/projects/projects.d.ts +60 -0
  92. package/dist/schemas/projects/projects.d.ts.map +1 -0
  93. package/dist/schemas/projects/projects.js +55 -0
  94. package/dist/schemas/projects/projects.js.map +1 -0
  95. package/dist/schemas/projects/tasks.d.ts +68 -0
  96. package/dist/schemas/projects/tasks.d.ts.map +1 -0
  97. package/dist/schemas/projects/tasks.js +64 -0
  98. package/dist/schemas/projects/tasks.js.map +1 -0
  99. package/dist/schemas/projects/time-tracking.d.ts +80 -0
  100. package/dist/schemas/projects/time-tracking.d.ts.map +1 -0
  101. package/dist/schemas/projects/time-tracking.js +75 -0
  102. package/dist/schemas/projects/time-tracking.js.map +1 -0
  103. package/dist/schemas/team/employees.d.ts +135 -0
  104. package/dist/schemas/team/employees.d.ts.map +1 -0
  105. package/dist/schemas/team/employees.js +144 -0
  106. package/dist/schemas/team/employees.js.map +1 -0
  107. package/dist/schemas/team/time-tracking.d.ts +98 -0
  108. package/dist/schemas/team/time-tracking.d.ts.map +1 -0
  109. package/dist/schemas/team/time-tracking.js +89 -0
  110. package/dist/schemas/team/time-tracking.js.map +1 -0
  111. package/dist/services/api.d.ts +118 -0
  112. package/dist/services/api.d.ts.map +1 -0
  113. package/dist/services/api.js +441 -0
  114. package/dist/services/api.js.map +1 -0
  115. package/dist/tools/accounting/account-balances.d.ts +44 -0
  116. package/dist/tools/accounting/account-balances.d.ts.map +1 -0
  117. package/dist/tools/accounting/account-balances.js +240 -0
  118. package/dist/tools/accounting/account-balances.js.map +1 -0
  119. package/dist/tools/accounting/accounts.d.ts +18 -0
  120. package/dist/tools/accounting/accounts.d.ts.map +1 -0
  121. package/dist/tools/accounting/accounts.js +131 -0
  122. package/dist/tools/accounting/accounts.js.map +1 -0
  123. package/dist/tools/accounting/daily-ledger.d.ts +9 -0
  124. package/dist/tools/accounting/daily-ledger.d.ts.map +1 -0
  125. package/dist/tools/accounting/daily-ledger.js +117 -0
  126. package/dist/tools/accounting/daily-ledger.js.map +1 -0
  127. package/dist/tools/accounting/index.d.ts +9 -0
  128. package/dist/tools/accounting/index.d.ts.map +1 -0
  129. package/dist/tools/accounting/index.js +15 -0
  130. package/dist/tools/accounting/index.js.map +1 -0
  131. package/dist/tools/crm/bookings.d.ts +18 -0
  132. package/dist/tools/crm/bookings.d.ts.map +1 -0
  133. package/dist/tools/crm/bookings.js +272 -0
  134. package/dist/tools/crm/bookings.js.map +1 -0
  135. package/dist/tools/crm/events.d.ts +18 -0
  136. package/dist/tools/crm/events.d.ts.map +1 -0
  137. package/dist/tools/crm/events.js +134 -0
  138. package/dist/tools/crm/events.js.map +1 -0
  139. package/dist/tools/crm/funnels.d.ts +18 -0
  140. package/dist/tools/crm/funnels.d.ts.map +1 -0
  141. package/dist/tools/crm/funnels.js +113 -0
  142. package/dist/tools/crm/funnels.js.map +1 -0
  143. package/dist/tools/crm/index.d.ts +9 -0
  144. package/dist/tools/crm/index.d.ts.map +1 -0
  145. package/dist/tools/crm/index.js +17 -0
  146. package/dist/tools/crm/index.js.map +1 -0
  147. package/dist/tools/crm/leads.d.ts +18 -0
  148. package/dist/tools/crm/leads.d.ts.map +1 -0
  149. package/dist/tools/crm/leads.js +519 -0
  150. package/dist/tools/crm/leads.js.map +1 -0
  151. package/dist/tools/factory.d.ts +55 -0
  152. package/dist/tools/factory.d.ts.map +1 -0
  153. package/dist/tools/factory.js +145 -0
  154. package/dist/tools/factory.js.map +1 -0
  155. package/dist/tools/invoicing/contacts.d.ts +26 -0
  156. package/dist/tools/invoicing/contacts.d.ts.map +1 -0
  157. package/dist/tools/invoicing/contacts.js +358 -0
  158. package/dist/tools/invoicing/contacts.js.map +1 -0
  159. package/dist/tools/invoicing/documents.d.ts +18 -0
  160. package/dist/tools/invoicing/documents.d.ts.map +1 -0
  161. package/dist/tools/invoicing/documents.js +578 -0
  162. package/dist/tools/invoicing/documents.js.map +1 -0
  163. package/dist/tools/invoicing/expenses-accounts.d.ts +25 -0
  164. package/dist/tools/invoicing/expenses-accounts.d.ts.map +1 -0
  165. package/dist/tools/invoicing/expenses-accounts.js +111 -0
  166. package/dist/tools/invoicing/expenses-accounts.js.map +1 -0
  167. package/dist/tools/invoicing/index.d.ts +9 -0
  168. package/dist/tools/invoicing/index.d.ts.map +1 -0
  169. package/dist/tools/invoicing/index.js +33 -0
  170. package/dist/tools/invoicing/index.js.map +1 -0
  171. package/dist/tools/invoicing/numbering-series.d.ts +9 -0
  172. package/dist/tools/invoicing/numbering-series.d.ts.map +1 -0
  173. package/dist/tools/invoicing/numbering-series.js +161 -0
  174. package/dist/tools/invoicing/numbering-series.js.map +1 -0
  175. package/dist/tools/invoicing/payments.d.ts +18 -0
  176. package/dist/tools/invoicing/payments.d.ts.map +1 -0
  177. package/dist/tools/invoicing/payments.js +175 -0
  178. package/dist/tools/invoicing/payments.js.map +1 -0
  179. package/dist/tools/invoicing/products.d.ts +18 -0
  180. package/dist/tools/invoicing/products.d.ts.map +1 -0
  181. package/dist/tools/invoicing/products.js +389 -0
  182. package/dist/tools/invoicing/products.js.map +1 -0
  183. package/dist/tools/invoicing/remittances.d.ts +17 -0
  184. package/dist/tools/invoicing/remittances.d.ts.map +1 -0
  185. package/dist/tools/invoicing/remittances.js +76 -0
  186. package/dist/tools/invoicing/remittances.js.map +1 -0
  187. package/dist/tools/invoicing/sales-channels.d.ts +24 -0
  188. package/dist/tools/invoicing/sales-channels.d.ts.map +1 -0
  189. package/dist/tools/invoicing/sales-channels.js +105 -0
  190. package/dist/tools/invoicing/sales-channels.js.map +1 -0
  191. package/dist/tools/invoicing/services.d.ts +29 -0
  192. package/dist/tools/invoicing/services.d.ts.map +1 -0
  193. package/dist/tools/invoicing/services.js +124 -0
  194. package/dist/tools/invoicing/services.js.map +1 -0
  195. package/dist/tools/invoicing/taxes.d.ts +18 -0
  196. package/dist/tools/invoicing/taxes.d.ts.map +1 -0
  197. package/dist/tools/invoicing/taxes.js +58 -0
  198. package/dist/tools/invoicing/taxes.js.map +1 -0
  199. package/dist/tools/invoicing/treasury.d.ts +9 -0
  200. package/dist/tools/invoicing/treasury.d.ts.map +1 -0
  201. package/dist/tools/invoicing/treasury.js +196 -0
  202. package/dist/tools/invoicing/treasury.js.map +1 -0
  203. package/dist/tools/invoicing/warehouses.d.ts +18 -0
  204. package/dist/tools/invoicing/warehouses.d.ts.map +1 -0
  205. package/dist/tools/invoicing/warehouses.js +133 -0
  206. package/dist/tools/invoicing/warehouses.js.map +1 -0
  207. package/dist/tools/projects/index.d.ts +9 -0
  208. package/dist/tools/projects/index.d.ts.map +1 -0
  209. package/dist/tools/projects/index.js +15 -0
  210. package/dist/tools/projects/index.js.map +1 -0
  211. package/dist/tools/projects/projects.d.ts +18 -0
  212. package/dist/tools/projects/projects.d.ts.map +1 -0
  213. package/dist/tools/projects/projects.js +203 -0
  214. package/dist/tools/projects/projects.js.map +1 -0
  215. package/dist/tools/projects/tasks.d.ts +18 -0
  216. package/dist/tools/projects/tasks.d.ts.map +1 -0
  217. package/dist/tools/projects/tasks.js +154 -0
  218. package/dist/tools/projects/tasks.js.map +1 -0
  219. package/dist/tools/projects/time-tracking.d.ts +14 -0
  220. package/dist/tools/projects/time-tracking.d.ts.map +1 -0
  221. package/dist/tools/projects/time-tracking.js +291 -0
  222. package/dist/tools/projects/time-tracking.js.map +1 -0
  223. package/dist/tools/team/employees.d.ts +18 -0
  224. package/dist/tools/team/employees.d.ts.map +1 -0
  225. package/dist/tools/team/employees.js +149 -0
  226. package/dist/tools/team/employees.js.map +1 -0
  227. package/dist/tools/team/index.d.ts +9 -0
  228. package/dist/tools/team/index.d.ts.map +1 -0
  229. package/dist/tools/team/index.js +13 -0
  230. package/dist/tools/team/index.js.map +1 -0
  231. package/dist/tools/team/time-tracking.d.ts +18 -0
  232. package/dist/tools/team/time-tracking.d.ts.map +1 -0
  233. package/dist/tools/team/time-tracking.js +398 -0
  234. package/dist/tools/team/time-tracking.js.map +1 -0
  235. package/dist/tools/utilities.d.ts +45 -0
  236. package/dist/tools/utilities.d.ts.map +1 -0
  237. package/dist/tools/utilities.js +55 -0
  238. package/dist/tools/utilities.js.map +1 -0
  239. package/dist/types.d.ts +640 -0
  240. package/dist/types.d.ts.map +1 -0
  241. package/dist/types.js +29 -0
  242. package/dist/types.js.map +1 -0
  243. package/package.json +70 -0
@@ -0,0 +1,578 @@
1
+ /**
2
+ * Document tools for Holded API (invoices, estimates, purchases, etc.)
3
+ */
4
+ import { makeApiRequest, makeMultipartApiRequest, toStructuredContent } from "../../services/api.js";
5
+ import { ResponseFormat } from "../../constants.js";
6
+ import { withErrorHandling } from "../utilities.js";
7
+ import { ListDocumentsInputSchema, GetDocumentInputSchema, CreateDocumentInputSchema, UpdateDocumentInputSchema, DeleteDocumentInputSchema, PayDocumentInputSchema, SendDocumentInputSchema, GetDocumentPdfInputSchema, UpdateDocumentTrackingInputSchema, UpdateDocumentPipelineInputSchema, ShipAllItemsInputSchema, ShipItemsByLineInputSchema, GetShippedItemsInputSchema, AttachDocumentFileInputSchema, } from "../../schemas/invoicing/documents.js";
8
+ /**
9
+ * Format documents as markdown
10
+ */
11
+ export function formatDocumentsMarkdown(documents, docType) {
12
+ if (!documents.length) {
13
+ return `No ${docType} documents found.`;
14
+ }
15
+ const lines = [`# ${docType.charAt(0).toUpperCase() + docType.slice(1)} Documents`, "", `Found ${documents.length} documents:`, ""];
16
+ for (const doc of documents) {
17
+ lines.push(`## ${doc.docNumber || doc.id}`);
18
+ lines.push(`- **ID**: ${doc.id}`);
19
+ if (doc.contactName)
20
+ lines.push(`- **Contact**: ${doc.contactName}`);
21
+ if (doc.date)
22
+ lines.push(`- **Date**: ${new Date(doc.date * 1000).toLocaleDateString()}`);
23
+ if (doc.total !== undefined)
24
+ lines.push(`- **Total**: ${doc.total} ${doc.currency || ""}`);
25
+ if (doc.status)
26
+ lines.push(`- **Status**: ${doc.status}`);
27
+ if (doc.paid !== undefined)
28
+ lines.push(`- **Paid**: ${doc.paid ? "Yes" : "No"}`);
29
+ lines.push("");
30
+ }
31
+ return lines.join("\n");
32
+ }
33
+ /**
34
+ * Format a single document as markdown
35
+ */
36
+ export function formatDocumentMarkdown(doc) {
37
+ const lines = [`# ${doc.docType?.toUpperCase() || "Document"}: ${doc.docNumber || doc.id}`, ""];
38
+ lines.push(`**ID**: ${doc.id}`);
39
+ if (doc.contactName)
40
+ lines.push(`**Contact**: ${doc.contactName} (${doc.contactId || "N/A"})`);
41
+ if (doc.date)
42
+ lines.push(`**Date**: ${new Date(doc.date * 1000).toLocaleDateString()}`);
43
+ if (doc.dueDate)
44
+ lines.push(`**Due Date**: ${new Date(doc.dueDate * 1000).toLocaleDateString()}`);
45
+ if (doc.status)
46
+ lines.push(`**Status**: ${doc.status}`);
47
+ lines.push("");
48
+ if (doc.items && doc.items.length > 0) {
49
+ lines.push("## Line Items", "");
50
+ lines.push("| Item | Qty | Subtotal | Tax |");
51
+ lines.push("|------|-----|----------|-----|");
52
+ for (const item of doc.items) {
53
+ lines.push(`| ${item.name} | ${item.units || 1} | ${item.subtotal || 0} | ${item.tax || "-"} |`);
54
+ }
55
+ lines.push("");
56
+ }
57
+ lines.push("## Totals", "");
58
+ if (doc.subtotal !== undefined)
59
+ lines.push(`- **Subtotal**: ${doc.subtotal}`);
60
+ if (doc.tax !== undefined)
61
+ lines.push(`- **Tax**: ${doc.tax}`);
62
+ if (doc.total !== undefined)
63
+ lines.push(`- **Total**: ${doc.total} ${doc.currency || ""}`);
64
+ if (doc.paid !== undefined)
65
+ lines.push(`- **Paid**: ${doc.paid ? "Yes" : "No"}`);
66
+ if (doc.paidAmount !== undefined)
67
+ lines.push(`- **Paid Amount**: ${doc.paidAmount}`);
68
+ if (doc.notes) {
69
+ lines.push("", "## Notes", doc.notes);
70
+ }
71
+ return lines.join("\n");
72
+ }
73
+ /**
74
+ * Register all document-related tools
75
+ */
76
+ export function registerDocumentTools(server) {
77
+ // List Documents
78
+ server.registerTool("holded_invoicing_list_documents", {
79
+ title: "List Holded Documents",
80
+ description: `List documents from Holded by type.
81
+
82
+ Returns paginated list of documents (max 500 per page).
83
+
84
+ Available document types:
85
+ - invoice: Sales invoices
86
+ - salesreceipt: Sales receipts
87
+ - creditnote: Sales refunds
88
+ - receiptnote: Ticket sales refunds
89
+ - estimate: Sales estimates/quotes
90
+ - salesorder: Sales orders
91
+ - waybill: Packing lists
92
+ - proform: Proforma invoices
93
+ - purchase: Purchases
94
+ - purchaserefund: Purchase refunds
95
+ - purchaseorder: Purchase orders
96
+
97
+ Args:
98
+ - doc_type (string): Document type (required)
99
+ - page (number): Page number for pagination (default: 1, max 500 items per page)
100
+ - response_format ('json' | 'markdown'): Output format (default: 'json')
101
+
102
+ Returns:
103
+ Array of documents with id, number, contact, date, total, and status.`,
104
+ inputSchema: ListDocumentsInputSchema,
105
+ annotations: {
106
+ readOnlyHint: true,
107
+ destructiveHint: false,
108
+ idempotentHint: true,
109
+ openWorldHint: true,
110
+ },
111
+ }, withErrorHandling(async (params) => {
112
+ const { doc_type, page, response_format } = params;
113
+ const queryParams = {};
114
+ if (page > 1) {
115
+ queryParams.page = page;
116
+ }
117
+ const documents = await makeApiRequest("invoicing", `documents/${doc_type}`, "GET", undefined, queryParams);
118
+ const textContent = response_format === ResponseFormat.MARKDOWN
119
+ ? formatDocumentsMarkdown(documents, doc_type)
120
+ : JSON.stringify(documents, null, 2);
121
+ return {
122
+ content: [{ type: "text", text: textContent }],
123
+ structuredContent: { documents, count: documents.length, page, docType: doc_type },
124
+ };
125
+ }));
126
+ // Get Document
127
+ server.registerTool("holded_invoicing_get_document", {
128
+ title: "Get Holded Document",
129
+ description: `Get a specific document by ID from Holded.
130
+
131
+ Args:
132
+ - doc_type (string): Document type (required)
133
+ - document_id (string): The document ID to retrieve (required)
134
+ - response_format ('json' | 'markdown'): Output format (default: 'json')
135
+
136
+ Returns:
137
+ Document details including line items, totals, and payment status.`,
138
+ inputSchema: GetDocumentInputSchema,
139
+ annotations: {
140
+ readOnlyHint: true,
141
+ destructiveHint: false,
142
+ idempotentHint: true,
143
+ openWorldHint: true,
144
+ },
145
+ }, withErrorHandling(async (params) => {
146
+ const { doc_type, document_id, response_format } = params;
147
+ const document = await makeApiRequest("invoicing", `documents/${doc_type}/${document_id}`, "GET");
148
+ const textContent = response_format === ResponseFormat.MARKDOWN
149
+ ? formatDocumentMarkdown(document)
150
+ : JSON.stringify(document, null, 2);
151
+ return {
152
+ content: [{ type: "text", text: textContent }],
153
+ structuredContent: toStructuredContent(document),
154
+ };
155
+ }));
156
+ // Create Document
157
+ server.registerTool("holded_invoicing_create_document", {
158
+ title: "Create Holded Document",
159
+ description: `Create a new document in Holded (invoice, estimate, purchase, etc.).
160
+
161
+ Args:
162
+ - doc_type (string): Document type (required)
163
+ - items (array): Line items with name, units, subtotal, tax (required)
164
+ - contactId (string): Contact ID to associate
165
+ - date (number): Document date as Unix timestamp
166
+ - dueDate (number): Due date as Unix timestamp
167
+ - notes (string): Document notes
168
+ - And other optional fields
169
+
170
+ Returns:
171
+ The created document with its assigned ID and number.`,
172
+ inputSchema: CreateDocumentInputSchema,
173
+ annotations: {
174
+ readOnlyHint: false,
175
+ destructiveHint: false,
176
+ idempotentHint: false,
177
+ openWorldHint: true,
178
+ },
179
+ }, withErrorHandling(async (params) => {
180
+ const { doc_type, ...documentData } = params;
181
+ const document = await makeApiRequest("invoicing", `documents/${doc_type}`, "POST", documentData);
182
+ return {
183
+ content: [
184
+ {
185
+ type: "text",
186
+ text: `Document created successfully.\n\n${JSON.stringify(document, null, 2)}`,
187
+ },
188
+ ],
189
+ structuredContent: toStructuredContent(document),
190
+ };
191
+ }));
192
+ // Update Document
193
+ server.registerTool("holded_invoicing_update_document", {
194
+ title: "Update Holded Document",
195
+ description: `Update an existing document in Holded. Only provided fields will be updated.
196
+
197
+ Args:
198
+ - doc_type (string): Document type (required)
199
+ - document_id (string): The document ID to update (required)
200
+ - And other optional fields to update (items, dates, notes, etc.)
201
+
202
+ Returns:
203
+ The updated document.`,
204
+ inputSchema: UpdateDocumentInputSchema,
205
+ annotations: {
206
+ readOnlyHint: false,
207
+ destructiveHint: false,
208
+ idempotentHint: true,
209
+ openWorldHint: true,
210
+ },
211
+ }, withErrorHandling(async (params) => {
212
+ const { doc_type, document_id, ...updateData } = params;
213
+ const document = await makeApiRequest("invoicing", `documents/${doc_type}/${document_id}`, "PUT", updateData);
214
+ return {
215
+ content: [
216
+ {
217
+ type: "text",
218
+ text: `Document updated successfully.\n\n${JSON.stringify(document, null, 2)}`,
219
+ },
220
+ ],
221
+ structuredContent: toStructuredContent(document),
222
+ };
223
+ }));
224
+ // Delete Document
225
+ server.registerTool("holded_invoicing_delete_document", {
226
+ title: "Delete Holded Document",
227
+ description: `Delete a document from Holded.
228
+
229
+ Args:
230
+ - doc_type (string): Document type (required)
231
+ - document_id (string): The document ID to delete (required)
232
+
233
+ Returns:
234
+ Confirmation of deletion.`,
235
+ inputSchema: DeleteDocumentInputSchema,
236
+ annotations: {
237
+ readOnlyHint: false,
238
+ destructiveHint: true,
239
+ idempotentHint: true,
240
+ openWorldHint: true,
241
+ },
242
+ }, withErrorHandling(async (params) => {
243
+ const { doc_type, document_id } = params;
244
+ await makeApiRequest("invoicing", `documents/${doc_type}/${document_id}`, "DELETE");
245
+ return {
246
+ content: [
247
+ {
248
+ type: "text",
249
+ text: `Document ${document_id} deleted successfully.`,
250
+ },
251
+ ],
252
+ structuredContent: { deleted: true, id: document_id, docType: doc_type },
253
+ };
254
+ }));
255
+ // Pay Document
256
+ server.registerTool("holded_invoicing_pay_document", {
257
+ title: "Pay Holded Document",
258
+ description: `Record a payment for a document in Holded.
259
+
260
+ Args:
261
+ - doc_type (string): Document type (required)
262
+ - document_id (string): The document ID to pay (required)
263
+ - amount (number): Payment amount (if different from document total)
264
+ - account_id (string): Treasury/Bank account ID
265
+ - date (number): Payment date as Unix timestamp
266
+
267
+ Returns:
268
+ Confirmation of payment.`,
269
+ inputSchema: PayDocumentInputSchema,
270
+ annotations: {
271
+ readOnlyHint: false,
272
+ destructiveHint: false,
273
+ idempotentHint: false,
274
+ openWorldHint: true,
275
+ },
276
+ }, withErrorHandling(async (params) => {
277
+ const { doc_type, document_id, account_id, ...paymentData } = params;
278
+ const requestData = {
279
+ ...paymentData,
280
+ ...(account_id ? { accountId: account_id } : {}),
281
+ };
282
+ const result = await makeApiRequest("invoicing", `documents/${doc_type}/${document_id}/pay`, "POST", requestData);
283
+ return {
284
+ content: [
285
+ {
286
+ type: "text",
287
+ text: `Payment recorded successfully.\n\n${JSON.stringify(result, null, 2)}`,
288
+ },
289
+ ],
290
+ structuredContent: { paid: true, documentId: document_id, docType: doc_type, ...result },
291
+ };
292
+ }));
293
+ // Send Document
294
+ server.registerTool("holded_invoicing_send_document", {
295
+ title: "Send Holded Document",
296
+ description: `Send a document via email in Holded.
297
+
298
+ Args:
299
+ - doc_type (string): Document type (required)
300
+ - document_id (string): The document ID to send (required)
301
+ - email (string): Recipient email (uses contact email if not provided)
302
+ - subject (string): Email subject
303
+ - message (string): Email message body
304
+
305
+ Returns:
306
+ Confirmation of sending.`,
307
+ inputSchema: SendDocumentInputSchema,
308
+ annotations: {
309
+ readOnlyHint: false,
310
+ destructiveHint: false,
311
+ idempotentHint: false,
312
+ openWorldHint: true,
313
+ },
314
+ }, withErrorHandling(async (params) => {
315
+ const { doc_type, document_id, ...sendData } = params;
316
+ const result = await makeApiRequest("invoicing", `documents/${doc_type}/${document_id}/send`, "POST", sendData);
317
+ return {
318
+ content: [
319
+ {
320
+ type: "text",
321
+ text: `Document sent successfully.\n\n${JSON.stringify(result, null, 2)}`,
322
+ },
323
+ ],
324
+ structuredContent: { sent: true, documentId: document_id, docType: doc_type, ...result },
325
+ };
326
+ }));
327
+ // Get Document PDF
328
+ server.registerTool("holded_invoicing_get_document_pdf", {
329
+ title: "Get Holded Document PDF",
330
+ description: `Get the PDF version of a document from Holded.
331
+
332
+ Args:
333
+ - doc_type (string): Document type (required)
334
+ - document_id (string): The document ID to get PDF for (required)
335
+
336
+ Returns:
337
+ PDF file data (base64 encoded or URL).`,
338
+ inputSchema: GetDocumentPdfInputSchema,
339
+ annotations: {
340
+ readOnlyHint: true,
341
+ destructiveHint: false,
342
+ idempotentHint: true,
343
+ openWorldHint: true,
344
+ },
345
+ }, withErrorHandling(async (params) => {
346
+ const { doc_type, document_id } = params;
347
+ const result = await makeApiRequest("invoicing", `documents/${doc_type}/${document_id}/pdf`, "GET");
348
+ return {
349
+ content: [
350
+ {
351
+ type: "text",
352
+ text: result.url
353
+ ? `PDF URL: ${result.url}\n\n${JSON.stringify(result, null, 2)}`
354
+ : JSON.stringify(result, null, 2),
355
+ },
356
+ ],
357
+ structuredContent: { documentId: document_id, docType: doc_type, ...result },
358
+ };
359
+ }));
360
+ // Update Document Tracking
361
+ server.registerTool("holded_invoicing_update_document_tracking", {
362
+ title: "Update Holded Document Tracking",
363
+ description: `Update tracking information for a document in Holded.
364
+
365
+ Note: This endpoint only works with 'salesorder' and 'waybill' document types.
366
+
367
+ Args:
368
+ - doc_type ('salesorder' | 'waybill'): Document type (required)
369
+ - document_id (string): The document ID to update tracking for (required)
370
+ - key (string): Carrier key - one of: mrw, ups, fedex, tnt, seur, nacex, correos, asm, uspostalservice, dbschenker, royalmail, bluedart, palletways, correosexpress, tourline, other
371
+ - name (string): Carrier display name (use custom name when key is 'other')
372
+ - num (string): Tracking number(s) - can add multiple separated by comma or dash (e.g., "1,2-3")
373
+ - pickUpDate (string): Pick up date in DD/MM/YYYY format
374
+ - deliveryDate (string): Delivery date in DD/MM/YYYY format
375
+ - notes (string): Notes for the tracking
376
+
377
+ Returns:
378
+ Confirmation of tracking update.`,
379
+ inputSchema: UpdateDocumentTrackingInputSchema,
380
+ annotations: {
381
+ readOnlyHint: false,
382
+ destructiveHint: false,
383
+ idempotentHint: true,
384
+ openWorldHint: true,
385
+ },
386
+ }, withErrorHandling(async (params) => {
387
+ const { doc_type, document_id, ...trackingData } = params;
388
+ const result = await makeApiRequest("invoicing", `documents/${doc_type}/${document_id}/updatetracking`, "POST", trackingData);
389
+ return {
390
+ content: [
391
+ {
392
+ type: "text",
393
+ text: `Tracking information updated successfully.\n\n${JSON.stringify(result, null, 2)}`,
394
+ },
395
+ ],
396
+ structuredContent: { updated: true, documentId: document_id, docType: doc_type, ...result },
397
+ };
398
+ }));
399
+ // Update Document Pipeline
400
+ server.registerTool("holded_invoicing_update_document_pipeline", {
401
+ title: "Update Holded Document Pipeline",
402
+ description: `Update the pipeline stage for a document in Holded.
403
+
404
+ Note: This endpoint only works with 'salesorder' and 'waybill' document types.
405
+
406
+ Args:
407
+ - doc_type ('salesorder' | 'waybill'): Document type (required)
408
+ - document_id (string): The document ID to update pipeline for (required)
409
+ - pipeline (string): Pipeline stage identifier (required)
410
+
411
+ Returns:
412
+ Confirmation of pipeline update.`,
413
+ inputSchema: UpdateDocumentPipelineInputSchema,
414
+ annotations: {
415
+ readOnlyHint: false,
416
+ destructiveHint: false,
417
+ idempotentHint: true,
418
+ openWorldHint: true,
419
+ },
420
+ }, withErrorHandling(async (params) => {
421
+ const { doc_type, document_id, pipeline } = params;
422
+ const result = await makeApiRequest("invoicing", `documents/${doc_type}/${document_id}/pipeline/set`, "POST", { pipeline });
423
+ return {
424
+ content: [
425
+ {
426
+ type: "text",
427
+ text: `Pipeline updated successfully.\n\n${JSON.stringify(result, null, 2)}`,
428
+ },
429
+ ],
430
+ structuredContent: { updated: true, documentId: document_id, docType: doc_type, ...result },
431
+ };
432
+ }));
433
+ // Ship All Items
434
+ server.registerTool("holded_invoicing_ship_all_items", {
435
+ title: "Ship All Items from Holded Sales Order",
436
+ description: `Ship all the items of a specific sales order in Holded.
437
+
438
+ Args:
439
+ - document_id (string): The sales order document ID to ship all items for (required)
440
+
441
+ Returns:
442
+ Confirmation of shipping with status and info.`,
443
+ inputSchema: ShipAllItemsInputSchema,
444
+ annotations: {
445
+ readOnlyHint: false,
446
+ destructiveHint: false,
447
+ idempotentHint: false,
448
+ openWorldHint: true,
449
+ },
450
+ }, withErrorHandling(async (params) => {
451
+ const { document_id } = params;
452
+ const result = await makeApiRequest("invoicing", `documents/salesorder/${document_id}/shipall`, "POST");
453
+ return {
454
+ content: [
455
+ {
456
+ type: "text",
457
+ text: `Items shipped successfully.\n\n${JSON.stringify(result, null, 2)}`,
458
+ },
459
+ ],
460
+ structuredContent: { shipped: true, documentId: document_id, ...result },
461
+ };
462
+ }));
463
+ // Ship Items By Line
464
+ server.registerTool("holded_invoicing_ship_items_by_line", {
465
+ title: "Ship Items by Line from Holded Sales Order",
466
+ description: `Ship specific items of a sales order by line position in Holded.
467
+
468
+ Args:
469
+ - document_id (string): The sales order document ID to ship items for (required)
470
+ - lines (array): Array of item lines to ship, each with:
471
+ - itemLinePosition (number): Item line position (starts at 0)
472
+ - units (number): Number of units to ship
473
+
474
+ Returns:
475
+ Confirmation of shipping with status and info.`,
476
+ inputSchema: ShipItemsByLineInputSchema,
477
+ annotations: {
478
+ readOnlyHint: false,
479
+ destructiveHint: false,
480
+ idempotentHint: false,
481
+ openWorldHint: true,
482
+ },
483
+ }, withErrorHandling(async (params) => {
484
+ const { document_id, lines } = params;
485
+ const result = await makeApiRequest("invoicing", `documents/salesorder/${document_id}/shipbylines`, "POST", { lines });
486
+ return {
487
+ content: [
488
+ {
489
+ type: "text",
490
+ text: `Items shipped successfully.\n\n${JSON.stringify(result, null, 2)}`,
491
+ },
492
+ ],
493
+ structuredContent: { shipped: true, documentId: document_id, lines, ...result },
494
+ };
495
+ }));
496
+ // Get Shipped Items
497
+ server.registerTool("holded_invoicing_get_shipped_items", {
498
+ title: "Get Shipped Items from Holded Document",
499
+ description: `For each item included in a sales or purchase order, get the number of units shipped or received.
500
+
501
+ Args:
502
+ - doc_type ('salesorder' | 'order'): Document type (required)
503
+ - document_id (string): The document ID to get shipped items for (required)
504
+ - response_format ('json' | 'markdown'): Output format (default: 'json')
505
+
506
+ Returns:
507
+ Array of items with name, sku, total, sent, and pending quantities.`,
508
+ inputSchema: GetShippedItemsInputSchema,
509
+ annotations: {
510
+ readOnlyHint: true,
511
+ destructiveHint: false,
512
+ idempotentHint: true,
513
+ openWorldHint: true,
514
+ },
515
+ }, withErrorHandling(async (params) => {
516
+ const { doc_type, document_id, response_format } = params;
517
+ const shippedItems = await makeApiRequest("invoicing", `documents/${doc_type}/${document_id}/shippeditems`, "GET");
518
+ let textContent;
519
+ if (response_format === ResponseFormat.MARKDOWN) {
520
+ if (!shippedItems.length) {
521
+ textContent = `No shipped items found for document ${document_id}.`;
522
+ }
523
+ else {
524
+ const lines = ["# Shipped Items", "", `Found ${shippedItems.length} items:`, ""];
525
+ lines.push("| Item | SKU | Total | Sent | Pending |");
526
+ lines.push("|------|-----|-------|------|---------|");
527
+ for (const item of shippedItems) {
528
+ lines.push(`| ${item.name} | ${item.sku || "-"} | ${item.total} | ${item.sent} | ${item.pending} |`);
529
+ }
530
+ textContent = lines.join("\n");
531
+ }
532
+ }
533
+ else {
534
+ textContent = JSON.stringify(shippedItems, null, 2);
535
+ }
536
+ return {
537
+ content: [{ type: "text", text: textContent }],
538
+ structuredContent: { shippedItems, count: shippedItems.length, documentId: document_id, docType: doc_type },
539
+ };
540
+ }));
541
+ // Attach File to Document
542
+ server.registerTool("holded_invoicing_attach_document_file", {
543
+ title: "Attach File to Holded Document",
544
+ description: `Attach a file to a specific document in Holded.
545
+
546
+ Args:
547
+ - doc_type (string): Document type (required)
548
+ - document_id (string): The document ID to attach file to (required)
549
+ - file_content (string): File content as base64 encoded string (required)
550
+ - file_name (string): File name (required)
551
+ - set_main (boolean): Set this file as the main attachment
552
+
553
+ Returns:
554
+ Confirmation of file attachment with status and info.`,
555
+ inputSchema: AttachDocumentFileInputSchema,
556
+ annotations: {
557
+ readOnlyHint: false,
558
+ destructiveHint: false,
559
+ idempotentHint: false,
560
+ openWorldHint: true,
561
+ },
562
+ }, withErrorHandling(async (params) => {
563
+ const { doc_type, document_id, file_content, file_name, set_main } = params;
564
+ // Convert base64 to buffer
565
+ const fileBuffer = Buffer.from(file_content, "base64");
566
+ const result = await makeMultipartApiRequest("invoicing", `documents/${doc_type}/${document_id}/attach`, fileBuffer, file_name, set_main);
567
+ return {
568
+ content: [
569
+ {
570
+ type: "text",
571
+ text: `File attached successfully.\n\n${JSON.stringify(result, null, 2)}`,
572
+ },
573
+ ],
574
+ structuredContent: { attached: true, documentId: document_id, docType: doc_type, fileName: file_name, ...result },
575
+ };
576
+ }));
577
+ }
578
+ //# sourceMappingURL=documents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents.js","sourceRoot":"","sources":["../../../src/tools/invoicing/documents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Expenses Account tools for Holded API
3
+ */
4
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
5
+ interface ExpensesAccount {
6
+ id: string;
7
+ name: string;
8
+ code?: string;
9
+ description?: string;
10
+ [key: string]: unknown;
11
+ }
12
+ /**
13
+ * Format expenses accounts as markdown
14
+ */
15
+ export declare function formatExpensesAccountsMarkdown(accounts: ExpensesAccount[]): string;
16
+ /**
17
+ * Format a single expenses account as markdown
18
+ */
19
+ export declare function formatExpensesAccountMarkdown(account: ExpensesAccount): string;
20
+ /**
21
+ * Register all expenses account-related tools
22
+ */
23
+ export declare function registerExpensesAccountTools(server: McpServer): void;
24
+ export {};
25
+ //# sourceMappingURL=expenses-accounts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expenses-accounts.d.ts","sourceRoot":"","sources":["../../../src/tools/invoicing/expenses-accounts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUpE,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,CAgBlF;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAM9E;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuEpE"}