Skip to main content
Glama
bsahane

Memory MCP Server

by bsahane

Memory MCP Server

Python 3.12+ Tests License: Apache 2.0

Un servidor del Model Context Protocol (MCP) que proporciona memoria persistente a los agentes de IA. Las memorias se almacenan en una base de datos SQLite local (creada automáticamente, sin configuración) y se exponen a través de cuarenta herramientas que siguen una arquitectura basada en herramientas. Está construido sobre el andamiaje de producción template-mcp-server (FastMCP + FastAPI, registro estructurado, contenedores, manifiestos de OpenShift, CI).

Características

  • 40 herramientas MCP en cuatro dominios: memoria, tareas, tiempo (recordatorios/alertas), panel

  • Siete herramientas de memoria: store, get, search, list, update, delete, projects

  • Siete herramientas de tareas pendientes: create/search/list/get/update/complete/delete con prioridad y fechas de vencimiento

  • Ocho herramientas kanban: tableros con columnas configurables; añadir/mover/actualizar/eliminar tarjetas

  • Siete herramientas de seguimiento: rastreadores de estado cuyas entradas se agregan en métricas de progreso

  • Persistencia SQLite mediante aiosqlite: un solo archivo, línea base WAL optimizada, creación automática

  • Búsqueda de palabras clave de texto completo: coincidencia de palabras completas con derivación porter sobre un índice FTS5, ordenada por relevancia (mejor coincidencia primero)

  • Etiquetas y metadatos en memorias y tareas pendientes

  • FastMCP + FastAPI con múltiples transportes (HTTP, SSE, streamable-HTTP)

  • Configuración Pydantic mediante variables de entorno

  • Registro estructurado JSON con structlog

  • Integración OAuth (deshabilitada por defecto; consulte docs/authentication.md)

  • Listo para contenedores (imagen base Red Hat UBI) y manifiestos de OpenShift incluidos

Comportamiento de búsqueda y almacenamiento

La búsqueda (memory_search, todo_search) coincide con tokens de palabras completas sobre un índice de texto completo con derivación porter: las palabras parciales nunca coinciden (consultar check no coincidirá con checklist), la puntuación y los operadores se tratan literalmente, y los resultados se ordenan por relevancia bm25: la coincidencia más fuerte primero, la más reciente primero en caso de empate. Tenga en cuenta que la tokenización unicode61 trata una oración CJK completa como un solo token, por lo que la coincidencia de palabras completas asume escrituras separadas por espacios.

Las bases de datos se ejecutan en modo WAL con synchronous=NORMAL: las transacciones recientemente confirmadas pueden perderse en un bloqueo del sistema operativo o un corte de energía (una compensación aceptada para notas/tareas, no adecuada como sistema de registro). El tamaño de WAL en estado estable está limitado por wal_autocheckpoint (~1000 páginas ≈ 4 MiB); journal_size_limit (8 MiB) solo permite que SQLite trunque el archivo WAL una vez que los puntos de control lo liberan. El mantenimiento (PRAGMA optimize + una pasada de wal_checkpoint(TRUNCATE)) se ejecuta en línea en el bucle de sondeo de recordatorios cada décima iteración y puede retrasar brevemente una iteración; está limitado por el tiempo de espera por hook y el tiempo de espera de ocupado de la base de datos.

Inicio rápido

git clone https://github.com/redhat-data-and-ai/memory-mcp-server
cd memory-mcp-server
make install        # creates venv, installs deps + pre-commit hooks
make local          # starts server on localhost:5001

Verifique en otra terminal:

curl http://localhost:5001/health

Configuración manual (sin Make):

# Create venv and install
uv venv && source .venv/bin/activate
uv pip install -e ".[dev]"
pre-commit install

# Configure and run
cp .env.example .env
memory-mcp-server

# Verify
curl http://localhost:5001/health

Herramientas

Memoria

Herramienta

Propósito

memory_store(content, tags?, metadata?)

Persistir una nueva memoria; devuelve su id

memory_get(id)

Obtener una memoria por id

memory_search(query, limit?, project?, output_format?)

Búsqueda de palabras clave sobre el contenido, ordenada por relevancia

memory_list(limit?, offset?, tag?)

Explorar memorias de la más reciente a la más antigua

memory_update(id, content?/tags?/metadata?)

Actualizar parcialmente una memoria

memory_delete(id)

Eliminar una memoria por id

Tareas pendientes

