@nubiia/mcp-freematica 0.6.1

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 (138) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +485 -0
  3. package/dist/clients/base-client.d.ts +31 -0
  4. package/dist/clients/base-client.js +102 -0
  5. package/dist/clients/base-client.js.map +1 -0
  6. package/dist/clients/fiql-builder.d.ts +118 -0
  7. package/dist/clients/fiql-builder.js +257 -0
  8. package/dist/clients/fiql-builder.js.map +1 -0
  9. package/dist/clients/freematica-client.d.ts +659 -0
  10. package/dist/clients/freematica-client.js +1327 -0
  11. package/dist/clients/freematica-client.js.map +1 -0
  12. package/dist/clients/hardened-base-client.d.ts +143 -0
  13. package/dist/clients/hardened-base-client.js +366 -0
  14. package/dist/clients/hardened-base-client.js.map +1 -0
  15. package/dist/config.d.ts +104 -0
  16. package/dist/config.js +105 -0
  17. package/dist/config.js.map +1 -0
  18. package/dist/index.d.ts +2 -0
  19. package/dist/index.js +55 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/logger.d.ts +71 -0
  22. package/dist/logger.js +114 -0
  23. package/dist/logger.js.map +1 -0
  24. package/dist/schemas/albaranes.d.ts +124 -0
  25. package/dist/schemas/albaranes.js +250 -0
  26. package/dist/schemas/albaranes.js.map +1 -0
  27. package/dist/schemas/cartera.d.ts +70 -0
  28. package/dist/schemas/cartera.js +104 -0
  29. package/dist/schemas/cartera.js.map +1 -0
  30. package/dist/schemas/contratos.d.ts +7 -0
  31. package/dist/schemas/contratos.js +2 -0
  32. package/dist/schemas/contratos.js.map +1 -0
  33. package/dist/schemas/facturas-electronicas.d.ts +60 -0
  34. package/dist/schemas/facturas-electronicas.js +79 -0
  35. package/dist/schemas/facturas-electronicas.js.map +1 -0
  36. package/dist/schemas/facturas-ventas.d.ts +118 -0
  37. package/dist/schemas/facturas-ventas.js +153 -0
  38. package/dist/schemas/facturas-ventas.js.map +1 -0
  39. package/dist/schemas/filters.d.ts +92 -0
  40. package/dist/schemas/filters.js +76 -0
  41. package/dist/schemas/filters.js.map +1 -0
  42. package/dist/schemas/master-data.d.ts +26 -0
  43. package/dist/schemas/master-data.js +86 -0
  44. package/dist/schemas/master-data.js.map +1 -0
  45. package/dist/schemas/pagination.d.ts +14 -0
  46. package/dist/schemas/pagination.js +27 -0
  47. package/dist/schemas/pagination.js.map +1 -0
  48. package/dist/schemas/pedidos-compras.d.ts +92 -0
  49. package/dist/schemas/pedidos-compras.js +189 -0
  50. package/dist/schemas/pedidos-compras.js.map +1 -0
  51. package/dist/server-instructions.d.ts +1 -0
  52. package/dist/server-instructions.js +83 -0
  53. package/dist/server-instructions.js.map +1 -0
  54. package/dist/server.d.ts +6 -0
  55. package/dist/server.js +41 -0
  56. package/dist/server.js.map +1 -0
  57. package/dist/tools/albaranes.d.ts +16 -0
  58. package/dist/tools/albaranes.js +202 -0
  59. package/dist/tools/albaranes.js.map +1 -0
  60. package/dist/tools/calendarios.d.ts +13 -0
  61. package/dist/tools/calendarios.js +82 -0
  62. package/dist/tools/calendarios.js.map +1 -0
  63. package/dist/tools/cartera.d.ts +13 -0
  64. package/dist/tools/cartera.js +78 -0
  65. package/dist/tools/cartera.js.map +1 -0
  66. package/dist/tools/clientes.d.ts +3 -0
  67. package/dist/tools/clientes.js +48 -0
  68. package/dist/tools/clientes.js.map +1 -0
  69. package/dist/tools/contabilidad.d.ts +14 -0
  70. package/dist/tools/contabilidad.js +259 -0
  71. package/dist/tools/contabilidad.js.map +1 -0
  72. package/dist/tools/contactos-clientes.d.ts +3 -0
  73. package/dist/tools/contactos-clientes.js +25 -0
  74. package/dist/tools/contactos-clientes.js.map +1 -0
  75. package/dist/tools/contratos.d.ts +10 -0
  76. package/dist/tools/contratos.js +35 -0
  77. package/dist/tools/contratos.js.map +1 -0
  78. package/dist/tools/facturas-compras.d.ts +13 -0
  79. package/dist/tools/facturas-compras.js +131 -0
  80. package/dist/tools/facturas-compras.js.map +1 -0
  81. package/dist/tools/facturas-electronicas.d.ts +17 -0
  82. package/dist/tools/facturas-electronicas.js +268 -0
  83. package/dist/tools/facturas-electronicas.js.map +1 -0
  84. package/dist/tools/facturas-ventas.d.ts +16 -0
  85. package/dist/tools/facturas-ventas.js +181 -0
  86. package/dist/tools/facturas-ventas.js.map +1 -0
  87. package/dist/tools/helpers.d.ts +17 -0
  88. package/dist/tools/helpers.js +36 -0
  89. package/dist/tools/helpers.js.map +1 -0
  90. package/dist/tools/localizaciones.d.ts +17 -0
  91. package/dist/tools/localizaciones.js +192 -0
  92. package/dist/tools/localizaciones.js.map +1 -0
  93. package/dist/tools/master-data.d.ts +10 -0
  94. package/dist/tools/master-data.js +70 -0
  95. package/dist/tools/master-data.js.map +1 -0
  96. package/dist/tools/oportunidades-negocio.d.ts +3 -0
  97. package/dist/tools/oportunidades-negocio.js +68 -0
  98. package/dist/tools/oportunidades-negocio.js.map +1 -0
  99. package/dist/tools/pedidos-compras.d.ts +14 -0
  100. package/dist/tools/pedidos-compras.js +105 -0
  101. package/dist/tools/pedidos-compras.js.map +1 -0
  102. package/dist/tools/personal.d.ts +13 -0
  103. package/dist/tools/personal.js +154 -0
  104. package/dist/tools/personal.js.map +1 -0
  105. package/dist/tools/prl.d.ts +47 -0
  106. package/dist/tools/prl.js +242 -0
  107. package/dist/tools/prl.js.map +1 -0
  108. package/dist/tools/proveedores.d.ts +14 -0
  109. package/dist/tools/proveedores.js +122 -0
  110. package/dist/tools/proveedores.js.map +1 -0
  111. package/dist/transports/http.d.ts +12 -0
  112. package/dist/transports/http.js +110 -0
  113. package/dist/transports/http.js.map +1 -0
  114. package/dist/transports/stdio.d.ts +12 -0
  115. package/dist/transports/stdio.js +15 -0
  116. package/dist/transports/stdio.js.map +1 -0
  117. package/dist/types/api-envelope.d.ts +27 -0
  118. package/dist/types/api-envelope.js +2 -0
  119. package/dist/types/api-envelope.js.map +1 -0
  120. package/dist/types/clientes.d.ts +9 -0
  121. package/dist/types/clientes.js +2 -0
  122. package/dist/types/clientes.js.map +1 -0
  123. package/dist/types/contactos-clientes.d.ts +7 -0
  124. package/dist/types/contactos-clientes.js +2 -0
  125. package/dist/types/contactos-clientes.js.map +1 -0
  126. package/dist/types/contratos.d.ts +8 -0
  127. package/dist/types/contratos.js +2 -0
  128. package/dist/types/contratos.js.map +1 -0
  129. package/dist/types/master-data.d.ts +9 -0
  130. package/dist/types/master-data.js +2 -0
  131. package/dist/types/master-data.js.map +1 -0
  132. package/dist/types/oportunidades-negocio.d.ts +8 -0
  133. package/dist/types/oportunidades-negocio.js +2 -0
  134. package/dist/types/oportunidades-negocio.js.map +1 -0
  135. package/dist/utils/size-guardrail.d.ts +22 -0
  136. package/dist/utils/size-guardrail.js +31 -0
  137. package/dist/utils/size-guardrail.js.map +1 -0
  138. package/package.json +90 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"albaranes.js","sourceRoot":"","sources":["../../src/tools/albaranes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EACL,iCAAiC,EACjC,gCAAgC,EAChC,sCAAsC,GACvC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEjD,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,0BAA0B,GAAG,kCAAkC,CAAC;AACtE,MAAM,sBAAsB,GAAG,8BAA8B,CAAC;AAC9D,MAAM,2BAA2B,GAAG,mCAAmC,CAAC;AACxE,MAAM,wBAAwB,GAAG,gCAAgC,CAAC;AAClE,MAAM,gCAAgC,GAAG,wCAAwC,CAAC;AAElF,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E,MAAM,iCAAiC,GAAG;IACxC,kEAAkE;IAClE,EAAE;IACF,4EAA4E;IAC5E,oEAAoE;IACpE,8EAA8E;IAC9E,mFAAmF;IACnF,uEAAuE;IACvE,EAAE;IACF,qFAAqF;IACrF,yEAAyE;IACzE,gEAAgE;IAChE,EAAE;IACF,uBAAuB;CACxB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,6BAA6B,GAAG;IACpC,sDAAsD;IACtD,EAAE;IACF,kFAAkF;IAClF,4FAA4F;CAC7F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,kCAAkC,GAAG;IACzC,4EAA4E;IAC5E,EAAE;IACF,sEAAsE;IACtE,qFAAqF;IACrF,yFAAyF;IACzF,iFAAiF;IACjF,EAAE;IACF,oFAAoF;IACpF,0DAA0D;IAC1D,EAAE;IACF,2BAA2B;IAC3B,8FAA8F;IAC9F,0FAA0F;IAC1F,EAAE;IACF,uBAAuB;CACxB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,+BAA+B,GAAG;IACtC,6EAA6E;IAC7E,EAAE;IACF,kFAAkF;IAClF,6FAA6F;CAC9F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,uCAAuC,GAAG;IAC9C,oFAAoF;IACpF,EAAE;IACF,4FAA4F;IAC5F,wFAAwF;IACxF,uFAAuF;IACvF,4FAA4F;IAC5F,6EAA6E;IAC7E,EAAE;IACF,+DAA+D;IAC/D,EAAE;IACF,gEAAgE;CACjE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,MAAwB;IAChF,4EAA4E;IAC5E,mCAAmC;IACnC,4EAA4E;IAE5E,MAAM,CAAC,IAAI,CACT,0BAA0B,EAC1B,iCAAiC,EACjC,gCAAgC,EAChC,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,EACnE,KAAK,EAAE,EACL,IAAI,EACJ,KAAK,EACL,OAAO,EACP,UAAU,EACV,UAAU,EACV,YAAY,EACZ,UAAU,EACV,UAAU,EACV,KAAK,GACN,EAA2B,EAAE;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC;gBAC9C,IAAI;gBACJ,KAAK;gBACL,OAAO;gBACP,UAAU;gBACV,UAAU;gBACV,YAAY;gBACZ,UAAU;gBACV,UAAU;gBACV,KAAK;aACN,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAmB,CAAC;QAC3G,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,eAAe;gBAAE,OAAO,KAAK,CAAC,GAAG,CAAmB,CAAC;YACxE,OAAO,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAmB,CAAC;QACtF,CAAC;IACH,CAAC,CACF,CAAC;IAEF,4EAA4E;IAC5E,+BAA+B;IAC/B,4EAA4E;IAE5E,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,6BAA6B,EAC7B;QACE,EAAE,EAAE,CAAC;aACF,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CACP,oGAAoG,CACrG;KACJ,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,EACnE,KAAK,EAAE,EAAE,EAAE,EAAE,EAA2B,EAAE;QACxC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;YACjD,OAAO,EAAE,CAAC,OAAO,CAAmB,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,eAAe;gBAAE,OAAO,KAAK,CAAC,GAAG,CAAmB,CAAC;YACxE,OAAO,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAmB,CAAC;QACtF,CAAC;IACH,CAAC,CACF,CAAC;IAEF,4EAA4E;IAC5E,oCAAoC;IACpC,4EAA4E;IAE5E,MAAM,CAAC,IAAI,CACT,2BAA2B,EAC3B,kCAAkC,EAClC,iCAAiC,EACjC,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,EACnE,KAAK,EAAE,EACL,IAAI,EACJ,KAAK,EACL,KAAK,EACL,OAAO,EACP,KAAK,EACL,UAAU,EACV,UAAU,GACX,EAA2B,EAAE;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC;gBAC/C,IAAI;gBACJ,KAAK;gBACL,KAAK;gBACL,OAAO;gBACP,KAAK;gBACL,UAAU;gBACV,UAAU;aACX,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAmB,CAAC;QAC3G,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,eAAe;gBAAE,OAAO,KAAK,CAAC,GAAG,CAAmB,CAAC;YACxE,OAAO,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAmB,CAAC;QACtF,CAAC;IACH,CAAC,CACF,CAAC;IAEF,4EAA4E;IAC5E,iCAAiC;IACjC,4EAA4E;IAE5E,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,+BAA+B,EAC/B;QACE,EAAE,EAAE,CAAC;aACF,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CACP,6GAA6G,CAC9G;KACJ,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,EACnE,KAAK,EAAE,EAAE,EAAE,EAAE,EAA2B,EAAE;QACxC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;YACnD,OAAO,EAAE,CAAC,OAAO,CAAmB,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,eAAe;gBAAE,OAAO,KAAK,CAAC,GAAG,CAAmB,CAAC;YACxE,OAAO,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAmB,CAAC;QACtF,CAAC;IACH,CAAC,CACF,CAAC;IAEF,4EAA4E;IAC5E,yCAAyC;IACzC,4EAA4E;IAE5E,MAAM,CAAC,IAAI,CACT,gCAAgC,EAChC,uCAAuC,EACvC,sCAAsC,EACtC,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,EACnE,KAAK,EAAE,EACL,IAAI,EACJ,KAAK,EACL,OAAO,EACP,UAAU,EACV,UAAU,EACV,UAAU,EACV,GAAG,EACH,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,UAAU,EACV,KAAK,GACN,EAA2B,EAAE;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC;gBACpD,IAAI;gBACJ,KAAK;gBACL,OAAO;gBACP,UAAU;gBACV,UAAU;gBACV,UAAU;gBACV,GAAG;gBACH,QAAQ;gBACR,QAAQ;gBACR,OAAO;gBACP,UAAU;gBACV,KAAK;aACN,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAmB,CAAC;QAC3G,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,eAAe;gBAAE,OAAO,KAAK,CAAC,GAAG,CAAmB,CAAC;YACxE,OAAO,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAmB,CAAC;QACtF,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { FreematicaClient } from '../clients/freematica-client.js';
3
+ /**
4
+ * Registra las tools MCP del dominio Calendarios Laborales.
5
+ *
6
+ * Tools expuestas:
7
+ * 1. freematica_list_calendarios — lista paginada de calendarios
8
+ * 2. freematica_list_calendario_periodos — periodos de un calendario (idReg)
9
+ *
10
+ * @param server - Instancia del servidor MCP.
11
+ * @param client - Cliente Freemática autenticado.
12
+ */
13
+ export declare function registerCalendariosTools(server: McpServer, client: FreematicaClient): void;
@@ -0,0 +1,82 @@
1
+ import { z } from 'zod';
2
+ import { FreematicaError } from '../clients/base-client.js';
3
+ import { PaginationSchema } from '../schemas/pagination.js';
4
+ import { error, okList } from './helpers.js';
5
+ // ---------------------------------------------------------------------------
6
+ // Tool names
7
+ // ---------------------------------------------------------------------------
8
+ const LIST_CALENDARIOS_TOOL_NAME = 'freematica_list_calendarios';
9
+ const LIST_PERIODOS_TOOL_NAME = 'freematica_list_calendario_periodos';
10
+ // ---------------------------------------------------------------------------
11
+ // Descriptions
12
+ // ---------------------------------------------------------------------------
13
+ const LIST_CALENDARIOS_DESCRIPTION = [
14
+ 'Devuelve la lista paginada de calendarios laborales registrados en Freemática.',
15
+ '',
16
+ 'Endpoint: GET /pgrl/v1/calendarios',
17
+ '',
18
+ 'Cada item incluye `idReg` opaco que se usa en freematica_list_calendario_periodos',
19
+ 'para obtener los periodos de un calendario concreto.',
20
+ '',
21
+ 'Soporta paginación estándar (page, items).',
22
+ ].join('\n');
23
+ const LIST_PERIODOS_DESCRIPTION = [
24
+ 'Devuelve los periodos de un calendario laboral concreto.',
25
+ '',
26
+ 'Endpoint: GET /pgrl/v1/calendarios/{idreg}/periodos',
27
+ '',
28
+ 'El parámetro `idCalendario` DEBE ser el campo `idReg` (string opaco base64)',
29
+ 'que aparece en los items de freematica_list_calendarios.',
30
+ '',
31
+ 'Soporta paginación estándar (page, items).',
32
+ ].join('\n');
33
+ // ---------------------------------------------------------------------------
34
+ // Register function
35
+ // ---------------------------------------------------------------------------
36
+ /**
37
+ * Registra las tools MCP del dominio Calendarios Laborales.
38
+ *
39
+ * Tools expuestas:
40
+ * 1. freematica_list_calendarios — lista paginada de calendarios
41
+ * 2. freematica_list_calendario_periodos — periodos de un calendario (idReg)
42
+ *
43
+ * @param server - Instancia del servidor MCP.
44
+ * @param client - Cliente Freemática autenticado.
45
+ */
46
+ export function registerCalendariosTools(server, client) {
47
+ // -------------------------------------------------------------------------
48
+ // 1. freematica_list_calendarios
49
+ // -------------------------------------------------------------------------
50
+ server.tool(LIST_CALENDARIOS_TOOL_NAME, LIST_CALENDARIOS_DESCRIPTION, PaginationSchema, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ page, items }) => {
51
+ try {
52
+ const result = await client.listCalendarios({ page, items });
53
+ return okList({ items: result.items, total: result.total, page, itemsPerPage: items });
54
+ }
55
+ catch (err) {
56
+ if (err instanceof FreematicaError)
57
+ return error(err);
58
+ return error(err instanceof Error ? err : new Error(String(err)));
59
+ }
60
+ });
61
+ // -------------------------------------------------------------------------
62
+ // 2. freematica_list_calendario_periodos
63
+ // -------------------------------------------------------------------------
64
+ server.tool(LIST_PERIODOS_TOOL_NAME, LIST_PERIODOS_DESCRIPTION, {
65
+ idCalendario: z
66
+ .string()
67
+ .min(1)
68
+ .describe('idReg opaco del calendario (campo "idReg" en los items de freematica_list_calendarios).'),
69
+ ...PaginationSchema,
70
+ }, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ idCalendario, page, items }) => {
71
+ try {
72
+ const result = await client.listCalendarioPeriodos(idCalendario, { page, items });
73
+ return okList({ items: result.items, total: result.total, page, itemsPerPage: items });
74
+ }
75
+ catch (err) {
76
+ if (err instanceof FreematicaError)
77
+ return error(err);
78
+ return error(err instanceof Error ? err : new Error(String(err)));
79
+ }
80
+ });
81
+ }
82
+ //# sourceMappingURL=calendarios.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendarios.js","sourceRoot":"","sources":["../../src/tools/calendarios.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { FreematicaClient } from '../clients/freematica-client.js';
3
+ /**
4
+ * Registra las tools MCP del dominio "Cartera de Clientes".
5
+ *
6
+ * Expone 2 tools:
7
+ * - `freematica_list_cartera_clientes`: listado paginado con filtros FIQL
8
+ * - `freematica_get_cartera_cliente`: detalle por idReg
9
+ *
10
+ * @param server - Instancia MCP donde se registran las tools.
11
+ * @param client - Cliente tipado de Freemática.
12
+ */
13
+ export declare function registerCarteraTools(server: McpServer, client: FreematicaClient): void;
@@ -0,0 +1,78 @@
1
+ import { z } from 'zod';
2
+ import { FreematicaError } from '../clients/base-client.js';
3
+ import { ListCarteraFiltersSchema } from '../schemas/cartera.js';
4
+ import { error, ok, okList } from './helpers.js';
5
+ const LIST_TOOL_NAME = 'freematica_list_cartera_clientes';
6
+ const GET_TOOL_NAME = 'freematica_get_cartera_cliente';
7
+ const LIST_DESCRIPTION = [
8
+ 'Devuelve la lista paginada de documentos de cartera de clientes (cobros, efectos, impagados).',
9
+ '',
10
+ 'Útil para analizar el estado de cobros: deudas pendientes, impagados, vencimientos próximos.',
11
+ '',
12
+ 'Cada item contiene ~40 campos: CARCL_CODAUX (código cliente), CARCL_IMPCOB (importe cobrado),',
13
+ 'CARCL_IMPPEN (importe pendiente), CARCL_FECDOC (fecha documento), CARCL_FECVCTO (fecha vencimiento),',
14
+ 'CARCL_SITCAR (estado: 1=pendiente, 2=cancelado, 3=derivado), CARCL_FECIMPAG (fecha impago, null si no hay)',
15
+ 'más un campo `idReg` opaco (base64) para `freematica_get_cartera_cliente`.',
16
+ '',
17
+ 'Filtros disponibles:',
18
+ '- empresa, codCliente, grupoCliente, representante, formaPago, modoPago',
19
+ '- fechaDocDesde/Hasta (rango de fecha del documento)',
20
+ '- fechaVencimientoDesde/Hasta (rango de vencimiento)',
21
+ '- estado: "pendiente" | "cancelado" | "derivado"',
22
+ '- soloImpagados: true → solo documentos con impago registrado (CARCL_FECIMPAG no nulo)',
23
+ '- referencia: referencia exacta del documento (CARCL_REFCAR)',
24
+ '',
25
+ 'Paginación 1-indexed. Default: page=1, items=20.',
26
+ ].join('\n');
27
+ const GET_DESCRIPTION = [
28
+ 'Devuelve el detalle completo de un documento de cartera de clientes.',
29
+ '',
30
+ 'El parámetro `id` DEBE ser el campo `idReg` (string opaco base64) que aparece en los items de',
31
+ 'freematica_list_cartera_clientes. NO usar CARCL_CODAUX ni otro código natural.',
32
+ ].join('\n');
33
+ const IdSchema = {
34
+ id: z
35
+ .string()
36
+ .min(1)
37
+ .describe('idReg opaco del documento de cartera (campo "idReg" en los items de freematica_list_cartera_clientes).'),
38
+ };
39
+ /**
40
+ * Registra las tools MCP del dominio "Cartera de Clientes".
41
+ *
42
+ * Expone 2 tools:
43
+ * - `freematica_list_cartera_clientes`: listado paginado con filtros FIQL
44
+ * - `freematica_get_cartera_cliente`: detalle por idReg
45
+ *
46
+ * @param server - Instancia MCP donde se registran las tools.
47
+ * @param client - Cliente tipado de Freemática.
48
+ */
49
+ export function registerCarteraTools(server, client) {
50
+ server.tool(LIST_TOOL_NAME, LIST_DESCRIPTION, ListCarteraFiltersSchema, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async (args) => {
51
+ try {
52
+ const result = await client.listCarteraClientes(args);
53
+ return okList({
54
+ items: result.items,
55
+ total: result.total,
56
+ page: args.page,
57
+ itemsPerPage: args.items,
58
+ });
59
+ }
60
+ catch (err) {
61
+ if (err instanceof FreematicaError)
62
+ return error(err);
63
+ return error(err instanceof Error ? err : new Error(String(err)));
64
+ }
65
+ });
66
+ server.tool(GET_TOOL_NAME, GET_DESCRIPTION, IdSchema, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ id }) => {
67
+ try {
68
+ const doc = await client.getCarteraCliente(id);
69
+ return ok(doc);
70
+ }
71
+ catch (err) {
72
+ if (err instanceof FreematicaError)
73
+ return error(err);
74
+ return error(err instanceof Error ? err : new Error(String(err)));
75
+ }
76
+ });
77
+ }
78
+ //# sourceMappingURL=cartera.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cartera.js","sourceRoot":"","sources":["../../src/tools/cartera.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { FreematicaClient } from '../clients/freematica-client.js';
3
+ export declare function registerClientesTools(server: McpServer, client: FreematicaClient): void;
@@ -0,0 +1,48 @@
1
+ import { z } from 'zod';
2
+ import { FreematicaError } from '../clients/base-client.js';
3
+ import { PaginationSchema } from '../schemas/pagination.js';
4
+ import { error, ok, okList } from './helpers.js';
5
+ const LIST_TOOL_NAME = 'freematica_list_clientes';
6
+ const GET_TOOL_NAME = 'freematica_get_cliente';
7
+ const LIST_DESCRIPTION = [
8
+ 'Devuelve la lista paginada de clientes de Freemática.',
9
+ '',
10
+ 'Cada item tiene ~87 campos (COD_CLI, NOMBRE_CLI, NIF, FECHA_ALTA, etc.) más un campo `idReg` opaco (base64) que se usa para el endpoint singular `freematica_get_cliente`.',
11
+ '',
12
+ 'Paginación 1-indexed: la primera página es page=1. Devuelve también `total` con el total de clientes en el dataset.',
13
+ ].join('\n');
14
+ const GET_DESCRIPTION = [
15
+ 'Devuelve el detalle completo de un cliente.',
16
+ '',
17
+ 'El parámetro `id` DEBE ser el campo `idReg` (string opaco base64) que aparece en los items de freematica_list_clientes. NO usar COD_CLI ni otro código natural — el API devuelve not_found.',
18
+ ].join('\n');
19
+ export function registerClientesTools(server, client) {
20
+ server.tool(LIST_TOOL_NAME, LIST_DESCRIPTION, PaginationSchema, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ page, items }) => {
21
+ try {
22
+ const result = await client.listClientes({ page, items });
23
+ return okList({ items: result.items, total: result.total, page, itemsPerPage: items });
24
+ }
25
+ catch (err) {
26
+ if (err instanceof FreematicaError)
27
+ return error(err);
28
+ return error(err instanceof Error ? err : new Error(String(err)));
29
+ }
30
+ });
31
+ server.tool(GET_TOOL_NAME, GET_DESCRIPTION, {
32
+ id: z
33
+ .string()
34
+ .min(1)
35
+ .describe('idReg opaco del cliente (campo "idReg" en los items de freematica_list_clientes).'),
36
+ }, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ id }) => {
37
+ try {
38
+ const cliente = await client.getCliente(id);
39
+ return ok(cliente);
40
+ }
41
+ catch (err) {
42
+ if (err instanceof FreematicaError)
43
+ return error(err);
44
+ return error(err instanceof Error ? err : new Error(String(err)));
45
+ }
46
+ });
47
+ }
48
+ //# sourceMappingURL=clientes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientes.js","sourceRoot":"","sources":["../../src/tools/clientes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,cAAc,GAAG,0BAA0B,CAAC;AAClD,MAAM,aAAa,GAAG,wBAAwB,CAAC;AAE/C,MAAM,gBAAgB,GAAG;IACvB,uDAAuD;IACvD,EAAE;IACF,4KAA4K;IAC5K,EAAE;IACF,qHAAqH;CACtH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,eAAe,GAAG;IACtB,6CAA6C;IAC7C,EAAE;IACF,6LAA6L;CAC9L,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,UAAU,qBAAqB,CAAC,MAAiB,EAAE,MAAwB;IAC/E,MAAM,CAAC,IAAI,CACT,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,EACnE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAA2B,EAAE;QACjD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1D,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAmB,CAAC;QAC3G,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,eAAe;gBAAE,OAAO,KAAK,CAAC,GAAG,CAAmB,CAAC;YACxE,OAAO,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAmB,CAAC;QACtF,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,eAAe,EACf;QACE,EAAE,EAAE,CAAC;aACF,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CACP,mFAAmF,CACpF;KACJ,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,EACnE,KAAK,EAAE,EAAE,EAAE,EAAE,EAA2B,EAAE;QACxC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAC5C,OAAO,EAAE,CAAC,OAAO,CAAmB,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,eAAe;gBAAE,OAAO,KAAK,CAAC,GAAG,CAAmB,CAAC;YACxE,OAAO,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAmB,CAAC;QACtF,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { FreematicaClient } from '../clients/freematica-client.js';
3
+ /**
4
+ * Registra las 3 tools de contabilidad en el MCP server.
5
+ *
6
+ * Tools registradas:
7
+ * - freematica_list_cuentas_contables → GET /pcon/v2/cuentas
8
+ * - freematica_list_cuentas_analiticas → GET /pcon/v2/cuentas-analiticas
9
+ * - freematica_export_asientos → GET /pcon/v2/export-asientos
10
+ *
11
+ * @param server - Instancia del servidor MCP.
12
+ * @param client - Cliente tipado de Freemática.
13
+ */
14
+ export declare function registerContabilidadTools(server: McpServer, client: FreematicaClient): void;
@@ -0,0 +1,259 @@
1
+ import { z } from 'zod';
2
+ import { FreematicaError } from '../clients/base-client.js';
3
+ import { error, ok, okList } from './helpers.js';
4
+ // ---------------------------------------------------------------------------
5
+ // Tool names
6
+ // ---------------------------------------------------------------------------
7
+ const LIST_CUENTAS_CONTABLES_TOOL = 'freematica_list_cuentas_contables';
8
+ const LIST_CUENTAS_ANALITICAS_TOOL = 'freematica_list_cuentas_analiticas';
9
+ const EXPORT_ASIENTOS_TOOL = 'freematica_export_asientos';
10
+ // ---------------------------------------------------------------------------
11
+ // Descriptions
12
+ // ---------------------------------------------------------------------------
13
+ const LIST_CUENTAS_CONTABLES_DESCRIPTION = [
14
+ 'Devuelve el plan de cuentas contables de Freemática.',
15
+ '',
16
+ 'Endpoint: GET /pcon/v2/cuentas.',
17
+ 'Devuelve los registros del catálogo de cuentas del Plan Contable (COD_CTA, COD_PLAN, COD_GRUPO_CTA, CTA_ACTIVA, NOMBRE_CTA, etc.).',
18
+ '',
19
+ 'Filtros FIQL disponibles:',
20
+ ' - codPlan: filtra por código de plan contable (COD_PLAN).',
21
+ ' - prefijoCuenta: filtra cuentas cuyo COD_CTA comienza por el prefijo indicado (prefijo match).',
22
+ ' - activa: si true, devuelve solo cuentas activas (CTA_ACTIVA==1); si false, solo inactivas.',
23
+ ' - grupoCuenta: filtra por código de grupo de cuenta (COD_GRUPO_CTA).',
24
+ '',
25
+ 'Los filtros se combinan con AND. Todos son opcionales.',
26
+ ].join('\n');
27
+ const LIST_CUENTAS_ANALITICAS_DESCRIPTION = [
28
+ 'Devuelve el catálogo de cuentas analíticas de Freemática.',
29
+ '',
30
+ 'Endpoint: GET /pcon/v2/cuentas-analiticas.',
31
+ 'Devuelve los registros de cuentas analíticas (COD_CTA_ANL, COD_PLAN, COD_GRUPO_ANL, CTA_ACTIVA_ANL, AREA_ANL, DELEG, etc.).',
32
+ '',
33
+ 'Filtros FIQL disponibles:',
34
+ ' - codPlan: filtra por código de plan (COD_PLAN).',
35
+ ' - prefijoCuenta: filtra cuentas cuyo COD_CTA_ANL comienza por el prefijo indicado.',
36
+ ' - activa: si true, solo cuentas activas (CTA_ACTIVA_ANL==1); si false, solo inactivas.',
37
+ ' - grupoCuenta: filtra por código de grupo analítico (COD_GRUPO_ANL).',
38
+ ' - area: filtra por área analítica (AREA_ANL).',
39
+ ' - delegacion: filtra por delegación (DELEG).',
40
+ '',
41
+ 'Los filtros se combinan con AND. Todos son opcionales.',
42
+ ].join('\n');
43
+ const EXPORT_ASIENTOS_DESCRIPTION = [
44
+ 'Exporta asientos contables de Freemática en batch.',
45
+ '',
46
+ 'Endpoint: GET /pcon/v2/export-asientos.',
47
+ '',
48
+ '⚠️ AVISO: Este endpoint puede devolver volúmenes MUY GRANDES de datos.',
49
+ 'RECOMENDAR siempre un rango de fechas (fechaDesde + fechaHasta) para acotar',
50
+ 'la respuesta. Sin rango de fechas, puede devolver TODO el histórico contable.',
51
+ '',
52
+ 'Parámetros obligatorios:',
53
+ ' - empresa: código de empresa de 4 caracteres exactos (ej. "0001").',
54
+ ' - cal: código de calendario de 4 caracteres exactos (ej. "GRAL").',
55
+ '',
56
+ 'Parámetros opcionales nativos (query param directo, no FIQL):',
57
+ ' - periodo: número de periodo contable (1-12, puede tener ceros, ej. "01").',
58
+ '',
59
+ 'Filtros FIQL adicionales (opcionales):',
60
+ ' - fechaDesde / fechaHasta: rango de fechas sobre ASI_FCHASI en formato YYYY-MM-DD.',
61
+ ' - diario: código del diario contable (ASI_DIARIO).',
62
+ ' - borrador: si true, incluye solo asientos borrador (ASI_BORR no nulo).',
63
+ '',
64
+ 'Protección de tamaño: si la respuesta supera FREEMATICA_MAX_RESPONSE_SIZE_MB (default 10 MB),',
65
+ 'la tool devuelve los datos truncados con un campo "warning" indicando el truncado.',
66
+ 'Se recomienda usar rangos de fecha cortos (máx. 1 mes) para evitar truncados.',
67
+ ].join('\n');
68
+ // ---------------------------------------------------------------------------
69
+ // Input schemas
70
+ // ---------------------------------------------------------------------------
71
+ /**
72
+ * Schema de filtros para freematica_list_cuentas_contables.
73
+ */
74
+ const CuentasContablesFiltersSchema = {
75
+ codPlan: z
76
+ .string()
77
+ .min(1)
78
+ .optional()
79
+ .describe('Código del plan contable (COD_PLAN en Freemática). Opcional.'),
80
+ prefijoCuenta: z
81
+ .string()
82
+ .min(1)
83
+ .optional()
84
+ .describe('Prefijo del código de cuenta (COD_CTA). La tool aplica prefix match (COD_CTA starts-with). Opcional.'),
85
+ activa: z
86
+ .boolean()
87
+ .optional()
88
+ .describe('Si true, devuelve solo cuentas activas (CTA_ACTIVA==1). Si false, solo inactivas. Omitir para todas.'),
89
+ grupoCuenta: z
90
+ .string()
91
+ .min(1)
92
+ .optional()
93
+ .describe('Código de grupo de cuenta (COD_GRUPO_CTA). Opcional.'),
94
+ };
95
+ /**
96
+ * Schema de filtros para freematica_list_cuentas_analiticas.
97
+ */
98
+ const CuentasAnaliticasFiltersSchema = {
99
+ codPlan: z
100
+ .string()
101
+ .min(1)
102
+ .optional()
103
+ .describe('Código del plan contable (COD_PLAN). Opcional.'),
104
+ prefijoCuenta: z
105
+ .string()
106
+ .min(1)
107
+ .optional()
108
+ .describe('Prefijo del código de cuenta analítica (COD_CTA_ANL). Prefix match. Opcional.'),
109
+ activa: z
110
+ .boolean()
111
+ .optional()
112
+ .describe('Si true, solo cuentas activas (CTA_ACTIVA_ANL==1). Si false, solo inactivas. Omitir para todas.'),
113
+ grupoCuenta: z
114
+ .string()
115
+ .min(1)
116
+ .optional()
117
+ .describe('Código de grupo analítico (COD_GRUPO_ANL). Opcional.'),
118
+ area: z
119
+ .string()
120
+ .min(1)
121
+ .optional()
122
+ .describe('Área analítica (AREA_ANL). Opcional.'),
123
+ delegacion: z
124
+ .string()
125
+ .min(1)
126
+ .optional()
127
+ .describe('Código de delegación (DELEG). Opcional.'),
128
+ };
129
+ /**
130
+ * Schema de input para freematica_export_asientos.
131
+ *
132
+ * - empresa y cal son obligatorios (4 chars exactos), se envían como query params nativos.
133
+ * - periodo es opcional (hasta 2 chars) y también es query param nativo.
134
+ * - fechaDesde/Hasta, diario, borrador son filtros FIQL opcionales.
135
+ */
136
+ const ExportAsientosSchema = {
137
+ empresa: z
138
+ .string()
139
+ .length(4)
140
+ .describe('Código de empresa (4 caracteres exactos, ej. "0001"). OBLIGATORIO. Se envía como query param nativo.'),
141
+ cal: z
142
+ .string()
143
+ .length(4)
144
+ .describe('Código de calendario contable (4 caracteres exactos, ej. "GRAL"). OBLIGATORIO. Se envía como query param nativo.'),
145
+ periodo: z
146
+ .string()
147
+ .max(2)
148
+ .optional()
149
+ .describe('Número de periodo contable (máx. 2 chars, ej. "01" para enero). Opcional. Se envía como query param nativo.'),
150
+ fechaDesde: z
151
+ .string()
152
+ .regex(/^\d{4}-\d{2}-\d{2}$/, 'Debe ser una fecha en formato YYYY-MM-DD')
153
+ .optional()
154
+ .describe('Fecha inicio del rango de asientos en formato YYYY-MM-DD (sobre ASI_FCHASI). Recomendado siempre para acotar el volumen.'),
155
+ fechaHasta: z
156
+ .string()
157
+ .regex(/^\d{4}-\d{2}-\d{2}$/, 'Debe ser una fecha en formato YYYY-MM-DD')
158
+ .optional()
159
+ .describe('Fecha fin del rango de asientos en formato YYYY-MM-DD (sobre ASI_FCHASI). Recomendado siempre para acotar el volumen.'),
160
+ diario: z
161
+ .string()
162
+ .min(1)
163
+ .optional()
164
+ .describe('Código del diario contable (ASI_DIARIO). Opcional.'),
165
+ borrador: z
166
+ .boolean()
167
+ .optional()
168
+ .describe('Si true, incluye solo asientos en estado borrador (ASI_BORR no nulo). Si false, solo asientos definitivos. Omitir para todos.'),
169
+ };
170
+ // ---------------------------------------------------------------------------
171
+ // Register function
172
+ // ---------------------------------------------------------------------------
173
+ /**
174
+ * Registra las 3 tools de contabilidad en el MCP server.
175
+ *
176
+ * Tools registradas:
177
+ * - freematica_list_cuentas_contables → GET /pcon/v2/cuentas
178
+ * - freematica_list_cuentas_analiticas → GET /pcon/v2/cuentas-analiticas
179
+ * - freematica_export_asientos → GET /pcon/v2/export-asientos
180
+ *
181
+ * @param server - Instancia del servidor MCP.
182
+ * @param client - Cliente tipado de Freemática.
183
+ */
184
+ export function registerContabilidadTools(server, client) {
185
+ // -------------------------------------------------------------------------
186
+ // freematica_list_cuentas_contables
187
+ // -------------------------------------------------------------------------
188
+ server.tool(LIST_CUENTAS_CONTABLES_TOOL, LIST_CUENTAS_CONTABLES_DESCRIPTION, CuentasContablesFiltersSchema, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ codPlan, prefijoCuenta, activa, grupoCuenta }) => {
189
+ try {
190
+ const result = await client.listCuentasContables({
191
+ codPlan,
192
+ prefijoCuenta,
193
+ activa,
194
+ grupoCuenta,
195
+ });
196
+ return okList({ items: result.items, total: result.total });
197
+ }
198
+ catch (err) {
199
+ if (err instanceof FreematicaError)
200
+ return error(err);
201
+ return error(err instanceof Error ? err : new Error(String(err)));
202
+ }
203
+ });
204
+ // -------------------------------------------------------------------------
205
+ // freematica_list_cuentas_analiticas
206
+ // -------------------------------------------------------------------------
207
+ server.tool(LIST_CUENTAS_ANALITICAS_TOOL, LIST_CUENTAS_ANALITICAS_DESCRIPTION, CuentasAnaliticasFiltersSchema, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ codPlan, prefijoCuenta, activa, grupoCuenta, area, delegacion }) => {
208
+ try {
209
+ const result = await client.listCuentasAnaliticas({
210
+ codPlan,
211
+ prefijoCuenta,
212
+ activa,
213
+ grupoCuenta,
214
+ area,
215
+ delegacion,
216
+ });
217
+ return okList({ items: result.items, total: result.total });
218
+ }
219
+ catch (err) {
220
+ if (err instanceof FreematicaError)
221
+ return error(err);
222
+ return error(err instanceof Error ? err : new Error(String(err)));
223
+ }
224
+ });
225
+ // -------------------------------------------------------------------------
226
+ // freematica_export_asientos
227
+ // -------------------------------------------------------------------------
228
+ server.tool(EXPORT_ASIENTOS_TOOL, EXPORT_ASIENTOS_DESCRIPTION, ExportAsientosSchema, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ empresa, cal, periodo, fechaDesde, fechaHasta, diario, borrador, }) => {
229
+ try {
230
+ const result = await client.exportAsientos({
231
+ empresa,
232
+ cal,
233
+ periodo,
234
+ fechaDesde,
235
+ fechaHasta,
236
+ diario,
237
+ borrador,
238
+ });
239
+ if (result.truncated) {
240
+ // Respuesta truncada por exceder MAX_RESPONSE_SIZE_MB
241
+ const payload = {
242
+ items: result.items,
243
+ count: result.items.length,
244
+ total: result.total,
245
+ warning: result.warning,
246
+ truncated: true,
247
+ };
248
+ return ok(payload);
249
+ }
250
+ return okList({ items: result.items, total: result.total });
251
+ }
252
+ catch (err) {
253
+ if (err instanceof FreematicaError)
254
+ return error(err);
255
+ return error(err instanceof Error ? err : new Error(String(err)));
256
+ }
257
+ });
258
+ }
259
+ //# sourceMappingURL=contabilidad.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contabilidad.js","sourceRoot":"","sources":["../../src/tools/contabilidad.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { FreematicaClient } from '../clients/freematica-client.js';
3
+ export declare function registerContactosClientesTools(server: McpServer, client: FreematicaClient): void;
@@ -0,0 +1,25 @@
1
+ import { FreematicaError } from '../clients/base-client.js';
2
+ import { PaginationSchema } from '../schemas/pagination.js';
3
+ import { error, okList } from './helpers.js';
4
+ const LIST_TOOL_NAME = 'freematica_list_contactos_clientes';
5
+ const LIST_DESCRIPTION = [
6
+ 'Devuelve la lista paginada de contactos de clientes (personas asociadas a clientes corporativos).',
7
+ '',
8
+ 'Cada item incluye un campo `idReg` opaco (base64). En esta versión no exponemos un endpoint singular para contactos; si necesitas el detalle, contacta al mantenedor del MCP.',
9
+ '',
10
+ 'Paginación 1-indexed.',
11
+ ].join('\n');
12
+ export function registerContactosClientesTools(server, client) {
13
+ server.tool(LIST_TOOL_NAME, LIST_DESCRIPTION, PaginationSchema, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ page, items }) => {
14
+ try {
15
+ const result = await client.listContactosClientes({ page, items });
16
+ return okList({ items: result.items, total: result.total, page, itemsPerPage: items });
17
+ }
18
+ catch (err) {
19
+ if (err instanceof FreematicaError)
20
+ return error(err);
21
+ return error(err instanceof Error ? err : new Error(String(err)));
22
+ }
23
+ });
24
+ }
25
+ //# sourceMappingURL=contactos-clientes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contactos-clientes.js","sourceRoot":"","sources":["../../src/tools/contactos-clientes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,cAAc,GAAG,oCAAoC,CAAC;AAE5D,MAAM,gBAAgB,GAAG;IACvB,mGAAmG;IACnG,EAAE;IACF,+KAA+K;IAC/K,EAAE;IACF,uBAAuB;CACxB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,UAAU,8BAA8B,CAAC,MAAiB,EAAE,MAAwB;IACxF,MAAM,CAAC,IAAI,CACT,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,EACnE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAA2B,EAAE;QACjD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACnE,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAmB,CAAC;QAC3G,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,eAAe;gBAAE,OAAO,KAAK,CAAC,GAAG,CAAmB,CAAC;YACxE,OAAO,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAmB,CAAC;QACtF,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { FreematicaClient } from '../clients/freematica-client.js';
3
+ /**
4
+ * Registers every MCP tool that maps to operations in the "Contratos" API group
5
+ * (Postman: app `pvss` → group `Contratos`).
6
+ *
7
+ * Add new tools here by calling `server.tool(...)` again. When this file grows
8
+ * past ~15 tools, split it into `src/tools/contratos/<entity>.ts`.
9
+ */
10
+ export declare function registerContratosTools(server: McpServer, client: FreematicaClient): void;