Datacron

io.github.VBlackJack由 GitHub 账号 VBlackJack 发布v2026.1103.0更新于 Nov 3, 2026

本地优先的 MCP 服务器,通过 MCP 提供对 Markdown 库的访问。

AI 翻译由 AI 模型根据下方的原文描述翻译,可能有误。

原文描述

Local-first MCP server that exposes a Markdown vault through MCP.

概览

Datacron 的本地 MCP 服务;无需登录;STDIO。

暂无 AI 概览:以下信息来自注册中心条目和服务本身。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Datacron,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

Datacron

Local MCP server to query and maintain a Markdown vault from Claude, Codex, Gemini, or another stdio MCP client, without sending the whole vault into the context.

[License: Apache 2.0] [Python: 3.11+] [MCP: local stdio] [CI]

English | Français

What can you do with Datacron?

Recover project context, prepare for a conversation, and keep track of commitments. Datacron gives your assistant durable memory in readable, editable Markdown. Your notes remain usable independently of the client you choose.

Offline library: build a browsable Markdown library for Obsidian or another local reader, with a home page and topic indexes. Review proposed rewrites, splits and archives before changing the source vault. See the offline library guide and the 2026.0913.02 release notes.

NeedExample request to your assistant
Resume a project"Where did we leave off? Find the decisions and next actions."
Prepare a meeting"Summarize our recent conversations and open points, with sources."
Remember a person"Who is this person, how have we interacted, and what should we follow up on?"
Track objectives"Find the commitments and achievements relevant to my next review."
Preserve a reliable record"Save this decision, link it to the project, and verify that it was stored."

The assistant orchestrates these requests using the available tools and granted permissions. A shared protocol guides reading, people updates, and write verification. Ambiguous identities require clarification; storing a deadline does not schedule a reminder. Explore daily follow-up.

Start here: install · first session · user guide · MCP reference · privacy.

Installation

Windows: one double-click installer

The easiest way on Windows: download Datacron-Setup.exe from the latest Release, double-click it, and pick your vault. No Python, no terminal, no administrator rights; Datacron registers itself with your AI clients automatically. Full guide: Windows installation.

Python: from PyPI

bash
python -m pip install datacrondatacron setup

From source

From a clone of the repository:

bash
python -m pip install -e ".[dev]"

Or, to install only the application:

bash
python -m pip install -e .

Runtime prerequisites:

  • Python 3.11+
  • ripgrep available on the PATH for search_regex; without it that tool falls back to a slower scan of indexed chunk bodies
  • a folder of Markdown notes
  • a supported stdio MCP client, such as Claude Desktop, Codex CLI, or Gemini CLI

First session

  1. Choose your notes folder with the installer or datacron setup.
  2. Reconnect Datacron in your MCP client to load the tools and instructions. The Claude Desktop chat does not present the server instructions: paste the session start line printed by setup into your Claude preferences (see setup).
  3. Ask: "Find the notes for my project and summarize its status with sources."

For memory sessions, session_context returns bounded context and the shared protocol. prepare_follow_up prepares sourced updates; existing writers apply them according to permissions. get_follow_up retrieves the latest structured revisions. Existing prose notes remain readable and are not automatically converted.

The server operates locally. Your client may send returned excerpts to its model provider; see privacy and security.

For cached session contracts, archive ranking, resumable write tracking and conversation evaluation, see daily workflow improvements.

Quick start

The easy path - one command detects your AI clients, initializes the vault, indexes it, and registers Datacron everywhere:

bash
datacron setup            # interactive; add --yes for all defaults

See the installation guide for options (--client, --scope, writing, durability). Or step by step:

bash
datacron init /path/to/vaultdatacron index --vault /path/to/vaultdatacron status --vault /path/to/vaultdatacron mcp install --client claude-desktop --vault /path/to/vault

The mcp install subcommand above is dedicated to Claude Desktop. For Codex CLI, Gemini CLI, Antigravity, LM Studio, Cursor, and the other clients, use multi-client setup with datacron setup --client <identifier> or auto-detection with --client all.

Add to LM Studio

LM Studio 0.3.17+ has one user configuration and no project scope. The preferred command is:

bash
datacron setup --yes --vault "VAULT_PATH" --client lmstudio --scope user

For a Python installation where datacron-mcp is on PATH, the equivalent read-only configuration can also be imported with this official deeplink:

