mcpField
W
Weavatrix Git

Weavatrix Git

本地服务
github.com/sergii-ziborov版本控制08 周前更新

关于 Weavatrix Git

Weavatrix Git 为 AI 编码 Agent 提供只读 Git 证据,可作为 Rust 库、命令行工具和 MCP 服务使用。它在进程内解析仓库存储,提供有界且精确的证据,不调用 Git,也不修改仓库。

主要功能

  1. 01只读查询历史、引用、状态和差异
  2. 02不可变版本快照与工作区安全状态
  3. 03支持 SHA-1 和 SHA-256 仓库
  4. 04有界读取对象与历史记录
  5. 05保留非 UTF-8 路径的精确字节

适用场景

  1. 01无需启动 Git 查看提交历史
  2. 02检查已跟踪变更和工作区状态
  3. 03获取版本的不可变文件清单

MCP 相关

MCP 服务提供只读工具,用于查询 Git 标识、历史、差异、状态、快照和工作区安全状态。列表响应支持分页并标明是否截断。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"sergii-ziborov-weavatrix-git": {
"command": "npx",
"args": [
"-y",
"weavatrix-git"
]
}
}
}
启动命令npx -y weavatrix-git

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmweavatrix-git0.3.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Weavatrix Git

CI crates.io npm docs.rs MIT

属于 Weavatrix 生态:为 AI 软件 Agent 提供有界的 Git 证据。

weavatrix-git 为 AI 编码 Agent 提供快速、有界且只读的 Git 证据。 Rust crate、CLI、MCP 服务和 npm 包遵循相同的契约: 直接解析仓库存储。不调用 git 子进程,不使用 C 库、钩子、过滤器或网络访问,也不执行检出或修改。所有接口都不提供写入 API。

在已提交的精确一致性基准测试中,1,000 条热历史记录在 Weavatrix 中耗时 0.355 ms,在 gix 中耗时 0.884 ms,在 libgit2 中耗时 1.552 ms。 在八个仓库中,Weavatrix 在全部五项已测量的 p50 契约中均胜出。这些是发布构建的引擎测量结果;MCP 传输开销有意不包含在此声明中。

运行 MCP 服务

无需 Rust 工具链:

npx -y [email protected] --repository /absolute/path/to/repository

通用 stdio 客户端配置:

{
  "mcpServers": {
    "weavatrix-git": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]",
        "--repository",
        "/absolute/path/to/repository"
      ]
    }
  }
}

npm 包包含经过验证的原生二进制文件,适用于 Windows x64、Linux x64 和 ARM64,以及 macOS x64 和 ARM64。Node 仅负责选择并启动匹配的二进制文件;仓库解析和 MCP 处理均使用安全 Rust 实现。

面向 Agent 的工具
MCP 工具返回的证据
git_head仓库身份、哈希类型、符号化 HEAD、精确目标 ID、pack 数量
git_history分页提交 ID、树、父项、签名、时间戳、摘要
git_diff分页列出新增/删除/修改/类型变更的路径,以及旧/新对象 ID
git_status已跟踪的索引和工作区状态;未跟踪文件由 Repository::worktree_safety() 处理
git_snapshot修订版本对应的规范化不可变路径、模式、类型和对象 ID 清单
git_worktree_safetyClean / IgnoredOnly / HasUntracked / DirtyTracked / Unknown;未跟踪和已忽略文件的数量

每个列表工具都会返回 nextCursor、精确对象 ID 和 truncated 标志。 对于非 UTF-8 路径,pathHex 会保留其原始字节;展示文本绝不会被悄然当作精确证据。

运行时限制

MCP 二进制文件使用 mcport 提供的受控、无 Tokio 运行时:

  • 请求大小上限为 256 KiB,响应大小上限为 1 MiB;
  • 最多四个处理程序同时运行,并使用有界请求/输出队列;
  • 处理程序截止时间为 30 秒,并支持协作式取消检查;
  • 隔离 panic,并以原子方式报告响应溢出错误;
  • 对 Git 对象、历史、树、位图、reflog 和索引读取进行限制;
  • 可选进度通知,并支持配置响应批处理。

默认设置适用于交互式 stdio。--help 提供字节预算、并发数、队列、截止时间和批大小的覆盖选项。服务只向 stdout 写入以换行符分隔的 UTF-8 JSON-RPC;诊断信息写入 stderr。

