Parece mentira, pero con este artículo celebramos un hito que me llena de un orgullo tremendo: ¡alcanzamos las 800 entregas! Ochocientos episodios de pódcast compartiendo mi pasión por Linux, el autoalojamiento, la terminal y, en los últimos tiempos, el fascinante mundo de la Inteligencia Artificial local. Muchísimas gracias por estar ahí acompañándome en cada andanza, porque sin vuestro apoyo diario al otro lado de la pantalla o del reproductor de pódcast, esto no tendría ningún sentido. Como digo habitualmente cuando llego a estos episodios clave, quien me iba a decir a mi, cuando Àngel de uGeek me invitó a meterme en este fregado que llegaría hasta este punto… Solo tengo que darle las gracias.
Para festejar este número redondo, hoy vamos a meternos de lleno en un tema muy especial que va a solucionar uno de los mayores quebraderos de cabeza de cualquier persona que use asistentes digitales locales: la amnesia de las inteligencias artificiales. Hoy te voy a contar cómo he programado y configurado un gestor de tareas local usando un servidor MCP para que tu modelo de lenguaje tenga memoria persistente a largo plazo. Porque, ya te habrás dado cuenta que, de una sesión a otra, tu IA, se ha olvidado de todo, o casi todo… Vamos a solucionarlo.
El molesto problema de la amnesia en las Inteligencias Artificiales
Si usas habitualmente modelos de lenguaje (tanto locales como en la nube), seguro que has experimentado esa molesta sensación de que tu asistente se olvida de las cosas. Mantienes una charla estupenda, le dictas varias cosas importantes y, al cabo de unas cuantas frases o al abrir un chat nuevo al día siguiente, el modelo ha borrado por completo esos recuerdos. No tiene ni la más remota idea de lo que estabas hablando.
Esto ocurre por un concepto técnico llamado ventana de contexto. Los modelos de lenguaje tienen un límite físico de información que pueden procesar a la vez. Es como si estuvieras hablando con alguien que solo puede recordar las últimas diez páginas de un libro. En cuanto pasas a la página once, la primera página desaparece de su memoria para siempre.
Hasta ahora, la forma de solucionar esto consistía en volver a enviarle todo el historial de la conversación en cada mensaje. Sin embargo, esto es ineficiente por varios motivos:
- Consumes una cantidad de tokens brutal.
- El tiempo de respuesta de la IA se resiente notablemente.
- Al final, acabas saturando el sistema por completo.
La verdadera solución pasa por darle a nuestra IA una libreta física para que apunte las cosas importantes. Es decir, una base de datos persistente.
¿Qué es el Model Context Protocol (MCP)?
Para que nuestro modelo de lenguaje local pueda interactuar con el mundo exterior (como bases de datos, APIs de internet o archivos de nuestro sistema), necesita un intermediario. Aquí es donde entra en juego el Model Context Protocol, un estándar abierto maravilloso que actúa como un puerto de comunicación universal para la Inteligencia Artificial.
Gracias a este protocolo, el modelo de chat que estemos utilizando puede pedirle de forma segura a nuestro servidor que ejecute acciones por él. La IA no accede directamente a nuestros archivos (lo cual sería un riesgo enorme para la seguridad), sino que le pide amablemente a nuestro servidor MCP que realice las consultas necesarias y le devuelva el resultado en un formato de texto estructurado.
La solución: Un gestor de tareas inteligente y local
Para este proyecto decidí programar mi propio servidor MCP ToDo utilizando Rust. Como sabes, cuando nos apasiona el autoalojamiento en casa con servidores modestos, el rendimiento y el consumo de recursos lo son todo. Rust nos permite crear binarios súper compactos que se ejecutan al instante y consumen una cantidad de memoria RAM ridícula comparada con otros lenguajes.
Para almacenar las tareas, me decanté por usar una base de datos SQLite. Podría haber utilizado un simple archivo plano en formato JSON, pero cuando tienes cientos de tareas acumuladas, leer y reescribir un archivo completo cada vez que añades un recordatorio se vuelve un proceso lento y propenso a errores.
SQLite es ligera, fiable y nos regala una joya de la corona: FTS5 (Full-Text Search). Gracias a esta tecnología, podemos realizar búsquedas por texto de forma ultrarrápida. De este modo, si la IA necesita comprobar si ya tenemos apuntado comprar el pan, puede realizar una consulta semántica aproximada para evitar duplicar información de forma innecesaria.
Configuración paso a paso en OpenWeb UI
Para poner a funcionar este invento, tengo el servidor de tareas empaquetado en un contenedor ligero que gestiono de forma limpia y transparente mediante Podman y Quadlets (aunque puedes usar Docker si te resulta más cómodo).
Una vez que el contenedor está corriendo y comunicado con nuestra red proxy local, el proceso de integración en OpenWeb UI es asombrosamente sencillo:
- Accedemos al panel de administración de OpenWeb UI.
- Nos dirigimos a la sección de integraciones y añadimos un nuevo servidor MCP de tipo SSE (Server-Sent Events).
- Introducimos el identificador único, un nombre representativo y la URL con el puerto (en mi caso, el puerto 3003).
Pero ojo, que falta el paso definitivo para que todo funcione. Una vez establecida la conexión, tenemos que ir a los ajustes de edición del modelo de lenguaje que vayamos a usar (por ejemplo, Qwen 2.5) y activar de manera explícita la herramienta MCP ToDo. A partir de ese momento, el modelo tiene herramientas activas para consultar y modificar nuestra libreta de tareas.
Interactuando con nuestra IA en el día a día
Lo verdaderamente divertido de este sistema es la flexibilidad que nos ofrece el lenguaje natural. Ya no tenemos que rellenar formularios aburridos o usar sintaxis complejas de bases de datos. Simplemente abrimos un chat con nuestra IA y le decimos algo como: Oye, mañana tengo que comprar pan.
El modelo interpretará tu orden, deducirá qué día es mañana basándose en la fecha actual, convertirá la expresión temporal en una fecha estructurada con año, mes y día, y llamará a nuestro servidor MCP para insertar la tarea con prioridad media y estado pendiente.
Del mismo modo, si le dices: El lunes a las diez de la mañana tengo que pagar la factura de la luz, procesará los datos al vuelo para guardarlos. Y si luego le pides dame los detalles de la factura de la luz, la IA buscará en la base de datos local y te mostrará el identificador, la fecha de vencimiento, la prioridad y te ofrecerá marcarla como completada o añadirle etiquetas interesantes como facturas.
En el directo pudiste ver que no todo es siempre de color de rosa. A veces, la IA se confunde al interpretar fechas relativas complejas o se produce algún error menor de codificación. Pero esa es la verdadera magia de cacharrear: mirar los logs del contenedor en tiempo real, entender qué consulta está fallando y ajustar las instrucciones del sistema para ir afinando la comunicación poco a poco.
Evitando el colapso de la IA: La importancia de la paginación
Un aspecto crítico a la hora de diseñar herramientas para inteligencia artificial es evitar que el asistente se empache de datos. Imagina que tienes guardadas quinientas tareas que has completado a lo largo del año. Si le pides a la IA que te muestre tus tareas pendientes y el servidor le devuelve las quinientas de golpe, habrás destruido su ventana de contexto.
El modelo se saturará de información innecesaria, gastará miles de tokens inútilmente y empezará a responder de forma lenta y errática. Para evitarlo, en mi implementación he prestado especial atención a la paginación. El servidor solo le proporciona a la IA los próximos diez resultados o filtra rígidamente por el rango de fechas que hayamos solicitado. De este modo, la conversación sigue siendo rápida, precisa y muy barata de procesar.
Hacia dónde vamos: El puente hacia RAG y búsquedas semánticas
Aunque la base de datos relacional SQLite nos proporciona una solidez increíble para almacenar la información de forma clásica, este desarrollo es solo la primera piedra del camino.
En los próximos episodios entraremos de lleno en el fascinante mundo del RAG (Generación Aumentada por Recuperación) y las bases de datos vectoriales. Cuando crucemos ese puente, la IA será capaz de entender el significado profundo de tus frases. Ya no buscará coincidencias exactas de texto, sino que sabrá perfectamente que si escribes abonar el recibo eléctrico y pagar la factura de la luz, estás hablando exactamente de la misma tarea, gestionando de forma autónoma los duplicados semánticos y ofreciéndote una experiencia increíblemente orgánica.
Taller presencial en el Linux Center de Slimbook
Si te apasiona todo esto y quieres experimentar de primera mano con estas herramientas, te recuerdo que el próximo 6 de junio de 2026 impartiré un workshop presencial de Inteligencia Artificial local en el Linux Center de Slimbook en Valencia.
Dispondremos de máquinas estupendas cedidas por la marca para que puedas probar estos flujos, desplegar tus propios agentes con proyectos como OpenClaw o Hermes, y conectarlos de forma práctica con aplicaciones de mensajería como Telegram o Matrix. ¡Una ocasión perfecta para encontrarnos y aprender juntos cacharreando!