Skip to main content
Glama
ai-memory-mcp

ai-memory-mcp

by zhanpu89

๐Ÿง  AI Memory MCP

Persistent session memory for AI assistants โ€” store, search and retrieve conversation summaries via the Model Context Protocol.

Python MCP License: MIT Tests


What is this?

AI assistants forget everything between sessions. AI Memory MCP solves that by giving your AI a structured long-term memory:

  • ๐Ÿ“ Save session summaries with status, tags, modules and file paths

  • ๐Ÿ” Search by keyword, full-text (FTS5), or semantic vector similarity

  • ๐Ÿ”„ Restore context at the start of each session with one tool call

  • ๐Ÿ“Š Generate weekly reports from completed tasks automatically

  • ๐Ÿท๏ธ Multi-project / multi-branch support out of the box

Works with Claude Desktop, Cursor, VS Code, Windsurf, and any MCP-compatible client.


Related MCP server: recall-mcp

Quick Start

1 โ€” Install

# From PyPI (recommended)
pip install ai-memory-mcp

# With vector search support (adds ~500 MB for embedding model)
pip install "ai-memory-mcp[vector]"

# From source
git clone https://github.com/zhanpu89/ai-memory-mcp
cd ai-memory-mcp
pip install -e .

2 โ€” Configure your AI client

Pick the config snippet for your tool and add it to its MCP settings file:

{
  "mcpServers": {
    "ai-memory": {
      "command": "ai-memory-mcp"
    }
  }
}
{
  "mcpServers": {
    "ai-memory": {
      "command": "ai-memory-mcp"
    }
  }
}
{
  "servers": {
    "ai-memory": {
      "type": "stdio",
      "command": "ai-memory-mcp"
    }
  }
}
{
  "mcpServers": {
    "ai-memory": {
      "command": "ai-memory-mcp"
    }
  }
}

Start the server:

ai-memory-mcp --http
# or: python service.py start

Then point your client at:

{
  "mcpServers": {
    "ai-memory": {
      "url": "http://localhost:8000/mcp"
    }
  }
}

All config snippets are available in integrations/.

3 โ€” Use it

At the start of every session, tell your AI:

Load my memory for project "my-project"

The AI will call init_session and restore your previous context automatically.


Features

Feature

Details

Storage

SQLite โ€” zero external services, single file

Full-text search

SQLite FTS5 โ€” fast, no extra deps

Semantic search

ChromaDB + all-MiniLM-L6-v2 (optional)

Multi-project

Filter by project_name + branch_name

Task lifecycle

pending โ†’ in_progress โ†’ completed / blocked / abandoned

Key decisions

Attach architectural decisions to sessions

Weekly reports

Auto-generated Markdown report

Transport

stdio (local) or streamable-HTTP (remote)

Docker

Single-container deployment included


Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚               AI Client (Claude / Cursor โ€ฆ)      โ”‚
โ”‚                    MCP Protocol                  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ”‚ stdio / HTTP
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚              AiMemoryMcpServer (FastMCP)         โ”‚
โ”‚                                                  โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚  SQLite DB   โ”‚    โ”‚  ChromaDB (optional) โ”‚   โ”‚
โ”‚  โ”‚  FTS5 index  โ”‚    โ”‚  Sentence-Transformersโ”‚  โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Data lives in ~/.ai-memory/ โ€” completely separate from your project files.


Tool Reference

โ†’ See TOOLS.md for the full schema of all 10 tools.

Tool

Description

save_summary

Persist a new session summary

update_summary

Update status / content

add_decision

Record a key technical decision

search_summaries

Keyword / FTS5 / vector search

search_summaries_fts

Dedicated FTS5 full-text search

get_summary_by_id

Exact lookup by session ID

list_recent_sessions

List latest sessions

init_session

Restore context at session start

weekly_review

Generate Markdown weekly report

maintenance

Rebuild index, VACUUM, persist vectors


Configuration

