Local Context Memory MCP

Un sistema de memoria persistente listo para producción para agentes de IA, que ofrece memoria buscable entre sesiones con búsqueda semántica y soporte para múltiples bases de datos backend.

Documentación

Local Context Memory MCP

License: MIT Python 3.12+ MCP Compatible
Docker Support

¿Alguna vez quisiste la función de memoria de ChatGPT pero en todos tus LLMs y almacenada en tu propio hardware? ¿Odias que haya un límite en cuántos recuerdos puede almacenar ChatGPT y que no puedas segmentar tus recuerdos en diferentes dominios?

Aquí está tu solución.

Dale a cualquier asistente de IA memoria persistente e ilimitada que controles por completo.

Un sistema de memoria persistente listo para producción para agentes de IA que utiliza el Model Context Protocol (MCP). Funciona con Claude Desktop, cualquier cliente compatible con MCP, y te ofrece las funciones de memoria que estabas buscando.

Tabla de contenidos

Por qué es importante

Problema tradicional de la IA: Los asistentes de IA olvidan todo entre conversaciones. Cada interacción comienza desde cero, lo que obliga a los usuarios a proporcionar repetidamente contexto sobre sus preferencias, proyectos e historial.

Solución: Local Context Memory le da a tu IA una memoria persistente y buscable que:

  • 🧠 Recuerda entre sesiones - Preferencias del usuario, detalles de proyectos, historial de conversaciones
  • 🎯 Encuentra contexto relevante - La búsqueda semántica muestra los recuerdos correctos en el momento adecuado
  • 🏢 Organiza por dominio - Contextos separados para trabajo, salud, vida personal (PostgreSQL)
  • 🔒 Permanece privado - Todos los datos se almacenan localmente bajo tu control
  • ⚡ Funciona de inmediato - Compatibilidad directa con Claude Desktop y clientes MCP

Elige tu implementación

  • SQLite + FAISS: Perfecto para uso personal, desarrollo e implementaciones simples
  • PostgreSQL + pgvector: Listo para producción con segmentación de dominios y colaboración en equipo

Herramientas y capacidades

