JSJorge Sebastián Soriano EN

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.

Dónde se usa
Finanzas familiares, en un servidor de casa
Estado
En uso desde agosto de 2026
Mi papel
Reglas, integración en la app existente, tests y despliegue. Código con IA
Tecnologías
PHP 8.4, Laravel, Pest, MySQL, React 19 + Inertia, TypeScript, MCP, Docker
Simulador que compara el ahorro de amortizar en tres préstamos
Demo: el mismo importe aplicado a cada préstamo. Hogar ficticio.

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.

Asistente de IApide una operaciónServidor MCPcatálogo cerradoValidacióncampo extra = rechazoVista previacaduca en 10 minConfirmaciónnueva, del usuarioTransacción+ auditoría
  • 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

ParteEn la demoDetalle
Hogar, préstamos y movimientosSintéticoGenerados desde cero con semilla fija.
Motor de amortización y validador MCPRealTraducidos a JavaScript desde el código original, con 11 comprobaciones de paridad.
Conversaciones con el asistenteSintéticoTrazas precalculadas: la demo no ejecuta el servidor MCP.
App completa, datos reales e historial GitNo incluidoUso 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.

Pago único: dónde se ahorra más
Pago único: dónde se ahorra más
Extra mensual y préstamo mal configurado sin tumbar a los demás
Extra mensual y préstamo mal configurado sin tumbar a los demás
Cambio en lote: vista previa, confirmación y ejecución
Cambio en lote: vista previa, confirmación y ejecución
Lo que el asistente no puede hacer
Lo que el asistente no puede hacer
Validador: una llamada con campo extra se rechaza entera
Validador: una llamada con campo extra se rechaza entera
Cómo está hecho
Cómo está hecho
Vista móvil
Vista móvil
Modo oscuro
Modo oscuro