Decompile Java bytecode into readable source code from .class files, package names, or JAR archives using CFR decompiler
A Model Context Protocol (MCP) server for decompiling Java class files. This server allows AI assistants and tools that implement the MCP protocol to decompile Java bytecode into readable source code.
You can run the server directly with npx without installing:
# Run the server
npx -y @idachev/mcp-javadc
# Install globally
npm install -g @idachev/mcp-javadc
# Run the server
mcpjavadc
# Clone the repository
git clone https://github.com/idachev/mcp-javadc.git
cd mcp-javadc
# Install dependencies
npm install
# Run the server
npm start
The easiest way to run the server:
npm start
To use with an MCP client (like Claude or another MCP-compatible AI assistant):
# Configure the MCP client to use this server
npx some-mcp-client --server "node /path/to/mcp-javadc/index.js"
To add this tool to Claude Code:
claude mcp add javadc -s project -- npx -y @idachev/mcp-javadc
Example MCP client configuration:
{
"mcpServers": {
"javaDecompiler": {
"command": "npx",
"args": ["-y", "@idachev/mcp-javadc"],
"env": {
"CLASSPATH": "/path/to/java/classes"
}
}
}
}
The server provides three main tools:
Decompiles a Java .class file from a file path.
Parameters:
classFilePath
: Absolute path to the Java .class fileExample request:
{
"jsonrpc": "2.0",
"id": "1",
"method": "mcp.tool.execute",
"params": {
"tool": "decompile-from-path",
"args": {
"classFilePath": "/path/to/Example.class"
}
}
}
Decompiles a Java class from a package name.
Parameters:
packageName
: Fully qualified Java package and class name (e.g., java.util.ArrayList)classpath
: (Optional) Array of classpath directories to searchExample request:
{
"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"]
}
}
}
Decompiles a Java class from a JAR file.
Parameters:
jarFilePath
: Absolute path to the JAR file (required)className
: Fully qualified class name to extract from the JAR (required) (e.g., "com.example.MyClass")Example request:
{
"jsonrpc": "2.0",
"id": "3",
"method": "mcp.tool.execute",
"params": {
"tool": "decompile-from-jar",
"args": {
"jarFilePath": "/path/to/example.jar",
"className": "com.example.MyClass"
}
}
}
The CFR decompiler (@run-slicer/cfr) is a JavaScript port of the popular CFR Java decompiler. It works well with:
If you encounter issues with a specific class file, try:
decompile-from-package
tool with explicit classpathdecompile-from-jar
tool with explicit class nameWhen working with JAR files from Maven repositories:
find ~/.m2 -name "*dependency-name*jar"
command to locate JAR filesgrep -v source | grep -v javadoc
jar tf your-jar-file.jar | grep .class
to list available classes in a JARCLASSPATH
: Java classpath for finding class files (used when no classpath is specified)# 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
You can use the official MCP Inspector tool to test the server functionality interactively:
# Install and run the MCP Inspector with the decompiler server
npx @modelcontextprotocol/inspector node ./index.js
The Inspector provides a user-friendly web interface that allows you to:
This is especially useful for debugging and understanding the MCP server's capabilities before integrating it with other applications.
ISC