Herramienta

Propósito

todo_create(title, description?, priority?, status?, due_date?, tags?)

Añadir una tarea estructurada

todo_search(query, limit?, offset?)

Búsqueda de palabras clave sobre título/descripción, ordenada por relevancia

todo_list(status?, tag?, limit?, offset?)

Explorar tareas pendientes con filtros

todo_get(id) / todo_update(id, ...) / todo_complete(id) / todo_delete(id)

Gestionar tareas pendientes individuales

Kanban

Herramienta

Propósito

board_create(name, description?, columns?)

Nuevo tablero; por defecto backlog/todo/in_progress/done

board_list() / board_delete(board_id)

Enumerar o eliminar tableros

board_view(board_id)

Estado completo del tablero agrupado por columna

card_add(board_id, title, ...) / card_move(card_id, column, position?)

Colocar y reordenar trabajo

card_update(card_id, ...) / card_delete(card_id)

Editar o eliminar tarjetas

Recordatorios y alertas

Herramienta

Propósito

reminder_create(title, due_at, notes?, repeat?)

Programar una alerta futura (repeticiones none/hourly/daily/weekly)

reminder_get(id) / reminder_update(id, ...)

Inspeccionar o editar una programación

reminder_list(status?, limit?, offset?)

Las más próximas a vencer primero

reminder_cancel(id) / reminder_snooze(id, minutes?) / reminder_delete(id)

Gestionar programaciones

alert_list(acknowledged?, limit?) / alert_ack(id) / alert_ack_all()

Revisar y descartar alertas disparadas

Un programador en segundo plano convierte los recordatorios vencidos en alertas en el servidor; consúltelas al inicio de la sesión con alert_list(acknowledged=false).

Panel

Herramienta

Propósito

overview()

Conteos entre dominios, alertas no confirmadas y lo que vence a continuación

Rastreadores

Herramienta

Propósito

tracker_create(name, description?) / tracker_list() / tracker_delete(id)

Gestionar rastreadores

entry_add(tracker_id, name, status?) / entry_update_status(entry_id, status) / entry_remove(entry_id)

Rastrear elementos (not_started/in_progress/blocked/done)

tracker_status(tracker_id)

Progreso: total/hecho/porcentaje más conteos por estado

Todas las herramientas devuelven diccionarios {status: "success" | "error", ...} y nunca lanzan excepciones a través del límite de la herramienta.

Configuración

Variable

Predeterminado

Descripción

MEMORY_DB_PATH

./data/memory.db

Archivo de base de datos SQLite (creado automáticamente, incluye directorios padre)

REMINDER_POLL_SECONDS

30

Intervalo del programador en segundo plano para disparar recordatorios vencidos

MCP_HOST

localhost

Dirección de enlace del servidor

MCP_PORT

5001

Puerto del servidor (1024-65535)

MCP_TRANSPORT_PROTOCOL

http

Protocolo de transporte (http, sse, streamable-http)

MCP_SSL_KEYFILE / MCP_SSL_CERTFILE

None

Clave/certificado SSL para HTTPS

ENABLE_AUTH

False*

Autenticación OAuth (consulte docs/authentication.md)

PYTHON_LOG_LEVEL

INFO

Nivel de registro

* ENABLE_AUTH tiene como valor predeterminado False en .env.example. Copie siempre .env.example a .env para comenzar con la autenticación deshabilitada.

Conexión de un cliente MCP

Apunte su cliente MCP al endpoint del servidor:

{
  "mcpServers": {
    "memory": {
      "url": "http://localhost:5001/mcp"
    }
  }
}

Consulte examples/fastmcp_client.py para ver un cliente funcional que almacena y busca memorias.

Desarrollo

make lint     # ruff + mypy
make test     # pytest with coverage
make pre-commit  # run all pre-commit hooks

Documentación

Guía

Descripción

Arquitectura

Diagramas del sistema, estructura del código, componentes clave

Desarrollo

Configuración, ejecución local, pruebas, calidad del código

Despliegue

Podman, OpenShift, configuración de contenedores

Autenticación

Configuración de OAuth, modos de autenticación, solución de problemas

Licencia

Apache 2.0 — derivado de redhat-data-and-ai/template-mcp-server.

-
license - not tested
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Persistent memory for AI agents. Search, store, and recall across sessions.

  • Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.

  • Universal memory for AI agents and tools. Save, organize and search context anywhere.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bsahane/memory-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server