besslframework-stack/project-tessera

🧠 Knowledge & Memory
0 Views
0 Installs

🐍 🏠 🍎 🪟 🐧 - Local workspace memory for Claude Desktop. Indexes your documents (Markdown, CSV, session logs) into a vector store with hybrid search, cross-session memory, auto-learn, and knowledge graph visualization. Zero external dependencies — fastembed + LanceDB, no Ollama or Docker required. 15 MCP tools.

Quick Install

One-Click IDE Configuration
claude_desktop_config.json
{
  "mcpServers": {
    "besslframework-stack-project-tessera": {
      "command": "npx",
      "args": [
        "-y",
        "besslframework-stack-project-tessera"
      ]
    }
  }
}
Or

Using an AI coding agent (Claude Code, Cursor, etc.)? Copy a ready-made prompt that tells it to fetch the setup instructions and install this server for you.

Documentation Overview

Tessera

PyPI version Downloads Tests Python License Website

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

TesseraMem0Basic Memorymcp-memory-service
Works without API keysYesNo (needs OpenAI)YesPartial
Works without DockerYesNoYesNo
Document search (40+ types)YesNoMarkdown onlyNo
ChatGPT integration (via tunnel)YesNoNoNo
Contradiction detectionYesNoNoNo
Memory confidence scoringYesNoNoNo
Encrypted vault (AES-256)YesNoNoNo
HTTP API for non-MCP tools58 endpointsYesNoYes
Auto-learning from conversationsYesYesNoNo
MCP tools58~10~1524

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 install and go. LanceDB and fastembed are embedded -- no Docker, no database server, no API keys.
  • Encrypted: set TESSERA_VAULT_KEY and 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    |    Sentence-boundary aware
                |  100 token overlap    |    Heading-preserving
                +-----------------------+
                            |
                            v
                +-----------------------+
                |   Local Embedding     |
                |  fastembed/ONNX       |    paraphrase-multilingual
                |  384 dimensions       |    MiniLM-L12-v2
                |  No API calls         |    101 languages
                +-----------------------+
                            |
              +-------------+-------------+
              |                           |
              v                           v
    +------------------+        +------------------+
    |    LanceDB       |        |     SQLite       |
    |  Vector storage  |        |  File metadata   |
    |  Columnar format |        |  Search analytics|
    |  Zero-config     |        |  Interaction log |
    +------------------+        +------------------+

System overview

                    +--------------------------------------------+
                    |              src/core.py                    |
                    |         58 orchestration functions          |
                    |   69 specialized modules, 31k LOC           |
                    +--------------------------------------------+
                     /                |                \
    +---------------+  +-------------------+  +--------------+
    | MCP Server    |  | HTTP API Server   |  | CLI          |
    | Claude Desktop|  | FastAPI + Swagger |  | 11 commands  |
    | 58 tools      |  | 58 endpoints      |  | setup, sync  |
    | stdio         |  | port 8394         |  | ingest, api  |
    +---------------+  +-------------------+  +--------------+
           |                    |                     |
           v                    v                     v
    +------------------------------------------------------------+
    |                    Storage Layer                            |
    |  LanceDB         SQLite           Filesystem               |
    |  (vectors)       (metadata,       (memories as .md,        |
    |                   analytics,       encrypted with           |
    |                   interactions)    AES-256-CBC)             |
    |                                                            |
    |  fastembed/ONNX: local embedding, no API keys              |
    |  101 languages, 384-dim vectors, ~220MB model              |
    +------------------------------------------------------------+

Get started

1. Install

pip install project-tessera

Or with uv:

uvx --from project-tessera tessera setup

2. Setup

tessera setup

Creates workspace config, downloads embedding model (~220MB, first time only), configures Claude Desktop.

3. Restart Claude Desktop

Ask Claude about your documents. It searches automatically.

Use with ChatGPT (Custom GPT Actions)

tessera api                     # Start REST API on localhost:8394
ngrok http 8394                 # Expose to the internet
# Then create a Custom GPT with the Actions spec from /chatgpt-actions/openapi.json

Full setup guide at http://127.0.0.1:8394/chatgpt-actions/setup. Swagger docs at http://127.0.0.1:8394/docs.


How it works

Hybrid search with reranking

Every search goes through four stages:

  1. Query decomposition -- the query is split into 2-4 search angles (core keywords, individual terms, reversed emphasis)
  2. Hybrid retrieval -- vector similarity (LanceDB) and keyword matching (FTS/BM25) run in parallel
  3. Reranking -- a LinearCombinationReranker merges the two result sets (70% semantic, 30% keyword weight)
  4. Verdict scoring -- each result gets a label: confident match (>= 45%), possible match (25-45%), or low relevance (< 25%)

When multiple versions of the same document exist, Tessera prefers the latest.

Cross-session memory