All settings are optional โ€” sensible defaults work out of the box.

Env var

Default

Description

AI_MEMORY_DB_PATH

~/.ai-memory/ai_memory.db

SQLite database path

AI_MEMORY_MODEL_PATH

~/.ai-memory/models

Embedding model cache

AI_MEMORY_HOST

127.0.0.1

HTTP server bind address

AI_MEMORY_PORT

8000

HTTP server port

Create ~/.ai-memory/.env to persist settings:

AI_MEMORY_DB_PATH=/custom/path/ai_memory.db
AI_MEMORY_PORT=9000

Docker

Optimized for China: Uses Tsinghua pip mirror + HuggingFace mirror for fast downloads.

# Option 1: Core-only (lightweight, ~200 MB image)
docker compose up -d

# Option 2: Full (with vector search)
# Step 1: Pre-download model to avoid large image
python3 scripts/download_model_for_docker.py --output ./models

# Step 2: Build with vector support (~700 MB image + 500 MB external model)
docker compose build --build-arg INSTALL_VECTOR=true
docker compose up -d

# View logs
docker compose logs -f

The MCP endpoint will be available at http://localhost:8000/mcp.

๐Ÿ“– Full deployment guide: See DOCKER.md for:

  • Image size optimization strategies

  • Chinese mirror configuration

  • Model pre-downloading

  • Production deployment examples


Development

# Clone and install in editable mode with dev extras
git clone https://github.com/zhanpu89/ai-memory-mcp
cd ai-memory-mcp
pip install -e ".[dev]"

# Run tests
pytest

# Run tests with coverage
pytest --cov=src/mcp_server --cov-report=term-missing

# Start in HTTP mode for manual testing
ai-memory-mcp --http

Project Structure

ai-memory-mcp/
โ”œโ”€โ”€ src/mcp_server/
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ””โ”€โ”€ server.py          # All 10 MCP tools + server class
โ”œโ”€โ”€ tests/
โ”‚   โ”œโ”€โ”€ unit/              # 24 unit tests
โ”‚   โ””โ”€โ”€ integration/
โ”œโ”€โ”€ scripts/
โ”‚   โ”œโ”€โ”€ download_model.py  # Manual model download
โ”‚   โ”œโ”€โ”€ migrate_db.py      # Database migration helper
โ”‚   โ””โ”€โ”€ migrate_vector.py  # Vector store migration
โ”œโ”€โ”€ integrations/          # Ready-to-use MCP client configs
โ”‚   โ”œโ”€โ”€ claude_desktop_config.json
โ”‚   โ”œโ”€โ”€ cursor_mcp.json
โ”‚   โ”œโ”€โ”€ vscode_mcp.json
โ”‚   โ”œโ”€โ”€ windsurf_mcp.json
โ”‚   โ””โ”€โ”€ http_mode_config.json
โ”œโ”€โ”€ TOOLS.md               # Full tool schema reference
โ”œโ”€โ”€ INSTALL.md             # Detailed installation guide
โ”œโ”€โ”€ Dockerfile
โ”œโ”€โ”€ docker-compose.yml
โ””โ”€โ”€ pyproject.toml

Testing

24 passed in 7s
pytest tests/unit/test_mcp_server.py -v

All 24 unit tests cover: save/update/search/FTS/vector/decisions/maintenance/init/review/schema.


Requirements

  • Python 3.10+

  • mcp >= 1.6.0

  • python-dotenv >= 1.0.0

Optional (vector search):

  • chromadb >= 0.6.0

  • sentence-transformers >= 3.0.0


License

MIT ยฉ AI Memory Team

Available Tools

10 tools
add_decisionB

ไธบๆŒ‡ๅฎšไผš่ฏๆทปๅŠ ๅ…ณ้”ฎๅ†ณ็ญ–่ฎฐๅฝ•ใ€‚