也可通过 Cargo 原生安装:

cargo install weavatrix-git --version 0.3.3 --features mcp \
  --bin weavatrix-git-mcp
weavatrix-git-mcp --repository /absolute/path/to/repository

为什么要单独使用一个 crate?

扫描器负责发现文件。代码图负责对关系建模。这个 crate 负责版本控制证据。将这一边界独立出来后,任何 Rust 应用都能复用 Git 智能,而无需引入更大的产品。

支持的合同

区域支持情况
布局worktree、bare、.git 间接引用、通过 commondir 关联的 worktree
哈希SHA-1 和 SHA-256 对象标识符
引用松散引用、符号引用、分离的 HEAD、打包引用、reflog
对象commit、tree、blob、带注释的 tag
松散存储由此 crate 解码的有界 zlib/DEFLATE
打包存储PACK v2/v3、索引 v2、OFS_DELTA、REF_DELTA
对象查找alternates、经典 MIDX、缓存、共享零拷贝快照
Commit 加速单体和分层 commit-graph 链
路径加速changed-path Bloom 过滤器 v1/v2
可达性使用 RIDX 排序的 pack 和 MIDX EWAH 位图
索引DIRC v2/v3/v4、自动刷新的共享快照
查询类型化读取、惰性 revwalk、历史、跟踪状态、worktree 安全检查、tree 差异
不可变视图包含路径、模式和对象证据的规范 commit 快照
横向扩展并行打开、感知修订的时间线、变更集、关联
扩展有序、线程安全、只读的自定义 ODB 后端

所有公开读取都在进程内完成。库代码不包含子进程回退。 对于不支持的数据,会返回类型化错误,而非近似结果。

Rust 库

use weavatrix_git::{PathBloom, Repository};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let repository = Repository::open(".")?;
    let head = repository.resolve("HEAD")?;

    for id in repository.revwalk().push_head()?.take(100) {
        println!("{}", id?);
    }

    if repository.commit_maybe_changed_path(head, b"src/lib.rs")?
        == Some(PathBloom::DefinitelyNot)
    {
        println!("the commit definitely did not change src/lib.rs");
    }

    if let Some(objects) = repository.bitmap_reachable(head)? {
        println!("{} reachable objects", objects.len());
    }
    Ok(())
}

自定义存储使用相同的对象合同:

use std::sync::Arc;
use weavatrix_git::{Limits, MemoryObjectBackend, Repository};

let backend = Arc::new(MemoryObjectBackend::default());
let repository =
    Repository::open_with_backends(".", Limits::default(), vec![backend])?;
# Ok::<_, weavatrix_git::GitError>(repository)

进行跨仓库分析时,RepositorySet 会隔离各对象存储,并返回确定性的串行或并行结果:

use weavatrix_git::{HistoryOptions, RepositorySet};

let repositories = RepositorySet::open_parallel([
    ("service", "/code/service"),
    ("client", "/code/client"),
])?;
let histories =
    repositories.histories_from_parallel("HEAD", HistoryOptions::default())?;
let snapshots = repositories.snapshots_parallel("HEAD")?;
let timeline = repositories.timeline("HEAD", HistoryOptions::default())?;
let shared = repositories.shared_commits(HistoryOptions::default())?;
# Ok::<_, weavatrix_git::GitError>((histories, snapshots, timeline, shared))

诊断 CLI 使用此库:

weavatrix-git [-C repository] head
weavatrix-git [-C repository] log [revision] [max-count]
weavatrix-git [-C repository] cat <object>
weavatrix-git [-C repository] diff <old-commit> <new-commit>

架构

Repository
  +-- refs + reflog
  +-- commit-graph chain + changed-path Bloom
  +-- index -> tracked status
  +-- custom ODB backends
  +-- object directories + alternates
        +-- loose object -> bounded zlib
        +-- MIDX -> pack -> bounded delta chain
        +-- pack/MIDX bitmap -> reachable object IDs

Limits 限制对象字节数、缓存字节数、delta/ref/tree 深度、tree 和索引条目数、reflog/历史长度、父对象数量以及位图扩展量。此 crate 禁止使用不安全 Rust。默认库功能集不依赖任何依赖项;只有独立的 mcp 功能会添加 mcport。

源代码树遵循明确的模块边界:

