MCP Java Decompiler Server

Descompila archivos de clase Java desde rutas de archivo, nombres de paquete o archivos JAR utilizando un puerto JavaScript del descompilador CFR.

Documentación

Servidor MCP Java Decompiler (v1.2.4)

Un servidor de Protocolo de Contexto de Modelo (MCP) para descompilar archivos de clase Java. Este servidor permite que asistentes de IA y herramientas que implementan el protocolo MCP descompilen bytecode de Java en código fuente legible.

Características

  • Descompilar archivos .class de Java desde una ruta de archivo
  • Descompilar clases de Java desde el nombre del paquete (p. ej., java.util.ArrayList)
  • Descompilar clases de Java desde archivos JAR
  • Especificar qué clase extraer de los archivos JAR
  • API totalmente compatible con MCP
  • Transporte Stdio para una integración perfecta
  • Manejo limpio de errores
  • Gestión de archivos temporales

Requisitos previos

  • Node.js 16+
  • npm
  • No se requiere Java (utiliza el puerto JavaScript del descompilador CFR)

Instalación

Opción 1: Usando npx (Recomendado)

Puedes ejecutar el servidor directamente con npx sin instalarlo:

# Run the server
npx -y @idachev/mcp-javadc

Opción 2: Instalación global

# Install globally
npm install -g @idachev/mcp-javadc

# Run the server
mcpjavadc

Opción 3: Desde el código fuente

# Clone the repository
git clone https://github.com/idachev/mcp-javadc.git
cd mcp-javadc

# Install dependencies
npm install

# Run the server
npm start

Uso

Inicio rápido

La forma más sencilla de ejecutar el servidor:

npm start

Integración con clientes MCP

Para usarlo con un cliente MCP (como Claude u otro asistente de IA compatible con MCP):

# Configure the MCP client to use this server
npx some-mcp-client --server "node /path/to/mcp-javadc/index.js"

Añadir a Claude Code

Para añadir esta herramienta a Claude Code:

claude mcp add javadc -s project -- npx -y @idachev/mcp-javadc

Ejemplo de configuración del cliente MCP:

{
  "mcpServers": {
    "javaDecompiler": {
      "command": "npx",
      "args": ["-y", "@idachev/mcp-javadc"],
      "env": {
        "CLASSPATH": "/path/to/java/classes"
      }
    }
  }
}

Herramientas MCP

El servidor proporciona tres herramientas principales:

1. decompile-from-path

Descompila un archivo .class de Java desde una ruta de archivo.

Parámetros:

  • classFilePath: Ruta absoluta al archivo .class de Java

Ejemplo de solicitud:

{
  "jsonrpc": "2.0",
  "id": "1",
  "method": "mcp.tool.execute",
  "params": {
    "tool": "decompile-from-path",
    "args": {
      "classFilePath": "/path/to/Example.class"
    }
  }
}

2. decompile-from-package

Descompila una clase de Java desde un nombre de paquete.

Parámetros:

  • packageName: Nombre completo del paquete y clase de Java (p. ej., java.util.ArrayList)
  • classpath: (Opcional) Matriz de directorios de classpath para buscar

Ejemplo de solicitud:

{
  "jsonrpc": "2.0",
  "id": "2",
  "method": "mcp.tool.execute",
  "params": {
    "tool": "decompile-from-package",
    "args": {
      "packageName": "java.util.ArrayList",
      "classpath": ["/path/to/rt.jar", "/path/to/classes"]
    }
  }
}

3. decompile-from-jar

Descompila una clase de Java desde un archivo JAR.

Parámetros:

  • jarFilePath: Ruta absoluta al archivo JAR (obligatorio)
  • className: Nombre completo de la clase para extraer del JAR (obligatorio) (p. ej., "com.example.MyClass")

Ejemplo de solicitud:

{
  "jsonrpc": "2.0",
  "id": "3",
  "method": "mcp.tool.execute",
  "params": {
    "tool": "decompile-from-jar",
    "args": {
      "jarFilePath": "/path/to/example.jar",
      "className": "com.example.MyClass"
    }
  }
}

Problemas conocidos

Descompilación de clases Java

El descompilador CFR (@run-slicer/cfr) es un puerto JavaScript del popular descompilador CFR de Java. Funciona bien con:

  1. Archivos de clase Java estándar
  2. Clases que forman parte de una estructura de paquetes conocida
  3. Características modernas de Java (todas las versiones de Java)
  4. Archivos JAR que contienen clases Java

Si encuentras problemas con un archivo de clase específico, intenta:

  • Usar la herramienta decompile-from-package con classpath explícito
  • Usar la herramienta decompile-from-jar con nombre de clase explícito
  • Asegurarte de que el archivo de clase sea un archivo de bytecode Java válido
  • Verificar si hay archivos de clase o archivos JAR corruptos

Uso del repositorio Maven

Al trabajar con archivos JAR de repositorios Maven:

  • Usa el comando find ~/.m2 -name "*dependency-name*jar" para localizar archivos JAR
  • Filtra los JAR de fuente y javadoc usando grep -v source | grep -v javadoc
  • Usa jar tf your-jar-file.jar | grep .class para listar las clases disponibles en un JAR
  • Verifica que los nombres de clase coincidan con la estructura de paquetes en el JAR

Configuración

Variables de entorno

  • CLASSPATH: Classpath de Java para encontrar archivos de clase (se usa cuando no se especifica classpath)

Desarrollo

# Run in development mode
npm run dev

# Create test fixtures (creates sample Java class for testing)
npm run test:setup

# Run tests 
npm test

# Run linting
npm run lint

# Fix linting issues
npm run lint:fix

# Format code
npm run format

# Run with MCP Inspector for interactive testing
npx @modelcontextprotocol/inspector node ./index.js

Pruebas con MCP Inspector

Puedes usar la herramienta oficial MCP Inspector para probar la funcionalidad del servidor de forma interactiva:

# Install and run the MCP Inspector with the decompiler server
npx @modelcontextprotocol/inspector node ./index.js

El Inspector proporciona una interfaz web fácil de usar que te permite:

  • Listar todas las herramientas disponibles
  • Ejecutar las herramientas de descompilación con parámetros personalizados
  • Ver y explorar la salida descompilada
  • Probar diferentes entradas y escenarios de error

Esto es especialmente útil para depurar y comprender las capacidades del servidor MCP antes de integrarlo con otras aplicaciones.

Cómo funciona

  1. El servidor utiliza el descompilador CFR (@run-slicer/cfr - un puerto JavaScript del popular descompilador CFR de Java)
  2. Cuando se recibe una solicitud de descompilación, el servidor:
    • Lee los datos del archivo de clase directamente o los extrae de un archivo JAR
    • Procesa el archivo de clase con el descompilador CFR
    • Devuelve el código fuente formateado
  3. Para archivos JAR, el servidor:
    • Crea un directorio temporal para la extracción
    • Extrae el contenido del JAR
    • Descompila la clase especificada (o la primera clase si no se especifica ninguna)
    • Limpia el directorio temporal

Licencia

ISC