Args: params (AddDecisionInput): ๅŒ…ๅซ๏ผš - session_id (str): ๅ…ณ่”็š„ไผš่ฏ ID - decision_type (str): ๅ†ณ็ญ–็ฑปๅž‹๏ผŒๅฆ‚ tech_stack / api_design / architecture - description (str): ๅ†ณ็ญ–ๆ่ฟฐ - reasoning (Optional[str]): ๅ†ณ็ญ–็†็”ฑ

Returns: Dict: {"success": bool, "message": str}

Inputs: params (required). Returns: result

get_summary_by_idA
Read-onlyIdempotent

ๆ นๆฎ session_id ็ฒพ็กฎๆŸฅ่ฏขๅ•ๆกๆ‘˜่ฆ่ฎฐๅฝ•ใ€‚

Args: params (GetSummaryByIdInput): ๅŒ…ๅซ๏ผš - session_id (str): ็›ฎๆ ‡ไผš่ฏ ID

Returns: Dict: {"success": bool, "data": Dict}

Inputs: params (required). Returns: result

init_sessionA
Read-onlyIdempotent

ไผš่ฏๅฏๅŠจๆ—ถ่ฐƒ็”จ๏ผŒ่ฟ”ๅ›žๆœ€่ฟ‘ 3 ๅคฉๅ†…่ฟ›่กŒไธญ็š„ไปปๅŠกๅˆ—่กจ๏ผŒๅธฎๅŠฉๆขๅคไธŠไธ‹ๆ–‡ใ€‚

Args: params (InitSessionInput): ๅŒ…ๅซ๏ผš - project_name (Optional[str]): ้กน็›ฎๅ็งฐ่ฟ‡ๆปค๏ผŒ็ฒพ็กฎๅŒน้… - branch_name (Optional[str]): ๅˆ†ๆ”ฏๅ็งฐ่ฟ‡ๆปค๏ผŒ็ฒพ็กฎๅŒน้…

Returns: Dict: {"success": bool, "data": List[Dict], "prompt": str}

Inputs: params (required). Returns: result

list_recent_sessionsA
Read-onlyIdempotent

ๅˆ—ๅ‡บๆœ€่ฟ‘็š„ไผš่ฏๆ‘˜่ฆ๏ผŒๆ”ฏๆŒๆŒ‰้กน็›ฎๅ’Œๅˆ†ๆ”ฏ่ฟ‡ๆปคใ€‚

Args: params (ListRecentSessionsInput): ๅŒ…ๅซ๏ผš - limit (int): ๆœ€ๅคง่ฟ”ๅ›žๆกๆ•ฐ๏ผŒ้ป˜่ฎค 10 - project_name (Optional[str]): ้กน็›ฎๅ็งฐ่ฟ‡ๆปค๏ผŒ็ฒพ็กฎๅŒน้… - branch_name (Optional[str]): ๅˆ†ๆ”ฏๅ็งฐ่ฟ‡ๆปค๏ผŒ็ฒพ็กฎๅŒน้…

Returns: Dict: {"success": bool, "data": List[Dict]}

Inputs: params (required). Returns: result

maintenanceA
Idempotent

ๆ‰ง่กŒๆ•ฐๆฎๅบ“็ปดๆŠค๏ผš้‡ๅปบ FTS5 ๅ…จๆ–‡็ดขๅผ•ใ€ๅŽ‹็ผฉๆ•ฐๆฎๅบ“๏ผŒๅนถๆŒไน…ๅŒ–ๅ‘้‡ๅญ˜ๅ‚จใ€‚

Returns: Dict: {"success": bool, "message": str}

Inputs: no named parameters. Returns: result

save_summaryA

ไฟๅญ˜ไผš่ฏๆ‘˜่ฆๅˆฐๆ•ฐๆฎๅบ“๏ผŒๅŒๆญฅๆ›ดๆ–ฐๅ…จๆ–‡็ดขๅผ•ๅ’Œๅ‘้‡็ดขๅผ•ใ€‚

