Caso · Agentes de IA con límites
Círculo: amortizar con criterio y un asistente de IA con límites
Círculo es la app de finanzas de mi familia: una versión privada de Whisper Money, de código abierto (CC BY-NC 4.0), que funciona en un ordenador de casa. Aquí muestro solo lo que añadí yo: un simulador de amortización y un servidor MCP seguro.
El problema
- Amortizar. La app del banco dice cuánto se debe, pero no compara préstamos. «Amortiza el de mayor tipo» no siempre maximiza el ahorro total, y mezclar las cuotas que muestra el banco con la curva teórica del saldo da cifras erróneas.
- El asistente. Preguntar «¿cuánto gasté en agosto?» o pedir «pon estos movimientos en Alimentación» es cómodo. Pero el servidor MCP de partida permitía escrituras amplias, y un modelo que se equivoca, o que lee texto malicioso en la descripción de un movimiento, no debería poder borrar datos ni cambiar importes.
Cómo restrinjo lo que puede hacer un asistente
El principio
La seguridad está en el servidor, no en el prompt. Las instrucciones al modelo ayudan, pero la garantía es que el servidor no expone SQL, shell, ficheros, borrados ni cambios de importe.
- Catálogo cerrado de 19 herramientas: 12 de lectura agregada, 3 escrituras unitarias, 2 vistas previas, confirmar y deshacer. Lo que no está en la lista no existe.
- Validación estricta antes de tocar datos: tipos exactos, UUID, fechas reales y límites. Un campo no previsto (
amount,sql,path) invalida la llamada entera. - Escrituras con garantías: petición explícita, identificador único (idempotencia) y la revisión leída antes (concurrencia). Se ejecutan en una transacción con bloqueo y quedan en una auditoría de solo inserción.
- Cambios en lote: vista previa congelada, de un solo uso, que caduca a los 10 minutos. Solo se ejecuta tras una confirmación nueva, y deshacer también pide confirmación.
- Mínimo dato expuesto: sin IBAN, y los textos de comercio se tratan como no fiables.
El simulador de amortización
- Antes y después sobre la misma curva. Una primera versión calculaba el «antes» con las cuotas del banco y el «después» con la curva del saldo. En dos préstamos casi gemelos, eso invertía cuál convenía amortizar. Ahora ambos escenarios salen del mismo cálculo y un test lo fija.
- Céntimos enteros e interés redondeado cada mes, como un cuadro de amortización real.
- Degradación por préstamo. Si una cuota no cubre los intereses, ese préstamo devuelve un error y los demás se siguen simulando.
- Tres modos: reducir plazo, reducir cuota o extra mensual, descontando la comisión de amortización anticipada.
Qué es real y qué es demo
| Parte | En la demo | Detalle |
|---|---|---|
| Hogar, préstamos y movimientos | Sintético | Generados desde cero con semilla fija. |
| Motor de amortización y validador MCP | Real | Traducidos a JavaScript desde el código original, con 11 comprobaciones de paridad. |
| Conversaciones con el asistente | Sintético | Trazas precalculadas: la demo no ejecuta el servidor MCP. |
| App completa, datos reales e historial Git | No incluido | Uso privado. |
Resultados
19herramientas MCPcatálogo cerrado
48tests de la demo40 de cálculo y validador, 8 de datos
17llamadas peligrosas rechazadascasos del validador
Las cifras de ahorro de la demo son del hogar ficticio. No publico datos reales.
Limitaciones y siguientes pasos
- El tipo se supone constante: no modela revisiones del Euríbor ni fiscalidad.
- La métrica es el ahorro total de intereses, no la rentabilidad anual equivalente ni el coste de oportunidad de invertir.
- Pendiente: simular cambios de tipo por tramos.
Base: Whisper Money, licencia CC BY-NC 4.0. Ampliaciones de Jorge Sebastián Soriano.
Capturas de la demo
Todas con datos sintéticos.







