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:
- Archivos de clase Java estándar
- Clases que forman parte de una estructura de paquetes conocida
- Características modernas de Java (todas las versiones de Java)
- Archivos JAR que contienen clases Java
Si encuentras problemas con un archivo de clase específico, intenta:
- Usar la herramienta
decompile-from-packagecon classpath explícito - Usar la herramienta
decompile-from-jarcon 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 .classpara 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
- El servidor utiliza el descompilador CFR (@run-slicer/cfr - un puerto JavaScript del popular descompilador CFR de Java)
- 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
- 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