@ssolis-ti/mcp-compra-agil 1.0.2
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.
- package/LICENSE +21 -0
- package/README.md +355 -0
- package/dist/api/compra-agil-client.d.ts +268 -0
- package/dist/api/compra-agil-client.d.ts.map +1 -0
- package/dist/api/compra-agil-client.js +137 -0
- package/dist/api/compra-agil-client.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +95 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/analizar-competencia.d.ts +9 -0
- package/dist/prompts/analizar-competencia.d.ts.map +1 -0
- package/dist/prompts/analizar-competencia.js +50 -0
- package/dist/prompts/analizar-competencia.js.map +1 -0
- package/dist/prompts/buscar-oportunidades.d.ts +9 -0
- package/dist/prompts/buscar-oportunidades.d.ts.map +1 -0
- package/dist/prompts/buscar-oportunidades.js +48 -0
- package/dist/prompts/buscar-oportunidades.js.map +1 -0
- package/dist/resources/compras-template.d.ts +10 -0
- package/dist/resources/compras-template.d.ts.map +1 -0
- package/dist/resources/compras-template.js +40 -0
- package/dist/resources/compras-template.js.map +1 -0
- package/dist/resources/documentacion.d.ts +6 -0
- package/dist/resources/documentacion.d.ts.map +1 -0
- package/dist/resources/documentacion.js +100 -0
- package/dist/resources/documentacion.js.map +1 -0
- package/dist/resources/estados.d.ts +9 -0
- package/dist/resources/estados.d.ts.map +1 -0
- package/dist/resources/estados.js +51 -0
- package/dist/resources/estados.js.map +1 -0
- package/dist/resources/glosario.d.ts +9 -0
- package/dist/resources/glosario.d.ts.map +1 -0
- package/dist/resources/glosario.js +77 -0
- package/dist/resources/glosario.js.map +1 -0
- package/dist/resources/regiones.d.ts +9 -0
- package/dist/resources/regiones.d.ts.map +1 -0
- package/dist/resources/regiones.js +37 -0
- package/dist/resources/regiones.js.map +1 -0
- package/dist/services/monitor.d.ts +2 -0
- package/dist/services/monitor.d.ts.map +1 -0
- package/dist/services/monitor.js +87 -0
- package/dist/services/monitor.js.map +1 -0
- package/dist/tools/auditar-desiertas.d.ts +4 -0
- package/dist/tools/auditar-desiertas.d.ts.map +1 -0
- package/dist/tools/auditar-desiertas.js +242 -0
- package/dist/tools/auditar-desiertas.js.map +1 -0
- package/dist/tools/buscar-compras.d.ts +10 -0
- package/dist/tools/buscar-compras.d.ts.map +1 -0
- package/dist/tools/buscar-compras.js +121 -0
- package/dist/tools/buscar-compras.js.map +1 -0
- package/dist/tools/detalle-compra.d.ts +10 -0
- package/dist/tools/detalle-compra.d.ts.map +1 -0
- package/dist/tools/detalle-compra.js +119 -0
- package/dist/tools/detalle-compra.js.map +1 -0
- package/dist/tools/detalle-oc.d.ts +10 -0
- package/dist/tools/detalle-oc.d.ts.map +1 -0
- package/dist/tools/detalle-oc.js +81 -0
- package/dist/tools/detalle-oc.js.map +1 -0
- package/dist/tools/documentos.d.ts +6 -0
- package/dist/tools/documentos.d.ts.map +1 -0
- package/dist/tools/documentos.js +245 -0
- package/dist/tools/documentos.js.map +1 -0
- package/dist/tools/estadisticas-uso.d.ts +10 -0
- package/dist/tools/estadisticas-uso.d.ts.map +1 -0
- package/dist/tools/estadisticas-uso.js +22 -0
- package/dist/tools/estadisticas-uso.js.map +1 -0
- package/dist/tools/generar-borrador.d.ts +4 -0
- package/dist/tools/generar-borrador.d.ts.map +1 -0
- package/dist/tools/generar-borrador.js +178 -0
- package/dist/tools/generar-borrador.js.map +1 -0
- package/dist/tools/monitorear-cambios.d.ts +10 -0
- package/dist/tools/monitorear-cambios.d.ts.map +1 -0
- package/dist/tools/monitorear-cambios.js +68 -0
- package/dist/tools/monitorear-cambios.js.map +1 -0
- package/dist/tools/radar-oportunidades.d.ts +4 -0
- package/dist/tools/radar-oportunidades.d.ts.map +1 -0
- package/dist/tools/radar-oportunidades.js +148 -0
- package/dist/tools/radar-oportunidades.js.map +1 -0
- package/dist/tools/recomendar-precio.d.ts +4 -0
- package/dist/tools/recomendar-precio.d.ts.map +1 -0
- package/dist/tools/recomendar-precio.js +180 -0
- package/dist/tools/recomendar-precio.js.map +1 -0
- package/dist/tools/verificar-oc.d.ts +13 -0
- package/dist/tools/verificar-oc.d.ts.map +1 -0
- package/dist/tools/verificar-oc.js +94 -0
- package/dist/tools/verificar-oc.js.map +1 -0
- package/dist/utils/env-loader.d.ts +6 -0
- package/dist/utils/env-loader.d.ts.map +1 -0
- package/dist/utils/env-loader.js +35 -0
- package/dist/utils/env-loader.js.map +1 -0
- package/dist/utils/error-handler.d.ts +28 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +74 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/logger.d.ts +15 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +48 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +39 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +82 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documentos.js","sourceRoot":"","sources":["../../src/tools/documentos.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: obtener_estadisticas_uso
|
|
3
|
+
*
|
|
4
|
+
* Obtiene las estadísticas de uso diarias y el estado actual de rate limit
|
|
5
|
+
* para la API de Compra Ágil de Mercado Público.
|
|
6
|
+
*/
|
|
7
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
8
|
+
import { CompraAgilClient } from '../api/compra-agil-client.js';
|
|
9
|
+
export declare function registerEstadisticasUso(server: McpServer, client: CompraAgilClient): void;
|
|
10
|
+
//# sourceMappingURL=estadisticas-uso.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"estadisticas-uso.d.ts","sourceRoot":"","sources":["../../src/tools/estadisticas-uso.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAKhE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAgBzF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: obtener_estadisticas_uso
|
|
3
|
+
*
|
|
4
|
+
* Obtiene las estadísticas de uso diarias y el estado actual de rate limit
|
|
5
|
+
* para la API de Compra Ágil de Mercado Público.
|
|
6
|
+
*/
|
|
7
|
+
const TOOL_NAME = 'obtener_estadisticas_uso';
|
|
8
|
+
const TOOL_DESCRIPTION = 'Obtiene las estadísticas de uso de la API y el estado actual de la cuota diaria (Rate Limiting). Útil para que el agente supervise cuántos requests quedan disponibles.';
|
|
9
|
+
export function registerEstadisticasUso(server, client) {
|
|
10
|
+
server.registerTool(TOOL_NAME, {
|
|
11
|
+
description: TOOL_DESCRIPTION,
|
|
12
|
+
}, async () => {
|
|
13
|
+
const stats = client.getRateLimitStats();
|
|
14
|
+
return {
|
|
15
|
+
content: [{
|
|
16
|
+
type: 'text',
|
|
17
|
+
text: JSON.stringify(stats, null, 2),
|
|
18
|
+
}],
|
|
19
|
+
};
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=estadisticas-uso.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"estadisticas-uso.js","sourceRoot":"","sources":["../../src/tools/estadisticas-uso.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,SAAS,GAAG,0BAA0B,CAAC;AAC7C,MAAM,gBAAgB,GAAG,yKAAyK,CAAC;AAEnM,MAAM,UAAU,uBAAuB,CAAC,MAAiB,EAAE,MAAwB;IACjF,MAAM,CAAC,YAAY,CACjB,SAAS,EACT;QACE,WAAW,EAAE,gBAAgB;KAC9B,EACD,KAAK,IAAI,EAAE;QACT,MAAM,KAAK,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAC;QACzC,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;iBACrC,CAAC;SACH,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { CompraAgilClient } from '../api/compra-agil-client.js';
|
|
3
|
+
export declare function registerGenerarBorrador(server: McpServer, client: CompraAgilClient): void;
|
|
4
|
+
//# sourceMappingURL=generar-borrador.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generar-borrador.d.ts","sourceRoot":"","sources":["../../src/tools/generar-borrador.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAkBhE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAiLzF"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { CompraAgilApiError } from '../utils/error-handler.js';
|
|
3
|
+
import { logger } from '../utils/logger.js';
|
|
4
|
+
const TOOL_NAME = 'generar_borrador_cotizacion';
|
|
5
|
+
const TOOL_DESCRIPTION = `Genera un borrador estructurado en formato JSON para presentar una cotización formal a un llamado de Compra Ágil activa.
|
|
6
|
+
Calcula automáticamente los valores netos, impuestos (19% IVA de Chile) y montos brutos, sugiriendo un precio unitario de mercado si no se ingresa uno personalizado.`;
|
|
7
|
+
const inputSchema = {
|
|
8
|
+
codigo_compra: z.string().describe('Código de la Compra Ágil activa a cotizar (ej: "1057539-228-COT26").'),
|
|
9
|
+
rut_proveedor: z.string().optional().describe('RUT del proveedor que realiza la cotización (ej: "76.123.456-7").'),
|
|
10
|
+
razon_social: z.string().optional().describe('Razón social/Nombre de fantasía de la empresa (ej: "Mi Pyme SpA").'),
|
|
11
|
+
precio_unitario_personalizado: z.number().optional().describe('Precio unitario neto personalizado para aplicar a los ítems. Si se omite, se buscará un precio estimado de mercado.'),
|
|
12
|
+
plazo_entrega_dias: z.number().optional().describe('Plazo de entrega en días corridos/hábiles. Si se omite, se adopta el sugerido por el comprador o 5 días.'),
|
|
13
|
+
descripcion_propuesta: z.string().optional().describe('Mensaje comercial o aclaraciones técnicas del proveedor para adjuntar a la propuesta.'),
|
|
14
|
+
};
|
|
15
|
+
export function registerGenerarBorrador(server, client) {
|
|
16
|
+
server.registerTool(TOOL_NAME, {
|
|
17
|
+
description: TOOL_DESCRIPTION,
|
|
18
|
+
inputSchema: inputSchema,
|
|
19
|
+
}, async (args) => {
|
|
20
|
+
try {
|
|
21
|
+
logger.info(`generar_borrador_cotizacion: Obteniendo detalle de la compra activa ${args.codigo_compra}`);
|
|
22
|
+
const targetDetail = await client.detalle(args.codigo_compra);
|
|
23
|
+
const rutProv = args.rut_proveedor || '76.000.000-0';
|
|
24
|
+
const razonSocial = args.razon_social || 'Proveedor Demo SpA';
|
|
25
|
+
const customPrice = args.precio_unitario_personalizado;
|
|
26
|
+
let plazoEntrega = args.plazo_entrega_dias;
|
|
27
|
+
if (plazoEntrega === undefined) {
|
|
28
|
+
plazoEntrega = targetDetail.entrega?.plazo_entrega_dias || 5;
|
|
29
|
+
}
|
|
30
|
+
// Estimar o adoptar precio unitario
|
|
31
|
+
let suggestedPrice = 1000;
|
|
32
|
+
let isPriceSuggested = false;
|
|
33
|
+
let priceSource = 'Valor por defecto (placeholder de $1.000)';
|
|
34
|
+
if (customPrice !== undefined && customPrice > 0) {
|
|
35
|
+
suggestedPrice = customPrice;
|
|
36
|
+
priceSource = 'Precio neto ingresado por el usuario';
|
|
37
|
+
isPriceSuggested = true;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
// Intentar obtener palabras clave del primer producto solicitado
|
|
41
|
+
let keyword = '';
|
|
42
|
+
if (targetDetail.productos_solicitados && targetDetail.productos_solicitados.length > 0) {
|
|
43
|
+
keyword = targetDetail.productos_solicitados[0].nombre;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
keyword = targetDetail.nombre;
|
|
47
|
+
}
|
|
48
|
+
if (keyword) {
|
|
49
|
+
try {
|
|
50
|
+
logger.info(`generar_borrador_cotizacion: Consultando precios de referencia históricos para "${keyword}"`);
|
|
51
|
+
const searchResponse = await client.buscar({
|
|
52
|
+
q: keyword,
|
|
53
|
+
estado: 'proveedor_seleccionado',
|
|
54
|
+
tamano_pagina: 10, // API v2 requiere mínimo 10
|
|
55
|
+
numero_pagina: 1,
|
|
56
|
+
});
|
|
57
|
+
const prices = [];
|
|
58
|
+
const itemsToProcess = (searchResponse.items || []).slice(0, 3);
|
|
59
|
+
if (itemsToProcess.length > 0) {
|
|
60
|
+
for (const item of itemsToProcess) {
|
|
61
|
+
try {
|
|
62
|
+
const detail = await client.detalle(item.codigo);
|
|
63
|
+
const winner = detail.proveedores_cotizando?.find(prov => prov.proveedor_seleccionado === true ||
|
|
64
|
+
prov.proveedor_seleccionado === 1 ||
|
|
65
|
+
(prov.seleccion && prov.seleccion.proveedor_seleccionado === true));
|
|
66
|
+
if (winner) {
|
|
67
|
+
let unitPrice = null;
|
|
68
|
+
if (winner.productos_cotizados && winner.productos_cotizados.length > 0) {
|
|
69
|
+
const matched = winner.productos_cotizados.find(p => p.nombre_producto.toLowerCase().includes(keyword.toLowerCase()));
|
|
70
|
+
unitPrice = matched ? matched.precio_unitario : winner.productos_cotizados[0].precio_unitario;
|
|
71
|
+
}
|
|
72
|
+
const val = unitPrice || winner.valor_neto || winner.monto_total || 0;
|
|
73
|
+
if (val > 0)
|
|
74
|
+
prices.push(val);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch (e) {
|
|
78
|
+
// ignore errors for individual historical lookups
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (prices.length > 0) {
|
|
83
|
+
prices.sort((a, b) => a - b);
|
|
84
|
+
const avg = Math.round(prices.reduce((a, b) => a + b, 0) / prices.length);
|
|
85
|
+
// Sugerir un precio competitivo (5% menor al promedio adjudicado)
|
|
86
|
+
suggestedPrice = Math.round(avg * 0.95);
|
|
87
|
+
if (suggestedPrice < prices[0]) {
|
|
88
|
+
suggestedPrice = prices[0];
|
|
89
|
+
}
|
|
90
|
+
priceSource = 'Sugerencia automática: Percentil de mercado (5% bajo promedio histórico)';
|
|
91
|
+
isPriceSuggested = true;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
// Fallback: usar presupuesto estimado del comprador si existe
|
|
95
|
+
const totalCantidad = targetDetail.productos_solicitados?.reduce((acc, p) => acc + p.cantidad, 0) || 1;
|
|
96
|
+
const budget = targetDetail.presupuesto?.monto_disponible_clp || targetDetail.presupuesto?.monto_disponible || 0;
|
|
97
|
+
if (budget > 0) {
|
|
98
|
+
suggestedPrice = Math.round((budget * 0.9) / totalCantidad);
|
|
99
|
+
priceSource = 'Sugerencia automática: Presupuesto estimado del comprador (descontado 10%)';
|
|
100
|
+
isPriceSuggested = true;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
logger.warn(`generar_borrador_cotizacion: No se pudo estimar precio sugerido: ${String(err)}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Construir productos cotizados
|
|
110
|
+
const productosCotizados = (targetDetail.productos_solicitados || []).map(prod => {
|
|
111
|
+
const uPrice = suggestedPrice;
|
|
112
|
+
const totalProd = prod.cantidad * uPrice;
|
|
113
|
+
return {
|
|
114
|
+
codigo_producto: prod.codigo_producto,
|
|
115
|
+
nombre_producto: prod.nombre,
|
|
116
|
+
descripcion: prod.descripcion || `Suministro de ${prod.nombre}`,
|
|
117
|
+
cantidad: prod.cantidad,
|
|
118
|
+
precio_unitario: uPrice,
|
|
119
|
+
monto_total_producto: totalProd,
|
|
120
|
+
};
|
|
121
|
+
});
|
|
122
|
+
// Totales de cotización
|
|
123
|
+
const valorNeto = productosCotizados.reduce((acc, p) => acc + p.monto_total_producto, 0);
|
|
124
|
+
const totalImpuesto = Math.round(valorNeto * 0.19); // 19% IVA en Chile
|
|
125
|
+
const montoTotal = valorNeto + totalImpuesto;
|
|
126
|
+
// Cover letter/carta de presentación comercial
|
|
127
|
+
const userDesc = args.descripcion_propuesta || '';
|
|
128
|
+
const coverLetter = `Estimados ${targetDetail.institucion?.organismo_comprador || 'Sres. Compradores'},\n\n` +
|
|
129
|
+
`Junto con saludar, a través del presente documento presentamos nuestra cotización formal para el proceso de Compra Ágil "${targetDetail.nombre}" (Código: ${targetDetail.codigo}).\n\n` +
|
|
130
|
+
`Detalles de nuestra propuesta:\n` +
|
|
131
|
+
(userDesc ? `- ${userDesc}\n` : '') +
|
|
132
|
+
`- Cumplimiento garantizado con todas las especificaciones y características solicitadas.\n` +
|
|
133
|
+
`- Plazo de entrega: ${plazoEntrega} días corridos contados desde la recepción de la Orden de Compra.\n` +
|
|
134
|
+
`- Validez de la oferta: 30 días corridos.\n\n` +
|
|
135
|
+
`Agradecemos de antemano su consideración y nos mantenemos a su disposición para aclarar cualquier duda técnica o comercial.\n\n` +
|
|
136
|
+
`Atentamente,\n` +
|
|
137
|
+
`${razonSocial}\nRUT: ${rutProv}`;
|
|
138
|
+
const borradorCotizacion = {
|
|
139
|
+
codigo_compra: targetDetail.codigo,
|
|
140
|
+
nombre_compra: targetDetail.nombre,
|
|
141
|
+
organismo_comprador: targetDetail.institucion?.organismo_comprador || 'No especificado',
|
|
142
|
+
rut_proveedor: rutProv,
|
|
143
|
+
razon_social: razonSocial,
|
|
144
|
+
es_emt: true,
|
|
145
|
+
activo: true,
|
|
146
|
+
plazo_entrega_dias: plazoEntrega,
|
|
147
|
+
valor_neto: valorNeto,
|
|
148
|
+
porcentaje_impuesto: 19,
|
|
149
|
+
nombre_impuesto: 'IVA',
|
|
150
|
+
total_impuesto: totalImpuesto,
|
|
151
|
+
monto_total: montoTotal,
|
|
152
|
+
descripcion_cotizacion: coverLetter,
|
|
153
|
+
productos_cotizados: productosCotizados,
|
|
154
|
+
metadata_estimacion: {
|
|
155
|
+
precio_unitario_utilizado: suggestedPrice,
|
|
156
|
+
fuente_precio_unitario: priceSource,
|
|
157
|
+
precio_unitario_sugerido_automatico: isPriceSuggested,
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
return {
|
|
161
|
+
content: [{
|
|
162
|
+
type: 'text',
|
|
163
|
+
text: JSON.stringify(borradorCotizacion, null, 2),
|
|
164
|
+
}],
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
const message = error instanceof CompraAgilApiError
|
|
169
|
+
? error.actionableMessage
|
|
170
|
+
: `Error inesperado al generar borrador de cotización: ${String(error)}`;
|
|
171
|
+
return {
|
|
172
|
+
content: [{ type: 'text', text: message }],
|
|
173
|
+
isError: true,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=generar-borrador.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generar-borrador.js","sourceRoot":"","sources":["../../src/tools/generar-borrador.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: monitorear_cambios_recientes
|
|
3
|
+
*
|
|
4
|
+
* Detecta procesos de Compra Ágil que hayan sido creados o modificados
|
|
5
|
+
* recientemente. Ideal para alertas y monitoreo de oportunidades.
|
|
6
|
+
*/
|
|
7
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
8
|
+
import { CompraAgilClient } from '../api/compra-agil-client.js';
|
|
9
|
+
export declare function registerMonitorearCambios(server: McpServer, client: CompraAgilClient): void;
|
|
10
|
+
//# sourceMappingURL=monitorear-cambios.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitorear-cambios.d.ts","sourceRoot":"","sources":["../../src/tools/monitorear-cambios.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AA4BhE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAqD3F"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: monitorear_cambios_recientes
|
|
3
|
+
*
|
|
4
|
+
* Detecta procesos de Compra Ágil que hayan sido creados o modificados
|
|
5
|
+
* recientemente. Ideal para alertas y monitoreo de oportunidades.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
import { CompraAgilApiError } from '../utils/error-handler.js';
|
|
9
|
+
const TOOL_NAME = 'monitorear_cambios_recientes';
|
|
10
|
+
const TOOL_DESCRIPTION = `Busca Compras Ágiles que hayan sido creadas o modificadas en los últimos N minutos.
|
|
11
|
+
Ideal para monitoreo de nuevas oportunidades de negocio y alertas en tiempo real.
|
|
12
|
+
Internamente convierte los minutos a milisegundos para el parámetro ttl_cambio_ms de la API.
|
|
13
|
+
Puede combinarse con filtros de estado y región para acotar los resultados.`;
|
|
14
|
+
const inputSchema = {
|
|
15
|
+
minutos: z.number().min(1).max(1440).default(60).describe('Buscar cambios en los últimos N minutos. Ej: 60 = última hora, 1440 = últimas 24 horas. Máximo 1440 (24h).'),
|
|
16
|
+
estado: z.string().optional().describe('Filtrar por estado(s), separados por coma. Ej: "publicada" para solo oportunidades abiertas.'),
|
|
17
|
+
region: z.string().optional().describe('Código(s) de región, separados por coma. Ej: "13" para Metropolitana.'),
|
|
18
|
+
tamano_pagina: z.number().min(10).max(50).default(50).describe('Resultados por página (10-50, default 50).'),
|
|
19
|
+
numero_pagina: z.number().min(1).optional().describe('Número de página a consultar (comienza en 1).'),
|
|
20
|
+
};
|
|
21
|
+
export function registerMonitorearCambios(server, client) {
|
|
22
|
+
server.registerTool(TOOL_NAME, {
|
|
23
|
+
description: TOOL_DESCRIPTION,
|
|
24
|
+
inputSchema: inputSchema,
|
|
25
|
+
}, async (args) => {
|
|
26
|
+
try {
|
|
27
|
+
const ttlMs = args.minutos * 60 * 1000;
|
|
28
|
+
const response = await client.cambiosRecientes(ttlMs, {
|
|
29
|
+
estado: args.estado,
|
|
30
|
+
region: args.region,
|
|
31
|
+
tamano_pagina: args.tamano_pagina,
|
|
32
|
+
numero_pagina: args.numero_pagina,
|
|
33
|
+
});
|
|
34
|
+
const summary = response.items.map((item) => ({
|
|
35
|
+
codigo: item.codigo,
|
|
36
|
+
nombre: item.nombre,
|
|
37
|
+
estado: item.estado.glosa,
|
|
38
|
+
presupuesto_clp: item.montos.monto_disponible_clp,
|
|
39
|
+
institucion: item.institucion.organismo_comprador,
|
|
40
|
+
region: item.institucion.nombre_region,
|
|
41
|
+
fecha_cierre: item.fechas.fecha_cierre,
|
|
42
|
+
ultimo_cambio: item.fechas.fecha_ultimo_cambio,
|
|
43
|
+
}));
|
|
44
|
+
const result = {
|
|
45
|
+
ventana_temporal: `Últimos ${args.minutos} minutos`,
|
|
46
|
+
total_resultados: response.paginacion.total_resultados,
|
|
47
|
+
pagina: `${response.paginacion.numero_pagina} de ${response.paginacion.total_paginas}`,
|
|
48
|
+
resultados: summary,
|
|
49
|
+
};
|
|
50
|
+
return {
|
|
51
|
+
content: [{
|
|
52
|
+
type: 'text',
|
|
53
|
+
text: JSON.stringify(result, null, 2),
|
|
54
|
+
}],
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
const message = error instanceof CompraAgilApiError
|
|
59
|
+
? error.actionableMessage
|
|
60
|
+
: `Error inesperado: ${String(error)}`;
|
|
61
|
+
return {
|
|
62
|
+
content: [{ type: 'text', text: message }],
|
|
63
|
+
isError: true,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=monitorear-cambios.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitorear-cambios.js","sourceRoot":"","sources":["../../src/tools/monitorear-cambios.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { CompraAgilClient } from '../api/compra-agil-client.js';
|
|
3
|
+
export declare function registerRadarOportunidades(server: McpServer, client: CompraAgilClient): void;
|
|
4
|
+
//# sourceMappingURL=radar-oportunidades.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radar-oportunidades.d.ts","sourceRoot":"","sources":["../../src/tools/radar-oportunidades.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AA6BhE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAoJ5F"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { CompraAgilApiError } from '../utils/error-handler.js';
|
|
3
|
+
import { logger } from '../utils/logger.js';
|
|
4
|
+
const TOOL_NAME = 'radar_oportunidades_calientes';
|
|
5
|
+
const TOOL_DESCRIPTION = `Escanea, califica y clasifica de forma priorizada los procesos de Compra Ágil activos (publicados).
|
|
6
|
+
Utiliza una fórmula ponderada (Hot Score) basada en la falta de oferentes, el presupuesto disponible y las horas restantes de cierre para destacar los llamados más convenientes y fáciles de ganar.`;
|
|
7
|
+
const inputSchema = {
|
|
8
|
+
region: z.string().optional().describe('Código de la región para filtrar (1-16). Ej: "13" para Metropolitana.'),
|
|
9
|
+
q: z.string().optional().describe('Término de búsqueda opcional para acotar a un rubro o producto específico (ej: "licencias").'),
|
|
10
|
+
presupuesto_minimo: z.number().optional().describe('Filtrar solo procesos con presupuesto disponible mayor o igual a este monto en CLP.'),
|
|
11
|
+
limite_resultados: z.number().min(1).max(20).default(10).optional().describe('Cantidad máxima de oportunidades destacadas a retornar (1-20, default 10).'),
|
|
12
|
+
};
|
|
13
|
+
export function registerRadarOportunidades(server, client) {
|
|
14
|
+
server.registerTool(TOOL_NAME, {
|
|
15
|
+
description: TOOL_DESCRIPTION,
|
|
16
|
+
inputSchema: inputSchema,
|
|
17
|
+
}, async (args) => {
|
|
18
|
+
try {
|
|
19
|
+
const queryParams = {
|
|
20
|
+
estado: 'publicada',
|
|
21
|
+
region: args.region || undefined,
|
|
22
|
+
q: args.q || undefined,
|
|
23
|
+
tamano_pagina: 50, // Obtener un lote amplio de 50 para poder rankear
|
|
24
|
+
numero_pagina: 1,
|
|
25
|
+
};
|
|
26
|
+
logger.info(`radar_oportunidades_calientes: Escaneando procesos activos para region="${args.region || 'Todas'}" q="${args.q || 'Todos'}"`);
|
|
27
|
+
const searchResponse = await client.buscar(queryParams);
|
|
28
|
+
if (!searchResponse.items || searchResponse.items.length === 0) {
|
|
29
|
+
return {
|
|
30
|
+
content: [{
|
|
31
|
+
type: 'text',
|
|
32
|
+
text: 'No se encontraron Compras Ágiles activas que coincidan con los filtros de búsqueda.',
|
|
33
|
+
}],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
const now = Date.now();
|
|
37
|
+
const opportunities = [];
|
|
38
|
+
const minBudget = args.presupuesto_minimo || 0;
|
|
39
|
+
for (const item of searchResponse.items) {
|
|
40
|
+
const budget = item.montos?.monto_disponible_clp || item.montos?.monto_disponible || 0;
|
|
41
|
+
// Filtrar por presupuesto mínimo si corresponde
|
|
42
|
+
if (budget < minBudget) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
// Calcular tiempo restante en horas
|
|
46
|
+
let hoursLeft = 0;
|
|
47
|
+
if (item.fechas?.fecha_cierre) {
|
|
48
|
+
const cierreTime = new Date(item.fechas.fecha_cierre).getTime();
|
|
49
|
+
hoursLeft = (cierreTime - now) / (1000 * 60 * 60);
|
|
50
|
+
}
|
|
51
|
+
// Omitir procesos que ya cerraron o están en negativo por zona horaria
|
|
52
|
+
if (hoursLeft <= 0) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
let score = 0;
|
|
56
|
+
const factors = [];
|
|
57
|
+
// Factor 1: Baja Competencia (total_ofertas_recibidas) - Máx 50 pts
|
|
58
|
+
const bids = item.resumen?.total_ofertas_recibidas ?? 0;
|
|
59
|
+
if (bids === 0) {
|
|
60
|
+
score += 50;
|
|
61
|
+
factors.push('Sin oferentes activos (+50 pts)');
|
|
62
|
+
}
|
|
63
|
+
else if (bids === 1) {
|
|
64
|
+
score += 30;
|
|
65
|
+
factors.push('Baja competencia: solo 1 oferente (+30 pts)');
|
|
66
|
+
}
|
|
67
|
+
else if (bids === 2) {
|
|
68
|
+
score += 15;
|
|
69
|
+
factors.push('Competencia moderada: 2 oferentes (+15 pts)');
|
|
70
|
+
}
|
|
71
|
+
// Factor 2: Urgencia del Cierre (horas restantes) - Máx 30 pts
|
|
72
|
+
if (hoursLeft <= 4) {
|
|
73
|
+
score += 30;
|
|
74
|
+
factors.push('Urgencia crítica: cierra en menos de 4 horas (+30 pts)');
|
|
75
|
+
}
|
|
76
|
+
else if (hoursLeft <= 12) {
|
|
77
|
+
score += 20;
|
|
78
|
+
factors.push('Cierre inminente: cierra en menos de 12 horas (+20 pts)');
|
|
79
|
+
}
|
|
80
|
+
else if (hoursLeft <= 24) {
|
|
81
|
+
score += 10;
|
|
82
|
+
factors.push('Cierre cercano: cierra en menos de 24 horas (+10 pts)');
|
|
83
|
+
}
|
|
84
|
+
// Factor 3: Tamaño de Presupuesto - Máx 20 pts
|
|
85
|
+
if (budget >= 5000000) {
|
|
86
|
+
score += 20;
|
|
87
|
+
factors.push('Presupuesto de alto valor (>= $5.000.000 CLP) (+20 pts)');
|
|
88
|
+
}
|
|
89
|
+
else if (budget >= 2000000) {
|
|
90
|
+
score += 15;
|
|
91
|
+
factors.push('Presupuesto medio-alto (>= $2.000.000 CLP) (+15 pts)');
|
|
92
|
+
}
|
|
93
|
+
else if (budget >= 500000) {
|
|
94
|
+
score += 10;
|
|
95
|
+
factors.push('Presupuesto medio (>= $500.000 CLP) (+10 pts)');
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
score += 5;
|
|
99
|
+
factors.push('Presupuesto bajo (< $500.000 CLP) (+5 pts)');
|
|
100
|
+
}
|
|
101
|
+
// Factor 4: Facilidad de Postulación - Máx 5 pts
|
|
102
|
+
const docsCount = item.documentos?.length || 0;
|
|
103
|
+
if (docsCount === 0) {
|
|
104
|
+
score += 5;
|
|
105
|
+
factors.push('Sin documentos adjuntos (postulación rápida sin leer bases) (+5 pts)');
|
|
106
|
+
}
|
|
107
|
+
opportunities.push({
|
|
108
|
+
codigo: item.codigo,
|
|
109
|
+
nombre: item.nombre,
|
|
110
|
+
organismo: item.institucion?.organismo_comprador || 'No especificado',
|
|
111
|
+
region: item.institucion?.nombre_region || 'No especificada',
|
|
112
|
+
presupuesto_disponible: budget,
|
|
113
|
+
ofertas_recibidas: bids,
|
|
114
|
+
horas_restantes: Math.round(hoursLeft * 10) / 10,
|
|
115
|
+
fecha_cierre: item.fechas?.fecha_cierre,
|
|
116
|
+
puntuacion_caliente: score,
|
|
117
|
+
factores_calificacion: factors,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
// Ordenar descendentemente por puntuación caliente
|
|
121
|
+
opportunities.sort((a, b) => b.puntuacion_caliente - a.puntuacion_caliente);
|
|
122
|
+
// Aplicar límite
|
|
123
|
+
const limit = args.limite_resultados || 10;
|
|
124
|
+
const rankedOpportunities = opportunities.slice(0, limit);
|
|
125
|
+
const result = {
|
|
126
|
+
total_oportunidades_analizadas: opportunities.length,
|
|
127
|
+
radar_limite_resultados: limit,
|
|
128
|
+
oportunidades_calientes: rankedOpportunities,
|
|
129
|
+
};
|
|
130
|
+
return {
|
|
131
|
+
content: [{
|
|
132
|
+
type: 'text',
|
|
133
|
+
text: JSON.stringify(result, null, 2),
|
|
134
|
+
}],
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
const message = error instanceof CompraAgilApiError
|
|
139
|
+
? error.actionableMessage
|
|
140
|
+
: `Error inesperado en radar de oportunidades: ${String(error)}`;
|
|
141
|
+
return {
|
|
142
|
+
content: [{ type: 'text', text: message }],
|
|
143
|
+
isError: true,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=radar-oportunidades.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radar-oportunidades.js","sourceRoot":"","sources":["../../src/tools/radar-oportunidades.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,SAAS,GAAG,+BAA+B,CAAC;AAElD,MAAM,gBAAgB,GAAG;qMAC4K,CAAC;AAEtM,MAAM,WAAW,GAAG;IAClB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uEAAuE,CAAC;IAC/G,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8FAA8F,CAAC;IACjI,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qFAAqF,CAAC;IACzI,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4EAA4E,CAAC;CAC3J,CAAC;AAeF,MAAM,UAAU,0BAA0B,CAAC,MAAiB,EAAE,MAAwB;IACpF,MAAM,CAAC,YAAY,CACjB,SAAS,EACT;QACE,WAAW,EAAE,gBAAgB;QAC7B,WAAW,EAAE,WAAW;KACzB,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,WAAW,GAAG;gBAClB,MAAM,EAAE,WAAW;gBACnB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,SAAS;gBAChC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,SAAS;gBACtB,aAAa,EAAE,EAAE,EAAE,kDAAkD;gBACrE,aAAa,EAAE,CAAC;aACjB,CAAC;YAEF,MAAM,CAAC,IAAI,CAAC,2EAA2E,IAAI,CAAC,MAAM,IAAI,OAAO,QAAQ,IAAI,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;YAC3I,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAExD,IAAI,CAAC,cAAc,CAAC,KAAK,IAAI,cAAc,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/D,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,qFAAqF;yBAC5F,CAAC;iBACH,CAAC;YACJ,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,aAAa,GAAuB,EAAE,CAAC;YAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,IAAI,CAAC,CAAC;YAE/C,KAAK,MAAM,IAAI,IAAI,cAAc,CAAC,KAAK,EAAE,CAAC;gBACxC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,oBAAoB,IAAI,IAAI,CAAC,MAAM,EAAE,gBAAgB,IAAI,CAAC,CAAC;gBAEvF,gDAAgD;gBAChD,IAAI,MAAM,GAAG,SAAS,EAAE,CAAC;oBACvB,SAAS;gBACX,CAAC;gBAED,oCAAoC;gBACpC,IAAI,SAAS,GAAG,CAAC,CAAC;gBAClB,IAAI,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;oBAC9B,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC;oBAChE,SAAS,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;gBACpD,CAAC;gBAED,uEAAuE;gBACvE,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;oBACnB,SAAS;gBACX,CAAC;gBAED,IAAI,KAAK,GAAG,CAAC,CAAC;gBACd,MAAM,OAAO,GAAa,EAAE,CAAC;gBAE7B,oEAAoE;gBACpE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,uBAAuB,IAAI,CAAC,CAAC;gBACxD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,KAAK,IAAI,EAAE,CAAC;oBACZ,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;gBAClD,CAAC;qBAAM,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACtB,KAAK,IAAI,EAAE,CAAC;oBACZ,OAAO,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;gBAC9D,CAAC;qBAAM,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACtB,KAAK,IAAI,EAAE,CAAC;oBACZ,OAAO,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;gBAC9D,CAAC;gBAED,+DAA+D;gBAC/D,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;oBACnB,KAAK,IAAI,EAAE,CAAC;oBACZ,OAAO,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;gBACzE,CAAC;qBAAM,IAAI,SAAS,IAAI,EAAE,EAAE,CAAC;oBAC3B,KAAK,IAAI,EAAE,CAAC;oBACZ,OAAO,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;gBAC1E,CAAC;qBAAM,IAAI,SAAS,IAAI,EAAE,EAAE,CAAC;oBAC3B,KAAK,IAAI,EAAE,CAAC;oBACZ,OAAO,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;gBACxE,CAAC;gBAED,+CAA+C;gBAC/C,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;oBACtB,KAAK,IAAI,EAAE,CAAC;oBACZ,OAAO,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;gBAC1E,CAAC;qBAAM,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,KAAK,IAAI,EAAE,CAAC;oBACZ,OAAO,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;gBACvE,CAAC;qBAAM,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;oBAC5B,KAAK,IAAI,EAAE,CAAC;oBACZ,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;gBAChE,CAAC;qBAAM,CAAC;oBACN,KAAK,IAAI,CAAC,CAAC;oBACX,OAAO,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;gBAC7D,CAAC;gBAED,iDAAiD;gBACjD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC;gBAC/C,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;oBACpB,KAAK,IAAI,CAAC,CAAC;oBACX,OAAO,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;gBACvF,CAAC;gBAED,aAAa,CAAC,IAAI,CAAC;oBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,mBAAmB,IAAI,iBAAiB;oBACrE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,aAAa,IAAI,iBAAiB;oBAC5D,sBAAsB,EAAE,MAAM;oBAC9B,iBAAiB,EAAE,IAAI;oBACvB,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,GAAG,EAAE;oBAChD,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,YAAY;oBACvC,mBAAmB,EAAE,KAAK;oBAC1B,qBAAqB,EAAE,OAAO;iBAC/B,CAAC,CAAC;YACL,CAAC;YAED,mDAAmD;YACnD,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB,GAAG,CAAC,CAAC,mBAAmB,CAAC,CAAC;YAE5E,iBAAiB;YACjB,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,IAAI,EAAE,CAAC;YAC3C,MAAM,mBAAmB,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAE1D,MAAM,MAAM,GAAG;gBACb,8BAA8B,EAAE,aAAa,CAAC,MAAM;gBACpD,uBAAuB,EAAE,KAAK;gBAC9B,uBAAuB,EAAE,mBAAmB;aAC7C,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;qBACtC,CAAC;aACH,CAAC;QAEJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,kBAAkB;gBACjD,CAAC,CAAC,KAAK,CAAC,iBAAiB;gBACzB,CAAC,CAAC,+CAA+C,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACnE,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gBACnD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { CompraAgilClient } from '../api/compra-agil-client.js';
|
|
3
|
+
export declare function registerRecomendarPrecio(server: McpServer, client: CompraAgilClient): void;
|
|
4
|
+
//# sourceMappingURL=recomendar-precio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recomendar-precio.d.ts","sourceRoot":"","sources":["../../src/tools/recomendar-precio.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAiBhE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CA0L1F"}
|