Install
$ agentstack add mcp-evermemoai-evermemo ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
evermemo
[](https://github.com/Evermemoai/evermemo/actions/workflows/ci.yml) [](https://github.com/Evermemoai/evermemo/releases) [](https://pkg.go.dev/github.com/Evermemoai/evermemo) [](https://goreportcard.com/report/github.com/Evermemoai/evermemo) [](LICENSE)
A tiny, universal memory engine for humans and AI agents.
One small Go binary. No external services. It works as a CLI, an HTTP API, and an MCP server, so anything can remember things: your terminal, your scripts, Claude Code, Cursor, or any other agent. Run one as a hub and every agent in your organization shares the same trusted knowledge.
┌──────────────┐ ┌─────────────┐ ┌──────────────────┐
│ You (CLI) │ │ Any app │ │ AI agents (MCP) │
│ evermemo add │ │ HTTP API │ │ Claude, Cursor │
└──────┬───────┘ └──────┬──────┘ └────────┬─────────┘
└──────────────────┼──────────────────┘
┌───────▼──────┐
│ evermemo │ single binary
│ SQLite+FTS5 │ BM25 + semantic search
└──────────────┘
Install
Prebuilt binaries (macOS, Linux, Windows, amd64/arm64): grab one from Releases.
Go:
go install github.com/Evermemoai/evermemo@latest
Docker:
docker run -v evermemo-data:/data -p 7777:7777 ghcr.io/evermemoai/evermemo:latest
From source:
git clone https://github.com/Evermemoai/evermemo.git && cd evermemo
go build -o evermemo .
For production hubs, see [deploy/](deploy/) for systemd and Docker Compose examples, and [SECURITY.md](SECURITY.md) for the hardening checklist.
CLI
evermemo add "User prefers dark mode and tabs over spaces" --tags prefs,ui
echo "Deploy runs at 6pm UTC" | evermemo add --tags ops --ttl 7d # expires in 7 days
evermemo search "deploy time"
evermemo list
evermemo get mem_a1b2c3d4e5f60718
evermemo update mem_a1b2c3d4e5f60718 "Deploy runs at 7pm UTC now"
evermemo delete mem_a1b2c3d4e5f60718
evermemo export > memories.jsonl # backup / migrate
evermemo import `)
to trace how knowledge evolved. Links come back on `GET /v1/memories/{id}`.
- **Namespace ACLs**: restrict which agents can read or write which namespaces:
```sh
EVERMEMO_ACL='finbot:finance:rw,hrbot:hr:rw,hrbot:finance:r,auditor:*:r' \
EVERMEMO_AGENT_KEYS='finbot:key1,hrbot:key2,auditor:key3' \
evermemo serve
Enforced on both the REST API and the /mcp transport. If no ACL is set, access is open.
Production hub: TLS, key rotation, backups
# HTTPS (or terminate TLS in Caddy/nginx in front)
evermemo serve --cert cert.pem --key key.pem
# Hot-reloading keys file: add/rotate/revoke agent keys without restart
cat > keys.txt <<EOF
# agent:key, one per line
claude:key1
cursor:key2
EOF
evermemo serve --keys-file keys.txt # edits picked up automatically
# Consistent online snapshot (safe while serving; uses SQLite VACUUM INTO)
evermemo backup /backups/evermemo-$(date +%F).db
Note: bearer keys travel in cleartext over plain HTTP. Always use TLS (built-in or a reverse proxy) when the hub is reachable beyond localhost.
Memory consolidation (LLM-powered hygiene)
Over time memories accumulate duplicates and contradictions. Point evermemo at a chat LLM and let it clean up:
export EVERMEMO_LLM_URL=http://localhost:11434 # Ollama; or any OpenAI-compatible API
evermemo consolidate --ns default --dry-run # see the plan
evermemo consolidate --ns default # apply it
The LLM merges duplicates, resolves contradictions (newest wins), and archives stale memories. Nothing is deleted: sources are archived (hidden from search, kept for audit) and linked to their replacement with derived_from/supersedes.
Auto-recall proxy (memory without tools)
Put evermemo between your app and the LLM API, and relevant memories are injected into every chat request automatically. No search_memory calls needed:
evermemo proxy --target https://api.openai.com --addr :8788
# then point your SDK at http://localhost:8788 instead of api.openai.com
Works with OpenAI-style (/v1/chat/completions) and Anthropic-style (/v1/messages) APIs, streams SSE responses through, and passes all other routes untouched. Use --remote https://your-hub:7777 to recall from the shared hub.
Configuration
| Env var | Default | Description | | ------------------ | ------------------------ | -------------------------------- | | EVERMEMO_DB | ~/.evermemo/evermemo.db | Database file path | | EVERMEMO_API_KEY | (unset) | If set, HTTP API requires bearer auth | | EVERMEMO_AGENT_KEYS | (unset) | Per-agent keys: alice:key1,bob:key2 | | EVERMEMO_RATE | (unset) | Max requests/min per caller (0/unset = off) | | EVERMEMO_REMOTE | (unset) | Central hub URL for mcp mode | | EVERMEMO_AGENT | (unset) | Agent name recorded as provenance | | EVERMEMO_EMBED_URL | (unset) | Embedding provider URL (enables semantic search) | | EVERMEMO_EMBED_MODEL | provider default | Embedding model name | | EVERMEMO_EMBED_API_KEY | (unset) | Key for OpenAI-compatible providers | | EVERMEMO_EMBED_PROVIDER | ollama | ollama or openai | | EVERMEMO_LLM_URL | (unset) | Chat LLM for consolidate | | EVERMEMO_LLM_MODEL | provider default | Chat model name | | EVERMEMO_LLM_API_KEY | (unset) | Key for OpenAI-compatible chat providers | | EVERMEMO_ACL | (unset) | Namespace ACLs: agent:ns:perm (r/rw, * wildcards) | | EVERMEMO_TLS_CERT / EVERMEMO_TLS_KEY | (unset) | TLS cert/key files for serve | | EVERMEMO_KEYS_FILE | (unset) | Hot-reloading agent keys file |
Every command also accepts --db to point at a specific database, and --ns/namespace to partition memories per project, per user, or per agent.
Why
- Small: one binary, one SQLite file, zero dependencies to run.
- Universal: CLI for humans, HTTP for any language, MCP for any agent.
- Fast: SQLite FTS5 with BM25 ranking; millisecond search on millions of rows.
- Yours: local-first, no cloud, no telemetry.
scpthe file to back it up.
Roadmap
- [x] Semantic (vector) search via optional embedding providers
- [x] Memory expiry / TTL
- [x] Import/export (JSONL)
- [x] Streamable HTTP MCP transport
- [ ] Web dashboard (browse, search, audit, graphs)
- [ ] Webhooks / change subscriptions (reactive memory)
- [ ] Local-first replicas with hub sync
Contributing
Contributions welcome, see [CONTRIBUTING.md](CONTRIBUTING.md). Found a security issue? Please follow [SECURITY.md](SECURITY.md).
License
[MIT](LICENSE)
Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: Evermemoai
- Source: Evermemoai/evermemo
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.