SonarQube MCP server 1.6.0.1711 does not work with MCP clients (VS Code fails to connect)

Hello SonarQube team,

I’m facing an issue with the SonarQube MCP server deployed on-premise, which appears to be related to MCP client capability parsing.
The problem looks very similar to a previously reported and supposedly fixed issue, but I can still reproduce it on version 1.6.0.1711.

Environment

VS Code fails to connect to the SonarQube MCP server during the initialize phase.

To troubleshoot, I captured the exact MCP initialize request sent by VS Code and replayed it in Postman.

The request fails only when the elicitation.form capability is present.
If I remove the form section entirely, the server responds successfully, which confirms that the MCP server version is indeed 1.6.0.1711 and otherwise functioning correctly.

Related issue

This looks very similar to the issue addressed in:

MCP-229
https://sonarsource.atlassian.net/issues?jql=fixVersion%20%3D%2027432%20ORDER%20BY%20created%20ASC&selectedIssue=MCP-229

According to the ticket, support for the elicitation capability was fixed, but in practice the form field still appears to be rejected in 1.6.0.1711.

Attached the request/response to reproduce.

Request:

{
   "jsonrpc":"2.0",
   "id":1,
   "method":"initialize",
   "params":{
      "protocolVersion":"2025-11-25",
      "capabilities":{
         "roots":{
            "listChanged":true
         },
         "sampling":{},
         "elicitation":{
            "form":{},
            "url":{}
         },
         "tasks":{
            "list":{},
            "cancel":{},
            "requests":{
               "sampling":{
                  "createMessage":{}
               },
               "elicitation":{
                  "create":{}
               }
            }
         }
      },
      "clientInfo":{
         "name":"Visual Studio Code",
         "version":"1.108.0"
      }
   }
}

Response:

{
    "cause": null,
    "stackTrace": [
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "doPost",
            "fileName": "HttpServletStreamableServerTransportProvider.java",
            "lineNumber": 502,
            "nativeMethod": false,
            "className": "io.modelcontextprotocol.server.transport.HttpServletStreamableServerTransportProvider"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "service",
            "fileName": "HttpServlet.java",
            "lineNumber": 547,
            "nativeMethod": false,
            "className": "jakarta.servlet.http.HttpServlet"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "service",
            "fileName": "HttpServlet.java",
            "lineNumber": 614,
            "nativeMethod": false,
            "className": "jakarta.servlet.http.HttpServlet"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "handle",
            "fileName": "ServletHolder.java",
            "lineNumber": 752,
            "nativeMethod": false,
            "className": "org.eclipse.jetty.ee10.servlet.ServletHolder"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "doFilter",
            "fileName": "ServletHandler.java",
            "lineNumber": 1620,
            "nativeMethod": false,
            "className": "org.eclipse.jetty.ee10.servlet.ServletHandler$ChainEnd"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "doFilter",
            "fileName": "McpSecurityFilter.java",
            "lineNumber": 102,
            "nativeMethod": false,
            "className": "org.sonarsource.sonarqube.mcp.transport.McpSecurityFilter"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "doFilter",
            "fileName": "FilterHolder.java",
            "lineNumber": 205,
            "nativeMethod": false,
            "className": "org.eclipse.jetty.ee10.servlet.FilterHolder"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "doFilter",
            "fileName": "ServletHandler.java",
            "lineNumber": 1592,
            "nativeMethod": false,
            "className": "org.eclipse.jetty.ee10.servlet.ServletHandler$Chain"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "doFilter",
            "fileName": "AuthenticationFilter.java",
            "lineNumber": 92,
            "nativeMethod": false,
            "className": "org.sonarsource.sonarqube.mcp.authentication.AuthenticationFilter"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "doFilter",
            "fileName": "FilterHolder.java",
            "lineNumber": 205,
            "nativeMethod": false,
            "className": "org.eclipse.jetty.ee10.servlet.FilterHolder"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "doFilter",
            "fileName": "ServletHandler.java",
            "lineNumber": 1592,
            "nativeMethod": false,
            "className": "org.eclipse.jetty.ee10.servlet.ServletHandler$Chain"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "handle",
            "fileName": "ServletHandler.java",
            "lineNumber": 1554,
            "nativeMethod": false,
            "className": "org.eclipse.jetty.ee10.servlet.ServletHandler$MappedServlet"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "dispatch",
            "fileName": "ServletChannel.java",
            "lineNumber": 870,
            "nativeMethod": false,
            "className": "org.eclipse.jetty.ee10.servlet.ServletChannel"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "handle",
            "fileName": "ServletChannel.java",
            "lineNumber": 450,
            "nativeMethod": false,
            "className": "org.eclipse.jetty.ee10.servlet.ServletChannel"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "handle",
            "fileName": "ServletHandler.java",
            "lineNumber": 469,
            "nativeMethod": false,
            "className": "org.eclipse.jetty.ee10.servlet.ServletHandler"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "handle",
            "fileName": "SessionHandler.java",
            "lineNumber": 719,
            "nativeMethod": false,
            "className": "org.eclipse.jetty.ee10.servlet.SessionHandler"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "handle",
            "fileName": "ContextHandler.java",
            "lineNumber": 1224,
            "nativeMethod": false,
            "className": "org.eclipse.jetty.server.handler.ContextHandler"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "handle",
            "fileName": "Server.java",
            "lineNumber": 197,
            "nativeMethod": false,
            "className": "org.eclipse.jetty.server.Server"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "run",
            "fileName": "HttpChannelState.java",
            "lineNumber": 720,
            "nativeMethod": false,
            "className": "org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "onFillable",
            "fileName": "HttpConnection.java",
            "lineNumber": 412,
            "nativeMethod": false,
            "className": "org.eclipse.jetty.server.internal.HttpConnection"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "succeeded",
            "fileName": "HttpConnection.java",
            "lineNumber": 1810,
            "nativeMethod": false,
            "className": "org.eclipse.jetty.server.internal.HttpConnection$FillableCallback"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "fillable",
            "fileName": "FillInterest.java",
            "lineNumber": 105,
            "nativeMethod": false,
            "className": "org.eclipse.jetty.io.FillInterest"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "run",
            "fileName": "SelectableChannelEndPoint.java",
            "lineNumber": 54,
            "nativeMethod": false,
            "className": "org.eclipse.jetty.io.SelectableChannelEndPoint$1"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "runTask",
            "fileName": "AdaptiveExecutionStrategy.java",
            "lineNumber": 492,
            "nativeMethod": false,
            "className": "org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "epcRunTask",
            "fileName": "AdaptiveExecutionStrategy.java",
            "lineNumber": 428,
            "nativeMethod": false,
            "className": "org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "consumeTask",
            "fileName": "AdaptiveExecutionStrategy.java",
            "lineNumber": 401,
            "nativeMethod": false,
            "className": "org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "tryProduce",
            "fileName": "AdaptiveExecutionStrategy.java",
            "lineNumber": 255,
            "nativeMethod": false,
            "className": "org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "run",
            "fileName": "AdaptiveExecutionStrategy.java",
            "lineNumber": 204,
            "nativeMethod": false,
            "className": "org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "run",
            "fileName": "ReservedThreadExecutor.java",
            "lineNumber": 317,
            "nativeMethod": false,
            "className": "org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "runJob",
            "fileName": "QueuedThreadPool.java",
            "lineNumber": 1009,
            "nativeMethod": false,
            "className": "org.eclipse.jetty.util.thread.QueuedThreadPool"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "doRunJob",
            "fileName": "QueuedThreadPool.java",
            "lineNumber": 1239,
            "nativeMethod": false,
            "className": "org.eclipse.jetty.util.thread.QueuedThreadPool$Runner"
        },
        {
            "classLoaderName": "app",
            "moduleName": null,
            "moduleVersion": null,
            "methodName": "run",
            "fileName": "QueuedThreadPool.java",
            "lineNumber": 1194,
            "nativeMethod": false,
            "className": "org.eclipse.jetty.util.thread.QueuedThreadPool$Runner"
        },
        {
            "classLoaderName": null,
            "moduleName": "java.base",
            "moduleVersion": "21.0.9",
            "methodName": "run",
            "fileName": null,
            "lineNumber": -1,
            "nativeMethod": false,
            "className": "java.lang.Thread"
        }
    ],
    "jsonRpcError": null,
    "message": "Invalid message format: Unrecognized field \"form\" (class io.modelcontextprotocol.spec.McpSchema$ClientCapabilities$Elicitation), not marked as ignorable (0 known properties: ])\n at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain: io.modelcontextprotocol.spec.McpSchema$InitializeRequest[\"capabilities\"]->io.modelcontextprotocol.spec.McpSchema$ClientCapabilities[\"elicitation\"]->io.modelcontextprotocol.spec.McpSchema$ClientCapabilities$Elicitation[\"form\"])",
    "suppressed": [],
    "localizedMessage": "Invalid message format: Unrecognized field \"form\" (class io.modelcontextprotocol.spec.McpSchema$ClientCapabilities$Elicitation), not marked as ignorable (0 known properties: ])\n at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain: io.modelcontextprotocol.spec.McpSchema$InitializeRequest[\"capabilities\"]->io.modelcontextprotocol.spec.McpSchema$ClientCapabilities[\"elicitation\"]->io.modelcontextprotocol.spec.McpSchema$ClientCapabilities$Elicitation[\"form\"])"
}

Hey @kyrpychnyk, sorry for the late reply!

Could you try running this again using the most recent version of the Docker image? To be sure you have the correct version, please pull the latest image manually before testing.

I believe the issue should have been fixed, let us know if you continue to run into any problems.

Thanks!

Hi,

I tested under version 1.7.0.1765 and could say that it was fixed in it!

Thank you!

1 Like

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.