开源MCP工具:本地Git版本化记忆 是 AI Skill Hub 本期精选MCP工具之一。综合评分 7.5 分,整体质量较高。我们推荐使用将其纳入你的 AI 工具库,帮助提升工作效率。
本项目提供了一个开源的MCP工具,用于实现AI编码代理的本地Git版本化记忆功能。它不需要RAG、Docker或外部依赖,旨在提供一个轻量级、易于使用的解决方案。
开源MCP工具:本地Git版本化记忆 是一款遵循 MCP(Model Context Protocol)标准协议的 AI 工具扩展。通过 MCP 协议,它可以让 Claude、Cursor 等主流 AI 客户端直接访问和操作外部工具、数据源和服务,实现 AI 能力的无缝扩展。无论是文件操作、数据库查询还是 API 调用,都可以通过自然语言在 AI 对话中直接触发,极大提升生产效率。
本项目提供了一个开源的MCP工具,用于实现AI编码代理的本地Git版本化记忆功能。它不需要RAG、Docker或外部依赖,旨在提供一个轻量级、易于使用的解决方案。
开源MCP工具:本地Git版本化记忆 是一款遵循 MCP(Model Context Protocol)标准协议的 AI 工具扩展。通过 MCP 协议,它可以让 Claude、Cursor 等主流 AI 客户端直接访问和操作外部工具、数据源和服务,实现 AI 能力的无缝扩展。无论是文件操作、数据库查询还是 API 调用,都可以通过自然语言在 AI 对话中直接触发,极大提升生产效率。
# 方式一:通过 Claude Code CLI 一键安装
claude skill install https://github.com/ctxr-dev/llm-wiki-memory
# 方式二:手动配置 claude_desktop_config.json
{
"mcpServers": {
"--mcp-----git-----": {
"command": "npx",
"args": ["-y", "llm-wiki-memory"]
}
}
}
# 配置文件位置
# macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
# Windows: %APPDATA%/Claude/claude_desktop_config.json
# 安装后在 Claude 对话中直接使用 # 示例: 用户: 请帮我用 开源MCP工具:本地Git版本化记忆 执行以下任务... Claude: [自动调用 开源MCP工具:本地Git版本化记忆 MCP 工具处理请求] # 查看可用工具列表 # 在 Claude 中输入:"列出所有可用的 MCP 工具"
// claude_desktop_config.json 配置示例
{
"mcpServers": {
"__mcp_____git_____": {
"command": "npx",
"args": ["-y", "llm-wiki-memory"],
"env": {
// "API_KEY": "your-api-key-here"
}
}
}
}
// 保存后重启 Claude Desktop 生效
Everything lives in a local .llm-wiki-memory/ folder. No vector DB, no container, no API service to run.
Every memory is a markdown leaf with full history, maintained by @ctxr/skill-llm-wiki. Every change commits itself to the wiki's own repo with what, when, and why in the message (one commit per save, flush, compile, or consolidate run), so git log alone explains how your memory evolved. Disable via wiki.autoCommit; your project repo is never touched.
Self-improvement lessons save only with explicit user consent. Three layers of enforcement: discipline instructions, a Claude Code hook enabled by default (disable via gate.claudeHookEnabled), and an airtight MCP server-side gate (covers Cursor, Codex, generic clients).
Long sessions are chunked and distilled in pieces (header-aware → paragraph fallback → hard cut), so a 100K-char transcript never single-passes its way into a CLI timeout. Failed runs persist a full-body stash + structured audit; one cli.mjs redistill retries with no data loss.
A YAML-declared provider chain (anthropic API → openai API → claude CLI → codex CLI → cursor CLI) and per-provider model fallback lists let a deprecated model or a missing CLI cascade automatically — without inlining model names in code.
An hourly cron + a search-driven orchestrator deduplicate near-identical leaves, archive stale entries, and optionally rewrite bodies via the same LLM the rest of the pipeline uses. Never hard-deletes; always reversible.
Health is judged per entity, not per run: every cron tick keeps a slim attempt entry (last consolidate.attemptsKeep runs) plus a full sharded log under state/logs/<yyyy>/<mm>/ for deep diagnosis. A failure that resolves on a later tick stays silent; an entity still failing after consolidate.escalateAfterAttempts consecutive runs (or one error signature recurring across many entities) escalates into a redacted skeleton issue report at issues/<yyyy>/<mm>/<dd>/<signature>.<version>.md that your next session surfaces and offers to investigate — ready to copy upstream or turn into a fix PR.
Transformer embeddings rank queries on-device (default Xenova/bge-large-en-v1.5). One setting swaps in a lighter model — or falls back to a lexical scorer with no model download.
Every category declares its consolidation eligibility in <wiki>/.layout/layout.yaml (consolidate: refine | none). No magic defaults — author intent is always in plain view.
Paste one prompt into your agent or run one script. Idempotent.
Node 20 or newer, and git. No Docker, no Python. The embedding model downloads on first recall (set embed.backend: lexical in settings.yaml to skip it entirely).
Paste this one-liner into your AI coding agent (copy button on the right) — it covers both a fresh install and an update of an existing one. The full procedure lives in AI-INSTALL-PROMPT.md; the agent fetches and follows it:
Set up llm-wiki-memory in this project: fetch https://raw.githubusercontent.com/ctxr-dev/llm-wiki-memory/main/AI-INSTALL-PROMPT.md and follow it EXACTLY (it covers fresh install and update; if already installed, the same file is local at @.llm-wiki-memory/src/AI-INSTALL-PROMPT.md).
Or run it yourself — fresh install:
git clone https://github.com/ctxr-dev/llm-wiki-memory ./.llm-wiki-memory/src
./.llm-wiki-memory/src/bootstrap.sh # add --commit-memory to commit the wiki
./.llm-wiki-memory/src/bootstrap.sh --schedule daily # optional: hourly cron / launchd
Update an existing install:
```bash git -C .llm-wiki-memory/src fetch origin
node scripts/cli.mjs cron-job
Settings live in two files in ./.llm-wiki-memory/settings/:
.env — secrets, provider switches, deployment paths, workspace identity, test seams. Things that genuinely need shell precedence. See templates/env.example.settings.yaml — every other knob, nested by concern: consolidate, flush, hook, embed, recall, compile, gc, gate, providers, crossCuttingAreas. See templates/settings.yaml.The .env file's strict subset overrides the YAML where it overlaps (e.g. MEMORY_LLM_PROVIDER collapses the YAML chain). As of the 2026-06-03 v2 release, every MEMORY_* env var that's NOT on the strict allow-list is a silent no-op — application config moved into settings.yaml. The runbook covers the migration.
Strict-subset .env keys:
| Key | Default | Meaning |
|---|---|---|
ANTHROPIC_API_KEY / OPENAI_API_KEY | (unset) | Provider API keys (only needed for API providers). |
MEMORY_LLM_PROVIDER | auto | claude / codex / cursor / anthropic / openai / openai-compatible / mock. When set, collapses the YAML chain to this one provider. |
MEMORY_LLM_MODEL | (unset) | Provider-agnostic model override; prepends to the head provider's models list. |
MEMORY_LLM_BASE_URL | (unset) | OpenAI-compatible local endpoint (ollama, vLLM, lm-studio, llama.cpp, litellm). |
MEMORY_LLM_TIMEOUT_MS | 120000 | Per-call CLI/API timeout. |
MEMORY_DATA_DIR / LLM_WIKI_MEMORY_ROOT / MEMORY_EMBED_CACHE / MEMORY_SETTINGS_PATH | derived | Deployment paths. |
MEMORY_DEFAULT_PROJECT_MODULE | basename(workspace) | Workspace identity (scopes recall). |
MEMORY_LLM_MOCK_* | (unset) | Test seams for the mock provider. |
MEMORY_MCP_SERVER_NAME | llm-wiki-memory | MCP server name advertised at initialize. |
Highlights from settings.yaml:
| Section.key | Default | Meaning |
|---|---|---|
flush.chunkTargetK | 5 | Target chunk count for map-reduce distillation. |
flush.chunkParallelism | 1 | Concurrent chunks distilled at once. |
flush.reduceMaxChars | 30000 | Reduce-step input cap (tree-recurse above this; depth cap 16). |
flush.reduceModelPromote | true | Use one-tier-stronger model for the reduce step. |
embed.model | Xenova/bge-large-en-v1.5 | Embedding model — see the model comparison below. |
embed.backend | transformers | transformers (on-device bge) or lexical (no model download). |
gate.selfImprovementEnabled | true | Operator escape hatch for the server-side write-gate. |
gate.claudeHookEnabled | true | Enable or disable the Claude Code PreToolUse write-gate hook (no-op when false). |
consolidate.intervalDays | 1 | Throttle for consolidate --if-due. |
consolidate.llmPassesEnabled | true | Disable to run deterministic-only consolidation. |
consolidate.attemptsKeep | 50 | Slim cron attempt entries kept in state/.consolidate-attempts.log. |
consolidate.fullLogRetentionDays | 90 | Days before sharded full run logs (state/logs/yyyy/mm/) are pruned. |
consolidate.escalateAfterAttempts | 3 | Consecutive per-entity failures before an escalation issue report is written. |
wiki.autoCommit | true | Auto-commit every wiki change to the wiki's own git repo (one commit per logical operation). |
consolidate.cosineThreshold | 0.97 | Dedup threshold (auto-bumped to 0.995 on the lexical fallback). |
recall.touchEnabled | true | Whether searchMemoryFiltered stamps last_recalled_at on hits. |
providers.chain | [] → auto-detect | Cross-provider fallback chain. |
providers.<api-provider>.models | (template ships) | Per-provider model fallback list (newest-first). |
<details> <summary><strong>Full schema</strong></summary>
See templates/settings.yaml for the complete annotated set with every knob in each of the nine config sections plus the top-level crossCuttingAreas list.
</details>
<details> <summary><strong>Choosing an embedding model</strong></summary>
Recall ranks queries with an on-device transformers.js model, set by embed.model in settings.yaml. The default Xenova/bge-large-en-v1.5 gives the best routing quality; lighter models trade some accuracy for a much smaller download. Sizes below are the quantized ONNX weights transformers.js downloads by default (full-precision is ≈ 4× larger), lightest first:
| Model | Dim | Download | Notes |
|---|---|---|---|
Xenova/all-MiniLM-L6-v2 | 384 | ~25 MB | Smallest and fastest. Modest retrieval quality. |
Xenova/bge-small-en-v1.5 | 384 | ~35 MB | Strong quality for a small download. |
Xenova/bge-base-en-v1.5 | 768 | ~110 MB | Noticeably better routing than small. |
Xenova/bge-large-en-v1.5 | 1024 | ~340 MB | **Default.** Best routing quality. |
Set a lighter model in settings.yaml:
embed:
model: Xenova/bge-small-en-v1.5
Changing the model invalidates the embedding cache automatically. Stay within the MiniLM / BGE / GTE / mxbai families: they're mean-pooled with no query prefix, which is how this engine embeds. Prefix-based models (e5, nomic) underperform here because the engine doesn't add the query: / search_document: prefixes they expect.
</details>
The flush worker (PostCompact / SessionEnd hooks) chunks oversized transcripts and runs each chunk through a provider/model chain. A clean "nothing durable" verdict writes no leaf at all (the breadcrumb log keeps visibility); a partial or total failure preserves the full body to a stash so cli.mjs redistill can re-attempt later with no data loss.
The audit fields recorded on every leaf — chunks_total, chunks_succeeded, failed_chunks, provider_chain_tried, final_provider — make every distillation reproducible from frontmatter alone. Redistilled leaves carry redistilled_from, redistill_attempts, and original_outcome.
| Failure mode | What used to happen | What happens now |
|---|---|---|
| One CLI call exceeds 120 s | Whole session lost; last 8 K tail preserved in a non-recoverable leaf | Each chunk has its own budget; failed chunk(s) stashed for retry |
| Model deprecated mid-run | Hard fail (the claude-sonnet-4-X string was inlined in code) | Provider's model list iterates to the next entry; if exhausted, chain moves to next provider |
claude / codex CLI not installed | Hard fail | Chain transparently fast-fails to the next provider |
| Distillation produced no atoms | "nothing-durable" marker file written | **No leaf written.** Breadcrumb log only |
| Redistill races a live worker | Both writers raced → one silently overwrote the other; stash deleted | Per-session lock → ESESSIONBUSY; stash preserved |
本工具提供了一个开源的MCP工具,用于实现AI编码代理的本地Git版本化记忆功能。它的轻量级和易于使用的特点使其成为一个有价值的工具,但其功能和应用场景仍需要进一步探索和完善。
AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。
建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。
✅ MIT 协议 — 最宽松的开源协议之一,可自由商用、修改、分发,仅需保留版权声明。
经综合评估,开源MCP工具:本地Git版本化记忆 在MCP工具赛道中表现稳健,质量良好。如果你已有明确的使用需求,可以直接上手体验;如果还在评估阶段,建议对比同类工具后再做决策。
| 原始名称 | llm-wiki-memory |
| 原始描述 | 开源MCP工具:Local, git-versioned memory for AI coding agents. No RAG, no Docker, no external。⭐75 · JavaScript |
| Topics | mcpagent-memoryjavascript |
| GitHub | https://github.com/ctxr-dev/llm-wiki-memory |
| License | MIT |
| 语言 | JavaScript |
收录时间:2026-06-11 · 更新时间:2026-06-11 · License:MIT · AI Skill Hub 不对第三方内容的准确性作法律背书。
选择 Agent 类型,复制安装指令后粘贴到对应客户端