Skip to content

DevUI MCP Tool Call from Cursor fails => Cannot invoke "java.util.Map.entrySet()" because "parameters" is null #50316

@myfear

Description

@myfear

Describe the bug

I am trying to use the Quarkus DevUI MCP tools from Cursor with the following local configuration:

    "local-quarkus-mcp": {
      "url": "http://localhost:8080/q/dev-mcp",
      "headers": {
        "Content-Type": "application/json"
      }
    }

The tools are being loaded and shown in the UI but I can not get them to work. They are availble as context to the llm but it always tries to use it with a parameter set

{
  "parameters": "{}"
}

That leads to the following exception on the serverside:

2025-09-29 06:07:20,170 ERROR [io.qua.dev.run.com.JsonRpcRouter] (vert.x-eventloop-thread-0) Unable to invoke method quarkus-agroal_getDataSources using JSON-RPC, request was: io.quarkus.devui.runtime.jsonrpc.JsonRpcRequest@47e3d64c: java.lang.NullPointerException: Cannot invoke "java.util.Map.entrySet()" because "parameters" is null
	at io.quarkus.devui.runtime.comms.JsonRpcRouter.getArgsAsObjects(JsonRpcRouter.java:357)
	at io.quarkus.devui.runtime.comms.JsonRpcRouter.routeToRuntimeMethod(JsonRpcRouter.java:193)
	at io.quarkus.devui.runtime.comms.JsonRpcRouter.route(JsonRpcRouter.java:162)
	at io.quarkus.devui.runtime.comms.JsonRpcRouter_ClientProxy.route(Unknown Source)
	at io.quarkus.devui.runtime.mcp.McpHttpHandler.lambda$handleMCPJsonRPCRequest$1(McpHttpHandler.java:118)
	at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:270)
	at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:252)
	at io.vertx.core.http.impl.HttpEventHandler.handleEnd(HttpEventHandler.java:76)
	at io.vertx.core.http.impl.Http1xServerRequest.onEnd(Http1xServerRequest.java:645)
	at io.vertx.core.http.impl.Http1xServerRequest.lambda$pendingHandler$0(Http1xServerRequest.java:380)
	at io.vertx.core.streams.impl.InboundBuffer.handleEvent(InboundBuffer.java:279)
	at io.vertx.core.streams.impl.InboundBuffer.drain(InboundBuffer.java:266)
	at io.vertx.core.streams.impl.InboundBuffer.lambda$asyncDrain$1(InboundBuffer.java:317)
	at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:270)
	at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:252)
	at io.vertx.core.impl.ContextInternal.lambda$runOnContext$0(ContextInternal.java:50)
	at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173)
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166)
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569)
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:1583)

I am not sure if this is a configuration issue or if the implementation should be more resiliant to handle a null parameter array.

Expected behavior

No response

Actual behavior

No response

How to Reproduce?

No response

Output of uname -a or ver

No response

Output of java -version

No response

Quarkus version or git rev

No response

Build tool (ie. output of mvnw --version or gradlew --version)

No response

Additional information

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions