Fossil MCP

El kit de herramientas de calidad de código para la era de la codificación por vibra.

Documentación

Fossil MCP

El kit de herramientas de calidad de código para la era del vibe coding.

Análisis estático que encuentra el desorden que el vibe coding deja atrás: código muerto, lógica duplicada, artefactos de andamiaje y funciones desconectadas, en 16 lenguajes.

fossil-mcp.com

CI Crates.io License: MIT OR Apache-2.0


El Problema

La codificación asistida por IA está bien: revisas el código, entiendes la arquitectura, mantienes el control. El vibe coding es diferente. Describes lo que quieres, la IA lo escribe y lo publicas sin leer cada línea. Herramientas como Claude Code, Cursor, GitHub Copilot y Windsurf hacen que este flujo de trabajo sea rápido y productivo. Pero con el paso de los días y las semanas, los proyectos creados con vibe coding acumulan una clase específica de problemas que los linters tradicionales no detectan:

El código muerto se acumula rápido. Cuando la IA refactoriza una función, escribe la nueva versión pero a menudo olvida eliminar la anterior. No te das cuenta porque no leíste el diff línea por línea. Después de varias sesiones, las funciones sin usar, las ramas inalcanzables y las utilidades huérfanas se acumulan: la base de código crece pero nada se poda. Un estudio de METR encontró que los desarrolladores dedican tiempo significativo a verificar y depurar la salida de la IA. El código muerto hace que esto sea exponencialmente más difícil.

La duplicación se propaga en silencio. Cada sesión de IA tiene una ventana de contexto limitada. Genera una función de utilidad que ya existe en otro lugar, o resuelve el mismo problema con una implementación ligeramente diferente tres archivos más allá. Pediste una funcionalidad, funciona, así que sigues adelante. La detección tradicional de duplicados se centra en copiar y pegar: la duplicación por vibe coding es estructural: lógica similar, nombres diferentes, dispersa entre módulos.

// Phase 1, // TODO, // Step 2 — en todas partes. Los agentes de IA trabajan por fases. Dejan marcadores de andamiaje que se suponía que serían temporales: // Phase 1: Setup, // TODO: implement error handling, cuerpos de funciones de relleno con pass o todo!(), y nombres por fases como process_data_v2. En el vibe coding, nadie vuelve a limpiar esto. Se convierten en elementos permanentes.

Existen funciones que nada llama. Esta es la firma del vibe coding. La IA escribe una función auxiliar, la usa, y luego en una sesión posterior reescribe la llamada para usar un enfoque diferente, pero la auxiliar permanece. Sin un grafo de llamadas, ni tú ni la IA pueden saber qué funciones están realmente conectadas al resto de la base de código. Las herramientas actuales de codificación con IA navegan el código mediante búsqueda de texto, no comprendiendo cómo se llaman las funciones entre sí.

Los archivos temporales se acumulan en el repositorio. Las sesiones de IA crean archivos y directorios temp_, backup_, old_, phase_1_. En el vibe coding, no auditas tu árbol de archivos después de cada sesión. Estos artefactos persisten entre commits.

La Solución

Fossil MCP es un kit de herramientas de análisis estático diseñado específicamente para proyectos creados con vibe coding. Detecta los artefactos que se acumulan cuando la IA escribe la mayor parte del código, y funciona tanto como herramienta CLI para desarrolladores como servidor MCP que brinda a los agentes de IA un grafo de código en lugar de solo búsqueda de texto.

  ███████╗ ██████╗ ███████╗███████╗██╗██╗           ()    ()
  ██╔════╝██╔═══██╗██╔════╝██╔════╝██║██║            \    /
  █████╗  ██║   ██║███████╗███████╗██║██║             |  |
  ██╔══╝  ██║   ██║╚════██║╚════██║██║██║             |  |
  ██║     ╚██████╔╝███████║███████║██║███████╗       /    \
  ╚═╝      ╚═════╝ ╚══════╝╚══════╝╚═╝╚══════╝      ()    ()
  Dig up dead code. Unearth clones. Expose scaffolding.

Lo que Fossil Detecta

AnálisisLo que encuentraEl problema del vibe coding
Código MuertoFunciones inalcanzables, exportaciones sin usar, métodos huérfanosLa IA reescribe una llamada pero olvida eliminar la función auxiliar anterior: nadie lo nota
Clones de CódigoDuplicados Tipo 1 (exactos), Tipo 2 (renombrados), Tipo 3 (estructurales)Cada sesión de IA reinventa utilidades que ya existen en otra parte de la base de código
AndamiajeComentarios Phase N / Step N, marcadores TODO/FIXME, cuerpos de rellenoLa IA trabaja por fases y deja marcadores temporales que nunca se limpian
Archivos TemporalesArchivos y directorios temp_*, backup_*, old_*, phase_*Artefactos de sesión que persisten porque nadie audita el árbol de archivos
Grafo de CódigoRutas de trazado entre dos funciones cualesquiera, análisis de radio de explosión, recorrido del grafo de llamadasLas herramientas de IA navegan mediante búsqueda de texto: Fossil les da un grafo para rastrear cómo se conectan las funciones y qué se rompe si cambias una

Qué Hace Diferente a Fossil

  • Diseñado específicamente para vibe coding. No es un linter general: se dirige específicamente al desorden que se acumula cuando la IA escribe la mayor parte del código y los humanos revisan menos.
  • Grafo, no grep. Las herramientas de codificación con IA navegan el código buscando texto. Fossil construye un grafo de llamadas y permite a los agentes rastrear cómo se conectan las funciones, encontrar el radio de explosión antes de refactorizar y descubrir callejones sin salida, sin leer cada archivo.
  • Nativo para MCP. Se ejecuta como servidor MCP para que los agentes de IA puedan autoverificar su salida durante el desarrollo.
  • Ahorra tokens, ahorra dinero. En lugar de que un agente escanee archivos una y otra vez para encontrar problemas, Fossil identifica código muerto, clones y andamiaje en una sola pasada: menos rondas de inferencia de LLM, menor costo.
  • Construido en Rust. Un solo binario, sin dependencias de ejecución. Escanea miles de archivos en segundos. Seguro en memoria por diseño.
  • Análisis entre archivos. Resuelve imports, re-exportaciones de barril y jerarquías de clases para encontrar código muerto a través de los límites de los módulos.
  • Consciente de frameworks. Detecta automáticamente React, Next.js, Django, Spring, Axum y más: no marcará métodos de ciclo de vida como código muerto.
  • Cero configuración. Funciona de inmediato. El archivo de configuración es opcional.
  • 16 lenguajes. Una sola herramienta para bases de código políglotas.

Instalación

Instalación rápida (recomendada)

macOS / Linux:

curl -fsSL fossil-mcp.com/install.sh | sh

Windows (PowerShell):

irm fossil-mcp.com/install.ps1 | iex

Detecta automáticamente tu sistema operativo y arquitectura, descarga el binario más reciente y lo agrega a tu PATH.

Descarga manual

Descarga el binario más reciente para tu plataforma desde GitHub Releases:

# macOS (Apple Silicon)
curl -L https://github.com/yfedoseev/fossil-mcp/releases/latest/download/fossil-mcp-macos-aarch64.tar.gz | tar xz
mv fossil-mcp /usr/local/bin/

# macOS (Intel)
curl -L https://github.com/yfedoseev/fossil-mcp/releases/latest/download/fossil-mcp-macos-x86_64.tar.gz | tar xz
mv fossil-mcp /usr/local/bin/

# Linux (x86_64)
curl -L https://github.com/yfedoseev/fossil-mcp/releases/latest/download/fossil-mcp-linux-x86_64-musl.tar.gz | tar xz
mv fossil-mcp ~/.local/bin/
PlataformaArquitecturaArchivo
Linuxx86_64 (recomendada)fossil-mcp-linux-x86_64-musl
Linuxx86_64 (glibc)fossil-mcp-linux-x86_64
LinuxARM64fossil-mcp-linux-aarch64
macOSIntelfossil-mcp-macos-x86_64
macOSApple Siliconfossil-mcp-macos-aarch64
Windowsx86_64fossil-mcp-windows-x86_64

cargo-binstall

Si tienes cargo-binstall, descarga binarios precompilados en lugar de compilar desde el código fuente:

cargo binstall fossil-mcp

Desde crates.io

cargo install fossil-mcp

Esto descarga el código fuente desde crates.io y lo compila localmente. Requiere un toolchain de Rust.

Desde el código fuente

git clone https://github.com/yfedoseev/fossil-mcp.git
cd fossil-mcp
cargo build --release

El binario está en ./target/release/fossil-mcp.

Actualización

fossil-mcp update

Configuración del Servidor MCP

Install in VS Code Install in VS Code Insiders Install in Cursor

Fossil se ejecuta como servidor MCP de forma predeterminada: solo ejecuta fossil-mcp sin argumentos. Conéctalo a tu herramienta de codificación con IA:

Claude Code
claude mcp add fossil fossil-mcp
OpenAI Codex

Agrégalo a tu configuración de MCP de Codex:

{
  "mcpServers": {
    "fossil": {
      "command": "fossil-mcp"
    }
  }
}
Cursor

Agrégalo a ~/.cursor/mcp.json:

{
  "mcpServers": {
    "fossil": {
      "command": "fossil-mcp"
    }
  }
}

O haz clic en el botón de instalación de Cursor arriba.

VS Code / VS Code Insiders

Agrégalo a .vscode/mcp.json en tu espacio de trabajo:

{
  "mcp": {
    "servers": {
      "fossil": {
        "command": "fossil-mcp"
      }
    }
  }
}

O haz clic en el botón de instalación de VS Code arriba.

Windsurf

Agrégalo a ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "fossil": {
      "command": "fossil-mcp"
    }
  }
}
Claude Desktop

Agrégalo a claude_desktop_config.json:

{
  "mcpServers": {
    "fossil": {
      "command": "fossil-mcp"
    }
  }
}

Herramientas MCP

Una vez conectado, tu agente de IA tiene acceso a estas herramientas:

HerramientaDescripción
scan_allEjecuta todos los análisis (código muerto + clones + andamiaje) en un proyecto
analyze_dead_codeDetecta código inalcanzable con confianza configurable
detect_clonesEncuentra código duplicado (clones Tipo 1/2/3)
fossil_refreshReanálisis incremental después de cambios en archivos (rápido)
fossil_inspectInspecciona el grafo de llamadas, flujo de datos, flujo de control o radio de explosión de cualquier función
fossil_traceEncuentra rutas de llamadas entre dos funciones: comprende cómo se conecta el código
fossil_explain_findingObtén contexto enriquecido sobre un hallazgo específico
fossil_detect_scaffoldingEncuentra andamiaje de IA: comentarios por fases, TODOs, marcadores de posición y archivos temporales

Uso de CLI

Modos

Fossil tiene cuatro modos de operación:

ModoCómo invocarloQué hace
Interactivofossil-mcp (sin argumentos)Ejecuta un escaneo completo + abre un REPL interactivo para explorar hallazgos
CLIfossil-mcp <command>Ejecuta un comando de análisis específico
Servidor MCPfossil-mcp mcp o stdin canalizadoServidor JSON-RPC para herramientas de codificación con IA
CI/CDfossil-mcp checkFalla las compilaciones cuando se superan los umbrales

Modo Interactivo

Ejecutar fossil-mcp sin argumentos (o fossil-mcp scan .) escanea el directorio actual en busca de código muerto, clones y andamiaje, muestra un panel de control y luego abre un REPL interactivo:

  FOSSIL Scanning .
  ────────────────────────────────────────────────
   ✓  1200 nodes analyzed, 42 unreachable
   ✓  380 files analyzed, 8 clone groups
   ✓  3 scaffolding artifacts

  ══════════════════════════════════════════════════
  RESULTS  53  findings across 28 files
  ══════════════════════════════════════════════════

  ▐ Dead Code     42   ██████████████░░
  ▐ Clones         8   ██░░░░░░░░░░░░░░    120 duplicated lines
  ▐ Scaffolding    3   █░░░░░░░░░░░░░░░

  fossil>

Comandos del REPL

Todos los comandos de exploración admiten filtros opcionales de cantidad y lenguaje: command [N] [lang]

fossil> dead 10                  # Top 10 dead code findings
fossil> dead 20 typescript       # Top 20 dead code in TypeScript
fossil> clones 5 rust            # Top 5 clone groups in Rust
fossil> scaffolding              # All scaffolding findings
fossil> scaffolding 10 python    # Top 10 scaffolding in Python
fossil> hotspots                 # Files with most findings
fossil> hotspots 10 go           # Top 10 hotspot files in Go
fossil> file auth.ts             # All findings in a specific file
fossil> langs                    # Language breakdown
fossil> export sarif             # Export full SARIF report
fossil> summary                  # Re-show dashboard
fossil> q                        # Quit

Comandos

fossil-mcp scan [path]

Ejecuta todos los análisis (código muerto + clones + andamiaje) con panel de control interactivo.

fossil-mcp scan .
fossil-mcp scan /path/to/project --format sarif -o results.sarif
fossil-mcp scan /path/to/project --format json

fossil-mcp dead-code [path]

Solo detección de código muerto.

fossil-mcp dead-code .
fossil-mcp dead-code . --min-confidence high
fossil-mcp dead-code . --min-lines 10
fossil-mcp dead-code . --language rust,python
fossil-mcp dead-code . --diff main                  # Only changed files
fossil-mcp dead-code . --stats                      # Show graph statistics
fossil-mcp dead-code . --cache-dir .fossil-cache     # Persistent cache
fossil-mcp dead-code . --cache-stats                 # Cache hit rate
BanderasDescripción
--min-confidence <LEVEL>Filtra por confianza: low, medium, high, certain
--min-lines <N>Líneas mínimas de código para un hallazgo
--language <LANGS>Filtra por lenguaje (separado por comas): rust,python,go
--include-testsIncluye código solo de pruebas en los resultados
--diff <BRANCH>Solo analiza archivos modificados en comparación con la rama base
--statsImprime estimaciones de cardinalidad del grafo (HyperLogLog)
--cache-dir <PATH>Directorio de caché persistente para análisis incremental
--cache-statsImprime la tasa de aciertos de caché y el uso de memoria

fossil-mcp clones [path]

Solo detección de clones (código duplicado).

fossil-mcp clones .
fossil-mcp clones . --min-lines 10
fossil-mcp clones . --similarity 0.9
fossil-mcp clones . --language typescript
fossil-mcp clones . --types type1,type2
BanderasDescripción
--min-lines <N>Líneas mínimas para un clon (predeterminado: 6)
--similarity <F>Umbral de similitud 0.0–1.0 para clones Tipo 3 (predeterminado: 0.8)
--types <TYPES>Tipos de clon a detectar: type1,type2,type3 (predeterminado: todos)
--language <LANGS>Filtra por lenguaje (separado por comas)

fossil-mcp scaffolding [path]

Detecta artefactos de andamiaje generados por IA.

fossil-mcp scaffolding .
fossil-mcp scaffolding . --language rust
fossil-mcp scaffolding . --include-todos
fossil-mcp scaffolding . --format json
BanderasDescripción
--language <LANGS>Filtra por lenguaje (separado por comas)
--include-todosIncluye marcadores TODO/FIXME/HACK (excluidos por defecto)

Detecta: cuerpos de relleno (pass, todo!(), unimplemented!()), comentarios por fases (Phase 1, Step 2), identificadores de andamiaje (scaffold_*, boilerplate_*), impresiones de depuración y archivos temporales (temp_*, backup_*, old_*).

fossil-mcp check [path]

Modo CI/CD: falla las compilaciones cuando se superan los umbrales. Consulta Integración CI/CD para más detalles.

fossil-mcp check
fossil-mcp check --max-dead-code 10 --max-clones 5
fossil-mcp check --diff origin/main
fossil-mcp check --diff origin/main --format sarif
fossil-mcp check --fail-on-scaffolding
FlagDescripción
--max-dead-code <N>Máximo de hallazgos de código muerto permitidos
--max-clones <N>Máximo de hallazgos de clones permitidos
--max-scaffolding <N>Máximo de hallazgos de andamiaje permitidos
--min-confidence <LEVEL>Confianza mínima para contar hallazgos
--diff <BRANCH>Solo verificar archivos cambiados respecto a la rama base
--fail-on-scaffoldingFallar si se encuentra algún artefacto de andamiaje

fossil-mcp weekly

Muestra los rankings semanales de basura de IA en proyectos de código abierto.

fossil-mcp weekly
fossil-mcp weekly --detailed

fossil-mcp update

Actualiza fossil-mcp a la última versión.

fossil-mcp update
fossil-mcp update --check    # Check without installing

fossil-mcp mcp

Inicia el servidor MCP explícitamente (normalmente se detecta automáticamente mediante stdin canalizado).

Banderas globales

Estas banderas funcionan con todos los comandos:

FlagDescripción
--format <FMT>Formato de salida: text, json, sarif (por defecto: text)
-o, --output <FILE>Escribe la salida a un archivo en lugar de stdout
-q, --quietSuprime toda la salida que no sea de error
-v, --verboseHabilita el registro de depuración
-c, --config <FILE>Ruta al archivo de configuración

Lenguajes soportados

LenguajeExtensiones
Python.py
JavaScript.js, .jsx, .mjs
TypeScript.ts, .tsx
Rust.rs
Go.go
Java.java
C#.cs
C/C++.c, .h, .cpp, .cc, .cxx, .hpp
Ruby.rb
PHP.php
Swift.swift
Kotlin.kt
Scala.scala
Bash.sh, .bash
R.r, .R

Configuración (Opcional)

Fossil funciona con cero configuración. Todos los ajustes tienen valores predeterminados sensatos. Si necesitas personalizar el comportamiento, crea un fossil.toml en la raíz de tu proyecto:

[dead_code]
min_confidence = "high"       # low, medium, high, certain
include_tests = false
exclude_patterns = ["generated/**", "vendor/**"]

[clones]
min_lines = 6
similarity_threshold = 0.8

[entry_points]
# Mark additional functions as entry points (won't be flagged as dead)
functions = ["custom_handler", "my_entry"]
# Additional entry point attributes/decorators
attributes = ["MyFramework::route"]
# Framework presets (auto-detected by default)
presets = ["axum", "react"]
auto_detect_presets = true

La configuración se descubre automáticamente a partir de estos nombres de archivo: fossil.toml, .fossil.toml, fossil.yml, fossil.yaml, fossil.json.

Las variables de entorno anulan los valores del archivo de configuración:

VariableEfecto
FOSSIL_MIN_CONFIDENCEConfianza mínima para hallazgos de código muerto
FOSSIL_MIN_LINESLíneas mínimas para detección de clones
FOSSIL_SIMILARITYUmbral de similitud para clones de Tipo 3
FOSSIL_OUTPUT_FORMATFormato de salida (text, json, sarif)

Presets de frameworks

Los presets se detectan automáticamente a partir de las dependencias del proyecto. Le indican a Fossil qué funciones son puntos de entrada del framework (ganchos de ciclo de vida, manejadores de rutas, etc.) para que no se marquen como código muerto:

PresetDetectado porPuntos de entrada reconocidos
reactreact en dependenciascomponentDidMount, render, useEffect, ...
nextjsnext en dependenciasgetServerSideProps, getStaticProps, ...
expressexpress en dependenciaspatrones router.*
djangodjango en dependenciasget, post, manejadores de patrones de URL
flaskflask en dependenciaspatrones app.route
springspring-boot en dependencias@Bean, @Controller, @Service, ...
axumaxum en dependencias#[tokio::main], #[debug_handler]
actixactix-web en dependencias#[actix_web::main], #[get], #[post], ...
angular@angular/core en dependenciasngOnInit, ngOnDestroy, ...

Integración CI/CD

Fossil incluye un comando check para pipelines de CI/CD. Hace fallar las compilaciones cuando se superan los umbrales de calidad de código, ayudando a los equipos a hacer cumplir los estándares de código y evitar que se acumule deuda técnica.

Uso básico

# Check against configured thresholds
fossil-mcp check

# Override thresholds via CLI
fossil-mcp check --max-dead-code 10 --max-clones 5

# Diff-aware mode (only analyze changed files in PR)
fossil-mcp check --diff origin/main

# Generate SARIF for GitHub code scanning
fossil-mcp check --diff origin/main --format sarif

# Quiet mode (no diagnostic output)
fossil-mcp check --quiet

Configuración

Agrega una sección [ci] a fossil.toml:

[ci]
max_dead_code = 10           # Maximum dead code findings (0 = fail on any)
max_clones = 5               # Maximum clone findings
max_scaffolding = 3          # Maximum scaffolding findings
min_confidence = "medium"    # Minimum confidence (low|medium|high|certain)
fail_on_scaffolding = false  # Fail if any scaffolding found

Integración con GitHub Actions

Crea .github/workflows/fossil-check.yml:

name: Fossil CI Check

on:
  pull_request:
  push:
    branches: [main]

jobs:
  fossil:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Install Fossil
        run: curl -fsSL fossil-mcp.com/install.sh | sh

      - name: Run Fossil check
        run: |
          fossil-mcp check \
            --diff origin/${{ github.base_ref || 'main' }} \
            --format sarif \
            > fossil-results.sarif

      - name: Upload to GitHub Security
        if: always()
        uses: github/codeql-action/upload-sarif@v3
        with:
          sarif_file: fossil-results.sarif

Cómo funciona

  1. Escanea el proyecto usando el mismo motor de análisis que scan
  2. Filtra opcionalmente solo los archivos cambiados (mediante --diff branch)
  3. Evalúa contra los umbrales configurados
  4. Reporta hallazgos como texto, JSON o SARIF
  5. Sale con código 1 si se superan los umbrales (falla la compilación de CI)

Códigos de salida

CódigoSignificado
0Todos los umbrales superados ✓
1Umbral superado (la compilación falla)
2Error (falta git, configuración inválida, etc.)

Para ejemplos completos, consulta examples/fossil.toml y examples/fossil-check.yml.


Cómo funciona

  1. Escaneo — recorre los archivos del proyecto, respeta .gitignore, omite código vendido/generado
  2. Análisis sintáctico — construye ASTs de tree-sitter para cada archivo fuente (16 lenguajes)
  3. Extracción — extrae funciones, llamadas, importaciones, atributos y jerarquía de clases de los ASTs
  4. Grafo — construye un CodeGraph entre archivos con resolución de importaciones y soporte de re-exportación de barril
  5. Análisis — detecta puntos de entrada (mediante heurísticas + presets de frameworks), ejecuta análisis de alcanzabilidad, identifica código muerto y clones
  6. Reporte — genera hallazgos como panel de texto, JSON o SARIF

Contribuciones

¡Damos la bienvenida a las contribuciones! Consulta CONTRIBUTING.md para las pautas.

Licencia

Licenciado bajo Apache License, Version 2.0 o MIT License, a tu elección.