Skip to main content
Glama

🧠 Hippocampus Memory MCP Server

Persistent, Semantic Memory for Large Language Models

Python 3.9+ MCP License: MIT

Features β€’ Installation β€’ Quick Start β€’ Documentation β€’ Architecture


πŸ“– Overview

A Python-based Model Context Protocol (MCP) server that gives LLMs persistent, hippocampus-inspired memory across sessions. Store, retrieve, consolidate, and forget memories using semantic similarity search powered by vector embeddings.

Why Hippocampus? Just like the human brain's hippocampus consolidates short-term memories into long-term storage, this server intelligently manages LLM memory through biological patterns:

  • πŸ”„ Consolidation - Merge similar memories to reduce redundancy

  • 🧹 Forgetting - Remove outdated information based on age/importance

  • πŸ” Semantic Retrieval - Find relevant memories through meaning, not keywords

✨ Features

Feature

Description

πŸ—„οΈ Vector Storage

FAISS-powered semantic similarity search

🎯 MCP Compliant

Full MCP 1.2.0 spec compliance via FastMCP

🧬 Bio-Inspired

Hippocampus-style consolidation and forgetting

πŸ”’ Security

Input validation, rate limiting, injection prevention

πŸ”Ž Semantic Search

Sentence transformer embeddings (CPU-optimized)

♾️ Unlimited Storage

No memory count limits, only per-item size limits

πŸ†“ 100% Free

Local embedding model - no API costs

πŸš€ Quick Start

5 Core MCP Tools

memory_read # πŸ” Retrieve memories by semantic similarity memory_write # ✍️ Store new memories with tags & metadata memory_consolidate # πŸ”„ Merge similar memories memory_forget # 🧹 Remove memories by age/importance/tags memory_stats # πŸ“Š Get system statistics

πŸ“¦ Installation

pip install hippocampus-memory-mcp

Prerequisites: Python 3.9+ β€’ ~200MB disk space (for embedding model)

Claude Desktop Integration

Add to your Claude Desktop config (claude_desktop_config.json):

{ "mcpServers": { "memory": { "command": "python", "args": ["-m", "memory_mcp_server.server"] } } }

πŸŽ‰ That's it! Claude will now have persistent memory across conversations.

Install from Source (Alternative)

# Clone the repository git clone https://github.com/jameslovespancakes/Memory-MCP.git cd Memory-MCP # Install dependencies pip install -r requirements.txt # Run the server python -m memory_mcp_server.server

πŸ“š Documentation

Memory Operations via MCP

Once connected to Claude, use natural language:

"Remember that I prefer Python for backend development" β†’ Claude calls memory_write() "What do you know about my programming preferences?" β†’ Claude calls memory_read() "Consolidate similar memories to clean up storage" β†’ Claude calls memory_consolidate()

Direct API Usage

✍️ Writing Memories

from memory_mcp_server.storage import MemoryStorage from memory_mcp_server.tools import MemoryTools storage = MemoryStorage(storage_path="my_memory") await storage._ensure_initialized() tools = MemoryTools(storage) # Store with tags and importance await tools.memory_write( text="User prefers dark mode UI", tags=["preference", "ui"], importance_score=3.0, metadata={"category": "settings"} )

πŸ” Reading Memories

# Semantic search result = await tools.memory_read( query_text="What are my UI preferences?", top_k=5, min_similarity=0.3 ) # Filter by tags and date result = await tools.memory_read( query_text="Python learning", tags=["learning", "python"], date_range_start="2024-01-01" )

πŸ”„ Consolidating Memories

# Merge similar memories (threshold: 0.85) result = await tools.memory_consolidate(similarity_threshold=0.85) print(f"Merged {result['consolidated_groups']} groups")

🧹 Forgetting Memories

# Remove by age await tools.memory_forget(max_age_days=30) # Remove by importance await tools.memory_forget(min_importance_score=2.0) # Remove by tags await tools.memory_forget(tags_to_forget=["temporary"])

Testing

Run the included test suite:

python test_memory.py

This tests all 5 operations with sample data.

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ MCP Client (Claude Desktop, etc.) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ JSON-RPC over stdio β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ FastMCP Server (server.py) β”‚ β”‚ β”œβ”€ memory_read β”‚ β”‚ β”œβ”€ memory_write β”‚ β”‚ β”œβ”€ memory_consolidate β”‚ β”‚ β”œβ”€ memory_forget β”‚ β”‚ └─ memory_stats β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Memory Tools (tools.py) β”‚ β”‚ β”œβ”€ Input validation & sanitization β”‚ β”‚ └─ Rate limiting (100 req/min) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Storage Layer (storage.py) β”‚ β”‚ β”œβ”€ Sentence Transformers (all-MiniLM-L6-v2) β”‚ β”‚ β”œβ”€ FAISS Vector Index (cosine similarity) β”‚ β”‚ └─ JSON persistence (memories.json) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ”„ Memory Lifecycle

Step

Process

Technology

πŸ“ Write

Text β†’ 384-dim vector embedding

Sentence Transformers (CPU)

πŸ’Ύ Store

Normalized vector β†’ FAISS index

FAISS IndexFlatIP

πŸ” Search

Query β†’ embedding β†’ top-k similar

Cosine similarity

πŸ”„ Consolidate

Group similar (>0.85) β†’ merge

Vector clustering

🧹 Forget

Filter by age/importance/tags β†’ delete

Metadata filtering

πŸ”’ Security

Protection

Implementation

πŸ›‘οΈ Injection Prevention

Regex filtering of script tags, eval(), path traversal

⏱️ Rate Limiting

100 requests per 60-second window per client

πŸ“ Size Limits

50KB text, 5KB metadata, 20 tags per memory

βœ… Input Validation

Pydantic models + custom sanitization

πŸ” Safe Logging

stderr only (prevents JSON-RPC corruption)

βš™οΈ Configuration

Environment Variables

MEMORY_STORAGE_PATH="memory_data" # Storage directory EMBEDDING_MODEL="all-MiniLM-L6-v2" # Model name RATE_LIMIT_REQUESTS=100 # Max requests RATE_LIMIT_WINDOW=60 # Time window (seconds)

Storage Limits

  • βœ… Unlimited total memories (no count limit)

  • ⚠️ Per-memory limits: 50KB text, 5KB metadata, 20 tags

πŸ› Troubleshooting

First run downloads all-MiniLM-L6-v2 (~90MB). Ensure internet connection and ~/.cache/ write permissions.

pip uninstall torch transformers sentence-transformers -y pip install torch==2.1.0 transformers==4.35.2 sentence-transformers==2.2.2

The model runs on CPU. Ensure 2GB+ free RAM. Reduce top_k in read operations if needed.

πŸ“ License

MIT License - feel free to use in your projects!

🀝 Contributing

PRs welcome! Please:

  • Follow MCP security guidelines

  • Add tests for new features

  • Update documentation

πŸ”— Resources


Built with 🧠 for persistent LLM memory

Report Bug Β· Request Feature

-
security - not tested
A
license - permissive license
-
quality - not tested

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/jameslovespancakes/Memory-MCP'

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