Skip to main content
Glama

diffchunk

CI PyPI version Python 3.10+ License: MIT uv

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のツールを戦略的に使用します:

  1. diffファイルの作成(例: git diff main..develop > /tmp/changes.diff)を質問に基づいて行います

  2. list_chunks を使用して、file_details を介したファイルごとの行数を含む、diff構造と全体的な範囲の概要を取得します

  3. find_chunks_for_files を使用して、特定のファイルタイプについて尋ねられた際に関連セクションを特定します

  4. get_file_diff を使用して、チャンク全体を読み込まずに特定のファイルの完全なdiffを取得します

  5. get_chunk を使用して、diff全体をコンテキストに読み込まずに特定のセクションを調査します

  6. 進捗を体系的に追跡し、チャンクごとに大規模な変更セットを分析します

  7. 一時ファイルをクリーンアップして分析を完了します

これにより、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: 1000

  • skip_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_chunkformat パラメータを使用して、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_diffcontext_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を効率的に処理

  • メモリ効率の良いストリーミング

  • ファイル変更時の自動再読み込み

ドキュメント

  • 設計 - アーキテクチャと実装の詳細

  • 貢献 - 貢献ガイドラインと開発セットアップ

ライセンス

MIT

Install Server
A
security – no known vulnerabilities
A
license - permissive license
-
quality - not tested

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