Add to LM Studio

The link imports this example. Open LM Studio's MCP editor and replace both <YOUR_VAULT> placeholders before starting the server:

json
{  "mcpServers": {    "datacron": {      "command": "datacron-mcp",      "args": [],      "env": {        "DATACRON_VAULT_ROOT": "<YOUR_VAULT>",        "DATACRON_READ_PATHS": "<YOUR_VAULT>",        "DATACRON_DURABILITY": "best-effort"      }    }  }}

The example does not enable write tools. CLI setup is safer for packaged installations because it writes the actual executable path automatically.

Restart the configured client or clients after installation.

To run the server manually:

bash
datacron mcp serve --vault /path/to/vault

The direct script entry used by the installer is also available:

bash
datacron-mcp

datacron-mcp reads the vault from DATACRON_VAULT_ROOT.

Configuration

datacron init creates .datacron/VAULT.yaml. That file can carry vault-local configuration, notably query expansion:

yaml
query_expansion:  supervision: [monitoring]  sauvegarde: [backup]  restauration: [restore]  chiffrement: [encryption]  sécurité: [security]  validité: [validity]  certificat: [certificate]

Useful environment variables:

VariableDefaultRole
DATACRON_VAULT_ROOTunsetprimary user documentation vault root (fallback after --vault; the current directory is accepted only when it contains .datacron/VAULT.yaml)
DATACRON_MEMORY_ROOTunsetoptional dedicated memory vault root hosting .datacron/ and _memory/ (Dual-Vault mode)
DATACRON_EXTRA_READ_VAULTSemptyoptional read-only secondary vault mounts (prefix=path separated by OS path separator or JSON object)
DATACRON_READ_PATHSemptyread allowlist; client setup sets it to the vault(s)
DATACRON_WRITE_PATHSemptywrite allowlist; empty = write tools disabled
DATACRON_MAX_RESULT_COUNT20maximum number of results returned
DATACRON_MAX_RESULT_TOKENS8000token budget for search results
DATACRON_REPAIR_MIN_INTERVAL_SECONDS30minimum interval between repair-on-read sweeps; 0 = every read
DATACRON_GET_NOTE_MAX_TOKENS25000budget for get_note(format="full")
DATACRON_MAX_READ_RESPONSE_CHARS131072 (minimum 4096)serialized JSON ceiling for get_note and list_notes, including metadata, envelopes, and escaping
DATACRON_SESSION_CONTEXT_SECTIONS{} (no section selected)JSON mapping of note paths to heading paths for bounded orientation excerpts
DATACRON_CHUNK_MAX_TOKENS1024target maximum chunk size
DATACRON_RIPGREP_PATHrgripgrep binary

Path lists use the OS separator (: on Unix, ; on Windows).

Writing

Writes are deliberately OFF by default. Without DATACRON_WRITE_PATHS, write tools return a clear error and create no file.

To enable writing to a specific subfolder:

powershell
$env:DATACRON_VAULT_ROOT = "C:\Notes"$env:DATACRON_READ_PATHS = "C:\Notes"$env:DATACRON_WRITE_PATHS = "C:\Notes\_memory"datacron mcp serve --vault C:\Notes

datacron setup can also apply the allowlist machine-wide (user environment variable, opt-in) so every MCP client inherits it; default: _memory, _drafts, _journal. See the setup guide.

Available write tools:

  • create_note_ai: creates a typed Markdown note, without overwrite.
  • append_journal: adds an entry under a heading of an existing note.
  • set_frontmatter: updates lifecycle fields, the rejected options list, and the monotone last_id counter without modifying the Markdown body.
  • patch_note_preamble: replaces or removes the Markdown preamble before the first recognized Markdown heading (ATX or Setext), with mandatory CAS control.
  • patch_note_section: replaces the content under an existing heading with CAS control.
  • delete_note_section: explicitly deletes an H2-H6 section (ATX or Setext) and its subtree.
  • rename_note_section: renames only the title of an H2-H6 section (ATX or Setext).
  • move_note_section: previews or commits an exact H2-H6 subtree move within a note, with mandatory CAS.
  • revert_note: restores the exact bytes of a version kept in history.
  • apply_organization_manifest: validates and then applies a local content-addressed bundle after confirmation bound to the exact admitted organization pre-state.

