diffchunk
diffchunk
LLMが大規模なdiffファイルを効率的にナビゲートできるようにするMCPサーバーです。LLMはdiff全体を順番に読み込む代わりに、パターンベースのナビゲーションを使用して関連する変更箇所に直接ジャンプできます。
問題点
大規模なdiffはLLMのコンテキスト制限を超え、無関係な変更にトークンを浪費してしまいます。5万行を超えるdiffは直接処理できず、手動で分割するとファイル間の関係性が失われてしまいます。
解決策
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を効率的に処理
メモリ効率の良いストリーミング
ファイル変更時の自動再読み込み
ドキュメント
ライセンス
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/peteretelej/diffchunk'
If you have feedback or need assistance with the MCP directory API, please join our Discord server