Add search tools to remaining MCP modules

This commit is contained in:
josedario87
2025-06-03 17:23:29 -06:00
parent 907ac9da0e
commit 943ab1d17f
3 changed files with 75 additions and 0 deletions

View File

@@ -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) }] };
}
);
}

View File

@@ -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) }] };
}
);
}

View File

@@ -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) }] };
}
);
}