diffchunk
 ](https://pypi.org/project/diffchunk/)   
MCP服务器,使LLM能够高效地导航大型差异文件。LLM可以使用基于模式的导航直接跳转到相关更改,而不是按顺序读取整个差异。
问题
较大的差异超过了LLM上下文限制,并在无关的更改上浪费令牌。50k+行差异不能直接处理,手动拆分会丢失文件关系。
解决方案
带5个导航工具的MCP服务器:
load_diff-使用自定义设置解析diff文件(可选)list_chunks-显示块概览,包括文件映射和每个文件的行数(自动加载)get_chunk-检索特定块内容(自动加载)find_chunks_for_files-按文件模式定位块(自动加载)get_file_diff-提取单个文件的完整差异(自动加载)
设置
先决条件: 安装 紫外线 (一个非常快的Python包管理器),它提供 uvx 命令。
添加到MCP客户端配置中:
{
"mcpServers": {
"diffchunk": {
"command": "uvx",
"args": ["--from", "diffchunk", "diffchunk-mcp"]
}
}
}用法
您的AI助手现在可以处理以前在Cline、Roocode、Cursor和其他工具中导致失败的大量变更集。
使用AI助手
配置后,您的AI助手可以使用diffchunk分析大型提交、分支或差异。
以下是一些示例用例:
分支比较:
- _“检查开发中的所有更改,而不是主分支中的任何错误”_
- _“告诉我尚未合并的所有更改”_
- _“临时分支添加了哪些新功能?”_
- _“总结过去2周对此仓库的所有更改”_
代码审查:
- _“使用diffchunk检查我的功能分支是否存在安全漏洞”_
- _“在我合并到生产环境之前,使用diffchunk查找任何突破性的更改”_
- _“使用diffchunk检查此大型重构是否存在潜在问题”_
变更分析:
- _“使用diffchunk向我显示需要运行的所有数据库迁移”_
- _“使用diffchunk查找API的哪些更改可能会影响我们的移动应用程序”_
- _“使用diffchunk分析最近添加的所有新依赖项”_
直接文件分析:
- _“使用diffchunk分析/tmp/changes.diff上的差异,并找到任何错误”_
- _“创建我未提交的更改的差异并对其进行审核”_
- _“将我的本地分支与来源进行比较,并突出显示冲突”_
提示:AI助手规则
添加到AI助手的自定义说明中以自动使用:
When reviewing large changesets or git commits, use diffchunk to handle large diff files.
Create temporary diff files and tracking files as needed and clean up after analysis.运作原理
当你让你的人工智能助手分析变化时,它会战略性地使用diffchunk的工具:
- 创建diff文件 (例如。,
git diff main..develop > /tmp/changes.diff)根据你的问题 - 用途
list_chunks通过以下方式了解diff结构和总体范围,包括每个文件的行数file_details - 用途
find_chunks_for_files在询问特定文件类型时查找相关部分 - 用途
get_file_diff获取一个特定文件的完整差异,而不加载整个块 - 用途
get_chunk在不将整个差异加载到上下文中的情况下检查特定部分 - 系统地跟踪进展 通过大型变更集,逐块分析
- 清理临时文件 完成分析后
这使您的AI助手能够处理通常会导致其他工具崩溃的巨大差异,同时在不丢失上下文的情况下提供彻底的分析。
工具使用模式
概述一:
list_chunks("/tmp/changes.diff")
# -> 5 chunks across 12 files, 3,847 total lines, ~15,420 tokens
# Each chunk includes token_count and file_details with per-file line counts
# Response includes total_token_count for context-budget planning目标特定文件:
find_chunks_for_files("/tmp/changes.diff", "*.py")
# → [1, 3, 5] - Python file chunks
get_chunk("/tmp/changes.diff", 1)
# → Content of first Python chunk单文件差异:
get_file_diff("/tmp/changes.diff", "src/main.py")
# → Complete diff for src/main.py (header + all hunks)
# Glob patterns work when they match exactly one file
get_file_diff("/tmp/changes.diff", "*.config")
# → Complete diff for the single matching config file系统分析:
# Process each chunk in sequence
get_chunk("/tmp/changes.diff", 1)
get_chunk("/tmp/changes.diff", 2)
# ... continue through all chunks配置
路径要求
- 仅绝对路径:
/home/user/project/changes.diff - 跨平台:Windows(
C:\path)和Unix(/path) - 房屋扩建:
~/project/changes.diff
自动加载默认值
工具通过优化设置自动加载:
max_chunk_lines: 1000skip_trivial:true(仅限空格)skip_generated:true(锁定文件、构建工件)
自定义设置
使用 load_diff 对于非默认行为:
load_diff(
"/tmp/large.diff",
max_chunk_lines=2000,
include_patterns="*.py,*.js",
exclude_patterns="*test*",
context_lines=2
)格式选项
使用 format 参数打开 get_chunk 将输出转换为LLM消耗:
# Default - raw diff output
get_chunk("/tmp/changes.diff", 1, format="raw")
# Annotated - structured with line numbers, file headers, hunk separation
get_chunk("/tmp/changes.diff", 1, format="annotated")
# Compact - token-efficient, only new hunks (context + added lines)
get_chunk("/tmp/changes.diff", 1, format="compact")注释格式 添加 ## File: 标题, __new hunk__/__old hunk__ 具有新文件行号的部分和来自的函数上下文 @@ 标题。
紧凑格式 仅显示添加或保留的内容,省略删除的行和 __old hunk__ 部分完全。当你只需要看到最终状态时很有用。
上下文缩减
使用 context_lines 上 load_diff 在加载时减少每个块的上下文行数:
# Keep only 2 lines of context around each change
load_diff("/tmp/large.diff", context_lines=2)
# Keep only changes, no context
load_diff("/tmp/large.diff", context_lines=0)这与 format -在加载时减少上下文,然后在显示时应用格式化。
支持格式
- Git差异输出(
git diff,git show) - 统一差异格式(
diff -u) - 单个diff中有多个文件
- 二进制文件更改指示器
演出
- 高效处理100k+线路差异
- 内存高效流媒体
- 文件更改时自动重新加载
