JADX-MCP-SERVER
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HOST | No | Where the MCP server listens (bind address for LLM clients), CLI flag --host (default 127.0.0.1) | 127.0.0.1 |
| HTTP | No | Use HTTP transport instead of stdio (CLI flag --http, default off) | false |
| PORT | No | Which port the MCP server listens on, CLI flag --port (default 8651) | 8651 |
| JADX_HOST | No | Where to find the JADX plugin (the target JADX-GUI machine), CLI flag --jadx-host (default 127.0.0.1) | 127.0.0.1 |
| JADX_PORT | No | Which port the JADX plugin is on, CLI flag --jadx-port (default 8650) | 8650 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| fetch_current_classA | Fetch the currently selected class and its code from the JADX-GUI plugin. Kotlin compiler metadata (@Metadata / @DebugMetadata) is stripped by default; pass slim=False for a raw dump. Line numbering is unaffected. |
| get_selected_textA | Returns the currently selected text in the decompiled code view. |
| get_method_by_nameB | Fetch the source code of a method from a specific class. Kotlin compiler metadata is stripped by default; pass slim=False for a raw dump. |
| get_all_classesC | Returns a list of all classes in the project with pagination support. |
| get_class_sourceA | Fetch the Java source of a specific class. Set with_line_numbers=True to get every line prefixed with its 1-based line number. Those are the numbers add_comment takes as its 'line' argument, so use this before placing a line comment instead of counting lines yourself. Kotlin compiler metadata (@Metadata / @DebugMetadata) is stripped by default, which is where a large part of a Kotlin dump goes; the line numbers stay the same, so add_comment keeps working. Pass slim=False for a raw, unmodified dump. |
| search_method_by_nameC | Search for a method name across all classes. |
| get_methods_of_classB | List all method names in a class. |
| search_classes_by_keywordA | Search for classes containing a specific keyword with flexible filtering options. This tool performs a comprehensive search across decompiled Android code, allowing you to:
Args: search_term: The keyword or string to search for. This is the main search query. Returns: dict: Paginated list of classes containing the search term, with metadata about matches MCP Tool: search_classes_by_keyword Description: Advanced search tool that finds classes matching a keyword with package filtering and scope targeting capabilities. Use this when you need to find specific code patterns, class names, method names, or other identifiers across the decompiled APK. |
| get_fields_of_classB | List all field names in a class. |
| get_smali_of_classC | Fetch the smali representation of a class. |
| get_manifest_componentA | Retrieve specified component data from AndroidManifest.xml, support filter exported components. Support standard Android components: activity, provider, service, receiver. |
| get_android_manifestA | Retrieve and return the AndroidManifest.xml content. |
| get_stringsC | Retrieve contents of strings.xml files. |
| get_all_resource_file_namesC | Retrieve all resource files names. |
| get_resource_fileC | Retrieve resource file content. |
| get_main_application_classes_namesA | Fetch main application classes' names from Manifest package. |
| get_main_application_classes_codeB | Fetch main application classes' code with pagination. Kotlin compiler metadata is stripped from every class by default; pass slim=False for raw dumps. |
| get_main_activity_classA | Fetch the main activity class from AndroidManifest.xml. Kotlin compiler metadata is stripped by default; pass slim=False for a raw dump. |
| get_package_treeA | Get all packages in the APK sorted by class count. Shows total_classes, total_packages, and per-package name, class_count, is_likely_library. Use this first to understand the APK structure before searching. |
| get_cache_statsA | Get decompilation cache statistics: hits, misses, hit_rate, cached_classes, compressed_mb, compression_ratio. |
| clear_cacheA | Clear the decompilation source cache and reset counters. Use when switching APKs or to free memory. |
| rename_classC | Renames a specific class. |
| rename_methodC | Renames a specific method, optionally scoped to class_name. |
| rename_fieldC | Renames a specific field. |
| rename_packageB | Renames a package and all its classes. |
| rename_variableC | Renames a specific variable in a method. |
| add_commentA | Add a comment to decompiled code, shown in JADX-GUI and saved with the project. Comment a class by passing only class_name, a method by also passing method_name (use method_signature such as '(I)V' to pick between overloads), or a field by passing field_name. To comment a code line, pass line=N, the 1-based line number in the decompiled source of that class; get it from get_class_source(with_line_numbers=True) rather than counting lines. The comment is appended to the end of that line, and on a class, method or field declaration line it comments that declaration instead, matching what the comment shortcut does in JADX-GUI. Braces and blank lines have nothing to comment and are rejected, listing the nearest lines that work. Line numbers shift once a comment is added above, so re-read the source before addressing another line. Every write is verified against the freshly decompiled code and the response echoes the rendered line, so there is no need to read the class back to check. A comment that does not render is rolled back and returns an error rather than being silently stored, which JADX itself does not detect. A new comment on the same target replaces the previous one, so annotations can be refined without creating duplicates, and passing an empty comment removes it. style is one of LINE, BLOCK, BLOCK_CONDENSED, JAVADOC or JAVADOC_CONDENSED (default: LINE). Use this to record what a class or method actually does while reverse engineering: the comments persist in the JADX project and are searchable later with search_classes_by_keyword(search_in="comment"). |
| list_commentsA | List the comments already stored in the project, optionally filtered to one class. Each entry reports class_name, node_type (CLASS/METHOD/FIELD), node_id, comment and style. Use this before add_comment to see what is already annotated instead of re-deriving it. |
| debug_get_stack_framesB | Get current stack frames (call stack). |
| debug_get_threadsA | Get all threads in the debugged process. |
| debug_get_variablesA | Get current variables when process is suspended. |
| get_xrefs_to_classB | Find all references to a class. |
| get_xrefs_to_methodC | Find all references to a method. |
| get_xrefs_to_fieldC | Find all references to a field. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 34 tools
Most tools map to clearly distinct JADX operations such as decompilation, search, rename, xrefs, comments, debug, and resources. There is some overlap: search_method_by_name overlaps search_classes_by_keyword when searching methods, and multiple class-source retrieval paths require reading scope carefully. Descriptions mostly resolve these, so misselection risk is moderate rather than high.
Names are consistently snake_case and mostly follow a verb_noun pattern such as get_..., search_..., rename_..., add_..., list_..., and clear_.... Minor deviations exist: fetch_current_class uses fetch instead of get, and debug_* tools carry an extra group prefix, but the overall pattern remains predictable.
34 tools is well above the typical tight MCP surface, and several groups such as search variants, main-application getters, and cache/debug helpers could be consolidated or made optional. The domain is broad, so not every tool is gratuitous, but the surface is heavy for an agent to navigate efficiently.
The tool set covers the reverse-engineering lifecycle: class/method/field/smali/source retrieval, package tree, keyword search, xrefs, renames, comments, manifest/resources, GUI selection, cache, and debug inspection. No obvious core operation is missing; remaining gaps are niche rather than workflow-blocking.