diff --git a/mcp/modules/asistencias.js b/mcp/modules/asistencias.js index edc1812..dfb5465 100644 --- a/mcp/modules/asistencias.js +++ b/mcp/modules/asistencias.js @@ -81,4 +81,29 @@ export default function registerAsistencias(server) { return { content: [{ type: "text", text: `Asistencia ${id} eliminada` }] }; } ); + + server.tool( + "search-asistencias", + "Busca asistencias. `q` matchea id o empleado_id. Si no se envían argumentos se devuelven los primeros 100 registros.", + { + q: z.string().optional(), + empleado_id: z.number().optional(), + estado: z.string().optional(), + entrada_desde: z.string().optional(), + entrada_hasta: z.string().optional(), + salida_desde: z.string().optional(), + salida_hasta: z.string().optional(), + }, + async (params) => { + log("Tool invocada", "search-asistencias", params); + const qs = new URLSearchParams( + Object.entries(params) + .filter(([, v]) => v !== undefined) + .map(([k, v]) => [k, String(v)]) + ); + if (qs.toString() === "") qs.append("limit", "100"); + const asistencias = await fetchJSON(`/api/asistencias/search?${qs.toString()}`); + return { content: [{ type: "text", text: JSON.stringify(asistencias) }] }; + } + ); } diff --git a/mcp/modules/empleados.js b/mcp/modules/empleados.js index 73cef7e..316287f 100644 --- a/mcp/modules/empleados.js +++ b/mcp/modules/empleados.js @@ -76,4 +76,29 @@ export default function registerEmpleados(server) { return { content: [{ type: "text", text: `Empleado ${id} eliminado` }] }; } ); + + server.tool( + "search-empleados", + "Busca empleados. `q` matchea id, cédula o nombre. Si no envías argumentos se devuelven los primeros 100 registros.", + { + q: z.string().optional(), + name: z.string().optional(), + cedula: z.number().optional(), + telefono: z.string().optional(), + ubicacion: z.string().optional(), + grupo_estudio: z.string().optional(), + idciat: z.number().optional(), + }, + async (params) => { + log("Tool invocada", "search-empleados", params); + const qs = new URLSearchParams( + Object.entries(params) + .filter(([, v]) => v !== undefined) + .map(([k, v]) => [k, String(v)]) + ); + if (qs.toString() === "") qs.append("limit", "100"); + const empleados = await fetchJSON(`/api/empleados/search?${qs.toString()}`); + return { content: [{ type: "text", text: JSON.stringify(empleados) }] }; + } + ); } diff --git a/mcp/modules/tareas.js b/mcp/modules/tareas.js index b401b3b..553f8dc 100644 --- a/mcp/modules/tareas.js +++ b/mcp/modules/tareas.js @@ -83,4 +83,29 @@ export default function registerTareas(server) { return { content: [{ type: "text", text: `Tarea ${id} eliminada` }] }; } ); + + server.tool( + "search-tareas", + "Busca tareas. `q` matchea id, empleado_id, planilla_id o título. Si no mandas filtros devuelve los primeros 100 registros.", + { + q: z.string().optional(), + empleado_id: z.number().optional(), + planilla_id: z.number().optional(), + estado: z.string().optional(), + titulo: z.string().optional(), + fecha_desde: z.string().optional(), + fecha_hasta: z.string().optional(), + }, + async (params) => { + log("Tool invocada", "search-tareas", params); + const qs = new URLSearchParams( + Object.entries(params) + .filter(([, v]) => v !== undefined) + .map(([k, v]) => [k, String(v)]) + ); + if (qs.toString() === "") qs.append("limit", "100"); + const tareas = await fetchJSON(`/api/tareas/search?${qs.toString()}`); + return { content: [{ type: "text", text: JSON.stringify(tareas) }] }; + } + ); }