MCP Java Decompiler Server
Descompile arquivos de classe Java a partir de caminhos de arquivo, nomes de pacotes ou arquivos JAR usando uma porta JavaScript do descompilador CFR.
Documentação
MCP Java Decompiler Server (v1.2.4)
Um servidor Model Context Protocol (MCP) para descompilar arquivos de classe Java. Este servidor permite que assistentes de IA e ferramentas que implementam o protocolo MCP descompilen bytecode Java em código-fonte legível.
Recursos
- Descompilar arquivos .class Java a partir de caminho de arquivo
- Descompilar classes Java a partir de nome de pacote (ex.: java.util.ArrayList)
- Descompilar classes Java a partir de arquivos JAR
- Especificar qual classe extrair de arquivos JAR
- API totalmente compatível com MCP
- Transporte Stdio para integração perfeita
- Tratamento de erros limpo
- Gerenciamento de arquivos temporários
Pré-requisitos
- Node.js 16+
- npm
- Sem necessidade de Java (usando porta JavaScript do descompilador CFR)
Instalação
Opção 1: Usando npx (Recomendado)
Você pode executar o servidor diretamente com npx sem instalar:
# Run the server
npx -y @idachev/mcp-javadc
Opção 2: Instalação Global
# Install globally
npm install -g @idachev/mcp-javadc
# Run the server
mcpjavadc
Opção 3: A partir do Código-Fonte
# 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
Início Rápido
A maneira mais fácil de executar o servidor:
npm start
Integração com Clientes MCP
Para usar com um cliente MCP (como Claude ou outro assistente de IA compatível com MCP):
# Configure the MCP client to use this server
npx some-mcp-client --server "node /path/to/mcp-javadc/index.js"
Adicionando ao Claude Code
Para adicionar esta ferramenta ao Claude Code:
claude mcp add javadc -s project -- npx -y @idachev/mcp-javadc
Exemplo de configuração de cliente MCP:
{
"mcpServers": {
"javaDecompiler": {
"command": "npx",
"args": ["-y", "@idachev/mcp-javadc"],
"env": {
"CLASSPATH": "/path/to/java/classes"
}
}
}
}
Ferramentas MCP
O servidor fornece três ferramentas principais:
1. decompile-from-path
Descompila um arquivo .class Java a partir de um caminho de arquivo.
Parâmetros:
classFilePath: Caminho absoluto para o arquivo .class Java
Exemplo de solicitação:
{
"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 uma classe Java a partir de um nome de pacote.
Parâmetros:
packageName: Nome totalmente qualificado do pacote e classe Java (ex.: java.util.ArrayList)classpath: (Opcional) Array de diretórios de classpath para pesquisa
Exemplo de solicitação:
{
"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 uma classe Java a partir de um arquivo JAR.
Parâmetros:
jarFilePath: Caminho absoluto para o arquivo JAR (obrigatório)className: Nome de classe totalmente qualificado para extrair do JAR (obrigatório) (ex.: "com.example.MyClass")
Exemplo de solicitação:
{
"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 Conhecidos
Descompilação de Classes Java
O descompilador CFR (@run-slicer/cfr) é uma porta JavaScript do popular descompilador Java CFR. Ele funciona bem com:
- Arquivos de classe Java padrão
- Classes que fazem parte de uma estrutura de pacote conhecida
- Recursos modernos de Java (todas as versões de Java)
- Arquivos JAR contendo classes Java
Se você encontrar problemas com um arquivo de classe específico, tente:
- Usar a ferramenta
decompile-from-packagecom classpath explícito - Usar a ferramenta
decompile-from-jarcom nome de classe explícito - Garantir que o arquivo de classe seja um arquivo de bytecode Java válido
- Verificar se há arquivos de classe ou arquivos JAR corrompidos
Uso de Repositório Maven
Ao trabalhar com arquivos JAR de repositórios Maven:
- Use o comando
find ~/.m2 -name "*dependency-name*jar"para localizar arquivos JAR - Filtre JARs de origem e javadoc usando
grep -v source | grep -v javadoc - Use
jar tf your-jar-file.jar | grep .classpara listar classes disponíveis em um JAR - Verifique se os nomes de classe correspondem à estrutura de pacote no JAR
Configuração
Variáveis de Ambiente
CLASSPATH: Classpath Java para encontrar arquivos de classe (usado quando nenhum classpath é especificado)
Desenvolvimento
# 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
Testando com o MCP Inspector
Você pode usar a ferramenta oficial MCP Inspector para testar a funcionalidade do servidor interativamente:
# Install and run the MCP Inspector with the decompiler server
npx @modelcontextprotocol/inspector node ./index.js
O Inspector fornece uma interface web amigável que permite:
- Listar todas as ferramentas disponíveis
- Executar as ferramentas de descompilação com parâmetros personalizados
- Visualizar e explorar a saída descompilada
- Testar diferentes entradas e cenários de erro
Isso é especialmente útil para depuração e compreensão das capacidades do servidor MCP antes de integrá-lo com outras aplicações.
Como Funciona
- O servidor usa o descompilador CFR (@run-slicer/cfr - uma porta JavaScript do popular descompilador Java CFR)
- Quando uma solicitação de descompilação é recebida, o servidor:
- Lê os dados do arquivo de classe diretamente ou os extrai de um arquivo JAR
- Processa o arquivo de classe com o descompilador CFR
- Retorna o código-fonte formatado
- Para arquivos JAR, o servidor:
- Cria um diretório temporário para extração
- Extrai o conteúdo do JAR
- Descompila a classe especificada (ou a primeira classe se nenhuma for especificada)
- Limpa o diretório temporário
Licença
ISC