@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,60 @@
1
+ /**
2
+ * Holded API base URLs for different modules
3
+ *
4
+ * API Versions (as of 2026-02-04):
5
+ * - Invoice API: v1.4
6
+ * - CRM API: v1.0
7
+ * - Projects API: v1.2
8
+ * - Team API: v1.0.1
9
+ * - Accounting API: v1.0.0
10
+ */
11
+ export declare const API_BASE_URL = "https://api.holded.com/api";
12
+ /**
13
+ * API version tracking for each Holded module
14
+ *
15
+ * These versions correspond to the official Holded API documentation
16
+ * and should be updated when API versions change.
17
+ *
18
+ * @see https://developers.holded.com/reference
19
+ */
20
+ export declare const API_VERSIONS: {
21
+ /** Invoice API version */
22
+ readonly INVOICING: "v1.4";
23
+ /** CRM API version */
24
+ readonly CRM: "v1.0";
25
+ /** Projects API version */
26
+ readonly PROJECTS: "v1.2";
27
+ /** Team API version */
28
+ readonly TEAM: "v1.0.1";
29
+ /** Accounting API version */
30
+ readonly ACCOUNTING: "v1.0.0";
31
+ };
32
+ export declare const API_ENDPOINTS: {
33
+ /** Invoice API v1.4 */
34
+ readonly INVOICING: "https://api.holded.com/api/invoicing/v1";
35
+ /** CRM API v1.0 */
36
+ readonly CRM: "https://api.holded.com/api/crm/v1";
37
+ /** Projects API v1.2 */
38
+ readonly PROJECTS: "https://api.holded.com/api/projects/v1";
39
+ /** Accounting API */
40
+ readonly ACCOUNTING: "https://api.holded.com/api/accounting/v1";
41
+ /** Team API v1.0.1 */
42
+ readonly TEAM: "https://api.holded.com/api/team/v1";
43
+ };
44
+ /**
45
+ * Maximum response size in characters to prevent overwhelming responses
46
+ */
47
+ export declare const CHARACTER_LIMIT = 25000;
48
+ /**
49
+ * Available document types in Holded
50
+ */
51
+ export declare const DOCUMENT_TYPES: readonly ["invoice", "salesreceipt", "creditnote", "receiptnote", "estimate", "salesorder", "waybill", "proform", "purchase", "purchaserefund", "purchaseorder"];
52
+ export type DocumentType = (typeof DOCUMENT_TYPES)[number];
53
+ /**
54
+ * Response format options
55
+ */
56
+ export declare enum ResponseFormat {
57
+ MARKDOWN = "markdown",
58
+ JSON = "json"
59
+ }
60
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,+BAA+B,CAAC;AAEzD;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY;IACvB,0BAA0B;;IAE1B,sBAAsB;;IAEtB,2BAA2B;;IAE3B,uBAAuB;;IAEvB,6BAA6B;;CAErB,CAAC;AAEX,eAAO,MAAM,aAAa;IACxB,uBAAuB;;IAEvB,mBAAmB;;IAEnB,wBAAwB;;IAExB,qBAAqB;;IAErB,sBAAsB;;CAEd,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,eAAe,QAAQ,CAAC;AAErC;;GAEG;AACH,eAAO,MAAM,cAAc,kKAYjB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D;;GAEG;AACH,oBAAY,cAAc;IACxB,QAAQ,aAAa;IACrB,IAAI,SAAS;CACd"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Holded API base URLs for different modules
3
+ *
4
+ * API Versions (as of 2026-02-04):
5
+ * - Invoice API: v1.4
6
+ * - CRM API: v1.0
7
+ * - Projects API: v1.2
8
+ * - Team API: v1.0.1
9
+ * - Accounting API: v1.0.0
10
+ */
11
+ export const API_BASE_URL = "https://api.holded.com/api";
12
+ /**
13
+ * API version tracking for each Holded module
14
+ *
15
+ * These versions correspond to the official Holded API documentation
16
+ * and should be updated when API versions change.
17
+ *
18
+ * @see https://developers.holded.com/reference
19
+ */
20
+ export const API_VERSIONS = {
21
+ /** Invoice API version */
22
+ INVOICING: 'v1.4',
23
+ /** CRM API version */
24
+ CRM: 'v1.0',
25
+ /** Projects API version */
26
+ PROJECTS: 'v1.2',
27
+ /** Team API version */
28
+ TEAM: 'v1.0.1',
29
+ /** Accounting API version */
30
+ ACCOUNTING: 'v1.0.0'
31
+ };
32
+ export const API_ENDPOINTS = {
33
+ /** Invoice API v1.4 */
34
+ INVOICING: `${API_BASE_URL}/invoicing/v1`,
35
+ /** CRM API v1.0 */
36
+ CRM: `${API_BASE_URL}/crm/v1`,
37
+ /** Projects API v1.2 */
38
+ PROJECTS: `${API_BASE_URL}/projects/v1`,
39
+ /** Accounting API */
40
+ ACCOUNTING: `${API_BASE_URL}/accounting/v1`,
41
+ /** Team API v1.0.1 */
42
+ TEAM: `${API_BASE_URL}/team/v1`,
43
+ };
44
+ /**
45
+ * Maximum response size in characters to prevent overwhelming responses
46
+ */
47
+ export const CHARACTER_LIMIT = 25000;
48
+ /**
49
+ * Available document types in Holded
50
+ */
51
+ export const DOCUMENT_TYPES = [
52
+ "invoice",
53
+ "salesreceipt",
54
+ "creditnote",
55
+ "receiptnote", // Undocumented but valid — confirmed working via live API 2026-03-30
56
+ "estimate",
57
+ "salesorder",
58
+ "waybill",
59
+ "proform",
60
+ "purchase",
61
+ "purchaserefund",
62
+ "purchaseorder",
63
+ ];
64
+ /**
65
+ * Response format options
66
+ */
67
+ export var ResponseFormat;
68
+ (function (ResponseFormat) {
69
+ ResponseFormat["MARKDOWN"] = "markdown";
70
+ ResponseFormat["JSON"] = "json";
71
+ })(ResponseFormat || (ResponseFormat = {}));
72
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,4BAA4B,CAAC;AAEzD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,0BAA0B;IAC1B,SAAS,EAAE,MAAM;IACjB,sBAAsB;IACtB,GAAG,EAAE,MAAM;IACX,2BAA2B;IAC3B,QAAQ,EAAE,MAAM;IAChB,uBAAuB;IACvB,IAAI,EAAE,QAAQ;IACd,6BAA6B;IAC7B,UAAU,EAAE,QAAQ;CACZ,CAAC;AAEX,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,uBAAuB;IACvB,SAAS,EAAE,GAAG,YAAY,eAAe;IACzC,mBAAmB;IACnB,GAAG,EAAE,GAAG,YAAY,SAAS;IAC7B,wBAAwB;IACxB,QAAQ,EAAE,GAAG,YAAY,cAAc;IACvC,qBAAqB;IACrB,UAAU,EAAE,GAAG,YAAY,gBAAgB;IAC3C,sBAAsB;IACtB,IAAI,EAAE,GAAG,YAAY,UAAU;CACvB,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC;AAErC;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,SAAS;IACT,cAAc;IACd,YAAY;IACZ,aAAa,EAAE,qEAAqE;IACpF,UAAU;IACV,YAAY;IACZ,SAAS;IACT,SAAS;IACT,UAAU;IACV,gBAAgB;IAChB,eAAe;CACP,CAAC;AAIX;;GAEG;AACH,MAAM,CAAN,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,uCAAqB,CAAA;IACrB,+BAAa,CAAA;AACf,CAAC,EAHW,cAAc,KAAd,cAAc,QAGzB"}
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * MCP Server for Holded API
4
+ *
5
+ * This server provides 70+ comprehensive tools to interact with Holded's REST API,
6
+ * including invoicing (documents, contacts, products, payments, treasury), CRM (leads,
7
+ * funnels, events, bookings), Projects (projects, tasks), and Accounting (accounts,
8
+ * daily ledger).
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG"}
package/dist/index.js ADDED
@@ -0,0 +1,86 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * MCP Server for Holded API
4
+ *
5
+ * This server provides 70+ comprehensive tools to interact with Holded's REST API,
6
+ * including invoicing (documents, contacts, products, payments, treasury), CRM (leads,
7
+ * funnels, events, bookings), Projects (projects, tasks), and Accounting (accounts,
8
+ * daily ledger).
9
+ */
10
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
11
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
12
+ import { getApiKey } from "./services/api.js";
13
+ import { registerInvoicingTools } from "./tools/invoicing/index.js";
14
+ import { registerCrmTools } from "./tools/crm/index.js";
15
+ import { registerProjectsTools } from "./tools/projects/index.js";
16
+ import { registerAccountingTools } from "./tools/accounting/index.js";
17
+ import { registerTeamTools } from "./tools/team/index.js";
18
+ /**
19
+ * Available modules with their registration functions
20
+ */
21
+ const AVAILABLE_MODULES = {
22
+ invoicing: registerInvoicingTools,
23
+ crm: registerCrmTools,
24
+ projects: registerProjectsTools,
25
+ accounting: registerAccountingTools,
26
+ team: registerTeamTools,
27
+ };
28
+ /**
29
+ * Parse HOLDED_MODULES environment variable and return enabled module names
30
+ * If not set, returns all available modules (default behavior)
31
+ */
32
+ function getEnabledModules() {
33
+ const modulesEnv = process.env.HOLDED_MODULES;
34
+ if (!modulesEnv) {
35
+ // Default: all modules enabled
36
+ return Object.keys(AVAILABLE_MODULES);
37
+ }
38
+ const requested = modulesEnv.split(",").map((m) => m.trim().toLowerCase());
39
+ const valid = requested.filter((m) => m in AVAILABLE_MODULES);
40
+ // Warn about invalid module names
41
+ const invalid = requested.filter((m) => !(m in AVAILABLE_MODULES));
42
+ if (invalid.length > 0) {
43
+ console.error(`Warning: Unknown modules ignored: ${invalid.join(", ")}`);
44
+ console.error(`Available modules: ${Object.keys(AVAILABLE_MODULES).join(", ")}`);
45
+ }
46
+ return valid;
47
+ }
48
+ /**
49
+ * Create and configure the MCP server
50
+ */
51
+ const server = new McpServer({
52
+ name: "@energio/holded-mcp",
53
+ version: "1.0.0",
54
+ });
55
+ // Register only enabled modules
56
+ const enabledModules = getEnabledModules();
57
+ for (const moduleName of enabledModules) {
58
+ AVAILABLE_MODULES[moduleName](server);
59
+ }
60
+ /**
61
+ * Main function to run the server via stdio
62
+ */
63
+ async function main() {
64
+ // Validate API key is available
65
+ try {
66
+ getApiKey();
67
+ }
68
+ catch {
69
+ console.error("ERROR: HOLDED_API_KEY environment variable is required.");
70
+ console.error("Get your API key from https://app.holded.com/api");
71
+ process.exit(1);
72
+ }
73
+ // Connect to stdio transport
74
+ const transport = new StdioServerTransport();
75
+ await server.connect(transport);
76
+ // Log to stderr (stdio servers should not log to stdout)
77
+ console.error("Holded MCP server running via stdio");
78
+ console.error("API key configured and ready");
79
+ console.error(`Enabled modules: ${enabledModules.join(", ")}`);
80
+ }
81
+ // Run the server
82
+ main().catch((error) => {
83
+ console.error("Server error:", error);
84
+ process.exit(1);
85
+ });
86
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Zod schemas for Account Balances tool
3
+ */
4
+ import { z } from "zod";
5
+ /**
6
+ * Account Balances input schema
7
+ *
8
+ * Both starttmp and endtmp are required — the tool aggregates ledger entries
9
+ * within this date range and filters out cross-fiscal-year leakage.
10
+ */
11
+ export declare const AccountBalancesInputSchema: z.ZodObject<{
12
+ starttmp: z.ZodNumber;
13
+ endtmp: z.ZodNumber;
14
+ account_filter: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
15
+ include_opening: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
16
+ response_format: z.ZodDefault<z.ZodEnum<typeof import("../../constants.js").ResponseFormat>>;
17
+ }, z.core.$strict>;
18
+ export type AccountBalancesInput = z.infer<typeof AccountBalancesInputSchema>;
19
+ //# sourceMappingURL=account-balances.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-balances.d.ts","sourceRoot":"","sources":["../../../src/schemas/accounting/account-balances.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B;;;;;;kBAkBtC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Zod schemas for Account Balances tool
3
+ */
4
+ import { z } from "zod";
5
+ import { ResponseFormatSchema } from "../common.js";
6
+ /**
7
+ * Account Balances input schema
8
+ *
9
+ * Both starttmp and endtmp are required — the tool aggregates ledger entries
10
+ * within this date range and filters out cross-fiscal-year leakage.
11
+ */
12
+ export const AccountBalancesInputSchema = z.strictObject({
13
+ starttmp: z.number().int().positive().describe("Period start as Unix timestamp (required)"),
14
+ endtmp: z.number().int().positive().describe("Period end as Unix timestamp (required)"),
15
+ account_filter: z
16
+ .array(z.number().int().positive())
17
+ .optional()
18
+ .describe("Filter to specific account numbers (returns all accounts if omitted)"),
19
+ include_opening: z
20
+ .boolean()
21
+ .optional()
22
+ .default(false)
23
+ .describe("Include opening balance entry in totals (default: false, set true for balance sheet)"),
24
+ response_format: ResponseFormatSchema,
25
+ }).refine((data) => data.starttmp <= data.endtmp, {
26
+ message: "starttmp must be less than or equal to endtmp (start date cannot be after end date)",
27
+ });
28
+ //# sourceMappingURL=account-balances.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-balances.js","sourceRoot":"","sources":["../../../src/schemas/accounting/account-balances.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,YAAY,CAAC;IACvD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IAC3F,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IACvF,cAAc,EAAE,CAAC;SACd,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;SAClC,QAAQ,EAAE;SACV,QAAQ,CAAC,sEAAsE,CAAC;IACnF,eAAe,EAAE,CAAC;SACf,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,sFAAsF,CAAC;IACnG,eAAe,EAAE,oBAAoB;CACtC,CAAC,CAAC,MAAM,CACP,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,EACtC;IACE,OAAO,EAAE,qFAAqF;CAC/F,CACF,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Zod schemas for Accounting Account-related operations
3
+ */
4
+ import { z } from "zod";
5
+ /**
6
+ * List accounting accounts input schema
7
+ */
8
+ export declare const ListAccountingAccountsInputSchema: z.ZodObject<{
9
+ page: z.ZodDefault<z.ZodNumber>;
10
+ response_format: z.ZodDefault<z.ZodEnum<typeof import("../../constants.js").ResponseFormat>>;
11
+ include_empty: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
12
+ }, z.core.$strict>;
13
+ export type ListAccountingAccountsInput = z.infer<typeof ListAccountingAccountsInputSchema>;
14
+ /**
15
+ * Create accounting account input schema
16
+ */
17
+ export declare const CreateAccountInputSchema: z.ZodObject<{
18
+ prefix: z.ZodNumber;
19
+ name: z.ZodOptional<z.ZodString>;
20
+ color: z.ZodOptional<z.ZodString>;
21
+ }, z.core.$strict>;
22
+ export type CreateAccountInput = z.infer<typeof CreateAccountInputSchema>;
23
+ /**
24
+ * Get accounting account input schema
25
+ */
26
+ export declare const GetAccountInputSchema: z.ZodObject<{
27
+ account_id: z.ZodString;
28
+ response_format: z.ZodDefault<z.ZodEnum<typeof import("../../constants.js").ResponseFormat>>;
29
+ }, z.core.$strict>;
30
+ export type GetAccountInput = z.infer<typeof GetAccountInputSchema>;
31
+ /**
32
+ * Update accounting account input schema
33
+ */
34
+ export declare const UpdateAccountInputSchema: z.ZodObject<{
35
+ account_id: z.ZodString;
36
+ name: z.ZodOptional<z.ZodString>;
37
+ code: z.ZodOptional<z.ZodString>;
38
+ type: z.ZodOptional<z.ZodString>;
39
+ parentId: z.ZodOptional<z.ZodString>;
40
+ }, z.core.$strict>;
41
+ export type UpdateAccountInput = z.infer<typeof UpdateAccountInputSchema>;
42
+ /**
43
+ * Delete accounting account input schema
44
+ */
45
+ export declare const DeleteAccountInputSchema: z.ZodObject<{
46
+ account_id: z.ZodString;
47
+ }, z.core.$strict>;
48
+ export type DeleteAccountInput = z.infer<typeof DeleteAccountInputSchema>;
49
+ //# sourceMappingURL=accounts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../../src/schemas/accounting/accounts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB;;GAEG;AACH,eAAO,MAAM,iCAAiC;;;;kBAI1C,CAAA;AAEJ,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAE5F;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;kBASjC,CAAA;AAEJ,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;kBAG9B,CAAA;AAEJ,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;;;kBAMjC,CAAA;AAEJ,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;;GAEG;AACH,eAAO,MAAM,wBAAwB;;kBAEjC,CAAA;AAEJ,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Zod schemas for Accounting Account-related operations
3
+ */
4
+ import { z } from "zod";
5
+ import { IdSchema, PaginationSchema, ResponseFormatSchema, } from "../common.js";
6
+ /**
7
+ * List accounting accounts input schema
8
+ */
9
+ export const ListAccountingAccountsInputSchema = z.strictObject({
10
+ page: PaginationSchema.shape.page,
11
+ response_format: ResponseFormatSchema,
12
+ include_empty: z.boolean().optional().default(true).describe("Include empty accounts in the results (default: true)"),
13
+ });
14
+ /**
15
+ * Create accounting account input schema
16
+ */
17
+ export const CreateAccountInputSchema = z.strictObject({
18
+ prefix: z
19
+ .number()
20
+ .int()
21
+ .min(1000)
22
+ .max(9999)
23
+ .describe("4-digit prefix for the account code (required, e.g., 7000 for sales)"),
24
+ name: z.string().optional().describe("Account name (uses parent account name if not provided)"),
25
+ color: z.string().regex(/^#[0-9A-Fa-f]{6}$/, { message: "Color must be a valid hex code (e.g., #FF0000)" }).optional().describe("Account color as hex code (e.g., #FF0000)"),
26
+ });
27
+ /**
28
+ * Get accounting account input schema
29
+ */
30
+ export const GetAccountInputSchema = z.strictObject({
31
+ account_id: IdSchema.describe("The accounting account ID to retrieve"),
32
+ response_format: ResponseFormatSchema,
33
+ });
34
+ /**
35
+ * Update accounting account input schema
36
+ */
37
+ export const UpdateAccountInputSchema = z.strictObject({
38
+ account_id: IdSchema.describe("The accounting account ID to update"),
39
+ name: z.string().optional().describe("Account name"),
40
+ code: z.string().optional().describe("Account code"),
41
+ type: z.string().optional().describe("Account type"),
42
+ parentId: z.string().optional().describe("Parent account ID"),
43
+ });
44
+ /**
45
+ * Delete accounting account input schema
46
+ */
47
+ export const DeleteAccountInputSchema = z.strictObject({
48
+ account_id: IdSchema.describe("The accounting account ID to delete"),
49
+ });
50
+ //# sourceMappingURL=accounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../../src/schemas/accounting/accounts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAEtB;;GAEG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAC,YAAY,CAAC;IAC5D,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,IAAI;IACjC,eAAe,EAAE,oBAAoB;IACrC,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,uDAAuD,CAAC;CACtH,CAAC,CAAA;AAIJ;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,YAAY,CAAC;IACnD,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,IAAI,CAAC;SACT,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,CAAC,sEAAsE,CAAC;IACnF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;IAC/F,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,gDAAgD,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;CAC7K,CAAC,CAAA;AAIJ;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,YAAY,CAAC;IAChD,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IACtE,eAAe,EAAE,oBAAoB;CACtC,CAAC,CAAA;AAIJ;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,YAAY,CAAC;IACnD,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IACpE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;IACpD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;IACpD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;IACpD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;CAC9D,CAAC,CAAA;AAIJ;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,YAAY,CAAC;IACnD,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,qCAAqC,CAAC;CACrE,CAAC,CAAA"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Zod schemas for Daily Ledger-related operations
3
+ */
4
+ import { z } from "zod";
5
+ /**
6
+ * List daily ledger entries input schema
7
+ *
8
+ * The API requires starttmp and endtmp (requests without them are rejected).
9
+ */
10
+ export declare const ListDailyLedgerInputSchema: z.ZodObject<{
11
+ starttmp: z.ZodNumber;
12
+ endtmp: z.ZodNumber;
13
+ page: z.ZodDefault<z.ZodNumber>;
14
+ response_format: z.ZodDefault<z.ZodEnum<typeof import("../../constants.js").ResponseFormat>>;
15
+ }, z.core.$strict>;
16
+ export type ListDailyLedgerInput = z.infer<typeof ListDailyLedgerInputSchema>;
17
+ /**
18
+ * Entry line schema for create entry
19
+ *
20
+ * According to Holded API documentation, `account` must be an integer (account number).
21
+ */
22
+ export declare const EntryLineSchema: z.ZodObject<{
23
+ account: z.ZodNumber;
24
+ debit: z.ZodOptional<z.ZodNumber>;
25
+ credit: z.ZodOptional<z.ZodNumber>;
26
+ description: z.ZodOptional<z.ZodString>;
27
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
28
+ }, z.core.$strict>;
29
+ /**
30
+ * Create daily ledger entry input schema
31
+ */
32
+ export declare const CreateEntryInputSchema: z.ZodObject<{
33
+ date: z.ZodNumber;
34
+ lines: z.ZodArray<z.ZodObject<{
35
+ account: z.ZodNumber;
36
+ debit: z.ZodOptional<z.ZodNumber>;
37
+ credit: z.ZodOptional<z.ZodNumber>;
38
+ description: z.ZodOptional<z.ZodString>;
39
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
40
+ }, z.core.$strict>>;
41
+ notes: z.ZodOptional<z.ZodString>;
42
+ }, z.core.$strict>;
43
+ export type EntryLine = z.infer<typeof EntryLineSchema>;
44
+ export type CreateEntryInput = z.infer<typeof CreateEntryInputSchema>;
45
+ //# sourceMappingURL=daily-ledger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daily-ledger.d.ts","sourceRoot":"","sources":["../../../src/schemas/accounting/daily-ledger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB;;;;GAIG;AACH,eAAO,MAAM,0BAA0B;;;;;kBAUpC,CAAA;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E;;;;GAIG;AACH,eAAO,MAAM,eAAe;;;;;;kBAM1B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;kBAyBlC,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AACxD,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Zod schemas for Daily Ledger-related operations
3
+ */
4
+ import { z } from "zod";
5
+ import { PaginationSchema, ResponseFormatSchema, } from "../common.js";
6
+ /**
7
+ * List daily ledger entries input schema
8
+ *
9
+ * The API requires starttmp and endtmp (requests without them are rejected).
10
+ */
11
+ export const ListDailyLedgerInputSchema = z.strictObject({
12
+ starttmp: z.number().int().positive().describe("Starting timestamp as Unix timestamp (required, filters entries from this date)"),
13
+ endtmp: z.number().int().positive().describe("Ending timestamp as Unix timestamp (required, filters entries until this date)"),
14
+ page: PaginationSchema.shape.page,
15
+ response_format: ResponseFormatSchema,
16
+ }).refine((data) => data.starttmp <= data.endtmp, {
17
+ message: "starttmp must be less than or equal to endtmp (start date cannot be after end date)",
18
+ });
19
+ /**
20
+ * Entry line schema for create entry
21
+ *
22
+ * According to Holded API documentation, `account` must be an integer (account number).
23
+ */
24
+ export const EntryLineSchema = z.strictObject({
25
+ account: z.number().int().positive({ message: "Account must be a positive integer" }).describe("Accounting account number (required, integer)"),
26
+ debit: z.number().min(0).optional().describe("Debit amount (cannot have both debit and credit)"),
27
+ credit: z.number().min(0).optional().describe("Credit amount (cannot have both debit and credit)"),
28
+ description: z.string().optional().describe("Line description"),
29
+ tags: z.array(z.string()).optional().describe("Array of tags for this entry line"),
30
+ });
31
+ /**
32
+ * Create daily ledger entry input schema
33
+ */
34
+ export const CreateEntryInputSchema = z.strictObject({
35
+ date: z.number().int().positive().describe("Entry date as Unix timestamp (required)"),
36
+ lines: z.array(EntryLineSchema).min(2, { message: "At least 2 entry lines are required" }).describe("Array of entry lines (required, minimum 2 lines)"),
37
+ notes: z.string().optional().describe("Entry note"),
38
+ }).refine((data) => {
39
+ // Validate that each line has either debit or credit, but not both
40
+ for (const line of data.lines) {
41
+ const hasDebit = line.debit !== undefined && line.debit > 0;
42
+ const hasCredit = line.credit !== undefined && line.credit > 0;
43
+ if (hasDebit && hasCredit) {
44
+ return false; // Cannot have both
45
+ }
46
+ if (!hasDebit && !hasCredit) {
47
+ return false; // Must have at least one
48
+ }
49
+ }
50
+ // Validate that total debits equal total credits
51
+ const totalDebits = data.lines.reduce((sum, line) => sum + (line.debit || 0), 0);
52
+ const totalCredits = data.lines.reduce((sum, line) => sum + (line.credit || 0), 0);
53
+ return Math.abs(totalDebits - totalCredits) < 0.01; // Allow small floating point differences
54
+ }, {
55
+ message: "Each line must have either debit or credit (not both), and total debits must equal total credits",
56
+ });
57
+ //# sourceMappingURL=daily-ledger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daily-ledger.js","sourceRoot":"","sources":["../../../src/schemas/accounting/daily-ledger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Common Zod schemas shared across all tools
3
+ */
4
+ import { z } from "zod";
5
+ import { ResponseFormat } from "../constants.js";
6
+ /**
7
+ * Response format schema
8
+ */
9
+ export declare const ResponseFormatSchema: z.ZodDefault<z.ZodEnum<typeof ResponseFormat>>;
10
+ /**
11
+ * Pagination schema
12
+ */
13
+ export declare const PaginationSchema: z.ZodObject<{
14
+ page: z.ZodDefault<z.ZodNumber>;
15
+ }, z.core.$strict>;
16
+ /**
17
+ * ID parameter schema
18
+ */
19
+ export declare const IdSchema: z.ZodString;
20
+ /**
21
+ * Document type schema
22
+ */
23
+ export declare const DocumentTypeSchema: z.ZodEnum<{
24
+ invoice: "invoice";
25
+ salesreceipt: "salesreceipt";
26
+ creditnote: "creditnote";
27
+ receiptnote: "receiptnote";
28
+ estimate: "estimate";
29
+ salesorder: "salesorder";
30
+ waybill: "waybill";
31
+ proform: "proform";
32
+ purchase: "purchase";
33
+ purchaserefund: "purchaserefund";
34
+ purchaseorder: "purchaseorder";
35
+ }>;
36
+ /**
37
+ * Optional string schema
38
+ */
39
+ export declare const OptionalStringSchema: z.ZodOptional<z.ZodString>;
40
+ /**
41
+ * Optional number schema
42
+ */
43
+ export declare const OptionalNumberSchema: z.ZodOptional<z.ZodNumber>;
44
+ /**
45
+ * Optional boolean schema
46
+ */
47
+ export declare const OptionalBooleanSchema: z.ZodOptional<z.ZodBoolean>;
48
+ /**
49
+ * Date as timestamp schema (Unix timestamp in seconds)
50
+ */
51
+ export declare const TimestampSchema: z.ZodOptional<z.ZodNumber>;
52
+ /**
53
+ * Currency code schema (ISO 4217)
54
+ */
55
+ export declare const CurrencySchema: z.ZodOptional<z.ZodString>;
56
+ /**
57
+ * Tags array schema
58
+ */
59
+ export declare const TagsSchema: z.ZodOptional<z.ZodArray<z.ZodString>>;
60
+ /**
61
+ * Address schema
62
+ */
63
+ export declare const AddressSchema: z.ZodObject<{
64
+ address: z.ZodOptional<z.ZodString>;
65
+ city: z.ZodOptional<z.ZodString>;
66
+ postalCode: z.ZodOptional<z.ZodString>;
67
+ province: z.ZodOptional<z.ZodString>;
68
+ country: z.ZodOptional<z.ZodString>;
69
+ countryCode: z.ZodOptional<z.ZodString>;
70
+ }, z.core.$strict>;
71
+ /**
72
+ * Shipping address schema (extends AddressSchema with name and notes)
73
+ */
74
+ export declare const ShippingAddressSchema: z.ZodObject<{
75
+ address: z.ZodOptional<z.ZodString>;
76
+ city: z.ZodOptional<z.ZodString>;
77
+ postalCode: z.ZodOptional<z.ZodString>;
78
+ province: z.ZodOptional<z.ZodString>;
79
+ country: z.ZodOptional<z.ZodString>;
80
+ countryCode: z.ZodOptional<z.ZodString>;
81
+ name: z.ZodOptional<z.ZodString>;
82
+ notes: z.ZodOptional<z.ZodString>;
83
+ privateNote: z.ZodOptional<z.ZodString>;
84
+ }, z.core.$strict>;
85
+ /**
86
+ * Numbering series schema (per-document-type numbering series IDs)
87
+ */
88
+ export declare const NumberingSeriesSchema: z.ZodObject<{
89
+ invoice: z.ZodOptional<z.ZodString>;
90
+ receipt: z.ZodOptional<z.ZodString>;
91
+ salesOrder: z.ZodOptional<z.ZodString>;
92
+ purchasesOrder: z.ZodOptional<z.ZodString>;
93
+ proform: z.ZodOptional<z.ZodString>;
94
+ waybill: z.ZodOptional<z.ZodString>;
95
+ }, z.core.$strict>;
96
+ /**
97
+ * Contact person schema
98
+ */
99
+ export declare const ContactPersonSchema: z.ZodObject<{
100
+ name: z.ZodString;
101
+ phone: z.ZodOptional<z.ZodString>;
102
+ email: z.ZodOptional<z.ZodString>;
103
+ }, z.core.$strict>;
104
+ /**
105
+ * Custom field schema
106
+ */
107
+ export declare const CustomFieldSchema: z.ZodObject<{
108
+ field: z.ZodString;
109
+ value: z.ZodString;
110
+ }, z.core.$strict>;
111
+ /**
112
+ * Custom fields array schema
113
+ */
114
+ export declare const CustomFieldsSchema: z.ZodOptional<z.ZodArray<z.ZodObject<{
115
+ field: z.ZodString;
116
+ value: z.ZodString;
117
+ }, z.core.$strict>>>;
118
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/schemas/common.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAkB,MAAM,iBAAiB,CAAC;AAEjE;;GAEG;AACH,eAAO,MAAM,oBAAoB,gDAGwD,CAAC;AAE1F;;GAEG;AACH,eAAO,MAAM,gBAAgB;;kBAO3B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,QAAQ,aAGe,CAAC;AAErC;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAI5B,CAAC;AAEJ;;GAEG;AACH,eAAO,MAAM,oBAAoB,4BAAwB,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,oBAAoB,4BAAwB,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,qBAAqB,6BAAyB,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,eAAe,4BAKY,CAAC;AAEzC;;GAEG;AACH,eAAO,MAAM,cAAc,4BAK4B,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,UAAU,wCAGK,CAAC;AAE7B;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;kBAOxB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;kBAIhC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;kBAOhC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;kBAI9B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;kBAG5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;oBAGM,CAAC"}