层职责
model对象 ID、类型化 Git 对象、错误和验证合同
storageloose/pack/MIDX/commit-graph 解码、有界解压和缓存
repository引用、历史、差异、状态、快照、trees 和 revwalk
workspace确定性的多仓库查询与关联
mcp基于此库的可选只读协议适配器
facade / CLI稳定的 Rust 导出和诊断命令入口

已签入的严格架构合同会拒绝超过 300 个物理行的文件、超过 100 个物理行的函数、运行时循环依赖、混用 foo.rs 与 foo/ 的模块所有权,以及协议无关库对可选 MCP 适配器的任何依赖。它没有基线或例外。

正确性

测试套件会创建真实的 Git 仓库并验证:

  • 松散对象以及经过激进打包的 OFS/REF delta 对象;
  • SHA-1 和 SHA-256 仓库;
  • bare 和关联的 worktree 布局;
  • 经典 MIDX 查找;
  • 多层分段 commit-graph 和 changed-path Bloom 答案;
  • 与 git rev-list --objects 对比的 pack 和 MIDX 位图可达性;
  • 索引 v2 和 v4、reflog 顺序、revwalk 隐藏/重置以及跟踪状态;
  • 确定性的并行结果和跨仓库结果;
  • 不可变修订快照、合并后的时间线以及批量变更集;
  • 恶意格式和超出配置限制时的失败行为。

目前核心代码行覆盖率为 85.27%。CI 会在 Linux、Windows 和 macOS 上运行 Rust 1.88,并运行 Clippy(将警告视为错误)、覆盖率检查、审计、文档构建和包验证。

性能

Windows 上的发布测量结果,日期为 2026-07-27。每一行都会实际生成结果,并在计时前验证标识符、路径、对象字节或状态完全一致:

完全一致的操作weavatrix-git p50git.exe p50
6,000 个对象的位图可达性0.431 ms72.656 ms
读取单条目索引0.033 ms60.758 ms
干净的已跟踪状态0.186 ms72.735 ms
查找缓存的提交0.001 ms65.267 ms
1,000 次提交历史,复用仓库0.086 ms66.961 ms

在同一个包含 2,000 次提交的打包测试样本上进行的进程内直接比较:

完全一致的操作Weavatrix p50gix 0.86 p50git2 0.21 p50
1,000 次提交历史,热缓存0.355 ms0.884 ms1.552 ms
1,000 次提交历史,重新打开2.521 ms3.940 ms10.483 ms
读取 1,000 个缓存对象0.082 ms0.068 ms5.640 ms
历史记录加 1,000 个原始对象0.494 ms0.992 ms1.375 ms

在另一份包含 10,000 个路径的索引上,热缓存读取的测量结果分别为 1.160/1.100/1.489 ms;重新打开的测量结果为 5.225/7.745/11.251 ms。基准测试会轮换引擎顺序,并在计时前验证历史 ID、原始对象字节和规范索引路径完全一致。请参阅 BENCHMARKS.md。

在 8 个独立仓库中选取 8,000 次提交时,Weavatrix 的测量结果为:串行历史 5.667 ms、并行历史 4.080 ms、重新打开 11.810 ms、共享提交关联 4.148 ms,以及不可变清单 1.736 ms。它在全部 5 项 p50 指标上均优于 gix 和 libgit2;此前已验证各仓库的历史顺序、共享位置、路径和对象 ID 完全一致。

与其他方案的定位

功能weavatrix-gitGit CLIgixlibgit2
进程内运行是否是是
纯安全 Rust是否是否,采用 C 核心
Crate 依赖零不适用多个模块化 crate原生库
对象/增量缓存是是是是
MIDX 和可达性位图读取是是是是
拆分提交图和路径 Bloom 读取是是是提交图
自定义只读 ODB是不适用存储抽象是
延迟遍历修订、引用日志、索引和已跟踪状态是是是是
一流的跨仓库证据查询是应用程序代码应用程序代码应用程序代码
规范不可变提交清单是应用程序代码遍历 API树遍历 API
网络和变更操作否是是是

有意排除的功能包括 pack 索引 v1、reftable、增量 MIDX 链、拆分/稀疏索引扩展、浅克隆和替换对象语义、修订表达式语法、未跟踪/忽略/过滤器感知状态、子模块工作树状态、网络操作和变更操作。

若需要完整客户端,请使用 Git、gix 或 libgit2。如果重视范围受限的本地证据、精简的审计面、确定性读取和零依赖,请使用此 crate。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。