Args: params (SaveSummaryInput): ๅŒ…ๅซ๏ผš - session_id (str): ๅ”ฏไธ€ไผš่ฏ ID๏ผŒไธๅฏ้‡ๅค - task_title (str): ไปปๅŠกๆ ‡้ข˜ - summary_content (str): ๆ‘˜่ฆๆญฃๆ–‡ๅ†…ๅฎน - status (TaskStatus): ไปปๅŠก็Šถๆ€๏ผŒ้ป˜่ฎค completed - next_steps (Optional[str]): ไธ‹ไธ€ๆญฅ่ฎกๅˆ’ - tags (Optional[str]): ๆ ‡็ญพ๏ผŒ้€—ๅทๅˆ†้š” - module (Optional[str]): ๆ‰€ๅฑžๆจกๅ— - file_paths (Optional[str]): ๆถ‰ๅŠๆ–‡ไปถ่ทฏๅพ„๏ผŒ้€—ๅทๅˆ†้š” - project_name (Optional[str]): ้กน็›ฎๅ็งฐ - branch_name (Optional[str]): ๅˆ†ๆ”ฏๅ็งฐ

Returns: Dict: {"success": bool, "message": str}

Inputs: params (required). Returns: result

search_summariesB
Read-onlyIdempotent

ๆœ็ดขไผš่ฏๆ‘˜่ฆ๏ผŒๆ”ฏๆŒๅ…ณ้”ฎ่ฏใ€ๆ ‡็ญพใ€ๆจกๅ—ใ€็Šถๆ€ใ€้กน็›ฎใ€ๅˆ†ๆ”ฏ่ฟ‡ๆปค๏ผŒไปฅๅŠ FTS5 ๅ…จๆ–‡ๆฃ€็ดขๅ’Œๅ‘้‡่ฏญไน‰ๆฃ€็ดขใ€‚

Args: params (SearchSummariesInput): ๅŒ…ๅซ๏ผš - query (Optional[str]): ๆœ็ดขๅ…ณ้”ฎ่ฏ - tags (Optional[str]): ๆ ‡็ญพ่ฟ‡ๆปค๏ผŒๆจก็ณŠๅŒน้… - module (Optional[str]): ๆจกๅ—่ฟ‡ๆปค๏ผŒๆจก็ณŠๅŒน้… - status (Optional[TaskStatus]): ็Šถๆ€่ฟ‡ๆปค๏ผŒ็ฒพ็กฎๅŒน้… - project_name (Optional[str]): ้กน็›ฎๅ็งฐ่ฟ‡ๆปค๏ผŒ็ฒพ็กฎๅŒน้… - branch_name (Optional[str]): ๅˆ†ๆ”ฏๅ็งฐ่ฟ‡ๆปค๏ผŒ็ฒพ็กฎๅŒน้… - use_fts (bool): ๆ˜ฏๅฆไฝฟ็”จ FTS5 ๅ…จๆ–‡ๆฃ€็ดข๏ผŒ้ป˜่ฎค False - use_vector (bool): ๆ˜ฏๅฆไฝฟ็”จๅ‘้‡่ฏญไน‰ๆฃ€็ดข๏ผŒ้ป˜่ฎค False - limit (int): ๆœ€ๅคง่ฟ”ๅ›žๆกๆ•ฐ๏ผŒ้ป˜่ฎค 10

Returns: Dict: {"success": bool, "data": List[Dict]}

Inputs: params (required). Returns: result

search_summaries_ftsA
Read-onlyIdempotent

ไฝฟ็”จ FTS5 ๅ…จๆ–‡็ดขๅผ•ๆœ็ดขไผš่ฏๆ‘˜่ฆ๏ผŒ้€‚ๅˆ็ฒพ็กฎๅ…ณ้”ฎ่ฏๅŒน้…ๅœบๆ™ฏใ€‚

