Cross-tool MCP memory server with a local dashboard for resuming work across long-running agent sessions.
When a conversation hits context limits, Continuum stores thread history locally and produces mode-sized handoffs so a new session can continue with continue build, resume build, or /continuum instead of manually copying prior context.
- Node.js 22.5+
- npm (workspaces monorepo)
Optional: OPENAI_API_KEY or ANTHROPIC_API_KEY for LLM-backed summarization. Without either key, summarization falls back to a local heuristic merge.
npm install
npm run build
chmod +x .cursor/hooks/continuum-capture.shnpm run build compiles the MCP server and embeds the dashboard into packages/continuum-mcp/dist/dashboard/.
Continuum is off by default. Enable it before capture or handoff tools will return a disabled status.
Option A — Dashboard
- Start the server (see Cursor below, or run
node packages/continuum-mcp/dist/index.js). - Open http://localhost:3847 and turn on Continuum in Settings.
Option B — MCP tool
Call continuum_set_enabled with { "enabled": true }.
The workspace ships with .cursor/mcp.json preconfigured:
{
"command": "node",
"args": ["packages/continuum-mcp/dist/index.js"],
"env": { "CONTINUUM_DATA_DIR": "${userHome}/.continuum" }
}After npm run build, reload MCP in Cursor settings. Cursor hooks in .cursor/hooks.json append turns automatically when Continuum is enabled and finalize on session end.
Project-level MCP config lives in .mcp.json (same server definition as Cursor). From the repo root:
claude mcp listEnsure the project is trusted and reload MCP after building.
Add the server to ~/.codex/config.toml or .codex/config.toml. See codex-mcp.example.toml for a template — use absolute paths for args and CONTINUUM_DATA_DIR.
| Tier | When | Cost |
|---|---|---|
| Capture | Hooks or memory_commit append raw turns |
No LLM |
| Summarize | memory_commit with finalize: true, or session-end hook |
Incremental LLM/heuristic over new turns only |
| Handoff | memory_get_handoff |
Mode-sized output; concise truncates without an extra LLM call |
Modes (concise | medium | detailed) control handoff size. Set per thread or globally via memory_set_mode.
| Tool | Purpose |
|---|---|
memory_commit |
Append turns; use finalize: true to summarize |
memory_get_handoff |
Return a handoff for resuming work in a new session |
memory_list_threads |
List stored threads |
memory_get_thread |
Thread detail with turns and summary |
memory_set_mode |
Set concise / medium / detailed |
continuum_set_enabled |
Turn capture and handoff on or off |
continuum_open_dashboard |
Return the dashboard URL |
- Production: served by the MCP process at http://localhost:3847 after
npm run build. - Development UI: run
npm run dev:dashboardfor Vite hot reload (proxies/apito port 3847). In a separate terminal, runnode packages/continuum-mcp/dist/index.jsfor the API.
Browse threads, view timelines, trigger summarization, and copy handoffs from the dashboard.
# MCP server with watch (TypeScript)
npm run dev -w continuum-mcp
# Dashboard dev server
npm run dev:dashboard
# HTTP API only (no MCP stdio)
node packages/continuum-mcp/dist/index.js http-onlypackages/continuum-mcp/ MCP server, HTTP API, embedded dashboard
packages/dashboard/ Vite dashboard UI
.cursor/mcp.json Cursor MCP config
.cursor/hooks/ Turn capture hooks
~/.continuum/ Local data (config.json, data.db)
Override the data directory with CONTINUUM_DATA_DIR. Override the API port with CONTINUUM_PORT or config.json.
MCP shows "Errored" in Cursor
Usually port 3847 is already in use (for example, a leftover http-only process). Free the port and reload MCP:
lsof -ti :3847 | xargs killTools return "disabled"
Call continuum_set_enabled({ enabled: true }) or enable Continuum in the dashboard Settings.
Dashboard shows a placeholder page
Run npm run build to embed the dashboard assets into packages/continuum-mcp/dist/dashboard/.
Hooks not capturing turns
Confirm Continuum is enabled, packages/continuum-mcp/dist/index.js exists after build, and .cursor/hooks/continuum-capture.sh is executable.
All data is stored locally under ~/.continuum/ by default:
config.json— enabled flag, port, default modedata.db— threads, turns, summaries
No cloud sync. Set CONTINUUM_DATA_DIR to use a different location.