# Via MCP (Claude)
"Remember that we chose PostgreSQL for the production database"

# Via HTTP API (scripts, local LLMs, ChatGPT via tunnel)
curl -X POST http://127.0.0.1:8394/remember \
  -H "Content-Type: application/json" \
  -d '{"content": "Use PostgreSQL for production", "tags": ["db", "architecture"]}'

Each memory gets a category (decision, preference, or fact), is checked for duplicates against existing memories (cosine similarity, 0.92 threshold), and receives a confidence score -- weighted by repetition (35%), recency (25%), source diversity (20%), and category (20%). Set TESSERA_VAULT_KEY to encrypt all memories with AES-256-CBC.

Auto-learning

Tessera picks up decisions, preferences, and facts from your conversations without being asked. toggle_auto_learn turns it on or off; review_learned shows what it caught.

Contradiction detection

Memories contradict each other over time. Tessera finds them:

CONTRADICTION (HIGH severity):
  "We decided to use PostgreSQL" (2026-03-01)
  vs
  "Switched to MongoDB for the main database" (2026-03-10)

  The newer memory (2026-03-10) likely reflects the current state.

Works with both English and Korean negation patterns.

ChatGPT integration (requires tunnel)

ChatGPT can talk to Tessera through Custom GPT Actions, but since ChatGPT's servers need to reach your machine, you need a tunnel (ngrok, Cloudflare Tunnel, etc.) to expose your local API.

Requirements: Your computer must be on, the API server running, and the tunnel active. When any of these stop, ChatGPT loses access.

# 1. Start Tessera API + tunnel
tessera api
ngrok http 8394   # or: cloudflared tunnel --url http://localhost:8394

# 2. Get the OpenAPI spec for your Custom GPT
curl https://your-tunnel-url/chatgpt-actions/openapi.json?server_url=https://your-tunnel-url

# 3. Get the GPT instruction template
curl https://your-tunnel-url/chatgpt-actions/instructions

Create a Custom GPT, paste the instructions, import the OpenAPI spec as an Action.

You can also import past ChatGPT conversations to extract knowledge from them:

curl -X POST http://127.0.0.1:8394/import-conversations \
  -H "Content-Type: application/json" \
  -d '{"data": "<ChatGPT export JSON>", "source": "chatgpt"}'

Export as Obsidian vault (wikilinks), Markdown, CSV, or JSON:

curl http://127.0.0.1:8394/export?format=obsidian

Memory health

Each memory is healthy, stale (90+ days without reinforcement), or orphaned (no metadata, no category). The health report tells you what to clean up and tracks growth over time.

Plugin hooks

Run your own scripts when things happen:

# workspace.yaml
hooks:
  on_memory_created:
    - script: ./notify-slack.sh
  on_contradiction_found:
    - script: ./alert.py

7 event types: on_memory_created, on_memory_deleted, on_search, on_session_start, on_session_end, on_ingest_complete, on_contradiction_found.


Supported file types (40+)

CategoryExtensionsInstall
Documents.md .txt .rst .csvincluded
Office.xlsx .docx .pdfpip install project-tessera[xlsx,docx,pdf]
Code.py .js .ts .tsx .jsx .java .go .rs .rb .php .c .cpp .h .swift .kt .sh .sql .cs .dart .r .lua .scalaincluded
Config.json .yaml .yml .toml .xml .ini .cfg .envincluded
Web.html .htm .css .scss .less .svgincluded
Images.png .jpg .jpeg .webp .gif .bmp .tiffpip install project-tessera[ocr]

MCP tools (58)

Search (5)
ToolWhat it does
search_documentsSemantic + keyword hybrid search across all docs
unified_searchSearch documents AND memories in one call
view_file_fullFull file view (CSV as table, XLSX per sheet)
read_fileRead any file's full content
list_sourcesSee what's indexed
Memory (13)
ToolWhat it does
rememberSave knowledge that persists across sessions
recallSearch past memories with date/category filters
learnSave and immediately index new knowledge
list_memoriesBrowse saved memories
forget_memoryDelete a specific memory
export_memoriesBatch export all memories as JSON
import_memoriesBatch import memories from JSON
memory_tagsList all unique tags with counts
search_by_tagFilter memories by specific tag
memory_categoriesList auto-detected categories (decision/preference/fact)
search_by_categoryFilter memories by category
find_similarFind documents similar to a given file
knowledge_graphBuild a Mermaid diagram of document relationships
Auto-learn (5)
ToolWhat it does
digest_conversationExtract and save knowledge from the current session
toggle_auto_learnTurn auto-learning on/off or check status
review_learnedReview recently auto-learned memories
session_interactionsView tool calls from current/past sessions
recent_sessionsSession history with interaction counts
Intelligence (7)
ToolWhat it does
decision_timelineHow your decisions changed over time, by topic
context_windowPack the best context into a token budget
smart_suggestQuery suggestions based on your past searches
topic_mapCluster memories by topic with Mermaid mindmap
knowledge_statsAggregate statistics (categories, tags, growth)
user_profileAuto-built profile (language, preferences, expertise)
explore_connectionsShow connections around a specific topic
Insight (6)
ToolWhat it does
deep_searchBreaks a query into 2-4 angles, searches each, merges best results
deep_recallMulti-angle memory recall with verdict labels
detect_contradictionsFind conflicting memories with severity rating
memory_confidenceHow reliable is each memory (repetition, recency, source diversity)
memory_healthWhich memories are healthy, stale, or orphaned
list_plugin_hooksSee what hooks are registered
Import/Export (4)
ToolWhat it does
export_for_aiExport memories in portable format
import_from_aiImport memories from external sources
import_conversationsExtract knowledge from ChatGPT/Claude conversation exports
export_knowledgeExport as Obsidian (wikilinks), Markdown, CSV, or JSON