Guarantees:

  • strict note confinement within DATACRON_WRITE_PATHS; organization-batch note sources and targets must also stay inside the unchanged live organization.scope and pass the live note-admission policy, including exclusions
  • two internal exact-CAS targets for an organization batch: .datacron/VAULT.yaml, only to change the top-level organization mapping without changing organization.scope, and .datacron/ulids.json, only when Datacron derives the key migration required by a move_replace_exact
  • atomic overwrite via temporary file + os.replace
  • content-addressed history before modifying an existing note
  • synchronous reconcile() after a normal write; immediate searchability is guaranteed only when reconciliation succeeds
  • local audit log
  • for an organization manifest: crash-consistent recovery and atomic replacement of each file; simultaneous visibility across several paths is not guaranteed

Concurrent multi-machine mode is not supported for writes: keep a single-writer rule on the vault.

For apply_organization_manifest, also stop every other Datacron client and server during the maintenance window. Before applying, keep a verified byte-exact backup outside the vault of the affected notes and the complete .datacron directory until every post-commit check is green. Call mode="validate" first, review the bounded hashes it returns, then reuse the exact confirmation_token with mode="apply". The token binds the manifest and payloads, all admitted Markdown notes inside organization.scope, the exact vault configuration and identity sidecars, and the projected report. It deliberately does not bind unrelated note bytes outside organization.scope. A change to any authenticated component invalidates the confirmation before mutation. history_mode=full is required at validation time. If Datacron derives identity-sidecar case-collision cleanup, also review identity_sidecar_case_canonicalization_count and its content-free SHA-256 before applying; both proofs are token-bound and retained in the durable receipt. An existing replace_exact or move_replace_exact source must carry its id in frontmatter; an identity available only from the sidecar is unsupported by this v1 schema. If the batch is already durably committed but index reconciliation or the planner oracle fails, the response says so explicitly (committed_index_incomplete or committed_report_mismatch) and the same call can be retried with the same token. An organization-batch blocker is reported by datacron ops inspect with a pending_batch_ reason and both single-note repair actions unavailable; use the full offline rollback procedure in the operational-health guide rather than repairing or quarantining one member.

Available capabilities

Datacron indexes a folder of Markdown notes, exposes a local MCP server, then returns the relevant notes or chunks to the client instead of a full dump. The vault stays an ordinary Markdown folder: Datacron only adds a .datacron/ sidecar for the index, logs, internal ULIDs, history, and the operation journal. The one exception is datacron setup at project scope, which is part of the default: it also writes each detected client's project config into the vault root, such as .mcp.json, .cursor/mcp.json, .gemini/settings.json, .agents/mcp_config.json, .codex/config.toml or .vscode/mcp.json. Those files carry machine-local absolute paths, so a synced vault carries them to every machine. Pass --scope user to keep the vault free of them.

SurfaceCurrent state
Vault readinglist_notes, get_note, resources datacron://vault/map, vault/info, policy/active
SearchSQLite FTS5/BM25, FR↔EN query expansion, temporal re-rank, ripgrep via search_regex
Local graphWikilinks and backlinks via get_backlinks
Writing9 confined note tools + 1 organization batch, journaled and disabled by default without DATACRON_WRITE_PATHS
MCP transportPython MCP SDK v2 through MCPServer, local stdio only; modern 2026-07-28 protocol and legacy 2025-11-25 compatibility, with no HTTP listener
Indexdatacron index incremental, datacron reindex full, conditional repair on read
OrganizationOptional organization block in VAULT.yaml; datacron reorganize --dry-run measures the gap read-only, apply_organization_manifest applies
Evaluationdatacron eval over the real MCP pipeline: recall@k, MRR, nDCG, freshness, latency, and payload tokens
Guided setupdatacron setup: init + index + MCP registration in one command (Single-Vault or Dual-Vault via --memory-vault)
Graphical control paneldatacron companion: local graphical control panel (127.0.0.1) for topology, search, graph diagnostics, compaction, MCP client setup, audit history, and CAS settings
ClientsAuto-detect and register via datacron setup --client all: Claude Desktop, Claude Code, Cursor, Gemini CLI, Antigravity, LM Studio, Codex CLI, Windsurf, VS Code
Daily memorysession_context, prepare_follow_up, get_follow_up: bounded context, sourced follow-up, and structured state
Graph & Compactiondatacron graph-health (broken links, orphans, hubs, cross-vault links) and datacron compact-memory (monthly journal digests)
Memory protocolShared versioned server/client contract; protocol status checks distribution, not model behavior
DistributionWindows installer (Datacron-Setup.exe), standalone executable (PyInstaller) with no Python required, or installation from source

