Amem
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@AmemRecall the key decisions from the last design review."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Amem — Agent MEMory
Self-hosted, local-first knowledge & memory for AI agents.
Amem is a single binary/container that gives your agents (Codex, Claude Code, Cursor, …) a shared, persistent knowledge graph — so they stop re-explaining themselves, stop hallucinating from stale context, and stop wasting tokens on duplicate memory. The LLM does the curation dirty-work (distill, cross-link, organize, keep it consistent); you browse and steer. The knowledge base snowballs.
It is the open, self-hostable answer to llm-wiki / obsidian-wiki / vendor lock-in: we provide the service, your data is yours (local SQLite, fully exportable, OKF-compatible).
Why
Reduce context waste — recall returns a compact, cited context block within a token budget instead of raw history; dedup skips re-storing known knowledge.
Reduce hallucination — answers ground on units with citations; stable conclusions ("crystals") require ≥3 independent sources.
Reduce duplicate data — embedding-based dedup + merge across sessions and tools.
LLM as librarian, not search engine — it maintains the knowledge base for you: summarizing, cross-referencing, classifying, keeping it consistent — continuously, in the background.
Data sovereignty — runs locally, stores in
amem.dbon your disk, exports to JSON or an OKF markdown bundle anytime.
Related MCP server: ShelbyMCP
Features
AI-first storage: a knowledge graph (units = nodes, typed links = edges), not markdown files. Markdown is only an export format (OKF).
Three memory forms: Trace (raw) → Unit (atomic, 8 types) → Crystal (cross-validated).
Zones (project partitions): knowledge is auto-routed into
inbox/shared/personal/projectzones under each workspace — organized by project and access-isolated per account (A never sees B's private zone; recall never crosses zones by default).Auto-organization: distillation, dedup/merge, link (cross-reference) generation, contradiction detection, crystal promotion, decay/forgetting.
Working memory: a daily compact briefing of the most relevant knowledge (attention prefetch).
MCP server: read/write the graph from Codex, Claude Code, Cursor, and any MCP client.
REST API: full CRUD + search + recall + import/export + stats.
Web dashboard: interactive graph, hybrid search, trace viewer, review queue, stats.
Self-contained: zero-config offline mode (deterministic embedder, no network); drop in an OpenAI-compatible LLM/embedding endpoint for semantic quality.
Web UI routes
The dashboard is a real URL-routed SPA (no hash routing) — every tab is a deep-linkable path:
Route | View |
| live write/recall feed (default) |
| stats & memory metrics |
| interactive knowledge graph |
| hybrid search / recall |
| atomic memory units |
| unit detail (deep-linkable; graph nodes & list rows open this) |
| raw ingestion traces |
| daily working-memory briefing |
| curation review queue |
| zone management (list, create, membership, auto-route) |
| auth, workspaces, AI providers, PATs, agent (MCP) connection |
Legacy /#/graph-style hash links are automatically redirected to the path routes. Server-side SPA fallback means any of these URLs can be opened, refreshed, or shared directly.
Quick start
One-command Docker (recommended)
docker compose -f docker/docker-compose.yml up --build -d
# open http://localhost:8321Pre-built images are published to GHCR on every tag:
docker run -d --name amem -p 8321:8321 -v "$(pwd)/data:/data" \
ghcr.io/fuyucn/amem:v0.2.0Set AMEM_EMBEDDING_BASE_URL / AMEM_LLM_BASE_URL (+ model/key) in your env for semantic + LLM distillation. Works offline out of the box.
Setup wizard (detect → plan → apply → verify)
pnpm setup # or: node tools/amem-setup.mjs all
node tools/amem-setup.mjs detect | plan | apply | verifyThe wizard checks the running service, wires a Personal Access Token into
~/.codex/config.toml, installs the Stop/SessionEnd ingest hook, and verifies the
MCP OAuth challenge (401 + WWW-Authenticate) plus a PAT-authenticated MCP session.
Run node tools/amem-setup.mjs verify any time to confirm the install is healthy.
Local (dev)
pnpm install
pnpm build
pnpm --filter @amem/server start # API + web on http://127.0.0.1:8321AI providers (Settings → AI Providers)
Amem's automatic organization (distillation on ingest, link generation, curation summaries, contradiction review) is powered by an OpenAI-compatible LLM endpoint. Configure it in the Web UI — no env vars or restarts needed:
Open Settings → AI Providers and pick a quick-fill preset (DeepSeek, OpenAI, OpenRouter, Ollama, or a custom local gateway such as an opencode Go service, vLLM, or LM Studio).
Fill
name,base URL,model, and (optional)API key, then Save provider.Hit Test to probe
/models(falls back to a 1-token chat completion), then Activate. The LLM is hot-swapped — every AI feature uses it immediately.
Priority: active provider → AMEM_LLM_* env → offline (mock). Keys are
AES-256-GCM encrypted at rest (derived from AMEM_AUTH_SECRET) and never
returned by the API — only hasKey + a 6-char prefix are exposed.
Semantic search quality uses a separate embedding endpoint (env only, since many chat providers don't offer embeddings):
AMEM_EMBEDDING_MODE=api AMEM_EMBEDDING_BASE_URL=http://127.0.0.1:11434/v1 \
AMEM_EMBEDDING_MODEL=nomic-embed-text AMEM_EMBEDDING_API_KEY=... \
pnpm --filter @amem/server startWithout any LLM or embedding config, Amem runs fully offline with a deterministic embedder and a mock LLM — every feature works, semantic quality is just lower.
Knowledge graph hygiene
Auto-linking is degree-bounded so the graph stays readable and cheap to
traverse: every unit keeps at most maxLinksPerUnit auto links (default 8,
set via AMEM_MAX_LINKS_PER_UNIT), chosen by confidence. Typed relations
(supports / part_of / extends / …) are only assigned when two units are
semantically similar — the weaker shared-tag signal only ever produces
related_to, so a generic tag can't mass-produce fake typed hubs. The graph
API also caps related_to edges per node for rendering (12/node), keeping the
force layout readable even on large histories.
Existing databases that predate these caps can be repaired in one call (API
POST /api/v1/links/prune with { "maxPerUnit": 8 }, MCP prune_links):
curl -X POST -H "Authorization: Bearer $AMEM_PAT" -H "Content-Type: application/json" \
-d '{"maxPerUnit":8,"dryRun":true}' http://127.0.0.1:8321/api/v1/links/pruneRun with dryRun: true first to preview { examined, kept, deleted }, then
repeat without it. Manual links and importer-created part_of edges are never
touched.
Codex as first-class client
See docs/CODEX.md. Open the Web UI Activity tab to watch new knowledge and recalls live.
Connect an agent (write + read)
Claude Code .mcp.json:
{
"mcpServers": {
"amem": { "command": "node", "args": ["/path/to/amem/packages/mcp/dist/cli.js"] }
}
}Codex / Cursor / any MCP client: point at the same command, or at http://127.0.0.1:8321/mcp (Streamable HTTP). See docs/MCP_TOOLS.md.
Typical loop:
Start of session:
working_memory+recall "active project"→ warm context.As you work:
save_unitfor decisions/plans/procedures.End of session:
ingestwith the transcript → Amem distills, dedups, and links.Background consolidation keeps the graph consistent and growing.
REST API
See docs/API.md. Base /api/v1 on 127.0.0.1:8321 by default. Auth modes:
None (localhost default) —
AMEM_AUTH_ENABLED=false, no bearer required.PAT — set
AMEM_API_TOKEN(or use a minted PAT) and sendAuthorization: Bearer amem_pat_*. Legacy single-token mode stays behindAMEM_ALLOW_LEGACY_API_TOKEN=true.OAuth 2.1 —
AMEM_AUTH_ENABLED=trueenables the full authorization flow:.well-known/oauth-authorization-server,authorize+ PKCE (S256),token/refresh(rotation + reuse detection),revoke. Web UI has a login consent page; MCP clients follow the standard401 → WWW-Authenticatedance.
Auth, scopes & workspaces
Amem separates who you are (user / login session / PAT) from what you can touch (workspace + scope). Requests are denied server-side before any storage access — scope checks are not a UI nicety.
First run onboarding
When authentication is enabled (AMEM_AUTH_ENABLED=true), the web UI gates on a
dedicated /login page with a three-step wizard:
Account — sign in, or bootstrap the first admin on a fresh install, or paste an existing PAT (Codex / CLI style).
Workspace — pick an existing isolated namespace or create one (e.g.
acme-prod,personal).Agent token — mint a least-privilege PAT (
read writescoped to that workspace) and copy the ready-to-paste~/.codex/config.tomlsnippet.
The same actions are available anytime under Settings.
Scopes:
read,write,admin, plus per-workspacews:<slug>:read/ws:<slug>:write. Every token carries a scope set; MCP and REST enforce it on every call.Workspaces: isolated namespaces (e.g.
acme-prod,acme-labs,personal). Units, links, traces, and activity are stored and queried inside one workspace only. Users are members with roles (owner/admin/member/reader).Tokens: PATs (
amem_pat_*, signed, TTL + scope-capped) for agents/CLI; access tokens (amem_atk_*) from the OAuth flow; refresh tokens rotate on every use with replay detection.Posture: a workspace can only tighten (never loosen) the instance default, e.g. force auth on even if the instance runs open on localhost.
Full threat model, schema, and setup-wizard design:
docs/AUTH_WORKSPACES.md.
Docs
docs/ARCHITECTURE.md— design & layeringdocs/DATA_MODEL.md— graph schemadocs/API.md— REST APIdocs/MCP_TOOLS.md— MCP toolsdocs/AUTH_WORKSPACES.md— OAuth / PAT / scopes / workspacesdocs/CODEX.md— Codex integration + Stop hook setupdocs/DEPLOYMENT.md— Docker / compose / config referencedocs/DEVELOPMENT.md— build, test, rundocs/BENCHMARK.md— OmniMemEval / LoCoMo results + real-store recall evaldocs/storage-optimization.md— consolidate/linkgen/storage optimizations + quantified benchmarksdocs/TENCENTDB_REFERENCE.md— design reference vs TencentDB memory enginedocs/OPERATIONS.md— backup / restore / upgrade / monitoring
Self-contained HTML evaluation reports: docs/bench-report-amem-v3.html
(LoCoMo run) and docs/eval-recall-report.html (real-store recall eval).
Security: SECURITY.md (threat model + hardening checklist).
Community: CODE_OF_CONDUCT.md ·
CONTRIBUTING.md. Releases: CHANGELOG.md.
Contributing
See CONTRIBUTING.md for setup, testing guidelines, and the PR process.
License
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
Persistent, portable memory for AI assistants — your private memory graph, from any MCP client.
- memnodeOAuthdev.memnode
Persistent, inspectable memory for AI agents with lineage, correction, and a hosted MCP endpoint.
Persistent memory for AI agents. Semantic search, memory graph, W3C DID identity.
Graph-native persistent memory for AI agents — 33 MCP tools, zero-LLM writes.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceA universal MCP server providing persistent, structured memory through a knowledge graph with graph storage, semantic vector search, and multi-hop traversal for AI agents and IDEs.1MIT
- AlicenseNot gradedqualityBmaintenanceKnowledge-graph memory server for MCP-compatible AI tools, providing persistent, connected memory with typed relationships and auto-consolidation.25 npmMIT
- AlicenseNot gradedqualityCmaintenanceA local-first compiled knowledge graph MCP server that provides structured memory for AI agents with full-text search, vector embeddings, and timeline tracking.619 npm8MIT
- AlicenseNot gradedqualityCmaintenanceSelf-hosted, governed long-term memory and knowledge-graph server for AI agents with access control, hybrid retrieval, and typed graph linking.AGPL 3.0