ChatGPT can connect via Custom GPT Actions (requires tunnel). See /chatgpt-actions/setup.

Security and data (2)
ToolWhat it does
vault_statusCheck AES-256 encryption status
migrate_dataUpgrade data from older schema versions
Workspace (11)
ToolWhat it does
ingest_documentsIndex documents (first-time or full rebuild)
sync_documentsIncremental sync (only changed files)
project_statusRecent changes per project
extract_decisionsFind past decisions from logs
audit_prdCheck PRD quality (13-section structure)
organize_filesMove, rename, archive files
suggest_cleanupDetect backup files, empty dirs, misplaced files
tessera_statusServer health: tracked files, sync history, cache
health_checkFull workspace diagnostics
search_analyticsSearch usage patterns, top queries, response times
check_document_freshnessDetect stale documents older than N days

HTTP API (58 endpoints)

pip install project-tessera[api]
tessera api  # http://127.0.0.1:8394

Swagger UI at http://127.0.0.1:8394/docs. Optional auth via TESSERA_API_KEY env var.

All endpoints
MethodPathWhat it does
GET/healthHealth check
GET/versionVersion info
POST/searchSemantic + keyword search
POST/unified-searchSearch docs + memories
POST/rememberSave a memory
POST/recallSearch memories with filters
POST/learnSave and index knowledge
GET/memoriesList memories
DELETE/memories/{id}Delete a memory
GET/memories/categoriesList categories
GET/memories/search-by-categoryFilter by category
GET/memories/tagsList tags
GET/memories/search-by-tagFilter by tag
POST/context-windowBuild token-budgeted context
GET/decision-timelineDecision evolution
GET/smart-suggestQuery suggestions
GET/topic-mapTopic clusters
GET/knowledge-statsStats dashboard
POST/batchMultiple operations in one call
GET/exportExport as Obsidian/MD/CSV/JSON
GET/export-for-aiExport memories in portable format
POST/import-from-aiImport memories from external sources
POST/import-conversationsImport past conversations
POST/migrateRun data migration
GET/vault-statusEncryption status
GET/user-profileUser profile
GET/statusServer status
GET/health-checkWorkspace diagnostics
POST/deep-searchMulti-angle document search
POST/deep-recallMulti-angle memory recall
GET/contradictionsDetect conflicting memories
GET/memory-confidenceMemory reliability scores
GET/memory-healthMemory health analytics
GET/hooksList plugin hooks
GET/entity-searchSearch entity knowledge graph
POST/entity-graphMermaid diagram from entities
GET/consolidation-candidatesFind similar memory clusters
POST/consolidateMerge similar memories
GET/dashboardWeb dashboard (dark theme, entity graph, stats)
POST/sleep-consolidateAuto-merge near-duplicate memories
POST/retention-policyFlag old or low-quality memories
GET/retention-summaryAge distribution and at-risk counts
GET/adapters/{framework}Setup code for LangChain, CrewAI, AutoGen
POST/auto-curateClassify, tag, deduplicate, and clean up memories
GET/auto-insightsTrending topics, decision patterns, hidden connections
GET/chatgpt-actions/openapi.jsonOpenAPI spec for Custom GPT Actions
GET/chatgpt-actions/instructionsGPT instruction template
GET/chatgpt-actions/setupChatGPT integration setup guide

Quick examples

# Search documents
curl -X POST http://127.0.0.1:8394/search \
  -H "Content-Type: application/json" \
  -d '{"query": "database architecture", "top_k": 5}'

# Save a memory
curl -X POST http://127.0.0.1:8394/remember \
  -H "Content-Type: application/json" \
  -d '{"content": "Use PostgreSQL for production", "tags": ["db"]}'

# Export memories
curl http://127.0.0.1:8394/export-for-ai?target=chatgpt