MCP Tools

The tables below list the standard profile (23 tools). For assistants that choose better from a short list, DATACRON_TOOL_PROFILE=essential registers 5 tools instead: remember, recall, what_changed, get_note and get_health. See the essential tool profile.

Reading

ToolDescription
session_contextBounded session context and versioned common protocol.
prepare_follow_upPrepare sourced follow-up plans without writing.
get_follow_upLatest structured follow-up revisions with snapshot-bound pagination.
list_notesreturns a paginated list, filterable by folder, tags, and frontmatter key/value pairs, with ULID, title, tags, aliases, and dates
get_notereads a note or an exact heading subtree, with pagination, chunk lookup, or a heading outline
search_textruns a BM25 search on the FTS5 index with ranked snippets and stale notes demoted by default
search_regexruns a regex search via ripgrep and resolves the found lines to indexed chunks
get_backlinksreturns chunks whose wikilinks target a ULID or a resolved alias

Writing

ToolDescription
create_note_aicreates a new typed _memory note, confined to allowed paths, without overwrite and with a durable journal
append_journaladds a Markdown entry under a heading, with confinement, exact history, and atomic write
set_frontmatterupdates allowed lifecycle fields, rejected, the monotone last_id counter, and updated, preserving the Markdown body
patch_note_preamblereplaces or removes the preamble before the first recognized Markdown heading (ATX or Setext), with mandatory CAS and suffix preservation
patch_note_sectionreplaces the content of an existing heading with CAS, exact history, and preservation of other sections
move_note_sectionpreviews or commits an exact subtree move beneath an existing heading in the same note
delete_note_sectionexplicitly deletes an H2-H6 section (ATX or Setext) and its subtree, with optional CAS and exact history
rename_note_sectionrenames the title of an H2-H6 section (ATX or Setext) without modifying its content or subtree
revert_noterestores a note from its content-addressed history; the operation stays durable, reversible, and audited
apply_organization_manifestvalidates a local content-addressed bundle containing at least one exact note operation and/or an exact organization configuration replacement, then applies its declared members and any required derived ULID-sidecar migration under CAS; application is journaled and crash-consistent

Operational

ToolDescription
get_healthreturns the real state of index freshness, integrity, checksum, durability, and invariants
get_write_progressInspect multi-note write receipts, conflicts and current indexing without retrying writes.
get_note_historylists the committed operation metadata of a note without reading historical content or modifying the journal
audit_queryqueries operation metadata by period, tool, or note without modifying the journal or the vault

Advisory (experimental)

ToolDescription
contradiction_scanlive, deterministic, bounded scan of contradictions/refinements between sections; proposes and confirms an explicit CAS call read-only, without ever writing automatically

MCP resources:

  • datacron://vault/map
  • datacron://vault/info
  • datacron://policy/active

Search

search_text combines several signals:

  • FTS5/BM25 for the base lexical score
  • a heavier weight on the note title and heading trail than on the chunk body, so a note about a subject outranks a note that merely mentions it
  • FR↔EN query expansion configured in VAULT.yaml
  • conservative temporal re-rank:
    • a note referenced in another note's supersedes is strongly demoted
    • confidence: low and confidence: needs_verification apply a light penalty
    • include_superseded=true brings historical notes back up
  • optional scope: folder, tags, and frontmatter narrow the searched notes with the same semantics as list_notes; the response echoes the filters actually applied
  • optional grouping: group_by_note=true keeps the best chunk of each note and reports how many of its chunks matched, which cuts the returned tokens by about 40 percent on the eval corpus

search_regex stays literal: it applies neither query expansion nor temporal re-rank.

Historical search measurements - July 17, 2026

These measurements cover 19 questions and one configuration. They are not a benchmark of the current release or a guarantee for another vault.

Local measurement of the tool/impl pipeline actually received by the agent, 19 questions, 8k-token / 20-result configuration, July 17, 2026:

text
recall@5       0.89recall@10      0.95recall@20      0.95MRR            0.73nDCG@10        0.79latency p50    57 mslatency p95    276 mspayload tokens 90567