graph LR
    subgraph "Client"
        USER[User]
        CD[Claude Desktop]
    end
    
    subgraph "MCP Server"
        subgraph "Tools"
            SM[store_memory]
            UM[update_memory]
            SRCH[search_memories]
            LMD[list_memory_domains]
        end
        
        subgraph "Resources"
            RES_SQL[memory://query]
            RES_PG[memory://domain/query]
        end
        
        subgraph "Prompts"
            SUM[summarize_memories]
        end
    end
    
    subgraph "Domain Context"
        DC[PostgreSQL Only]
        DC2[Multi-domain isolation:<br/>startup, health, personal]
    end
    
    USER --> CD
    CD -->|MCP Protocol| SM
    CD -->|MCP Protocol| UM
    CD -->|MCP Protocol| SRCH
    CD -->|MCP Protocol| LMD
    CD -->|MCP Protocol| RES_SQL
    CD -->|MCP Protocol| RES_PG
    CD -->|MCP Protocol| SUM
    
    LMD -.->|Available in| DC
    RES_PG -.->|Available in| DC
    DC --> DC2
    
    classDef client fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#0d47a1
    classDef server fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px,color:#4a148c
    classDef tool fill:#fff3e0,stroke:#f57c00,stroke-width:2px,color:#e65100
    classDef resource fill:#e8f5e8,stroke:#388e3c,stroke-width:2px,color:#1b5e20
    classDef prompt fill:#fce4ec,stroke:#c2185b,stroke-width:2px,color:#880e4f
    classDef domain fill:#f1f8e9,stroke:#689f38,stroke-width:2px,color:#33691e
    
    class USER,CD client
    class SM,UM,SRCH,LMD tool
    class RES_SQL,RES_PG resource
    class SUM prompt
    class DC,DC2 domain

Herramientas disponibles

store_memory

Almacena nueva información en memoria persistente con indexación semántica automática.

  • SQLite: store_memory(content, source?, importance?)
  • PostgreSQL: store_memory(content, domain?, source?, importance?)
  • Ejemplos:
    • "User prefers TypeScript over JavaScript for new projects"
    • "Weekly team meeting every Tuesday at 2 PM PST"

update_memory

Modifica recuerdos existentes preservando la indexación de búsqueda.

  • SQLite: update_memory(memory_id, content?, importance?)
  • PostgreSQL: update_memory(memory_id, content?, importance?, domain?)
  • Caso de uso: Actualizar información desactualizada o cambiar niveles de importancia

search_memories

Encuentra recuerdos relevantes mediante búsqueda semántica o por palabras clave.

  • SQLite: search_memories(query, limit?, use_vector?)
  • PostgreSQL: search_memories(query, domain?, limit?)
  • Ejemplos:
    • "What programming languages does the user prefer?"
    • "Recent project decisions about database choices"

list_memory_domains (Solo PostgreSQL)

Descubre dominios de memoria disponibles para un cambio de contexto organizado.

  • Devuelve: ["default", "work", "health", "personal"]
  • Caso de uso: Cambiar entre diferentes contextos de memoria

Recursos disponibles

memory://query (SQLite)

Búsqueda semántica rápida mediante patrón URI para recuperación simple de memoria.

memory://domain/query (PostgreSQL)

Búsqueda semántica con alcance de dominio para contextos de memoria aislados.

  • Ejemplos:
    • memory://work/project deadlines
    • memory://health/medication schedule

Prompts disponibles

summarize_memories

Genera resúmenes inteligentes de colecciones de memoria recuperadas.

  • Entrada: Lista de objetos de memoria
  • Salida: Resumen estructurado que destaca patrones clave y perspectivas
  • Caso de uso: Crear resúmenes de contexto para temas complejos

Arquitecturas

Implementación SQLite + FAISS (Original)

graph TB
    subgraph "Client Layer"
        CD[Claude Desktop]
        AI[AI Agent]
    end
    
    subgraph "MCP Server Layer"
        SMS[SQLite Memory Server]
    end
    
    subgraph "API Layer" 
        SMA[SQLite Memory API]
        SVA[SQLite Vector API]
        OE[Ollama Embeddings]
        SC[Smart Chunker]
    end
    
    subgraph "Storage Layer"
        SQL[(SQLite Database)]
        FAISS[(FAISS Index)]
    end
    
    subgraph "External Services"
        OL[Ollama API]
        EM[nomic-embed-text]
    end
    
    CD -->|MCP Protocol| SMS
    AI -->|HTTP/JSON-RPC| SMS
    
    SMS --> SMA
    SMA --> SVA
    SVA --> SC
    SVA --> OE
    
    SMA -->|Store Metadata| SQL
    SVA -->|Vector Operations| FAISS
    
    OE -->|Generate Embeddings| OL
    OL --> EM
    
    classDef client fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#0d47a1
    classDef server fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px,color:#4a148c
    classDef api fill:#fff3e0,stroke:#f57c00,stroke-width:2px,color:#e65100
    classDef storage fill:#e8f5e8,stroke:#388e3c,stroke-width:2px,color:#1b5e20
    classDef external fill:#fce4ec,stroke:#c2185b,stroke-width:2px,color:#880e4f
    
    class CD,AI client
    class SMS server
    class SMA,SVA,OE,SC api
    class SQL,FAISS storage
    class OL,EM external

Implementación PostgreSQL + pgvector (Nueva)

graph TB
    subgraph "Client Layer"
        CD[Claude Desktop]
        AI[AI Agent]
    end
    
    subgraph "MCP Server Layer"
        PMS[PostgreSQL Memory Server]
    end
    
    subgraph "API Layer"
        PMA[PostgreSQL Memory API]
        OE[Ollama Embeddings]
    end
    
    subgraph "PostgreSQL Database"
        subgraph "Domain Tables"
            DT1[default_memories]
            DT2[startup_memories]
            DT3[health_memories]
        end
        PGV[pgvector Extension]
    end
    
    subgraph "External Services"
        OL[Ollama API]
        EM[nomic-embed-text]
    end
    
    CD -->|MCP Protocol| PMS
    AI -->|HTTP/JSON-RPC| PMS
    
    PMS --> PMA
    PMA --> OE
    PMA -->|SQL + Vector Ops| PGV
    PGV --> DT1
    PGV --> DT2
    PGV --> DT3
    
    OE -->|Generate Embeddings| OL
    OL --> EM
    
    classDef client fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#0d47a1
    classDef server fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px,color:#4a148c
    classDef api fill:#fff3e0,stroke:#f57c00,stroke-width:2px,color:#e65100
    classDef storage fill:#e8f5e8,stroke:#388e3c,stroke-width:2px,color:#1b5e20
    classDef external fill:#fce4ec,stroke:#c2185b,stroke-width:2px,color:#880e4f
    
    class CD,AI client
    class PMS server
    class PMA,OE api
    class DT1,DT2,DT3,PGV storage
    class OL,EM external

Características

Características comunes

  • Búsqueda semántica: Utiliza embeddings de Ollama para la recuperación inteligente de memoria
  • Fragmentación inteligente: Divide automáticamente textos largos para mejores resultados de búsqueda
  • Estándar MCP: Cumplimiento total del protocolo MCP para integración con Claude Desktop
  • Listo para Docker: Implementación contenerizada simple con imágenes autocontenidas
  • Búsqueda de respaldo: Respaldo automático a búsqueda de texto cuando la búsqueda vectorial no está disponible

Específico de SQLite + FAISS

  • Almacenamiento local: Todo se ejecuta localmente con archivos SQLite + FAISS
  • Configuración cero: No se requiere servidor de base de datos
  • Portátil: Un solo directorio contiene todos los datos

Específico de PostgreSQL + pgvector

  • Segmentación de dominios: Contextos de memoria separados (startup, salud, personal, etc.)
  • Listo para producción: Cumplimiento ACID, acceso concurrente, soporte de replicación
  • Operaciones vectoriales nativas: Búsqueda de similitud eficiente sin archivos de índice separados
  • Escalable: Maneja grandes conjuntos de datos con indexación adecuada

Inicio rápido

Recomendado: ¡Usa Docker para la configuración más fácil! Omite toda la gestión de dependencias y ponte en marcha en segundos.

Opción 1: Docker (Recomendado)

Versión SQLite (la más simple):

# Run immediately - no setup required!
docker run --rm -i -v ./memory-data:/app/data cunicopia/local-memory-mcp:sqlite

Versión PostgreSQL (con segmentación de dominios):

# Run immediately - includes full PostgreSQL database!
docker run --rm -i -v ./postgres-data:/var/lib/postgresql/data cunicopia/local-memory-mcp:postgres

¡Eso es todo! Los contenedores son autocontenidos y manejan todas las dependencias automáticamente.

Requisitos previos

  • Docker (para implementación contenerizada) o Python 3.12+ (para instalación local)
  • Ollama con el modelo nomic-embed-text (opcional pero recomendado para búsqueda semántica mejorada)

Configuración de Ollama (Opcional pero Recomendado)

Ollama permite una búsqueda semántica mejorada con embeddings vectoriales. Sin él, el sistema recurre a la búsqueda basada en texto.

Instalación:

  • macOS/Windows: Descarga el instalador desde ollama.com/download
  • Linux: curl -fsSL https://ollama.com/install.sh | sh

Configuración:

# Install the embedding model
ollama pull nomic-embed-text:v1.5

# Verify it's running (should show localhost:11434)
curl http://localhost:11434/api/tags

Configuración de Claude Desktop

Una vez que tengas los contenedores Docker listos (o la instalación local), conéctate a Claude Desktop añadiendo esto a tu configuración de MCP:

Configuración de Docker (Recomendado)

{
  "mcpServers": {
    "localMemoryMCP-SQLite": {
      "command": "docker",
      "args": ["run", "--rm", "-i", "-v", "/path/to/your/memory-data:/app/data", "cunicopia/local-memory-mcp:sqlite"]
    },
    
    "localMemoryMCP-PostgreSQL": {
      "command": "docker", 
      "args": ["run", "--rm", "-i", "-v", "/path/to/your/postgres-data:/var/lib/postgresql/data", "cunicopia/local-memory-mcp:postgres"]
    }
  }
}

Rutas de volúmenes: Reemplaza /path/to/your/memory-data y /path/to/your/postgres-data con cualquier directorio donde quieras almacenar tus recuerdos (p. ej., ~/Documents/memory-data, /Users/yourname/my-memories, etc.)

Configuración de instalación local (Alternativa)

Nota: Úsalo solo si no puedes usar Docker. Requiere configuración manual primero (consulta Instalación manual).

{
  "mcpServers": {
    "localMemoryMCP": {
      "command": "bash",
      "args": ["/path/to/local-memory-mcp/run_sqlite.sh"]
    }
  }
}

Ejemplos

Implementación SQLite

// Store a memory
store_memory(
  "User prefers Python for backend development", 
  "conversation", 
  0.8
)

// Search memories
search_memories("programming preferences", 5, true)

// Get memories via resource
// Access: memory://programming

Implementación PostgreSQL

// List available domains
list_memory_domains()
// Returns: ["default", "startup", "health"]

// Store memories in different domains
store_memory(
  "Series A funding closed at $10M",
  "startup",  // domain
  "meeting",   // source
  0.9         // importance
)

store_memory(
  "User has peanut allergy",
  "health",
  "medical_record",
  1.0
)

// Search within specific domain
search_memories("funding", "startup", 5)

// Get memories via resource
// Access: memory://startup/funding%20strategy

Componentes

Implementación SQLite

  • FastMCP: Framework de servidor MCP en Python
  • SQLite: Metadatos estructurados y respaldo de búsqueda de texto
  • FAISS: Búsqueda de similitud vectorial
  • Ollama: Generación de embeddings local (opcional)
  • Smart Chunker: Procesamiento de texto para recuperación óptima

Implementación PostgreSQL

  • FastMCP: Framework de servidor MCP en Python
  • PostgreSQL: Base de datos completa con metadatos y almacenamiento vectorial
  • pgvector: Búsqueda de similitud vectorial nativa de PostgreSQL
  • Ollama: Generación de embeddings local (opcional)
  • Tablas de dominio: Contextos de memoria aislados para una mejor organización

Configuración

Variables de entorno comunes

  • OLLAMA_API_URL: Endpoint de Ollama (predeterminado: http://localhost:11434)
  • OLLAMA_EMBEDDING_MODEL: Nombre del modelo (predeterminado: nomic-embed-text)
  • MCP_SERVER_NAME: Nombre del servidor para MCP (predeterminado: Local Context Memory)

Específico de SQLite

  • MCP_DATA_DIR: Ruta de almacenamiento de datos (predeterminado: ./data)

Específico de PostgreSQL

  • POSTGRES_HOST: Host de la base de datos (predeterminado: localhost)
  • POSTGRES_PORT: Puerto de la base de datos (predeterminado: 5432)
  • POSTGRES_DB: Nombre de la base de datos (predeterminado: postgres)
  • POSTGRES_USER: Usuario de la base de datos (predeterminado: postgres)
  • POSTGRES_PASSWORD: Contraseña de la base de datos (requerida)
  • DEFAULT_MEMORY_DOMAIN: Dominio predeterminado para recuerdos (predeterminado: default)

Desarrollo

Versión SQLite

pip install -r requirements.sqlite.txt
python src/sqlite_memory_server.py

Versión PostgreSQL

pip install -r requirements.pgvector.txt
python src/postgres_memory_server.py

Docker

¡El soporte de Docker es totalmente funcional con contenedores autocontenidos! Tanto la versión SQLite como la de PostgreSQL se ejecutan de forma completamente independiente.

# Run pre-built images directly (recommended)
# SQLite version - replace './data' with your preferred data directory
docker run --rm -i -v ./data:/app/data cunicopia/local-memory-mcp:sqlite

# PostgreSQL version - replace './postgres_data' with your preferred data directory  
docker run --rm -i -v ./postgres_data:/var/lib/postgresql/data cunicopia/local-memory-mcp:postgres

Compilación desde el código fuente (opcional):

# Only needed if you want to build yourself
docker build -f Dockerfile.sqlite_version -t local-memory-mcp:sqlite_version .
docker build -f Dockerfile.postgres_version -t local-memory-mcp:postgres_version .

Instalación manual

⚠️ Recomendamos encarecidamente usar Docker en su lugar - maneja todas las dependencias automáticamente. Usa esta sección solo si Docker no está disponible o tienes requisitos específicos.

SQLite + FAISS (Simple, Local)

git clone https://github.com/cunicopia-dev/local-memory-mcp
cd local-memory-mcp
pip install -r requirements.sqlite.txt
python src/sqlite_memory_server.py

PostgreSQL + pgvector (Producción, Escalable)

Para sistemas basados en Debian:

# Install PostgreSQL + pgvector
sudo apt install postgresql postgresql-contrib
sudo apt install postgresql-17-pgvector  # Adjust version as needed

# Change directory to where you downloaded the repo
cd /path/to/local-memory-mcp

# Set up database
# PLEASE NOTE: We create a user and basic password here, please change this if you want to host it locally
psql < sql/create_user.sql
psql -U postgres < sql/setup_database.sql

# Install Python dependencies
pip install -r requirements.pgvector.txt

# Configure connection (edit .env file)
cp .env.example .env

# Run server
python src/postgres_memory_server.py

Para macOS:

# Install PostgreSQL and pgvector (Homebrew-based)
brew install postgresql@17
brew services start postgresql@17

# Link psql and other tools if needed
brew link --force postgresql@17

# Install pgvector extension (PostgreSQL must be running)
# This installs the extension into your local PostgreSQL environment
brew install pgvector

# OPTIONAL: If pgvector doesn't register properly, you can manually build it
# git clone --branch v0.8.0 https://github.com/pgvector/pgvector.git
# cd pgvector
# make && make install

# PLEASE NOTE: We create a user and basic password here, please change this if you want to host it locally
psql < sql/create_user.sql

# Set up database
psql -U postgres -f sql/setup_database.sql

# Install Python dependencies
pip install -r requirements.pgvector.txt

# Configure connection (edit .env file)
cp .env.example .env

# Run server
python src/postgres_memory_server.py

⚠️ ADVERTENCIA DE SEGURIDAD: Ve a sql/create_user.sql y crea un usuario y una contraseña más seguros; ¡los que aparecen son solo para fines de ejemplo! Protege tus datos y toma en serio la seguridad de tus datos.

Licencia

Licencia MIT

Demo

Mira el sistema de memoria local en acción:

Ejemplo 1

Example 1

Ejemplo 2

Example 2