diffchunk
diffchunk
MCP-сервер, который позволяет LLM эффективно перемещаться по большим файлам diff. Вместо последовательного чтения всего diff, LLM могут переходить непосредственно к нужным изменениям, используя навигацию на основе шаблонов.
Проблема
Большие diff превышают лимиты контекста LLM и расходуют токены на нерелевантные изменения. Diff размером более 50 тыс. строк невозможно обработать напрямую, а ручное разделение приводит к потере связей между файлами.
Решение
MCP-сервер с 5 инструментами навигации:
load_diff— разбор файла diff с пользовательскими настройками (опционально)list_chunks— обзор фрагментов с сопоставлением файлов и подсчетом строк для каждого файла (автозагрузка)get_chunk— получение содержимого конкретного фрагмента (автозагрузка)find_chunks_for_files— поиск фрагментов по шаблонам имен файлов (автозагрузка)get_file_diff— извлечение полного diff для одного файла (автозагрузка)
Установка
Предварительное требование: Установите uv (чрезвычайно быстрый менеджер пакетов Python), который предоставляет команду uvx.
Добавьте в конфигурацию вашего MCP-клиента:
{
"mcpServers": {
"diffchunk": {
"command": "uvx",
"args": ["--from", "diffchunk", "diffchunk-mcp"]
}
}
}Использование
Ваш ИИ-ассистент теперь может обрабатывать массивные наборы изменений, которые ранее приводили к сбоям в Cline, Roocode, Cursor и других инструментах.
Использование с ИИ-ассистентом
После настройки ваш ИИ-ассистент сможет анализировать большие коммиты, ветки или diff с помощью diffchunk.
Вот несколько примеров использования:
Сравнение веток:
"Проверь все изменения в develop, которых нет в основной ветке, на наличие ошибок"
"Расскажи мне обо всех изменениях, которые я еще не объединил"
"Какие новые функции были добавлены в ветку staging?"
"Обобщи все изменения в этом репозитории за последние 2 недели"
Код-ревью:
"Используй diffchunk, чтобы проверить мою ветку с функциями на наличие уязвимостей безопасности"
"Используй diffchunk, чтобы найти любые критические изменения перед слиянием с продакшеном"
"Используй diffchunk, чтобы просмотреть этот крупный рефакторинг на предмет потенциальных проблем"
Анализ изменений:
"Используй diffchunk, чтобы показать мне все миграции базы данных, которые необходимо выполнить"
"Используй diffchunk, чтобы найти, какие изменения API могут повлиять на наше мобильное приложение"
"Используй diffchunk, чтобы проанализировать все новые зависимости, добавленные недавно"
Прямой анализ файлов:
"Используй diffchunk, чтобы проанализировать diff в /tmp/changes.diff и найти ошибки"
"Создай diff моих незакоммиченных изменений и проанализируй его"
"Сравни мою локальную ветку с origin и выдели конфликты"
Совет: Правила для ИИ-ассистента
Добавьте в пользовательские инструкции вашего ИИ-ассистента для автоматического использования:
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, чтобы получить полный diff для одного конкретного файла без загрузки всего фрагментаИспользует
get_chunk, чтобы изучить конкретные разделы без загрузки всего diff в контекстСистематически отслеживает прогресс по большим наборам изменений, анализируя фрагмент за фрагментом
Удаляет временные файлы после завершения анализа
Это позволяет вашему ИИ-ассистенту обрабатывать массивные 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 chunkDiff одного файла:
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 (lock-файлы, артефакты сборки)
Пользовательские настройки
Используйте 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 diff (
git diff,git show)Формат Unified diff (
diff -u)Несколько файлов в одном diff
Индикаторы изменений бинарных файлов
Производительность
Эффективная обработка diff объемом более 100 тыс. строк
Потоковая передача с низким потреблением памяти
Автоматическая перезагрузка при изменении файлов
Документация
Дизайн — архитектура и детали реализации
Вклад — рекомендации по внесению вклада и настройка разработки
Лицензия
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