Args: params (SearchSummariesFtsInput): ๅŒ…ๅซ๏ผš - query (str): ๅ…จๆ–‡ๆฃ€็ดขๅ…ณ้”ฎ่ฏ๏ผŒๆ”ฏๆŒ FTS5 ๆŸฅ่ฏข่ฏญๆณ• - project_name (Optional[str]): ้กน็›ฎๅ็งฐ่ฟ‡ๆปค๏ผŒ็ฒพ็กฎๅŒน้… - branch_name (Optional[str]): ๅˆ†ๆ”ฏๅ็งฐ่ฟ‡ๆปค๏ผŒ็ฒพ็กฎๅŒน้… - status (Optional[TaskStatus]): ็Šถๆ€่ฟ‡ๆปค๏ผŒ็ฒพ็กฎๅŒน้… - limit (int): ๆœ€ๅคง่ฟ”ๅ›žๆกๆ•ฐ๏ผŒ้ป˜่ฎค 10

Returns: Dict: {"success": bool, "data": List[Dict]}

Inputs: params (required). Returns: result

update_summaryA
Idempotent

ๆ›ดๆ–ฐๅทฒๆœ‰ไผš่ฏๆ‘˜่ฆ็š„็Šถๆ€ๆˆ–ๅ†…ๅฎน๏ผŒๅŒๆญฅๆ›ดๆ–ฐๅ…จๆ–‡็ดขๅผ•ใ€‚

Args: params (UpdateSummaryInput): ๅŒ…ๅซ๏ผš - session_id (str): ่ฆๆ›ดๆ–ฐ็š„ไผš่ฏ ID - new_status (Optional[TaskStatus]): ๆ–ฐ็Šถๆ€ - updated_content (Optional[str]): ๆ–ฐ็š„ๆ‘˜่ฆๅ†…ๅฎน

Returns: Dict: {"success": bool, "message": str}

Inputs: params (required). Returns: result

weekly_reviewA
Read-onlyIdempotent

็”Ÿๆˆๆœฌๅ‘จ้กน็›ฎๅ‘จๆŠฅ๏ผŒๆฑ‡ๆ€ปๅฎŒๆˆไปปๅŠกใ€ๅ…ณ้”ฎๅ†ณ็ญ–ๅ’Œไธ‹ไธ€ๆญฅๅปบ่ฎฎใ€‚

Args: params (WeeklyReviewInput): ๅŒ…ๅซ๏ผš - project_name (Optional[str]): ้กน็›ฎๅ็งฐ่ฟ‡ๆปค๏ผŒ็ฒพ็กฎๅŒน้… - branch_name (Optional[str]): ๅˆ†ๆ”ฏๅ็งฐ่ฟ‡ๆปค๏ผŒ็ฒพ็กฎๅŒน้…

Returns: Dict: {"success": bool, "data": {"report": str}}

Inputs: params (required). Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelogโ€ฆ

    TDQS

    A3.8/5.0

    Scored across 10 tools

    Disambiguation4/5

    Most tools serve distinct purposes, but search_summaries and search_summaries_fts overlap significantly, potentially confusing an agent about which to use for searching summaries.

    Naming Consistency4/5

    Names mostly follow verb_noun pattern (add_decision, save_summary) but include a few outliers like maintenance (noun) and longer phrases like get_summary_by_id, deviating from strict consistency.

    Tool Count5/5

    With 10 tools covering session initialization, CRUD, search, maintenance, and reporting, the count is well-scoped for an AI memory server without being overwhelming.

    Completeness3/5

    Covers saving, retrieving, updating, and searching summaries, but lacks delete functionality and has no dedicated tools for retrieving or removing decisions, leaving notable gaps.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Provides persistent memory for AI coding agents through the Model Context Protocol, enabling them to store and retrieve project knowledge across sessions.
      27 npm
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Persistent, searchable memory for AI agents over the Model Context Protocol, enabling memory storage, full-text search with BM25 ranking, and retrieval across sessions.
      10 npm
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      A standalone memory service that provides persistent storage for AI assistants via the Model Context Protocol.
      MIT