On this historical set, tool-level recall@5 matched the BM25 store. Use datacron eval with a suitable question set to measure behavior on your own notes.

Privacy and security

  • Datacron does no telemetry.
  • Datacron calls no cloud LLM.
  • The MCP client, for example Claude, Codex, or Gemini, may send the chunks that Datacron returns to its provider. Datacron does not send it the full vault.
  • Content returned to clients is wrapped in <vault_content>...</vault_content>.
  • Results are bounded by count and by token budget.
  • Filesystem access is confined by DATACRON_READ_PATHS and DATACRON_WRITE_PATHS.
  • MCP operations are audited in the local logs.

CLI commands

bash
datacron companion                  # launch the local graphical control panel (127.0.0.1)datacron setup                      # guided path: init + index + client configdatacron setup --yes                # all defaults, no promptsdatacron setup --client all --scope both --vault /path/to/vaultdatacron setup --vault /path/to/docs --memory-vault /path/to/memory  # Dual-Vault setupdatacron migrate-memory --vault /path/to/docs --memory-vault /path/to/memorydatacron graph-health --vault /path/to/vault --jsondatacron compact-memory --vault /path/to/vault --older-than-days 30 --dry-rundatacron compact-memory --vault /path/to/vault --older-than-days 30 --applydatacron config get --vault /path/to/vault --jsondatacron config set --vault /path/to/vault --expected-hash sha256:... --values-json '{"excluded_folders":[".git"]}'datacron setup --protocol           # also install client memory rulesdatacron protocol install --client alldatacron protocol status --client all --scope userdatacron init /path/to/vaultdatacron status --vault /path/to/vaultdatacron index --vault /path/to/vaultdatacron reindex --vault /path/to/vaultdatacron scrub-init --vault /path/to/vaultdatacron scrub --vault /path/to/vaultdatacron reorganize --vault /path/to/vault --dry-run          # measure organization, read-onlydatacron reorganize --vault /path/to/vault --dry-run --json   # stable machine-readable reportdatacron eval --questions examples/eval-questions.example.yaml --vault /path/to/vaultdatacron eval --questions local/golden.yaml --vault /path/to/vault --save-baselinedatacron eval --questions local/golden.yaml --vault /path/to/vault --compare --jsondatacron mcp serve --vault /path/to/vaultdatacron mcp install --client claude-desktop --vault /path/to/vault  # Claude Desktop onlydatacron unregister --client all --scope both --vault /path/to/vaultdatacron protocol uninstall --client all

Current limitations

  • Lexical search only: no vector search or embeddings.
  • No autonomous agent: the MCP client orchestrates.
  • No concurrent multi-machine writes.
  • Client detection in datacron setup is best-effort (a config directory or a binary on the PATH); an install in a non-standard location may be missed and can then be configured by hand.

Documentation

Full index: docs/en/index.md | Index français.

To get started:

Technical references:

Development

CI runs the invariants and the entire regression suite on Linux/Python 3.12 for changes limited to the READMEs, CHANGELOG, and Markdown pages under docs/fr/ or docs/en/. All other changes retain the six Linux/Windows and Python 3.11-3.13 combinations. Publications require the full matrix, as do empty or unverifiable diffs. ShellCheck, the dependency audit, and the required Quality gate remain active in both paths. The first push of a new branch also uses the full matrix because no previous comparison point is available.

bash
python -m pip install -e ".[dev]"ruff check .ruff format --check .mypypytest

License

Copyright 2026 Julien Bombled.

Licensed under the Apache License, Version 2.0.

Reliable writes and quality gates

来源:README.md,提交 5d3efd9

工具

0
SourceWeft 曾在隔离沙箱中以无凭据方式启动该软件包一次,以列出其工具,但未能完成:服务器未能启动。

版本历史

10
  1. v2026.1103.0最新Nov 3, 2026
  2. v2026.1020.0Oct 20, 2026
  3. v2026.1016.0Oct 16, 2026
  4. v2026.1015.0Oct 16, 2026
  5. v2026.1001.0Oct 1, 2026
  6. v2026.926.0Sep 26, 2026
  7. v2026.924.0Sep 25, 2026
  8. v2026.921.0Sep 23, 2026
  9. v2026.918.0Sep 18, 2026
  10. v2026.913.2Sep 16, 2026

评分

已满足适用检查项的 40%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

    请在仓库或注册中心条目中声明许可证。