Skip to main content
Glama

diffchunk

CI PyPI version Python 3.10+ License: MIT uv

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:

  1. Создает файл diff (например, git diff main..develop > /tmp/changes.diff) на основе вашего вопроса

  2. Использует list_chunks, чтобы получить обзор структуры diff и общего объема, включая количество строк для каждого файла через file_details

  3. Использует find_chunks_for_files, чтобы найти соответствующие разделы, когда вы спрашиваете о конкретных типах файлов

  4. Использует get_file_diff, чтобы получить полный diff для одного конкретного файла без загрузки всего фрагмента

  5. Использует get_chunk, чтобы изучить конкретные разделы без загрузки всего diff в контекст

  6. Систематически отслеживает прогресс по большим наборам изменений, анализируя фрагмент за фрагментом

  7. Удаляет временные файлы после завершения анализа

Это позволяет вашему ИИ-ассистенту обрабатывать массивные 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 (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 тыс. строк

  • Потоковая передача с низким потреблением памяти

  • Автоматическая перезагрузка при изменении файлов

Документация

  • Дизайн — архитектура и детали реализации

  • Вклад — рекомендации по внесению вклада и настройка разработки

Лицензия

MIT

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

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