Diffchunk
Navega por archivos diff grandes con fragmentación inteligente y herramientas de navegación.
Documentación
diffchunk
Servidor MCP que permite a los LLMs navegar eficientemente por archivos de diff grandes. En lugar de leer diffs completos secuencialmente, los LLMs pueden saltar directamente a los cambios relevantes utilizando navegación basada en patrones.
Problema
Los diffs grandes exceden los límites de contexto de los LLM y desperdician tokens en cambios irrelevantes. Un diff de más de 50k líneas no puede procesarse directamente y la división manual pierde las relaciones entre archivos.
Solución
Servidor MCP con 5 herramientas de navegación:
load_diff- Analizar archivo de diff con configuración personalizada (opcional)list_chunks- Mostrar resumen de fragmentos con mapeos de archivos y recuentos de líneas por archivo (auto-carga)get_chunk- Recuperar contenido específico de un fragmento (auto-carga)find_chunks_for_files- Localizar fragmentos por patrones de archivo (auto-carga)get_file_diff- Extraer el diff completo de un solo archivo (auto-carga)
Configuración
Requisito previo: Instalar uv (un gestor de paquetes de Python extremadamente rápido) que proporciona el comando uvx.
Añade a la configuración de tu cliente MCP:
{
"mcpServers": {
"diffchunk": {
"command": "uvx",
"args": ["--from", "diffchunk", "diffchunk-mcp"]
}
}
}
Uso
Tu asistente de IA ahora puede manejar conjuntos de cambios masivos que anteriormente causaban fallos en Cline, Roocode, Cursor y otras herramientas.
Uso con Asistente de IA
Una vez configurado, tu asistente de IA puede analizar commits, ramas o diffs grandes usando diffchunk.
Aquí hay algunos ejemplos de casos de uso:
Comparaciones de ramas:
- "Revisa todos los cambios en develop que no están en la rama main para buscar errores"
- "Cuéntame sobre todos los cambios que aún no he fusionado"
- "¿Qué nuevas características se añadieron a la rama staging?"
- "Resume todos los cambios en este repositorio en las últimas 2 semanas"
Revisión de código:
- "Usa diffchunk para verificar mi rama de características en busca de vulnerabilidades de seguridad"
- "Usa diffchunk para encontrar cambios que rompan algo antes de fusionar a producción"
- "Usa diffchunk para revisar este gran refactor en busca de problemas potenciales"
Análisis de cambios:
- "Usa diffchunk para mostrarme todas las migraciones de base de datos que necesitan ejecutarse"
- "Usa diffchunk para encontrar qué cambios de API podrían afectar nuestra aplicación móvil"
- "Usa diffchunk para analizar todas las nuevas dependencias añadidas recientemente"
Análisis directo de archivos:
- "Usa diffchunk para analizar el diff en /tmp/cambios.diff y encontrar errores"
- "Crea un diff de mis cambios sin confirmar y revísalo"
- "Compara mi rama local con origin y resalta conflictos"
Consejo: Reglas del Asistente de IA
Añade a las instrucciones personalizadas de tu asistente de IA para uso automático:
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.
Cómo Funciona
Cuando le pides a tu asistente de IA que analice cambios, utiliza las herramientas de diffchunk estratégicamente:
- Crea el archivo de diff (por ejemplo,
git diff main..develop > /tmp/changes.diff) basado en tu pregunta - Usa
list_chunkspara obtener una visión general de la estructura del diff y el alcance total, incluyendo recuentos de líneas por archivo mediantefile_details - Usa
find_chunks_for_filespara localizar secciones relevantes cuando preguntas sobre tipos de archivo específicos - Usa
get_file_diffpara obtener el diff completo de un archivo específico sin cargar un fragmento completo - Usa
get_chunkpara examinar secciones específicas sin cargar todo el diff en el contexto - Realiza un seguimiento sistemático del progreso a través de conjuntos de cambios grandes, analizando fragmento por fragmento
- Limpia archivos temporales después de completar el análisis
Esto permite que tu asistente de IA maneje diffs masivos que normalmente harían fallar otras herramientas, proporcionando un análisis exhaustivo sin perder contexto.
Patrones de Uso de Herramientas
Visión general primero:
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
Apuntar a archivos específicos:
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 de un solo archivo:
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
Análisis sistemático:
# Process each chunk in sequence
get_chunk("/tmp/changes.diff", 1)
get_chunk("/tmp/changes.diff", 2)
# ... continue through all chunks
Configuración
Requisitos de Ruta
- Solo rutas absolutas:
/home/user/project/changes.diff - Multiplataforma: Windows (
C:\path) y Unix (/path) - Expansión de directorio personal:
~/project/changes.diff
Valores Predeterminados de Auto-Carga
Las herramientas se auto-cargan con configuraciones optimizadas:
max_chunk_lines: 1000skip_trivial: true (solo espacios en blanco)skip_generated: true (archivos de bloqueo, artefactos de compilación)
Configuración Personalizada
Usa load_diff para comportamiento no predeterminado:
load_diff(
"/tmp/large.diff",
max_chunk_lines=2000,
include_patterns="*.py,*.js",
exclude_patterns="*test*",
context_lines=2
)
Opciones de Formato
Usa el parámetro format en get_chunk para transformar la salida para consumo del 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")
Formato anotado añade encabezados ## File:, secciones __new hunk__/__old hunk__ con números de línea del archivo nuevo y contexto de funciones de los encabezados @@.
Formato compacto muestra solo lo que se añadió o conservó, omitiendo líneas eliminadas y secciones __old hunk__ por completo. Útil cuando solo necesitas ver el estado final.
Reducción de Contexto
Usa context_lines en load_diff para reducir las líneas de contexto por fragmento en el momento de la carga:
# 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)
Esto se combina con format - el contexto se reduce en el momento de la carga, luego el formato se aplica en el momento de la visualización.
Formatos Soportados
- Salida de diff de Git (
git diff,git show) - Formato de diff unificado (
diff -u) - Múltiples archivos en un solo diff
- Indicadores de cambios en archivos binarios
Rendimiento
- Maneja eficientemente diffs de más de 100k líneas
- Transmisión eficiente en memoria
- Recarga automática en cambios de archivo
Documentación
- Diseño - Detalles de arquitectura e implementación
- Contribución - Guías de contribución y configuración de desarrollo