Skip to main content
Glama
zlx-cyber

JADX-MCP-SERVER

by zlx-cyber

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
HOSTNoWhere the MCP server listens (bind address for LLM clients), CLI flag --host (default 127.0.0.1)127.0.0.1
HTTPNoUse HTTP transport instead of stdio (CLI flag --http, default off)false
PORTNoWhich port the MCP server listens on, CLI flag --port (default 8651)8651
JADX_HOSTNoWhere to find the JADX plugin (the target JADX-GUI machine), CLI flag --jadx-host (default 127.0.0.1)127.0.0.1
JADX_PORTNoWhich 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

CapabilityDetails
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

NameDescription
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:

  1. Search within specific packages by providing a package name

  2. Target specific search scopes (class names, method names, fields, code content, comments)

  3. Combine multiple search scopes for precise results

Args: search_term: The keyword or string to search for. This is the main search query.

package (optional): Package name to limit the search scope.
    - If empty string (default), searches across all packages in the APK
    - If provided, only searches within classes belonging to the specified package
    - Example: "com.example.app" to search only in that package

search_in (optional): Comma-separated list of search scopes to target.
    Valid values:
    - "class": Search in class names only
    - "method": Search in method names only
    - "field": Search in field names only
    - "code": Search in code content (method bodies, statements, etc.)
    - "comment": Search in comments

    You can specify one or multiple scopes:
    - Single scope: "class" (only class names)
    - Multiple scopes: "class,method" (class names OR method names)
    - Combined: "class,method,code" (searches in all three scopes)

    Default: "code" (searches in code content)

offset (optional): Starting index for pagination. Default: 0
count (optional): Maximum number of results to return. Default: 20

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

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.2/5.0

Scored across 34 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count2/5

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.

Completeness5/5

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.

Maintenance

ActivityMaintained
ResponsivenessNo issues