Chatvault

io.github.CloudCorpRecordsPublished by GitHub account CloudCorpRecordsv0.1.0Updated Nov 7, 2026

Search and read your local AI chat-history corpus: full-text search, transcripts, inventory.

Overview

AI-generated overview

Searches and reads a local folder of AI chat-history JSON files, letting an assistant find, reopen and inventory past conversations without uploading them.

What you can do
  • Search conversations by full text with platform, title, date and match-mode filters, returning ranked snippets
  • Read a full transcript by id, or fetch a retained image from a specific message
  • List conversations by chronology or recency, and page through a compact inventory of ids, platforms, titles and fingerprints
  • Report corpus status: when data last arrived and how many conversations it holds
  • Add or update a conversation, and record a durable memory fact (stored disabled until reviewed)
When to use it
Useful when you keep exported AI chat transcripts as JSON on your own machine and want an assistant to search them, reopen earlier discussions, or check what history exists before answering. It is a local, read-mostly index rather than a connector to a live chat service.
Requirements
Runs locally via npx or Docker over stdio. Optional CHATVAULT_CORPUS_DIR sets the corpus folder (defaults to ~/.chatvault/corpus); optional CHATVAULT_READ_ONLY=1 disables the two write tools. No account, API key or network access is needed.
Before you install
The corpus holds private chat history, and the assistant can read transcripts and stored images from it. Two tools write to the corpus: save_conversation adds or updates conversations and save_memory appends facts to memories.json, so set CHATVAULT_READ_ONLY=1 if you want read-only use. Saved memories are stored disabled until you review and enable them.

Installation

In SourceWeft

  1. Open Chatvault in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

chatvault

Your past AI chats are already on your disk. chatvault lets an MCP client search them, reopen them, and take stock of them — without any of that history leaving the machine. There is no account, no upload and no network call: the server reads a folder of JSON files that you control.

Configuration

  • CHATVAULT_CORPUS_DIR (optional) — where the corpus lives. Defaults to ~/.chatvault/corpus.
  • CHATVAULT_READ_ONLY (optional) — set to 1 to make the two write tools (save_conversation, save_memory) refuse with an error naming the mode. Reads keep working.

Corpus layout

One JSON file per conversation, plus memories.json:

json
{  "id": "abc",  "platform": "claude",  "title": "Planning a trip",  "updatedAt": "2026-10-01T12:00:00.000Z",  "messages": [    { "role": "user", "text": "Where should we go?" },    { "role": "assistant", "text": "Some ideas..." }  ]}

A message may also carry formattedText and images ({mime, dataBase64} entries holding retained image bytes). A conversation may carry a localTitle. An empty or missing corpus directory is fine: searches and lists simply come back empty.

Every conversation has a content fingerprint, fp2: followed by a SHA-256 hex digest. The digest covers the title, the local title when set, and every message in order — its index, role, text, formatted text when present, and each image's mime and retained bytes. Timestamps and derived fields are left out, so re-saving the same content keeps the same fingerprint while a rename or an edited message changes it. The exact serialisation (canonical JSON with sorted keys) is a labelled reconstruction.

Tools

  • search_conversations — tokenised full-text search over titles and message text. Required: query. Optional: platform (exact match), title (substring), date_from and date_to (against updatedAt), and match_mode — any (default), all, or phrase. Results are ranked by match count, then recency, and carry snippets.
  • get_conversation_image — the stored image for a message. Required: conversation_id, message_index, image_index. Returns the mime type and base64 bytes; a missing image is an honest error.
  • get_conversation — the full transcript for id, with a contentFingerprint field.
  • list_conversations — conversations by updatedAt. Optional order (newest_first default, or oldest_first) and limit.
  • list_recent — most recently updated conversations with title, a short summary (an excerpt of the first user message — a reconstruction), and platform. Optional limit.
  • conversation_inventory — a snapshot-paged inventory of compact {id, platform, title, fingerprint} items. Call with no arguments to start a scan, then pass each page's nextCursor back as cursor. Pages hold at most 100 items; limit can make them smaller. At most eight snapshots are held, and an unknown or expired cursor is an error asking you to start a new scan.
  • corpus_status — {lastReceivedAt, count} for the corpus; lastReceivedAt is null when the corpus is empty.
  • save_conversation — add or update a conversation. Required: platform, title, messages. When id is omitted one is assigned (chatvault:<n>). Returns {id, fingerprint}.
  • save_memory — store a durable fact from text. The record is appended to memories.json turned off (enabled: false) until you review and enable it, and the stored record is returned.

Search and list results also carry a corpus block — {lastReceivedAt, count} — so a caller can tell how fresh and how large the corpus behind an answer is.

CLI

bash
npx @reneturcios/chatvault corpus_status '{}'npx @reneturcios/chatvault search_conversations '{"query":"trip"}'npx @reneturcios/chatvault --version

Output is the tool's result text. Exit codes: 0 on success, 1 on an error result, 2 on a usage error.

MCP server

bash
npx -y @reneturcios/chatvault mcp

MCP client config:

json
{  "mcpServers": {    "chatvault": {      "command": "npx",      "args": ["-y", "@reneturcios/chatvault", "mcp"],      "env": {        "CHATVAULT_CORPUS_DIR": "/path/to/corpus"      }    }  }}

Docker

bash
docker run -i -v /path/to/corpus:/corpus -e CHATVAULT_CORPUS_DIR=/corpus ghcr.io/cloudcorprecords/chatvaultdocker run --rm ghcr.io/cloudcorprecords/chatvault --version

Development

bash
npm installnpm run build   # tsc -> dist/npm test        # tsx --test test/*.test.ts (temp corpus dirs, no network)npm run dev     # run the CLI from source

License

MIT — Copyright (c) 2026 Rene Turcios

Source: README.md at commit e985e46

Tools

9

search_conversations

Full-text search across every past conversation. Returns ranked matches with highlighted snippets. Supports platform, title, date_from/date_to filters and a match_mode (any / all / phrase).

Parametersqueryrequiredtitledate_toplatformdate_frommatch_mode

get_conversation_image

Read a retained local raster image using the message and image index returned by get_conversation. No private provider URL fetching or OCR.

Parametersimage_indexrequiredmessage_indexrequiredconversation_idrequired

get_conversation

Fetch the full transcript of one conversation by its id (the id field from search results). The response carries contentFingerprint, the current fingerprint of the returned transcript.

Parametersidrequired

list_conversations

List conversations by chronology, including oldest-first for questions about the user's earliest chat.

Parameterslimitorder

list_recent

List the most recently updated conversations with title, summary, and platform.

Parameterslimit

conversation_inventory

Paginated, read-only inventory of every conversation as compact metadata: id, platform, title, and a versioned content fingerprint. Call with no arguments to start a scan, then pass each page's nextCursor back as cursor until a page comes back without one. Pages hold up to 100 items.

Parameterslimitcursor

corpus_status

Report when the corpus last received data and how many conversations it holds.

Takes no parameters.

save_conversation

Add or update a conversation in the corpus, so MCP is also an ingestion route.

Parametersidtitlerequiredmessagesrequiredplatformrequired

save_memory

Record a durable fact (a decision, preference, or correction) worth carrying into later chats. Stored turned off until the user reviews and enables it.

Parameterstextrequired

Version history

1
  1. v0.1.0LatestNov 4, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts