@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,181 @@
1
+ import { z } from 'zod';
2
+ import { FreematicaError } from '../clients/base-client.js';
3
+ import { ListFacturasCabeceraFiltersSchema, ListFacturaLineasFiltersSchema, ListFacturaIvaFiltersSchema, ListFacturaVencimientosFiltersSchema, } from '../schemas/facturas-ventas.js';
4
+ import { error, ok, okList } from './helpers.js';
5
+ const LIST_CABECERA_TOOL = 'freematica_list_facturas_cabecera';
6
+ const GET_CABECERA_TOOL = 'freematica_get_factura_cabecera';
7
+ const LIST_LINEAS_TOOL = 'freematica_list_factura_lineas';
8
+ const LIST_IVA_TOOL = 'freematica_list_factura_iva';
9
+ const LIST_VENCIMIENTOS_TOOL = 'freematica_list_factura_vencimientos';
10
+ const LIST_CABECERA_DESCRIPTION = [
11
+ 'Devuelve la lista paginada de cabeceras de facturas de ventas.',
12
+ '',
13
+ 'Cada item contiene ~50 campos: FVC_NUMFAC (número factura), FVC_SERFAC (serie), FVC_CODAUX (cliente),',
14
+ 'FVC_FECFAC (fecha factura), FVC_BASEIMPONIBLE (base), FVC_TOTFAC (total factura),',
15
+ 'FVC_TRSCONT (traspasado a contabilidad), FVC_DELEG (delegación), más `idReg` opaco para el endpoint singular.',
16
+ '',
17
+ 'Filtros disponibles:',
18
+ '- empresa, codCliente, representante',
19
+ '- fechaFacturaDesde/Hasta (rango de fecha factura)',
20
+ '- serie, numFactura (número exacto)',
21
+ '- formaPago, delegacion',
22
+ '- traspasadoContabilidad: true → solo facturas ya traspasadas a contabilidad',
23
+ '',
24
+ 'Paginación 1-indexed. Default: page=1, items=20.',
25
+ ].join('\n');
26
+ const GET_CABECERA_DESCRIPTION = [
27
+ 'Devuelve el detalle completo de una factura de ventas (cabecera).',
28
+ '',
29
+ 'El parámetro `id` DEBE ser el campo `idReg` (string opaco base64) que aparece en los items de',
30
+ 'freematica_list_facturas_cabecera. NO usar FVC_NUMFAC ni FVC_SERFAC.',
31
+ ].join('\n');
32
+ const LIST_LINEAS_DESCRIPTION = [
33
+ 'Devuelve las líneas de detalle de una factura de ventas.',
34
+ '',
35
+ 'Requiere el `idFactura` (idReg opaco) de la factura cabecera.',
36
+ '',
37
+ 'Cada línea contiene: FVL_CODART (artículo), FVL_DESART (descripción), FVL_CANTFAC (cantidad),',
38
+ 'FVL_PRECIOVENTA (precio), FVL_PORDTO (% descuento), FVL_IMPORTE (importe línea), FVL_CODFAM, FVL_CODSFAM.',
39
+ '',
40
+ 'Filtros disponibles: codArticulo, codFamilia, codSubfamilia, delegacion.',
41
+ ].join('\n');
42
+ const LIST_IVA_DESCRIPTION = [
43
+ 'Devuelve las líneas de IVA de una factura de ventas.',
44
+ '',
45
+ 'Requiere el `idFactura` (idReg opaco) de la factura cabecera.',
46
+ '',
47
+ 'Cada línea contiene: FVI_TIPIVA (tipo IVA), FVI_PORCENTAJE (%), FVI_BASE (base imponible),',
48
+ 'FVI_CUOTA (cuota IVA), FVI_TOTAL (total con IVA).',
49
+ '',
50
+ 'Filtro disponible: tipoIva (FVI_TIPIVA exacto, ej. "21", "10", "4").',
51
+ ].join('\n');
52
+ const LIST_VENCIMIENTOS_DESCRIPTION = [
53
+ 'Devuelve los vencimientos de cobro de una factura de ventas.',
54
+ '',
55
+ 'Requiere el `idFactura` (idReg opaco) de la factura cabecera.',
56
+ '',
57
+ 'Cada vencimiento contiene: FVV_FECVCTO (fecha vencimiento), FVV_IMPORTE (importe a cobrar),',
58
+ 'FVV_CODMPAG (modo de pago), FVV_ESTADO (estado del vencimiento).',
59
+ '',
60
+ 'Filtros disponibles: fechaVencimientoDesde/Hasta, modoPago.',
61
+ ].join('\n');
62
+ /** Schema del idFactura (path param compartido por lineas, iva y vencimientos). */
63
+ const IdFacturaSchema = {
64
+ idFactura: z
65
+ .string()
66
+ .min(1)
67
+ .describe('idReg opaco de la factura cabecera (campo "idReg" en los items de freematica_list_facturas_cabecera).'),
68
+ };
69
+ /** Schema del id para get singular de cabecera. */
70
+ const IdCabeceraSchema = {
71
+ id: z
72
+ .string()
73
+ .min(1)
74
+ .describe('idReg opaco de la factura (campo "idReg" en los items de freematica_list_facturas_cabecera).'),
75
+ };
76
+ /**
77
+ * Registra las tools MCP del dominio "Facturas de Ventas".
78
+ *
79
+ * Expone 5 tools:
80
+ * - `freematica_list_facturas_cabecera`: listado paginado de cabeceras con filtros FIQL
81
+ * - `freematica_get_factura_cabecera`: detalle de una factura por idReg
82
+ * - `freematica_list_factura_lineas`: líneas de una factura (path param: idFactura)
83
+ * - `freematica_list_factura_iva`: líneas de IVA de una factura (path param: idFactura)
84
+ * - `freematica_list_factura_vencimientos`: vencimientos de una factura (path param: idFactura)
85
+ *
86
+ * @param server - Instancia MCP donde se registran las tools.
87
+ * @param client - Cliente tipado de Freemática.
88
+ */
89
+ export function registerFacturasVentasTools(server, client) {
90
+ // ---------------------------------------------------------------------------
91
+ // List facturas cabecera
92
+ // ---------------------------------------------------------------------------
93
+ server.tool(LIST_CABECERA_TOOL, LIST_CABECERA_DESCRIPTION, ListFacturasCabeceraFiltersSchema, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async (args) => {
94
+ try {
95
+ const result = await client.listFacturasCabecera(args);
96
+ return okList({
97
+ items: result.items,
98
+ total: result.total,
99
+ page: args.page,
100
+ itemsPerPage: args.items,
101
+ });
102
+ }
103
+ catch (err) {
104
+ if (err instanceof FreematicaError)
105
+ return error(err);
106
+ return error(err instanceof Error ? err : new Error(String(err)));
107
+ }
108
+ });
109
+ // ---------------------------------------------------------------------------
110
+ // Get factura cabecera
111
+ // ---------------------------------------------------------------------------
112
+ server.tool(GET_CABECERA_TOOL, GET_CABECERA_DESCRIPTION, IdCabeceraSchema, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ id }) => {
113
+ try {
114
+ const factura = await client.getFacturaCabecera(id);
115
+ return ok(factura);
116
+ }
117
+ catch (err) {
118
+ if (err instanceof FreematicaError)
119
+ return error(err);
120
+ return error(err instanceof Error ? err : new Error(String(err)));
121
+ }
122
+ });
123
+ // ---------------------------------------------------------------------------
124
+ // List factura lineas
125
+ // ---------------------------------------------------------------------------
126
+ server.tool(LIST_LINEAS_TOOL, LIST_LINEAS_DESCRIPTION, { ...IdFacturaSchema, ...ListFacturaLineasFiltersSchema }, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ idFactura, ...filters }) => {
127
+ try {
128
+ const result = await client.listFacturaLineas(idFactura, filters);
129
+ return okList({
130
+ items: result.items,
131
+ total: result.total,
132
+ page: filters.page,
133
+ itemsPerPage: filters.items,
134
+ });
135
+ }
136
+ catch (err) {
137
+ if (err instanceof FreematicaError)
138
+ return error(err);
139
+ return error(err instanceof Error ? err : new Error(String(err)));
140
+ }
141
+ });
142
+ // ---------------------------------------------------------------------------
143
+ // List factura iva
144
+ // ---------------------------------------------------------------------------
145
+ server.tool(LIST_IVA_TOOL, LIST_IVA_DESCRIPTION, { ...IdFacturaSchema, ...ListFacturaIvaFiltersSchema }, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ idFactura, ...filters }) => {
146
+ try {
147
+ const result = await client.listFacturaIva(idFactura, filters);
148
+ return okList({
149
+ items: result.items,
150
+ total: result.total,
151
+ page: filters.page,
152
+ itemsPerPage: filters.items,
153
+ });
154
+ }
155
+ catch (err) {
156
+ if (err instanceof FreematicaError)
157
+ return error(err);
158
+ return error(err instanceof Error ? err : new Error(String(err)));
159
+ }
160
+ });
161
+ // ---------------------------------------------------------------------------
162
+ // List factura vencimientos
163
+ // ---------------------------------------------------------------------------
164
+ server.tool(LIST_VENCIMIENTOS_TOOL, LIST_VENCIMIENTOS_DESCRIPTION, { ...IdFacturaSchema, ...ListFacturaVencimientosFiltersSchema }, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ idFactura, ...filters }) => {
165
+ try {
166
+ const result = await client.listFacturaVencimientos(idFactura, filters);
167
+ return okList({
168
+ items: result.items,
169
+ total: result.total,
170
+ page: filters.page,
171
+ itemsPerPage: filters.items,
172
+ });
173
+ }
174
+ catch (err) {
175
+ if (err instanceof FreematicaError)
176
+ return error(err);
177
+ return error(err instanceof Error ? err : new Error(String(err)));
178
+ }
179
+ });
180
+ }
181
+ //# sourceMappingURL=facturas-ventas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facturas-ventas.js","sourceRoot":"","sources":["../../src/tools/facturas-ventas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { type FreematicaErrorCode } from '../clients/base-client.js';
2
+ export interface ToolTextContent {
3
+ type: 'text';
4
+ text: string;
5
+ }
6
+ export interface ToolResult {
7
+ content: ToolTextContent[];
8
+ isError?: boolean;
9
+ }
10
+ export declare function ok(data: unknown): ToolResult;
11
+ export declare function okList(args: {
12
+ items: unknown[];
13
+ total: number;
14
+ page?: number;
15
+ itemsPerPage?: number;
16
+ }): ToolResult;
17
+ export declare function error(codeOrErr: FreematicaErrorCode | Error, message?: string): ToolResult;
@@ -0,0 +1,36 @@
1
+ import { FreematicaError } from '../clients/base-client.js';
2
+ export function ok(data) {
3
+ return {
4
+ content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],
5
+ };
6
+ }
7
+ export function okList(args) {
8
+ return ok({
9
+ items: args.items,
10
+ count: args.items.length,
11
+ total: args.total,
12
+ page: args.page,
13
+ items_per_page: args.itemsPerPage,
14
+ });
15
+ }
16
+ export function error(codeOrErr, message) {
17
+ let code;
18
+ let msg;
19
+ if (codeOrErr instanceof FreematicaError) {
20
+ code = codeOrErr.code;
21
+ msg = codeOrErr.message;
22
+ }
23
+ else if (codeOrErr instanceof Error) {
24
+ code = 'unexpected_error';
25
+ msg = codeOrErr.message;
26
+ }
27
+ else {
28
+ code = codeOrErr;
29
+ msg = message ?? code;
30
+ }
31
+ return {
32
+ content: [{ type: 'text', text: JSON.stringify({ error: code, message: msg }, null, 2) }],
33
+ isError: true,
34
+ };
35
+ }
36
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/tools/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAA4B,MAAM,2BAA2B,CAAC;AAYtF,MAAM,UAAU,EAAE,CAAC,IAAa;IAC9B,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KACjE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,IAKtB;IACC,OAAO,EAAE,CAAC;QACR,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;QACxB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,cAAc,EAAE,IAAI,CAAC,YAAY;KAClC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,SAAsC,EAAE,OAAgB;IAC5E,IAAI,IAAyB,CAAC;IAC9B,IAAI,GAAW,CAAC;IAEhB,IAAI,SAAS,YAAY,eAAe,EAAE,CAAC;QACzC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QACtB,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC;IAC1B,CAAC;SAAM,IAAI,SAAS,YAAY,KAAK,EAAE,CAAC;QACtC,IAAI,GAAG,kBAAkB,CAAC;QAC1B,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,SAAS,CAAC;QACjB,GAAG,GAAG,OAAO,IAAI,IAAI,CAAC;IACxB,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QACzF,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { FreematicaClient } from '../clients/freematica-client.js';
3
+ /**
4
+ * Registra las tres tools de localizaciones en el servidor MCP.
5
+ *
6
+ * Tools registradas:
7
+ * - `freematica_list_localizaciones_cobro_clientes`: cobros de clientes filtrados por
8
+ * codCliente, grupoCliente y formaPago.
9
+ * - `freematica_list_localizaciones_pago_proveedores`: pagos de proveedores filtrados por
10
+ * codProveedor, grupoProveedor y formaPago.
11
+ * - `freematica_list_localizaciones_servicio_clientes`: localizaciones de servicio de clientes
12
+ * con filtros por cliente, grupo, país, provincia, representante y activo/baja.
13
+ *
14
+ * @param server - Instancia del servidor MCP.
15
+ * @param client - Cliente Freemática autenticado.
16
+ */
17
+ export declare function registerLocalizacionesTools(server: McpServer, client: FreematicaClient): void;
@@ -0,0 +1,192 @@
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
+ const LIST_COBRO_CLIENTES_TOOL = 'freematica_list_localizaciones_cobro_clientes';
6
+ const LIST_PAGO_PROVEEDORES_TOOL = 'freematica_list_localizaciones_pago_proveedores';
7
+ const LIST_SERVICIO_CLIENTES_TOOL = 'freematica_list_localizaciones_servicio_clientes';
8
+ const COBRO_CLIENTES_DESCRIPTION = [
9
+ 'Devuelve la lista paginada de localizaciones de cobro de clientes.',
10
+ '',
11
+ 'Las localizaciones de cobro definen la domiciliación bancaria o condiciones de pago de un cliente.',
12
+ 'Cada item contiene campos como COD_CLI (cliente), GRUPO_CLI (grupo), COD_FORMA_COBRO (forma de cobro),',
13
+ 'más `idReg` opaco.',
14
+ '',
15
+ 'Paginación 1-indexed.',
16
+ ].join('\n');
17
+ const PAGO_PROVEEDORES_DESCRIPTION = [
18
+ 'Devuelve la lista paginada de localizaciones de pago de proveedores.',
19
+ '',
20
+ 'Las localizaciones de pago definen las condiciones bancarias o de pago de un proveedor.',
21
+ 'Cada item contiene campos como COD_PRO (proveedor), COD_GRUPO_PRO (grupo), COD_FORMA_PAGO (forma de pago),',
22
+ 'más `idReg` opaco.',
23
+ '',
24
+ 'Paginación 1-indexed.',
25
+ ].join('\n');
26
+ const SERVICIO_CLIENTES_DESCRIPTION = [
27
+ 'Devuelve la lista paginada de localizaciones de servicio de clientes.',
28
+ '',
29
+ 'Las localizaciones de servicio son las direcciones donde se presta servicio a un cliente.',
30
+ 'Cada item contiene campos como COD_CLI (cliente), GRUPO_CLI (grupo), COD_PAIS, COD_PROVINCIA,',
31
+ 'COD_REPRES (representante), FECHA_BAJA (estado activo/baja), más `idReg` opaco.',
32
+ '',
33
+ 'Paginación 1-indexed.',
34
+ '',
35
+ 'El filtro `activo` es un booleano: true = sin fecha de baja (localizaciones activas);',
36
+ 'false = con fecha de baja (dadas de baja).',
37
+ ].join('\n');
38
+ // ---------------------------------------------------------------------------
39
+ // Schemas individuales
40
+ // ---------------------------------------------------------------------------
41
+ const CobroClientesSchema = {
42
+ ...PaginationSchema,
43
+ codCliente: z
44
+ .string()
45
+ .min(1)
46
+ .optional()
47
+ .describe('Código natural del cliente (COD_CLI en Freemática).'),
48
+ grupoCliente: z
49
+ .string()
50
+ .min(1)
51
+ .optional()
52
+ .describe('Código de grupo de clientes (GRUPO_CLI en Freemática).'),
53
+ formaPago: z
54
+ .string()
55
+ .min(1)
56
+ .optional()
57
+ .describe('Código de forma de cobro (COD_FORMA_COBRO en Freemática).'),
58
+ };
59
+ const PagoProveedoresSchema = {
60
+ ...PaginationSchema,
61
+ codProveedor: z
62
+ .string()
63
+ .min(1)
64
+ .optional()
65
+ .describe('Código natural del proveedor (COD_PRO en Freemática).'),
66
+ grupoProveedor: z
67
+ .string()
68
+ .min(1)
69
+ .optional()
70
+ .describe('Código de grupo de proveedores (COD_GRUPO_PRO en Freemática).'),
71
+ formaPago: z
72
+ .string()
73
+ .min(1)
74
+ .optional()
75
+ .describe('Código de forma de pago (COD_FORMA_PAGO en Freemática).'),
76
+ };
77
+ const ServicioClientesSchema = {
78
+ ...PaginationSchema,
79
+ codCliente: z
80
+ .string()
81
+ .min(1)
82
+ .optional()
83
+ .describe('Código natural del cliente (COD_CLI en Freemática).'),
84
+ grupoCliente: z
85
+ .string()
86
+ .min(1)
87
+ .optional()
88
+ .describe('Código de grupo de clientes (GRUPO_CLI en Freemática).'),
89
+ codPais: z
90
+ .string()
91
+ .min(1)
92
+ .optional()
93
+ .describe('Código de país (COD_PAIS en Freemática).'),
94
+ codProvincia: z
95
+ .string()
96
+ .min(1)
97
+ .optional()
98
+ .describe('Código de provincia (COD_PROVINCIA en Freemática).'),
99
+ representante: z
100
+ .string()
101
+ .min(1)
102
+ .optional()
103
+ .describe('Código de representante asignado (COD_REPRES en Freemática).'),
104
+ activo: z
105
+ .boolean()
106
+ .optional()
107
+ .describe('Filtra por estado de la localización. true = sin fecha de baja (activas); ' +
108
+ 'false = con fecha de baja (dadas de baja). FECHA_BAJA en Freemática.'),
109
+ };
110
+ // ---------------------------------------------------------------------------
111
+ // Register function
112
+ // ---------------------------------------------------------------------------
113
+ /**
114
+ * Registra las tres tools de localizaciones en el servidor MCP.
115
+ *
116
+ * Tools registradas:
117
+ * - `freematica_list_localizaciones_cobro_clientes`: cobros de clientes filtrados por
118
+ * codCliente, grupoCliente y formaPago.
119
+ * - `freematica_list_localizaciones_pago_proveedores`: pagos de proveedores filtrados por
120
+ * codProveedor, grupoProveedor y formaPago.
121
+ * - `freematica_list_localizaciones_servicio_clientes`: localizaciones de servicio de clientes
122
+ * con filtros por cliente, grupo, país, provincia, representante y activo/baja.
123
+ *
124
+ * @param server - Instancia del servidor MCP.
125
+ * @param client - Cliente Freemática autenticado.
126
+ */
127
+ export function registerLocalizacionesTools(server, client) {
128
+ // --------------------------------------------------------------------------
129
+ // Tool 1: Localizaciones cobro clientes
130
+ // --------------------------------------------------------------------------
131
+ server.tool(LIST_COBRO_CLIENTES_TOOL, COBRO_CLIENTES_DESCRIPTION, CobroClientesSchema, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ page, items, codCliente, grupoCliente, formaPago }) => {
132
+ try {
133
+ const result = await client.listLocalizacionesCobroClientes({
134
+ page,
135
+ items,
136
+ codCliente,
137
+ grupoCliente,
138
+ formaPago,
139
+ });
140
+ return okList({ items: result.items, total: result.total, page, itemsPerPage: items });
141
+ }
142
+ catch (err) {
143
+ if (err instanceof FreematicaError)
144
+ return error(err);
145
+ return error(err instanceof Error ? err : new Error(String(err)));
146
+ }
147
+ });
148
+ // --------------------------------------------------------------------------
149
+ // Tool 2: Localizaciones pago proveedores
150
+ // --------------------------------------------------------------------------
151
+ server.tool(LIST_PAGO_PROVEEDORES_TOOL, PAGO_PROVEEDORES_DESCRIPTION, PagoProveedoresSchema, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ page, items, codProveedor, grupoProveedor, formaPago }) => {
152
+ try {
153
+ const result = await client.listLocalizacionesPagoProveedores({
154
+ page,
155
+ items,
156
+ codProveedor,
157
+ grupoProveedor,
158
+ formaPago,
159
+ });
160
+ return okList({ items: result.items, total: result.total, page, itemsPerPage: items });
161
+ }
162
+ catch (err) {
163
+ if (err instanceof FreematicaError)
164
+ return error(err);
165
+ return error(err instanceof Error ? err : new Error(String(err)));
166
+ }
167
+ });
168
+ // --------------------------------------------------------------------------
169
+ // Tool 3: Localizaciones servicio clientes
170
+ // --------------------------------------------------------------------------
171
+ server.tool(LIST_SERVICIO_CLIENTES_TOOL, SERVICIO_CLIENTES_DESCRIPTION, ServicioClientesSchema, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ page, items, codCliente, grupoCliente, codPais, codProvincia, representante, activo, }) => {
172
+ try {
173
+ const result = await client.listLocalizacionesServicioClientes({
174
+ page,
175
+ items,
176
+ codCliente,
177
+ grupoCliente,
178
+ codPais,
179
+ codProvincia,
180
+ representante,
181
+ activo,
182
+ });
183
+ return okList({ items: result.items, total: result.total, page, itemsPerPage: items });
184
+ }
185
+ catch (err) {
186
+ if (err instanceof FreematicaError)
187
+ return error(err);
188
+ return error(err instanceof Error ? err : new Error(String(err)));
189
+ }
190
+ });
191
+ }
192
+ //# sourceMappingURL=localizaciones.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localizaciones.js","sourceRoot":"","sources":["../../src/tools/localizaciones.ts"],"names":[],"mappings":"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"}
@@ -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
+ * Registra la tool freematica_get_master_data sobre el McpServer.
5
+ *
6
+ * Una sola tool expone los 24 catálogos vía un enum `catalog`. Añadir nuevos
7
+ * catálogos requiere actualizar `src/schemas/master-data.ts` (enum + record),
8
+ * no este archivo. Ver instrucciones en el JSDoc de MASTER_DATA_CATALOGS.
9
+ */
10
+ export declare function registerMasterDataTools(server: McpServer, client: FreematicaClient): void;
@@ -0,0 +1,70 @@
1
+ import { FreematicaError } from '../clients/base-client.js';
2
+ import { MASTER_DATA_CATALOGS, MasterDataCatalogSchema, } from '../schemas/master-data.js';
3
+ import { error, ok } from './helpers.js';
4
+ const TOOL_NAME = 'freematica_get_master_data';
5
+ const CATALOG_DESCRIPTIONS = [
6
+ // Tipos / clasificaciones
7
+ 'tipos-contrato (tipos de contrato comercial)',
8
+ 'tipo-instalacion (tipos de instalación física)',
9
+ 'clases-servicios (clases de servicio operativas)',
10
+ 'tipos-casos (CRM)',
11
+ 'subtipos-casos (CRM)',
12
+ 'tipos-oportunidad-negocio (CRM)',
13
+ 'tipos-impuestos (IVA, IRPF, retenciones)',
14
+ 'naturalezas-abono',
15
+ 'incidencecode (códigos de incidencia en servicios)',
16
+ 'claves-facturacion (claves de facturación de servicios)',
17
+ // Geográficos
18
+ 'paises',
19
+ 'nacionalidades',
20
+ 'provincias',
21
+ 'poblaciones (municipios — dataset grande, paginar con cuidado)',
22
+ // Organizativos
23
+ 'empresas',
24
+ 'delegaciones (agrupadas por código — listado global)',
25
+ 'lineas-negocio',
26
+ 'cargos-clientes (puestos de contactos)',
27
+ 'calendarios (calendarios laborales — solo lookup; para detalle y períodos usar freematica_list_calendarios)',
28
+ 'series (series de numeración de documentos)',
29
+ // Inventario
30
+ 'familias (de artículos)',
31
+ 'subfamilias',
32
+ 'lineas (líneas de artículos)',
33
+ // Financiero
34
+ 'bancos (entidades bancarias)',
35
+ ].join(', ');
36
+ const TOOL_DESCRIPTION = [
37
+ 'Devuelve un catálogo de datos maestros de Freemática (tipos, geográficos, organizativos, inventario, financiero).',
38
+ '',
39
+ `Catálogos disponibles (${MASTER_DATA_CATALOGS.length}): ${CATALOG_DESCRIPTIONS}.`,
40
+ '',
41
+ 'Útil para traducir códigos crípticos en respuestas de otras tools (por ejemplo, los IDs de tipo de contrato o clase de servicio que aparecen en freematica_list_materiales_asignados_servicios).',
42
+ '',
43
+ 'La respuesta es un objeto con tres campos:',
44
+ ' - catalog: el catálogo solicitado (echo del input)',
45
+ ' - items: array de objetos con los registros del catálogo',
46
+ ' - count: número total de elementos',
47
+ ].join('\n');
48
+ /**
49
+ * Registra la tool freematica_get_master_data sobre el McpServer.
50
+ *
51
+ * Una sola tool expone los 24 catálogos vía un enum `catalog`. Añadir nuevos
52
+ * catálogos requiere actualizar `src/schemas/master-data.ts` (enum + record),
53
+ * no este archivo. Ver instrucciones en el JSDoc de MASTER_DATA_CATALOGS.
54
+ */
55
+ export function registerMasterDataTools(server, client) {
56
+ server.tool(TOOL_NAME, TOOL_DESCRIPTION, {
57
+ catalog: MasterDataCatalogSchema.describe(`Catálogo a consultar. Valores válidos: ${CATALOG_DESCRIPTIONS}.`),
58
+ }, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ catalog }) => {
59
+ try {
60
+ const { items, total } = await client.getMasterData(catalog);
61
+ return ok({ catalog, items, count: items.length, total });
62
+ }
63
+ catch (err) {
64
+ if (err instanceof FreematicaError)
65
+ return error(err);
66
+ return error(err instanceof Error ? err : new Error(String(err)));
67
+ }
68
+ });
69
+ }
70
+ //# sourceMappingURL=master-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"master-data.js","sourceRoot":"","sources":["../../src/tools/master-data.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EACL,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,SAAS,GAAG,4BAA4B,CAAC;AAE/C,MAAM,oBAAoB,GAAG;IAC3B,0BAA0B;IAC1B,8CAA8C;IAC9C,gDAAgD;IAChD,kDAAkD;IAClD,mBAAmB;IACnB,sBAAsB;IACtB,iCAAiC;IACjC,0CAA0C;IAC1C,mBAAmB;IACnB,oDAAoD;IACpD,yDAAyD;IACzD,cAAc;IACd,QAAQ;IACR,gBAAgB;IAChB,YAAY;IACZ,gEAAgE;IAChE,gBAAgB;IAChB,UAAU;IACV,sDAAsD;IACtD,gBAAgB;IAChB,wCAAwC;IACxC,6GAA6G;IAC7G,6CAA6C;IAC7C,aAAa;IACb,yBAAyB;IACzB,aAAa;IACb,8BAA8B;IAC9B,aAAa;IACb,8BAA8B;CAC/B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,gBAAgB,GAAG;IACvB,mHAAmH;IACnH,EAAE;IACF,0BAA0B,oBAAoB,CAAC,MAAM,MAAM,oBAAoB,GAAG;IAClF,EAAE;IACF,kMAAkM;IAClM,EAAE;IACF,4CAA4C;IAC5C,sDAAsD;IACtD,4DAA4D;IAC5D,sCAAsC;CACvC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAiB,EAAE,MAAwB;IACjF,MAAM,CAAC,IAAI,CACT,SAAS,EACT,gBAAgB,EAChB;QACE,OAAO,EAAE,uBAAuB,CAAC,QAAQ,CACvC,0CAA0C,oBAAoB,GAAG,CAClE;KACF,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,EACnE,KAAK,EAAE,EAAE,OAAO,EAAE,EAA2B,EAAE;QAC7C,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC7D,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,CAAmB,CAAC;QAC9E,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,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { FreematicaClient } from '../clients/freematica-client.js';
3
+ export declare function registerOportunidadesNegocioTools(server: McpServer, client: FreematicaClient): void;
@@ -0,0 +1,68 @@
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_oportunidades_negocio';
6
+ const GET_TOOL_NAME = 'freematica_get_oportunidad_negocio';
7
+ const AMP_TOOL_NAME = 'freematica_get_oportunidad_negocio_datos_ampliados';
8
+ const LIST_DESCRIPTION = [
9
+ 'Devuelve la lista paginada de oportunidades de negocio (CRM).',
10
+ '',
11
+ 'Cada item tiene ~33 campos: COD_CLI (id del cliente), COD_ESTADO_OPOR, COD_ETAPA_OPOR, NOMBRE, VALOR, ID_OPORTUNIDAD, FECHA, FECHA_CREACION, USU_ASIGNADO, etc. Más `idReg` opaco para el endpoint singular.',
12
+ '',
13
+ 'Paginación 1-indexed.',
14
+ ].join('\n');
15
+ const GET_DESCRIPTION = [
16
+ 'Devuelve el detalle de una oportunidad de negocio.',
17
+ '',
18
+ 'El parámetro `id` DEBE ser el `idReg` opaco que aparece en los items de freematica_list_oportunidades_negocio.',
19
+ ].join('\n');
20
+ const AMP_DESCRIPTION = [
21
+ 'Devuelve los datos ampliados de una oportunidad de negocio.',
22
+ '',
23
+ 'NOTA: Este endpoint puede devolver `not_found` si la oportunidad no tiene datos ampliados configurados. Es un caso esperado, no un error de software — explicarle al usuario que esa oportunidad no tiene info adicional.',
24
+ '',
25
+ 'El parámetro `id` DEBE ser el `idReg` opaco (mismo que en get_oportunidad_negocio).',
26
+ ].join('\n');
27
+ const IdSchema = {
28
+ id: z
29
+ .string()
30
+ .min(1)
31
+ .describe('idReg opaco de la oportunidad (campo "idReg" en los items de freematica_list_oportunidades_negocio).'),
32
+ };
33
+ export function registerOportunidadesNegocioTools(server, client) {
34
+ server.tool(LIST_TOOL_NAME, LIST_DESCRIPTION, PaginationSchema, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ page, items }) => {
35
+ try {
36
+ const result = await client.listOportunidadesNegocio({ page, items });
37
+ return okList({ items: result.items, total: result.total, page, itemsPerPage: items });
38
+ }
39
+ catch (err) {
40
+ if (err instanceof FreematicaError)
41
+ return error(err);
42
+ return error(err instanceof Error ? err : new Error(String(err)));
43
+ }
44
+ });
45
+ server.tool(GET_TOOL_NAME, GET_DESCRIPTION, IdSchema, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ id }) => {
46
+ try {
47
+ const opo = await client.getOportunidadNegocio(id);
48
+ return ok(opo);
49
+ }
50
+ catch (err) {
51
+ if (err instanceof FreematicaError)
52
+ return error(err);
53
+ return error(err instanceof Error ? err : new Error(String(err)));
54
+ }
55
+ });
56
+ server.tool(AMP_TOOL_NAME, AMP_DESCRIPTION, IdSchema, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ id }) => {
57
+ try {
58
+ const datos = await client.getOportunidadNegocioDatosAmpliados(id);
59
+ return ok(datos);
60
+ }
61
+ catch (err) {
62
+ if (err instanceof FreematicaError)
63
+ return error(err);
64
+ return error(err instanceof Error ? err : new Error(String(err)));
65
+ }
66
+ });
67
+ }
68
+ //# sourceMappingURL=oportunidades-negocio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oportunidades-negocio.js","sourceRoot":"","sources":["../../src/tools/oportunidades-negocio.ts"],"names":[],"mappings":"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"}