Skip to content

[BUG] jadx-ai-mcp multiple instances cause port conflict and HTTP server startup failure #81

@hwqchi

Description

@hwqchi

Description

When using JADX 1.5.3 or JADX 1.5.2, the jadx-ai-mcp plugin is instantiated multiple times, which leads to port conflicts and prevents some plugin instances from starting their embedded HTTP server.

After importing a project and maximizing the JADX GUI window, the Plugins menu appears. Inside this menu, there are usually two or more instances of the jadx-ai-mcp plugin listed.

All plugin instances share the same configuration, including the HTTP server port. However, among these instances:

  • Only one instance can successfully bind to the port and shows server status: Status Running

  • All other instances fail to start the server and remain in: Status Stopped

Changing the port number in the configuration affects all instances simultaneously, but the issue remains:
only one instance can run successfully, while the others still fail due to port conflicts.

Environment

  • JADX Version: 1.5.3 or 1.5.2
  • Plugin Version: 6.0
  • OS: Windows 11
  • Java Version: jadx-gui-1.5.2-with-jre-win

Steps to Reproduce

It may be created after performing certain actions, such as:

  • Opening a rename mapping file
  • Click the Reset Code Cache option

Screenshots

Multiple instances of jadx-ai-mcp plugins:

Image

Instance1 server status:

Image

Instance2 server status:

Image

Logs

ERROR: Failed to start Javalin
ERROR: JADX-AI-MCP Plugin Error: Could not start HTTP Server. Exception: Port already in use. Make sure no other process is using port 8652 and try again.
com.zin.jadxaimcp.deps.javalin.util.JavalinBindException: Port already in use. Make sure no other process is using port 8652 and try again.
	at jadx-plugin:jadx-ai-mcp-6.0.0.jar//com.zin.jadxaimcp.deps.javalin.jetty.JettyServer.start(JettyServer.kt:105)
	at jadx-plugin:jadx-ai-mcp-6.0.0.jar//com.zin.jadxaimcp.deps.javalin.Javalin.start(Javalin.java:123)
	at jadx-plugin:jadx-ai-mcp-6.0.0.jar//com.zin.jadxaimcp.server.PluginServer.start(PluginServer.java:53)
	at jadx-plugin:jadx-ai-mcp-6.0.0.jar//com.zin.jadxaimcp.JadxAIMCP.startServer(JadxAIMCP.java:158)
	at jadx-plugin:jadx-ai-mcp-6.0.0.jar//com.zin.jadxaimcp.JadxAIMCP.lambda$startDelayedInitialization$1(JadxAIMCP.java:124)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.runAndReset(Unknown Source)
	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: Failed to bind to 0.0.0.0/0.0.0.0:8652
	at jadx-plugin:jadx-ai-mcp-6.0.0.jar//org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:344)
	at jadx-plugin:jadx-ai-mcp-6.0.0.jar//org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:304)
	at jadx-plugin:jadx-ai-mcp-6.0.0.jar//org.eclipse.jetty.server.Server.lambda$doStart$0(Server.java:402)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at jadx-plugin:jadx-ai-mcp-6.0.0.jar//org.eclipse.jetty.server.Server.doStart(Server.java:398)
	at jadx-plugin:jadx-ai-mcp-6.0.0.jar//org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
	at jadx-plugin:jadx-ai-mcp-6.0.0.jar//com.zin.jadxaimcp.deps.javalin.jetty.JettyServer.start(JettyServer.kt:97)
	... 10 common frames omitted
Caused by: java.net.BindException: Address already in use: bind
	at java.base/sun.nio.ch.Net.bind0(Native Method)
	at java.base/sun.nio.ch.Net.bind(Unknown Source)
	at java.base/sun.nio.ch.ServerSocketChannelImpl.netBind(Unknown Source)
	at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(Unknown Source)
	at jadx-plugin:jadx-ai-mcp-6.0.0.jar//org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:339)
	... 25 common frames omitted
ERROR: JADX-AI-MCP Plugin: Failed to start server: Failed to start Javalin Server

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions