MCP Roo Memory
Persistent, graph-based memory for Roo Code via the Model Context Protocol, enabling structured knowledge management with semantic search and context window control.
README
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
⚠️ 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
LICENSEfor 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:
| Container | What it does |
|---|---|
cortex-qdrant |
Vector database (port 6333) |
cortex-mcp |
Cortex 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
VSCodiumwithCodein 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()andgraph_add_node()— always write to your project's workspacevector_search()withoutworkspace_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
| Problem | How Cortex solves it |
|---|---|
| Flat memory — facts are stored as unrelated chunks | Fractal graph — tasks decompose into subtasks, facts connect to decisions, entities index files |
| Context window overflow — everything grows unbounded | Desktop Viewport — Hot (always loaded) / Cold (on focus) / Archive (search only) tiers |
| No navigation — can't walk a reasoning chain | Graph traversal — follow supersedes, derives_from, leads_to relations like a path |
| Stale facts linger — old decisions pollute context | Mutation 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:
- Graph (SQLite) — who relates to who, what decomposes into what
- Vector (Qdrant) — what does this mean, what's semantically similar
- 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 / Dir | Purpose |
|---|---|
custom_instructions.md |
Cortex bootstrap — mandatory sequence, core principles |
mcp.json |
Reference 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
| Tool | What it does |
|---|---|
desktop_open |
Open/restore a workspace session |
desktop_focus |
Bring a node into hot context |
desktop_history |
Get navigation history for a workspace |
graph_add_node |
Store any knowledge: entity, fact, decision, task... |
graph_get_node |
Retrieve a node with its relations |
graph_add_relation |
Create a relation between two nodes |
graph_traverse |
Walk the graph from a starting node |
graph_walk |
Walk along a reasoning chain |
graph_decompose |
Break a task into structured subtasks |
graph_update_node |
Update a node's data in-place |
graph_supersede |
Replace outdated knowledge (keeps history) |
graph_delete_node |
Delete a node and its vector |
vector_search |
Find things by meaning, across 50+ languages |
vector_store |
Store text with automatic vectorization |
graph_search |
Hybrid: semantic + graph subgraph expansion |
temporal_walk |
Chronological graph traversal (time axis) |
session_timeline |
Flat timeline of all events in a session |
| That's all 17 tools | See full list in CONCEPT.md §8 |
Configuration
All via CORTEX_* environment variables:
| Variable | Default | Description |
|---|---|---|
CORTEX_DB_PATH |
cortex.db |
SQLite database path |
CORTEX_QDRANT_HOST |
localhost |
Qdrant host |
CORTEX_QDRANT_PORT |
6333 |
Qdrant port |
CORTEX_QDRANT_TIMEOUT |
30 |
Connection timeout (s) |
CORTEX_COLLECTION_NAME |
cortex_memory |
Qdrant collection name |
CORTEX_EMBEDDING_MODEL |
sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 |
Embedding model (50+ languages) |
CORTEX_ARCHIVE_DAYS_THRESHOLD |
7 |
Days before auto-archive |
CORTEX_DESKTOP_HOT_LIMIT |
5 |
Max hot nodes in viewport |
CORTEX_DESKTOP_HISTORY_LIMIT |
10 |
Max 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
| Document | What you'll find |
|---|---|
CONCEPT.md |
Full philosophy, data model, node taxonomy (17 types), relation taxonomy (22 types), SQL schema |
ADR-001 |
Fractal memory architecture decision |
ADR-002 |
SQLite + JSON for graph instead of Neo4j/Cayley |
ADR-003 |
Qdrant for vectors (existing) |
ADR-004 |
fastembed for embeddings (paraphrase-multilingual-MiniLM-L12-v2) |
ADR-005 |
Desktop Viewport — context window strategy |
ADR-006 |
Knowledge evolution: update / supersede / stale |
ADR-007 |
Regression search: meaning → context → files |
ADR-008 |
Temporal layer — time as first-class citizen |
CHANGELOG.md |
Project release history |
CONTRIBUTING.md |
Development 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), config (19), database (26), graph (19), desktop (14), vector (19), server (19), integration (3) — 136+ total.
See CONTRIBUTING.md for guidelines.
License
MIT © 2026
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.