Back to MCP Servers

Roo Memory

Persistent fractal graph memory for AI coding agents via MCP. Semantic vector search, hot/cold/archive context tiers, decision tracking, and Docker-based deployment with Qdrant.

knowledge-memorydockerdeploymentaiagent
By mcasdfgf
1Updated 1 month agoPythonMIT

Installation

npx -y mcp-roo-memory

Configuration

{
  "mcpServers": {
    "mcp-roo-memory": {
      "command": "npx",
      "args": ["-y", "mcp-roo-memory"]
    }
  }
}

How to use

  1. Run the installation command above (if needed)
  2. Open your Claude Code settings file (~/.claude/settings.json)
  3. Add the configuration to the mcpServers section
  4. Restart Claude Code to apply changes

MCP Roo Memory

Persistent, graph-based memory for Roo Code via the Model Context Protocol (MCP).

LLMs have a short memory. Every new conversation starts from scratch — context windows overflow, past decisions fade, and reasoning chains disappear.

MCP Roo Memory gives your AI agent a structured, persistent brain:

  • Graph memory — knowledge is not a flat dump, but a fractal graph of tasks, entities, facts, and decisions
  • Semantic search — find what matters by meaning, not keywords (50+ languages)
  • Context window control — hot/cold/archive tiers so you don't drown in tokens
  • Knowledge evolution — decisions can be superseded, facts can be updated, stale data gets archived
  • Temporal awareness — time as first-class citizen: chronological walks, session timelines, temporal vector filters

Python 3.11+ MIT Status Docker

⚠️ Disclaimer

This is an experimental project — a search for form and architecture. It works, it has tests, but treat it as a Proof of Concept (PoC). The software is provided "AS IS", without any warranty of any kind. Use it at your own risk. See LICENSE for details.


Quick Start

🐳 Docker (recommended)

Zero system dependencies — just Docker. Everything runs in containers; no Python, no venv, no pip.

1. Start the stack

git clone https://github.com/mcasdfgf/mcp-roo-memory.git
cd mcp-roo-memory
docker compose up -d

This starts two containers:

ContainerWhat it does
cortex-qdrantVector database (port 6333)
cortex-mcpCortex server (idle, waits for MCP connections)

2. Global MCP configuration

Add Cortex as a global MCP server for all your projects. The server is always running in Docker, so any project can connect.

Edit ~/.config/VSCodium/User/globalStorage/rooveterinaryinc.roo-cline/settings/mcp_settings.json (or the equivalent path for VS Code):

{
  "mcpServers": {
    "cortex": {
      "command": "docker",
      "args": ["exec", "-i", "cortex-mcp", "python3", "-m", "src.cortex"]
    }
  }
}

VSCode users: replace VSCodium with Code in the path above.

3. Project-level configuration (for workspace isolation)

If you want memory isolated per project, copy the reference .roo/ directory into your project:

cp -r ./mcp-roo-memory/.roo ./your-project/

Then edit .roo/mcp.json in your project and add --workspace your-project-name:

{
  "mcpServers": {
    "cortex": {
      "command": "docker",
      "args": [
        "exec", "-i", "cortex-mcp", "python3",
        "-m", "src.cortex", "--workspace", "your-project-name"
      ],
      "alwaysAllow": ["desktop_open", "graph_add_node", "vector_search", "graph_get_node",
                       "graph_add_relation", "graph_search", "desktop_focus",
                       "desktop_history", "graph_traverse", "graph_walk",
                       "graph_decompose", "graph_update_node", "graph_supersede",
                       "graph_delete_node", "vector_store",
                       "temporal_walk", "session_timeline"]
    }
  }
}

Replace your-project-name with a unique identifier — mcp-roo-memory, researcher, ai-pulse, etc.

How isolation works:

  • desktop_open() and graph_add_node() — always write to your project's workspace
  • vector_search() without workspace_id — searches across all projects (cross-project recall)
  • vector_search(workspace_id="project") — narrows search to one project

4. Done

Restart Roo Code. Your agent now has persistent memory — zero system pollution.


🏠 Native pip (advanced)

If you prefer running without Docker — or you're developing Cortex itself:

# Requirements: Python 3.11+
git clone https://github.com/mcasdfgf/mcp-roo-memory.git
cd mcp-roo-memory
python -m venv .venv
source .venv/bin/activate
pip install -e .

# Qdrant is still needed:
docker run -d --name qdrant -p 6333:6333 qdrant/qdrant

MCP config:

{
  "mcpServers": {
    "cortex": {
      "command": "python",
      "args": ["-m", "src.cortex"],
      "env": {
        "CORTEX_DB_PATH": "/path/to/cortex.db",
        "CORTEX_QDRANT_HOST": "localhost",
        "CORTEX_QDRANT_PORT": "6333"
      }
    }
  }
}

Problems This Solves

ProblemHow Cortex solves it
Flat memory — facts are stored as unrelated chunksFractal graph — tasks decompose into subtasks, facts connect to decisions, entities index files
Context window overflow — everything grows unboundedDesktop Viewport — Hot (always loaded) / Cold (on focus) / Archive (search only) tiers
No navigation — can't walk a reasoning chainGraph traversal — follow supersedes, derives_from, leads_to relations like a path
Stale facts linger — old decisions pollute contextMutation strategy — Update (typo fix) / Supersede (approach changed) / Stale-cascade (rework)
Keyword search fails — "auth implementation" doesn't find "JWT with RS256"Semantic vector search — multilingual embeddings (50+ languages) via Qdrant + fastembed
No time axis — can't answer "what happened in what order"Temporal layer — chronological walks, session timelines, temporal vector filters

