doc-version-mcp
Synchronizes Git repositories via record_git_pull_event, performing git pull --rebase with autostash and creating upstream snapshots for collaboration.
Provides versioning and AST diffing for LaTeX documents in paper mode, including analysis of mathematical environments, sections, and AI-stylometry metrics.
Supports versioning and AST diffing for Markdown documents with word-level diffs and AI-compliance auditing in paper mode.
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., "@doc-version-mcpCommit the latest draft of my paper and show a diff against the last commit."
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.
π doc-version-mcp
FastMCP Server for Document Versioning, Content-Addressable Storage (CAS), AST Diffs, and AI-Compliance Auditing.
doc-version-mcp provides a robust, local-first document versioning engine built on top of the Model Context Protocol (MCP). It brings Git-like precision to LLM agents and human authors without cluttering Git commit histories, offering deterministic snapshots, word-level differential AST projections, and collaborative safety rails.
β‘ Quick Start (Windows PowerShell One-Liner)
Install and configure doc-version-mcp automatically with a single command in PowerShell:
irm https://raw.githubusercontent.com/hjamet/doc-version-mcp/main/install.ps1 | iexThe installer automatically:
Detects or creates the target directory (
~/Documents/code/doc-version-mcp).Configures a dedicated Python virtual environment (
.venv) with all dependencies.Initializes the Content-Addressable Storage (CAS) hierarchy at
~/.gemini/antigravity/cas_commits/.Registers the server into your Antigravity MCP configuration (
mcp_config.json).Copies metadata schemas and installs command-line wrappers (
doc-version.cmd,doc-version.ps1).
Related MCP server: Lians Agent Memory
ποΈ Architecture & Key Features
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β LLM Agent / User β
ββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββ
β FastMCP Stdio Transport
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β doc-version-mcp β
β βββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββ β
β β CAS Storage Engine β β AST & Diff Generator β β
β β - SHA-256 Addressing β β - LaTeX & KaTeX Diffs β β
β β - zlib Level 9 Compress β β - Mode 'paper' & 'draft'ββ
β β - Isolated Commit Trees β β - AI Compliance Auditingββ
β βββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Local Storage & Workspace Integrity β
β ~/.gemini/antigravity/cas_commits/{commits,objects}/ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββContent-Addressable Storage (CAS): Documents are stored as immutable, content-addressed blobs compressed via
zlib(level 9) and indexed by SHA-256 hashes, keeping disk overhead minimal.Dual Operational Modes:
paperMode: Tailored for scientific manuscripts (LaTeX and Markdown). Analyzes mathematical environments, AST sections, and evaluates AI-stylometry metrics ($P(\text{AI}) < 0.10$).draftMode: Dedicated to precision editing of drafts. Audits<XXX>uncertainty placeholders and enforces a strict text retention threshold ($\ge 90%$).
Deterministic Collaboration:
Seamless upstream synchronization (
record_git_pull_event) with automatic stashing (--autostash).Strict preservation of co-author contributions with blocking conflict detection.
Zero uncontrolled global rewrites: changes are validated block-by-block.
Local-First & Portable: Pure local Python package, independent of cloud services and fully compatible with multi-machine setups.
π οΈ MCP Tools Reference
doc-version-mcp exposes 6 declarative MCP tools:
Tool Name | Description | Key Parameters |
| Creates a timestamped CAS snapshot of a document on disk or in virtual memory. |
|
| Computes surgical word-level diffs and generates an interactive Markdown artifact in Antigravity Brain. |
|
| Restores a document from a historical CAS commit ID. Supports dry-run preview. |
|
| Lists stored CAS commits with timestamps, authors, and metadata. |
|
| Purges expired snapshots based on TTL and disk quota, protecting pinned baselines. |
|
| Synchronizes a Git repository via |
|
π§ Client Configuration Guide
1. Google Antigravity
Add the server to ~/.gemini/antigravity/mcp_config.json:
{
"mcpServers": {
"doc-version": {
"command": "C:\\Users\\<USER>\\Documents\\code\\doc-version-mcp\\.venv\\Scripts\\doc-version.exe",
"args": [],
"env": {
"SystemRoot": "C:\\Windows",
"PATH": "%PATH%"
}
}
}
}2. Claude Desktop
Add to %APPDATA%\Claude\claude_desktop_config.json:
{
"mcpServers": {
"doc-version": {
"command": "C:\\Users\\<USER>\\Documents\\code\\doc-version-mcp\\.venv\\Scripts\\doc-version.exe",
"args": []
}
}
}3. Cursor
Configure in .cursor/mcp.json or Global Settings:
{
"mcpServers": {
"doc-version": {
"command": "C:\\Users\\<USER>\\Documents\\code\\doc-version-mcp\\.venv\\Scripts\\doc-version.exe",
"args": []
}
}
}4. Claude Code CLI
claude mcp add doc-version -- C:\Users\<USER>\Documents\code\doc-version-mcp\.venv\Scripts\doc-version.exeπ» Local Development & Testing
Installation from Source
# Clone the repository
git clone https://github.com/hjamet/doc-version-mcp.git
cd doc-version-mcp
# Create and activate virtual environment
python -m venv .venv
.\.venv\Scripts\Activate.ps1
# Install in editable mode with development dependencies
pip install --upgrade pip
pip install -e ".[dev]"Running Test Suite
pytest tests/ -vManual Inspection & CLI Run
# Verify FastMCP server entry point
doc-version --helpπ License
This project is licensed under the terms of the MIT License.
Available Tools
6 toolscommit_documentCommit DocumentA
CrΓ©e un instantanΓ© horodatΓ© d'un document dans le Content-Addressable Storage (CAS). Supporte les fichiers sur disque et les mΓ©moires virtuelles (drafts sans fichier).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | paper | |
| author | No | agent | |
| target | Yes | ||
| content | No | ||
| message | Yes | ||
| is_pinned | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It discloses that the tool creates a timestamped snapshot and stores it in CAS, and it explains supported input types. It does not mention side effects on the draft/source, immutability, idempotency, or permission requirements, so there are clear gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the core action front-loaded and the supported input modes stated explicitly. Every sentence adds meaningful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has six parameters, zero schema descriptions, and no annotations, yet the description leaves most parameter semantics unexplained. Output schema existence reduces the need to describe return values, but an agent still lacks essential guidance on how to fill parameters correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain the roles of target, message, mode, author, content, or is_pinned. The mention of disk files and virtual memories hints at how target/content might be used, but it is not enough to compensate for the complete lack of parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: 'CrΓ©e un instantanΓ© horodatΓ© d'un document dans le CAS', identifying both the resource (document) and storage context (Content-Addressable Storage). It also distinguishes this tool from sibling tools like list_commits, restore_commit, and prune_commits by emphasizing creation of a snapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful context about when to use the tool: it supports disk files and virtual memories/drafts without a file. However, it does not explicitly state when not to use it or point to an alternative among the sibling tools, leaving selection guidance only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_diff_artifactGet Diff ArtifactB
Génère la vue différentielle chirurgicale AST et produit l'artéfact Markdown Antigravity. Supporte le mode paper (LaTeX/Markdown avec KaTeX) et le mode draft (audit syntaxique balises, rétention >=90%).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | paper | |
| target | Yes | ||
| content | No | ||
| brain_dir | No | ||
| to_commit_id | No | ||
| artifact_name | No | ||
| from_commit_id | No | ||
| diff_explanation | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It discloses output type, mode behavior, and a retention threshold. It does not disclose whether artifact generation writes state, requires specific repository context, or has side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with the main action front-loaded and no filler. Technical jargon ('chirurgicale', 'Antigravity') slightly reduces clarity but not conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, 1-required tool with no annotations and no parameter descriptions, the description covers only modes and output type. The output schema may cover return shape, but input semantics and intended invocation context remain largely incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description only hints at the `mode` values ('paper'/'draft'); the required `target`, plus `content`, `brain_dir`, `to_commit_id`, `from_commit_id`, and `artifact_name`, are left undefined. This is insufficient for a tool with eight parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with an active verb and concrete resource ('Génère la vue différentielle... AST') and names the produced artifact ('artéfact Markdown Antigravity'). It clearly separates this from sibling commit/list/prune tools, though it never explicitly contrasts with a sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It distinguishes the paper and draft modes with their targets (LaTeX/Markdown with KaTeX vs tag audit/retention >=90%), giving mode-selection guidance. It does not state when to prefer this tool over sibling git-history tools or list prerequisites/exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_commitsList CommitsC
Liste les commits stockΓ©s dans le CAS avec mΓ©tadonnΓ©es d'horodatage et auteur.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | ||
| limit | No | ||
| target | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It reveals only that commits carry timestamp and author metadata; it does not state whether this is read-only, whether authentication or preconditions are required, how mode/target alter behavior, or what the listing returns. For a tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is well-formed and front-loads the core action, with no wasted words. However, for a three-parameter tool it is underspecified rather than efficiently concise; brevity here comes at the cost of missing necessary context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers the return format, but all three parameters are undocumented and there are no annotations to fill the gap. mode and target in particular are opaque, leaving an agent unable to invoke the tool meaningfully. Incomplete for a tool of this parameter count.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description explains none of the three parameters (mode, limit, target). The schema only supplies defaults, not semantics, so the agent cannot determine what values to pass. With three undocumented parameters and no compensatory text, this is the weakest dimension.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list commits) plus the storage context (CAS) and what metadata is returned (timestamp, author). It is distinguishable from restore_commit and prune_commits on name alone, though it never explicitly contrasts with commit_document or record_git_pull_event. Clear purpose, minor gap in sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus the five siblings. There is no mention of when it applies, what scenario routes here, or any exclusions. The presence of siblings like get_diff_artifact and restore_commit makes this omission more consequential.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prune_commitsPrune CommitsA
Purge les snapshots expirés selon le TTL et régule la taille totale sous max_size_mb. Protège les baselines épinglées (is_pinned) si keep_baselines=True.
| Name | Required | Description | Default |
|---|---|---|---|
| ttl_days | No | ||
| max_size_mb | No | ||
| keep_baselines | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the core destructive behavior (purge) and the conditional protection of pinned baselines, but it does not clarify the selection algorithm for enforcing max_size_mb (e.g., which snapshots are deleted if none are expired) or state that deletion is irreversible. This ambiguity is significant for a destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the core purpose and then adds a precise condition, making every word count.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with an output schema, the description covers the main function and parameter roles adequately. However, the underspecified size-overshoot deletion behavior leaves an agent unable to fully predict consequences, and the presence of an output schema does not compensate for that behavioral gap. Overall, the description is usable but not fully complete for a destructive operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description gives functional meaning to all three parameters: ttl_days relates to TTL-based expiry, max_size_mb to the size cap, and keep_baselines to the protection of pinned baselines. It stops short of explicitly defining TTL in days or the exact behavior when keep_baselines=false, but it provides enough context for an agent to understand parameter roles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Purge') and resource ('les snapshots expirΓ©s') with distinct mechanisms (TTL and max_size_mb). It also mentions conditional protection of pinned baselines, clearly differentiating it from sibling tools like list_commits or restore_commit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for cleanup tasks (pruning expired snapshots and enforcing size limits), but it does not explicitly state when to use this tool vs. alternatives or any exclusions. An agent must infer the intended context from the purpose rather than receiving direct guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_git_pull_eventRecord Git Pull EventB
Synchronise un dΓ©pΓ΄t Git via git pull --rebase (--autostash), dΓ©tecte les conflits et enregistre un snapshot CAS horodatΓ© de l'Γ©tat rΓ©cupΓ©rΓ©.
| Name | Required | Description | Default |
|---|---|---|---|
| autostash | No | ||
| repo_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the core actions (pull, detect conflicts, record snapshot) and implies mutability via 'Synchronise', but does not detail side effects, permissions, conflict resolution behavior (only detection), or the nature of the CAS snapshot. It omits important context like what happens on conflict or whether local changes are preserved (though autostash is mentioned, it's not elaborated).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the primary action (sync via git pull) and then adds details (conflict detection and snapshot recording). It is concise and to the point, though the French wording is dense and could benefit from breaking into two sentences for clarity. It earns high marks for brevity and front-loading.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a mutating operation (git pull) with potential side effects, and no annotations are present to cover safety or behavior. The description is brief and does not explain error handling, return values, or what happens when conflicts occur. An output schema exists, which could cover return values, but the description itself does not address completeness for an agent deciding to invoke it safely. Given the complexity and side effects, it is insufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain the parameters. It mentions '--autostash' in the command but does not clarify that this maps to the autostash boolean parameter. The repo_path parameter is not described at all. The description fails to compensate for the schema's lack of documentation, leaving agents without sufficient understanding of what each parameter does.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: it synchronizes a Git repository via git pull --rebase, detects conflicts, and records a timestamped CAS snapshot. This specific verb+resource combination distinguishes it from siblings like commit_document (commit), get_diff_artifact (diff), restore_commit (restore), list_commits (list), and prune_commits (prune). The action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (when you need to pull and record a snapshot) but provides no explicit when-to-use or when-not-to-use guidance, nor does it mention alternatives or conditions under which another sibling might be preferred. It relies on the obvious distinction from siblings, but lacks explicit routing or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_commitRestore CommitC
Restaure un document depuis son commit ID dans le CAS. Si dry_run=True, prΓ©visualise sans modifier le disque.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | ||
| dry_run | No | ||
| commit_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions that dry_run=True previews without modifying the disk, which is useful, but it does not disclose what happens when dry_run=False (e.g., whether it overwrites the current document, whether it is destructive, whether it requires specific permissions). For a restore operation that likely mutates state, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded with the main action. The dry_run clarification is useful and placed second. However, it is so brief that it misses important behavioral details, so it is not maximally effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters, no annotations, and an output schema, the description should explain the restore behavior, the meaning of target, and the effect of dry_run=False. It only covers dry_run. The output schema exists but the description does not mention what the restore result looks like. This is incomplete for a mutation-capable tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the schema's lack of parameter documentation. The description only explains dry_run's behavior; it does not explain commit_id format, target's purpose, or how they interact. With 3 parameters and zero schema descriptions, this is insufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('restore') and resource ('a document from its commit ID in the CAS'), which clearly identifies the tool's core function. It does not explicitly differentiate from siblings like get_diff_artifact or list_commits, but the restore action is distinct enough that an agent can infer its purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: restoring a document from a commit ID, with dry_run for previewing. It does not explicitly state when to use this tool versus alternatives like get_diff_artifact or prune_commits, nor does it mention any prerequisites or side effects. The dry_run hint provides some guidance but not full routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.1.0- First observed
commit_document - First observed
get_diff_artifact - First observed
list_commits - First observed
prune_commits - First observed
record_git_pull_event - First observed
restore_commit
TDQS
Scored across 6 tools
Each tool targets a distinct operation: git sync, snapshot creation, diff generation, restore, listing, and pruning. No overlapping purposes; descriptions clearly separate responsibilities.
All tools follow a consistent verb_noun snake_case pattern (record_git_pull_event, commit_document, get_diff_artifact, restore_commit, list_commits, prune_commits). Verbs and nouns are clear and predictable.
With 6 tools, the server is well-scoped for a document versioning domain. Each tool covers a core operation without redundancy, striking a balance between minimalism and functionality.
The tool surface covers the full lifecycle: create (commit_document), read/restore (restore_commit), list (list_commits), delete (prune_commits), diff (get_diff_artifact), and external integration (record_git_pull_event). No obvious gaps for the stated purpose.
Related MCP Connectors
Local-first long-term memory for AI agents, with byte-recomputable signed verification receipts.
Cross-agent artifact workspace with provenance across Claude Code, Codex, Cursor, LangGraph.
Versioned agent memory in your own Postgres: portable context, permissioned, audit trail.
Versioned documentation registry and semantic search for AI tools and coding assistants.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to read and write a local-first knowledge base of plain markdown files in git, with governance gates for safe, hash-anchored edits.1Apache 2.0

Lians Agent Memoryofficial
AlicenseAqualityCmaintenanceLocal-first bitemporal memory for AI agents with deterministic supersession, point-in-time recall, erasure proofs, and tamper-evident audit history.911Apache 2.0- FlicenseNot gradedqualityDmaintenanceProvides versioned file storage for AI agents with immutable writes, auditing, and rollback capabilities.1-
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to maintain persistent, inspectable understanding through typed, revisable updates, and to coordinate multi-agent work via shared graph-based stigmergy.97 npm1MIT