diffchunk
diffchunk
LLMが大規模なdiffファイルを効率的にナビゲートできるようにするMCPサーバーです。LLMはdiff全体を順番に読み込む代わりに、パターンベースのナビゲーションを使用して関連する変更箇所に直接ジャンプできます。
問題点
大規模なdiffはLLMのコンテキスト制限を超え、無関係な変更にトークンを浪費してしまいます。5万行を超えるdiffは直接処理できず、手動で分割するとファイル間の関係性が失われてしまいます。
Related MCP server: Large File MCP Server
解決策
5つのナビゲーションツールを備えたMCPサーバー:
load_diff- カスタム設定でdiffファイルを解析(オプション)list_chunks- ファイルマッピングとファイルごとの行数を含むチャンクの概要を表示(自動読み込み)get_chunk- 特定のチャンクの内容を取得(自動読み込み)find_chunks_for_files- ファイルパターンでチャンクを検索(自動読み込み)get_file_diff- 単一ファイルの完全なdiffを抽出(自動読み込み)
セットアップ
前提条件: uvx コマンドを提供する uv(非常に高速なPythonパッケージマネージャー)をインストールしてください。
MCPクライアントの設定に追加してください:
{
"mcpServers": {
"diffchunk": {
"command": "uvx",
"args": ["--from", "diffchunk", "diffchunk-mcp"]
}
}
}使用方法
AIアシスタントは、Cline、Roocode、Cursorなどのツールで以前は失敗の原因となっていた大規模な変更セットを扱えるようになります。
AIアシスタントでの使用
設定が完了すると、AIアシスタントはdiffchunkを使用して大規模なコミット、ブランチ、またはdiffを分析できます。
以下は使用例です:
ブランチの比較:
「developブランチにあってmainブランチにないすべての変更をバグがないか確認して」
「まだマージしていないすべての変更について教えて」
「stagingブランチに追加された新機能は何?」
「過去2週間のこのリポジトリのすべての変更を要約して」
コードレビュー:
「diffchunkを使って、私のフィーチャーブランチにセキュリティ上の脆弱性がないかチェックして」
「diffchunkを使って、本番環境にマージする前に破壊的変更がないか探して」
「diffchunkを使って、この大規模なリファクタリングに潜在的な問題がないかレビューして」
変更の分析:
「diffchunkを使って、実行が必要なすべてのデータベースマイグレーションを表示して」
「diffchunkを使って、モバイルアプリに影響を与える可能性のあるAPIの変更点を見つけて」
「diffchunkを使って、最近追加されたすべての新しい依存関係を分析して」
直接的なファイル分析:
「diffchunkを使って /tmp/changes.diff のdiffを分析し、バグを見つけて」
「コミットされていない変更のdiffを作成してレビューして」
「ローカルブランチをoriginと比較して競合をハイライトして」
ヒント: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.仕組み
AIアシスタントに変更の分析を依頼すると、diffchunkのツールを戦略的に使用します:
diffファイルの作成(例:
git diff main..develop > /tmp/changes.diff)を質問に基づいて行いますlist_chunksを使用して、file_detailsを介したファイルごとの行数を含む、diff構造と全体的な範囲の概要を取得しますfind_chunks_for_filesを使用して、特定のファイルタイプについて尋ねられた際に関連セクションを特定しますget_file_diffを使用して、チャンク全体を読み込まずに特定のファイルの完全なdiffを取得しますget_chunkを使用して、diff全体をコンテキストに読み込まずに特定のセクションを調査します進捗を体系的に追跡し、チャンクごとに大規模な変更セットを分析します
一時ファイルをクリーンアップして分析を完了します
これにより、AIアシスタントは通常であれば他のツールをクラッシュさせるような大規模なdiffを処理し、コンテキストを失うことなく徹底的な分析を提供できます。
ツールの使用パターン
まず概要を確認:
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単一ファイルのdiff:
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
)フォーマットオプション
get_chunk の format パラメータを使用して、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")Annotated形式は、## File: ヘッダー、新しいファイルの行番号を含む __new hunk__/__old hunk__ セクション、および @@ ヘッダーからの関数コンテキストを追加します。
Compact形式は、追加または保持された内容のみを表示し、削除された行と __old hunk__ セクションを完全に省略します。最終的な状態のみを確認したい場合に便利です。
コンテキストの削減
load_diff で context_lines を使用して、読み込み時にハンクごとのコンテキスト行数を削減できます:
# 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 diff 出力 (
git diff,git show)Unified diff 形式 (
diff -u)単一diff内の複数ファイル
バイナリファイルの変更インジケーター
パフォーマンス
10万行を超えるdiffを効率的に処理
メモリ効率の良いストリーミング
ファイル変更時の自動再読み込み
ドキュメント
ライセンス
Available Tools
5 toolsfind_chunks_for_filesARead-only
Locate chunks containing files that match a specific glob pattern. Auto-loads the diff file if not already loaded. Essential for targeted analysis when you need to focus on specific file types, directories, or naming patterns (e.g., '.py' for Python files, 'test' for test files, 'src/' for source directory). Returns chunk numbers which you then examine using get_chunk. CRITICAL: You must use an absolute directory path - relative paths will fail. DO NOT attempt direct file reading. Use this for efficient navigation to relevant changes instead of processing entire large diffs sequentially.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | Yes | Glob pattern to match file paths (e.g., '*.py', '*test*', 'src/*') | |
| absolute_file_path | Yes | Absolute path to the diff file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnlyHint=true annotation, description reveals auto-loading behavior and that output is chunk numbers. Warns about relative path failure. No contradictions.
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?
5 sentences, front-loaded with purpose, each sentence adds unique value (purpose, auto-load, use case, examples, critical warnings). No redundancy.
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 2 required parameters and no output schema, description covers all essential aspects: purpose, behavior, constraints, and next step (use get_chunk). Siblings listed for context.
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 covers 100% parameters, but description adds valuable context: pattern examples ('*.py'), and reiterates absolute path requirement with rationale.
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?
Clear verb+resource: 'Locate chunks containing files' with specific glob pattern. Distinguishes from siblings like get_chunk and list_chunks by focusing on file-pattern based searching.
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?
Explicitly states when to use (targeted analysis instead of processing entire diffs), critical constraints (absolute path required, no direct file reading), and alternatives relative to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chunkARead-only
Retrieve the actual content of a specific numbered chunk from a diff file. Auto-loads the diff file if not already loaded. Use this for systematic analysis of changes chunk-by-chunk, or to examine specific chunks identified via list_chunks or find_chunks_for_files. CRITICAL: You must use an absolute directory path - relative paths will fail. DO NOT read diff files directly - they exceed LLM context windows. This tool provides manageable portions of large diffs. Track your progress through chunks when doing comprehensive analysis and clean up tracking documents before final results.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format: 'raw' (default, standard diff), 'annotated' (line numbers, new/old hunk separation), 'compact' (line numbers, new hunks only) | raw |
| chunk_number | Yes | The chunk number to retrieve (1-indexed) | |
| include_context | No | Include chunk header with metadata | |
| absolute_file_path | Yes | Absolute path to the diff file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description adds that it auto-loads the diff file if not loaded and that it provides manageable portions. It correctly notes the absolute path requirement. No contradictions.
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 somewhat lengthy but every sentence adds value: purpose, usage, critical requirement, behavioral note, and progress tracking advice. Well-structured but could be slightly more concise.
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?
Despite no output schema, the description covers all essential aspects: what the tool does, when to use it, critical requirements (absolute path), behavioral traits (auto-loading, manageable portions), and guidance for comprehensive analysis. No gaps identified.
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 100% with descriptions for each parameter, so baseline is 3. The description adds the critical constraint that 'absolute_file_path' must be an absolute path, which is not in the schema. It also implies chunk_number is 1-indexed. Adds meaningful value beyond schema.
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 retrieves content of a specific chunk from a diff file. It distinguishes from siblings by mentioning it is for individual chunks identified via list_chunks or find_chunks_for_files, and explicitly warns against reading diff files directly.
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?
Provides clear when-to-use scenarios: systematic chunk-by-chunk analysis or examining specific chunks. Includes a critical note about absolute paths and a 'DO NOT' instruction for reading diff files directly. Slightly less explicit about alternatives but gives good context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_file_diffARead-only
Extract the complete diff for a single file from a loaded diff. Returns the diff --git header and all hunks for that file. Use this when you need changes for one specific file without fetching the entire chunk. Auto-loads the diff file if not already loaded. Supports exact file paths or glob patterns that match exactly one file. Use list_chunks with file_details to see per-file line counts and decide whether to use this tool or get_chunk. CRITICAL: You must use an absolute directory path - relative paths will fail.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Exact file path or glob pattern matching a single file within the diff (e.g., 'src/main.py', '*.config') | |
| absolute_file_path | Yes | Absolute path to the diff file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses auto-loading behavior and path requirement. No contradictions with annotations.
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?
Every sentence serves a purpose: purpose, usage guidance, behavioral note, error condition. Concise and front-loaded with essential 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?
Given no output schema, the description explains return value. With good annotations and clear parameter semantics, it provides complete contextual information for correct usage.
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 covers both parameters with descriptions, but the tool description adds valuable context: file_path can be exact path or glob, and absolute_file_path must be absolute. Adds nuance beyond schema.
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 action ('extract'), the resource ('complete diff for a single file'), and the output ('diff --git header and all hunks'). It distinguishes from sibling tools like get_chunk and list_chunks.
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?
Explicitly tells when to use ('when you need changes for one specific file'), references sibling tools for decision-making ('Use list_chunks... decide whether to use this tool or get_chunk'), and includes a critical requirement ('absolute directory path - relative paths will fail').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_chunksARead-only
Get an overview of all chunks in a diff file with file mappings and summaries. Auto-loads the diff file with optimal defaults if not already loaded. Use this as your first step to understand the scope and structure of changes before diving into specific chunks. CRITICAL: You must use an absolute directory path - relative paths will fail. DO NOT attempt to read the diff file directly as it will exceed context limits. This tool provides the roadmap for systematic chunk-by-chunk analysis. If using tracking documents to resume analysis, use this to orient yourself to remaining work. Each chunk includes a token_count estimate, and the response includes total_token_count for context-budget planning.
| Name | Required | Description | Default |
|---|---|---|---|
| absolute_file_path | Yes | Absolute path to the diff file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as readOnlyHint=true. Description adds behavior: 'Auto-loads the diff file with optimal defaults if not already loaded' and mentions response includes 'total_token_count'. Does not contradict annotations. Could mention error behavior if file not found, but still adds significant context.
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?
Description is packed with useful information and front-loaded with purpose. While every sentence adds value, it is slightly verbose. Could be tightened but still clear and efficient.
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?
Despite having only one parameter and no output schema, the description covers all needed context: purpose, usage guidelines, critical requirements, and expected response (file mappings, summaries, token counts). No gaps identified.
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 100% with one parameter. The description adds critical semantic info beyond the schema: 'You must use an absolute directory path - relative paths will fail.' This ensures correct usage.
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: 'Get an overview of all chunks in a diff file with file mappings and summaries.' It distinguishes itself from siblings like 'get_chunk' by positioning itself as the first step for understanding scope and structure.
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?
Explicitly guides when to use: 'Use this as your first step' and 'If using tracking documents to resume analysis, use this to orient yourself.' Also provides critical warnings: absolute path required, do not read diff file directly. Includes alternatives implicitly by describing the tool's role.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_diffARead-only
Parse and load a diff file with custom chunking settings. Use this tool ONLY when you need non-default settings (custom chunk sizes, filtering patterns). Otherwise, use list_chunks, get_chunk, or find_chunks_for_files which auto-load with optimal defaults. CRITICAL: You must use an absolute directory path - relative paths will fail. The diff file will be too large for direct reading, so you MUST use diffchunk tools for navigation. When using tracking documents for analysis, remember to clean up tracking state before presenting final results. The response includes a files_excluded count showing how many files were removed by exclude_patterns.
| Name | Required | Description | Default |
|---|---|---|---|
| skip_trivial | No | Skip whitespace-only changes | |
| context_lines | No | Number of context lines around each change (default: keep all from diff file) | |
| skip_generated | No | Skip generated files and build artifacts | |
| max_chunk_lines | No | Maximum lines per chunk | |
| exclude_patterns | No | Comma-separated glob patterns for files to exclude | |
| include_patterns | No | Comma-separated glob patterns for files to include | |
| absolute_file_path | Yes | Absolute path to the diff file to load |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true, consistent with description. Description adds behavioral context: absolute path, file size limitation, and need to clean tracking state. However, does not detail error handling or response content.
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?
Description is concise, front-loads purpose, and contains no redundant text. Slightly verbose with multiple sentences but still efficient.
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 7 parameters well-described in schema and text, no output schema, the description provides sufficient context for usage, warnings, and behavioral notes. Missing some details on return values, but overall adequate.
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 100%, baseline 3. Description adds extra meaning for parameters (e.g., 'whitespace-only changes' for skip_trivial, 'build artifacts' for skip_generated, 'comma-separated glob patterns' for exclude/include), justifying higher score.
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?
Description clearly states verb (parse/load) and resource (diff file), and distinguishes from siblings by specifying it is for non-default chunking settings.
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?
Explicitly says when to use (custom settings) and when not to (use siblings for defaults). Provides critical warnings: absolute path required, file too large, cleanup of tracking state.
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.
5 tool updates
v0.1.5- Added
find_chunks_for_files - Added
get_chunk - Added
get_file_diff - Added
list_chunks - Added
load_diff
4 tool updates
v0.1.0- Removed
find_chunks_for_files - Removed
get_chunk - Removed
list_chunks - Removed
load_diff
4 tool updates
v0.1.7- First observed
find_chunks_for_files - First observed
get_chunk - First observed
list_chunks - First observed
load_diff
TDQS
Scored across 5 tools
Each tool has a clearly distinct purpose: loading, listing, chunk retrieval, file-pattern search, and full file diff. No overlap or ambiguity.
All tool names follow the consistent snake_case verb_noun pattern (e.g., load_diff, list_chunks). Predictable and clear.
5 tools is well-scoped for a diff chunking server. Each tool serves a necessary function without being superfluous.
The toolset covers loading, listing, searching, and retrieving diff content. No obvious missing operations for the domain.
Maintenance
Related MCP Connectors
Code intelligence for LLMs. Analyze, search, and retrieve code from any public git repository.
Code-map tools for AI agents: see a repo's structure first, then edit only what matters.
11Code intelligence for coding agents: semantic, AST, graph, and full-text search. 279+ languages.
Change-aware CI validation and affected-test guidance for coding agents.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables pattern-based file editing operations using copy/paste functionality with text landmarks instead of exact string matching. Allows AI agents to efficiently manipulate file content by identifying code patterns and insertion points without consuming large amounts of context tokens.1MIT
- AlicenseAqualityBmaintenanceEnables intelligent handling of large files through smart chunking, search with regex support, line navigation, and streaming capabilities without loading entire files into memory.651 npm18MIT
- AlicenseAqualityAmaintenanceReduces token consumption by over 80% through intelligent file caching, returning only diffs for modified files and suppressing unchanged content. It features a suite of 12 tools for semantic search, batch reading, and efficient file editing to optimize LLM interactions with large codebases.142MIT
- AlicenseNot gradedqualityDmaintenanceProvides file caching and diff tracking for AI coding agents, reducing token usage by returning changes or confirming no changes instead of full file contents on repeated reads.82 npm220MIT