Architecture

┌──────────────────────────────────────────────┐
│              MCP Client (Roo Code)            │
└──────────────────────┬───────────────────────┘
                        │ stdio (MCP protocol)
┌──────────────────────▼───────────────────────┐
│               CortexServer                     │
│         17 tools · 4 resources                 │
├──────────┬──────────┬──────────┬─────────────┤
│ Graph    │ Vector   │ Desktop  │ Database    │
│ CRUD,    │ Qdrant + │ Hot/     │ SQLite      │
│ traverse,│ fastembed│ Cold/    │ graph +     │
│ walk     │ semantic │ Archive  │ history     │
└──────────┴──────────┴──────────┴─────────────┘

Three layers of intelligence:

  1. Graph (SQLite) — who relates to who, what decomposes into what
  2. Vector (Qdrant) — what does this mean, what's semantically similar
  3. Desktop (viewport) — what fits in the context window right now

Using as Primary Roo Memory

Make Cortex your agent's default memory system by copying the .roo/ directory into your project:

# Copy reference config from this repo
cp -r ./mcp-roo-memory/.roo ./your-project/

The .roo/ directory contains ready-to-use reference configs:

File / DirPurpose
custom_instructions.mdCortex bootstrap — mandatory sequence, core principles
mcp.jsonReference MCP server config (edit --workspace for your project)
rules/Boot, save, templates, triggers — memory lifecycle
rules-architect/Memory rules for Architect mode
rules-ask/Memory rules for Ask mode
rules-code/Memory rules for Code mode
rules-coding-teacher/Memory rules for Coding Teacher mode
rules-debug/Memory rules for Debug mode
rules-documentation-writer/Memory rules for Documentation Writer mode
rules-orchestrator/Memory rules for Orchestrator mode
rules-project-research/Memory rules for Project Research mode

For deep understanding of the memory model, see CONCEPT.md.


Tools Overview

ToolWhat it does
desktop_openOpen/restore a workspace session
desktop_focusBring a node into hot context
desktop_historyGet navigation history for a workspace
graph_add_nodeStore any knowledge: entity, fact, decision, task...
graph_get_nodeRetrieve a node with its relations
graph_add_relationCreate a relation between two nodes
graph_traverseWalk the graph from a starting node
graph_walkWalk along a reasoning chain
graph_decomposeBreak a task into structured subtasks
graph_update_nodeUpdate a node's data in-place
graph_supersedeReplace outdated knowledge (keeps history)
graph_delete_nodeDelete a node and its vector
vector_searchFind things by meaning, across 50+ languages
vector_storeStore text with automatic vectorization
graph_searchHybrid: semantic + graph subgraph expansion
temporal_walkChronological graph traversal (time axis)
session_timelineFlat timeline of all events in a session
That's all 17 toolsSee full list in CONCEPT.md §8

Configuration

All via CORTEX_* environment variables:

VariableDefaultDescription
CORTEX_DB_PATHcortex.dbSQLite database path
CORTEX_QDRANT_HOSTlocalhostQdrant host
CORTEX_QDRANT_PORT6333Qdrant port
CORTEX_QDRANT_TIMEOUT30Connection timeout (s)
CORTEX_COLLECTION_NAMEcortex_memoryQdrant collection name
CORTEX_EMBEDDING_MODELsentence-transformers/paraphrase-multilingual-MiniLM-L12-v2Embedding model (50+ languages)
CORTEX_ARCHIVE_DAYS_THRESHOLD7Days before auto-archive
CORTEX_DESKTOP_HOT_LIMIT5Max hot nodes in viewport
CORTEX_DESKTOP_HISTORY_LIMIT10Max history entries

Project Structure

.
├── docker-compose.yml    ← Two services: cortex + qdrant
├── Dockerfile            ← Multi-stage, python:3.11-slim
├── .dockerignore
├── src/cortex/
│   ├── __init__.py    — Cortex factory (component assembly)
│   ├── __main__.py    — MCP server entry point (stdio)
│   ├── config.py      — Configuration (pydantic-settings)
│   ├── db.py          — DatabaseManager (SQLite)
│   ├── desktop.py     — DesktopManager (viewport + timeline)
│   ├── graph.py       — GraphManager (CRUD, navigation, mutation, temporal)
│   ├── models.py      — Pydantic models (Node, Relation, Viewport)
│   ├── server.py      — MCP server (17 tools, 4 resources)
│   └── vector.py      — VectorManager (Qdrant, embeddings, temporal filters)
└── tests/

Deep Dive

DocumentWhat you'll find
CONCEPT.mdFull philosophy, data model, node taxonomy (17 types), relation taxonomy (22 types), SQL schema
ADR-001Fractal memory architecture decision
ADR-002SQLite + JSON for graph instead of Neo4j/Cayley
ADR-003Qdrant for vectors (existing)
ADR-004fastembed for embeddings (paraphrase-multilingual-MiniLM-L12-v2)
ADR-005Desktop Viewport — context window strategy
ADR-006Knowledge evolution: update / supersede / stale
ADR-007Regression search: meaning → context → files
ADR-008Temporal layer — time as first-class citizen
CHANGELOG.mdProject release history
CONTRIBUTING.mdDevelopment guidelines

Development

# Native install (inside venv)
pip install -e .
pip install pytest pytest-asyncio

# Run all tests (188+ tests)
pytest tests/ -v

# With coverage
pytest tests/ --cov=src.cortex -v

Tests cover every component: models (17

View source on GitHub