# Batch (multiple operations, single request)
curl -X POST http://127.0.0.1:8394/batch \
  -H "Content-Type: application/json" \
  -d '{"operations": [{"method": "search", "params": {"query": "test"}}, {"method": "knowledge_stats"}]}'

CLI (11 commands)

tessera setup          # One-command setup (config + model download + Claude Desktop)
tessera init           # Interactive setup
tessera ingest         # Index all document sources
tessera sync           # Re-index changed files only
tessera serve          # Start MCP server (stdio)
tessera api            # Start HTTP API server (port 8394)
tessera migrate        # Upgrade data schema
tessera check          # Workspace health diagnostics
tessera status         # Project status summary
tessera install-mcp    # Configure Claude Desktop
tessera version        # Show version

Claude Desktop config

With uvx (recommended):

{
  "mcpServers": {
    "tessera": {
      "command": "uvx",
      "args": ["--from", "project-tessera", "tessera-mcp"]
    }
  }
}

With pip:

{
  "mcpServers": {
    "tessera": {
      "command": "tessera-mcp"
    }
  }
}

Config location:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Configuration

tessera setup creates workspace.yaml:

workspace:
  root: /Users/you/Documents
  name: my-workspace

sources:
  - path: .
    type: document

search:
  reranker_weight: 0.7     # Semantic vs keyword balance (0.0 = keyword only, 1.0 = vector only)
  max_top_k: 50            # Max results per search

ingestion:
  chunk_size: 1024         # Tokens per chunk
  chunk_overlap: 100       # Overlap between chunks

hooks:                      # Optional plugin hooks
  on_memory_created:
    - script: ./my-hook.sh

Or set TESSERA_WORKSPACE=/path/to/docs to skip config file entirely.

Environment variables:

  • TESSERA_API_KEY -- enable API authentication
  • TESSERA_VAULT_KEY -- enable AES-256 encryption for memories

Technical details

ComponentTechnologyWhy
Vector storeLanceDBEmbedded columnar store. No server process, handles vector + metadata queries natively
Embeddingsfastembed/ONNXLocal inference, no API keys. paraphrase-multilingual-MiniLM-L12-v2 (384-dim, 101 languages)
MetadataSQLiteFile tracking, search analytics, interaction logging. Thread-safe with reentrant locks
Memory storageFilesystem (.md)Human-readable, git-friendly, encryptable. YAML frontmatter for metadata
EncryptionPure Python AES-256-CBCNo OpenSSL dependency. PKCS7 padding, random IV per memory
HTTP APIFastAPISwagger docs, Pydantic validation, async-capable
MCPFastMCP (stdio)Standard MCP protocol for Claude Desktop

Numbers

MetricCount
MCP tools58
HTTP endpoints58
CLI commands11
Core modules69
Lines of code31,000+
Tests1102
File types40+

License

AGPL-3.0 -- see LICENSE.

Commercial licensing: bessl.framework@gmail.com

Related MCP Servers

modelcontextprotocol/server-memoryVerified

📇 🏠 - Knowledge graph-based persistent memory system for maintaining context

🧠 Knowledge & Memory2 views
0xshellming/mcp-summarizer

📕 ☁️ - AI Summarization MCP Server, Support for multiple content types: Plain text, Web pages, PDF documents, EPUB books, HTML content

🧠 Knowledge & Memory0 views
20alexl/claude-engram

🐍 🏠 - Persistent memory and session intelligence for Claude Code. Auto-tracks mistakes, decisions, and context via hooks. Mines session history for patterns and cross-session search. Loop detection, pre-edit warnings, context compaction survival. Runs locally with Ollama.

🧠 Knowledge & Memory0 views
a2cr/a2cr

🐍 ☁️ 🏠 🍎 🪟 🐧 - MCP server for AI-agent handoffs. Saves client-encrypted WorkBaton checkpoints and WorkStash notes so Codex, Claude Code, Roo Code, and other MCP clients can resume work without passing full chat history.

🧠 Knowledge & Memory0 views

Engagement

Views
0
Installs
0
Upvotes
0

Views and upvotes are unique per visitor network (hashed IP). Installs count copy actions.

Status

Health: Not checked yet

We have not completed a health check for this listing yet.

Last checked: 7/28/2026, 6:47:12 PM

Unclaimed listing (imported or pending owner verification). Claim it →
★ Spotlight Slot

Feature Your MCP Server

Get maximum visibility for your server across our directory, search results, and detail pages.

Spotlight Your Server

Own this project?

This directory is pre-filled from public sources. Claim via GitHub README, site badge, or DNS TXT to get the verified badge and attach your website.

Claim this listing

Promote this listing

Optional paid placement. Free listings stay free forever.

Share & Embed

Add our SVG badge (dark/light directory styles) or embeddable widget to your site.