Local workspace memory for Claude Desktop.
Tessera
Every AI conversation produces knowledge. When the session ends, it's gone. Tessera keeps it.
One knowledge base for Claude Desktop, with an HTTP API for scripts and automation. Runs locally. No API keys, no Docker, no data leaving your machine.
pip install project-tessera
tessera setup
# Done. Claude Desktop now has persistent memory + document search.
Why Tessera over alternatives
| Tessera | Mem0 | Basic Memory | mcp-memory-service | |
|---|---|---|---|---|
| Works without API keys | Yes | No (needs OpenAI) | Yes | Partial |
| Works without Docker | Yes | No | Yes | No |
| Document search (40+ types) | Yes | No | Markdown only | No |
| ChatGPT integration (via tunnel) | Yes | No | No | No |
| Contradiction detection | Yes | No | No | No |
| Memory confidence scoring | Yes | No | No | No |
| Encrypted vault (AES-256) | Yes | No | No | No |
| HTTP API for non-MCP tools | 58 endpoints | Yes | No | Yes |
| Auto-learning from conversations | Yes | Yes | No | No |
| MCP tools | 58 | ~10 | ~15 | 24 |
The short version
Most memory tools store text and search it. Tessera does that, plus:
- HTTP API: 58 REST endpoints let scripts, ChatGPT (via tunnel + Custom GPT Actions), and local LLMs read and write the same knowledge base.
- Self-maintaining: finds contradictions between old and new memories, scores confidence by reinforcement frequency, flags stale knowledge, auto-merges near-duplicates.
- Zero infrastructure:
pip installand go. LanceDB and fastembed are embedded -- no Docker, no database server, no API keys. - Encrypted: set
TESSERA_VAULT_KEYand all memories are AES-256-CBC encrypted at rest.
Architecture
How search works (query path)
User asks: "What did we decide about the database?"
|
v
+-----------------------+
| Query Processing |
| Multi-angle decomp | "database decision"
| (2-4 perspectives) | "database", "decision"
+-----------------------+ "decision about database"
|
+-------------+-------------+
| |
v v
+------------------+ +------------------+
| Vector Search | | Keyword Search |
| (LanceDB) | | (FTS index) |
| 384-dim MiniLM | | BM25 scoring |
+------------------+ +------------------+
| |
+-------------+-------------+
|
v
+-----------------------+
| Reranking |
| 70% semantic weight | LinearCombinationReranker
| 30% keyword weight | + version-aware scoring
+-----------------------+
|
v
+-----------------------+
| Result Assembly |
| Dedup (content hash) | 2-pass deduplication
| Verdict labels | found / weak / none
| Cache (60s TTL) |
+-----------------------+
|
v
Top-K results with
confidence scores
How ingestion works (ingest path)
Documents: .md .pdf .docx .xlsx .py .ts .go ... (40+ types)
|
v
+-----------------------+
| File Type Router |
| Markdown, CSV, XLSX | Type-specific parsers
| Code, PDF, Images | with metadata extraction
+-----------------------+
|
v
+-----------------------+
| Chunking Engine |
| 1024 tokens/chunk | Se
Tools (3)
memory_writeStore information or decisions into the persistent knowledge base.memory_searchPerform hybrid vector and keyword search across stored memories and documents.document_ingestIndex local files or documents into the vector store.Environment Variables
TESSERA_VAULT_KEYEncryption key for AES-256-CBC storage at rest.Configuration
{"mcpServers": {"project-tessera": {"command": "tessera", "args": ["mcp"]}}}