Release Notes
2.0.x
| Version | Date |
|---|---|
2.0.0 |
TBD |
Breaking Changes
-
[2.0.0] The Maven artifact relocations and configuration property fallbacks for the old
quarkus-mcp-server-sseartifact (renamed toquarkus-mcp-server-httpin 1.8.0) have been removed. Users still referencingquarkus-mcp-server-ssemust switch toquarkus-mcp-server-http, and any configuration properties using thesse.prefix (e.g.quarkus.mcp.server.sse.root-path) must be updated to use thehttp.prefix (e.g.quarkus.mcp.server.http.root-path). (#826) -
[2.0.0] JSON-RPC batching support has been removed. Batching was added in MCP 2025-03-26 and removed in 2025-06-18. The server now rejects batch (JSON array) messages with a parse error. The
whenBatch()method has been removed from theMcpAssuredtest API. (#723) -
[2.0.0]
McpRequest.protocolVersion()now returnsMcpProtocolVersioninstead ofString. -
[2.0.0] The
quarkus.mcp-server.metrics.enabledconfig property is now read at runtime. Since it defaults tofalse, applications that rely on MCP metrics without explicitly settingquarkus.mcp-server.metrics.enabled=truewill stop collecting them. (#844) -
[2.0.0] Tracing spans are no longer started when
quarkus.mcp.server.tracing.enabled=falsefor the relevant MCP server configuration. Previously, the tracing enablement check only considered the default server’s setting. (#845)
New Features
-
[2.0.0] Stateless MCP protocol support (protocol version
2026-07-28). The server supports both stateful and stateless clients simultaneously. Stateless clients useserver/discoverinstead of theinitialize/initializedhandshake. See Stateless Mode. (#824) -
[2.0.0] New
McpConnection.isTransient()method to check if a connection is transient (per-request, not tracked on the server). -
[2.0.0] New
McpProtocolVersionclass as the public API for protocol version handling, withisStateless(),isKnown(),from(String), and semantic constants (FIRST_STATELESS,LATEST_STATEFUL,DEFAULT_ASSUMED). -
[2.0.0] Tracing spans now include the
mcp.server.nameattribute, identifying the MCP server configuration that handled the request. (#845) -
[2.0.0] New
McpTrafficListenerAPI for custom traffic message listeners. Unlike built-in traffic logging, custom listeners are always invoked regardless of thetraffic-logging.enabledconfiguration. See Custom Traffic Listeners. (#860) -
[2.0.0]
RawMessage#id()andRawMessage#method()methods to obtain the JSON-RPC message id and method name respectively. (#860) -
[2.0.0]
RawMessage#asPrettyString()method to get the formatted JSON message. (#893) -
[2.0.0] New
Cancellation#onCancelled(Consumer<Optional<String>>)method to register a callback that is executed when a cancellation of the current MCP request is requested by the client. The consumer receives the optional cancellation reason provided by the client. Unlikecheck(), this push-based approach does not require polling and is useful for cancelling async operations such asCompletableFutures. See Cancellation Callback. (#866) -
[2.0.0] Per-request log level via
_metafieldio.modelcontextprotocol/logLevelfor stateless clients. -
[2.0.0] New
MetaKey.LOG_LEVELandMetaKey.PROTOCOL_VERSIONconstants. -
[2.0.0] Multi Round-Trip Requests (MRTR) support for stateless clients. Server feature methods can throw
InputRequiredExceptionto request additional input (elicitation, sampling, or roots) from the client. The client retries the original request with the gathered input viaInputResponses. See Multi Round-Trip Request (MRTR). (#824) -
[2.0.0] New
MrtrRequestinterface implemented byElicitation,Sampling, andRoots— providesisServerInitiatedRequestSupported(),inputResponses(),requestState(), andinputRequired()builder. -
[2.0.0] HTTP GET (SSE stream) and DELETE (session termination) requests from stateless clients now return
405 Method Not Allowed. -
[2.0.0]
subscriptions/listensupport for stateless clients. Replacesresources/subscribe/resources/unsubscribefor protocol version2026-07-28+. Clients specify a notification filter (tools, prompts, resources list changes, and resource URI subscriptions) and receive matching notifications on the subscription stream. Supported on all transports (HTTP, WebSocket, stdio). See Subscription Notifications. (#824) -
[2.0.0]
CompletionStageis now supported as an async return type for tool, resource, prompt, and completion methods. It is treated identically toUniat build time and converted toUniat runtime. (#863) -
[2.0.0] New
@McpParamHeaderannotation that mirrors tool parameters intoMcp-Param-{Name}HTTP response headers, enabling custom header propagation from tool parameters. See Implementing Tools. (#887) -
[2.0.0] Initial support for Java MCP Annotations. Both the Quarkus-specific and the standard Java MCP annotations are supported during the transitional period. (#823)
Important Bug Fixes
-
[2.0.0] The OIDC security failure handler now always ends the HTTP response, fixing a connection leak when the request body is empty (e.g. SSE stream GET requests). (#853)
1.13.x
| Version | Date |
|---|---|
July 2, 2026 |
|
June 3, 2026 |
Breaking Changes
-
[1.13.0] The
audienceattribute of the@Resource.Annotationsannotation and theContent.Annotationsrecord now supports multiple roles. The annotation attribute type changed fromRoletoRole[]and the record field type changed fromRoletoList<Role>. A backwards-compatible constructor accepting a singleRoleis provided. (#788)
New Features
-
Elicitation URL mode: Servers can redirect users to an external URL for sensitive interactions instead of using form-based elicitation. (#711)
-
OptionalInt,OptionalLong, andOptionalDoubleparameters: Primitive-specialized optional types are now supported in tool and resource method signatures. (#769) -
Lazy SSE initialization for Streamable HTTP: SSE initialization is deferred until an API that requires it is invoked, removing the need for "transport hints" when adding tools programmatically. (#725)
-
Streamable HTTP auto-init reads
_metafields: The server now readsclientInfoandclientCapabilitiesfrom_metaon each request when auto-initialization is enabled. (#796) -
FeatureInfo#method(): Exposes the declaringjava.lang.reflect.Method, making it easier for filters to read method-level annotations. (#809) -
OIDC security failure handler: Intercepts OIDC security exceptions on Streamable HTTP connections and converts them into JSON-RPC error responses. (#775)
-
quarkus-mcp-server-oidcextension: Adds a Vert.x failure handler for OIDC403 Forbiddenresponses withWWW-Authenticateheaders as recommended by the MCP authorization spec. (#780)
Important Bug Fixes
-
[1.13.0] The CLI adapter now derives MCP tool parameter names from Picocli
@Optionnames instead of Java field names, and prefers the longest (most descriptive) option name. (#576) -
[1.13.0] Build-time validation of resource template methods now correctly considers the
nameattribute of@ResourceTemplateArginstead of only matching against method parameter names. (#806) -
[1.13.0] Custom Jackson serializers and deserializers are now honored for
@ToolArgparameters of scalar and custom types, fixing incorrect schema generation and argument conversion. (#774) -
[1.13.0] Client-side 4xx HTTP errors in Streamable HTTP are now logged at WARN level instead of ERROR, avoiding false production alerts. (#760)
-
[1.13.1]
ToolInputGuardrail.ToolInputContext#setArguments()andToolOutputGuardrail.ToolOutputContext#setResponse()no longer accept null, avoiding NPE for guarded no-argument tool calls. (backported from 2.0.x) (#819) -
[1.13.1] The
quarkus.mcp-server.metrics.enabledconfig property is now read at runtime. Since it defaults tofalse, applications that rely on MCP metrics without explicitly settingquarkus.mcp-server.metrics.enabled=truewill stop collecting them. (backported from 2.0.x) (#844) -
[1.13.1] Tracing spans now include the
mcp.server.nameattribute and respect per-servertracingEnabledconfiguration instead of only checking the default server. (backported from 2.0.x) (#845) -
[1.13.1] The OIDC security failure handler now always ends the HTTP response, fixing a connection leak when the request body is empty (e.g. SSE stream GET requests). (backported from 2.0.x) (#853)
-
[1.13.1] When
notifications/initializedarrives with an unknown session ID and auto-initialization is enabled, the server now returns 202 instead of an unsupported method error. (backported from 2.0.x) (#878)
1.12.x
| Version | Date |
|---|---|
May 18, 2026 |
|
April 21, 2026 |
Breaking Changes
-
[1.12.1] The
audienceattribute of the@Resource.Annotationsannotation and theContent.Annotationsrecord now supports multiple roles. The annotation attribute type changed fromRoletoRole[]and the record field type changed fromRoletoList<Role>. A backwards-compatible constructor accepting a singleRoleis provided. (backported from 1.13.x) (#788)
New Features
-
OpenTelemetry tracing: Distributed tracing for MCP server operations is now available when
quarkus-opentelemetryis present, following the OpenTelemetry semantic conventions for MCP servers. Tracing overhead is minimal when OpenTelemetry is disabled. (#703) -
Transport hints: A new API allows users to disable forced SSE initialization for programmatically added features, improving performance and simplifying request processing for tools that don’t require SSE. (#715)
-
Per-server feature name uniqueness: Feature names (tools, resources, prompts) are now enforced as unique per server configuration instead of globally, allowing different MCP servers to define features with the same name. (#627)
-
McpStdioTestClient: A new test utility for STDIO-based MCP servers, available through theMcpAssuredAPI. (#721)
Important Bug Fixes
-
[1.12.0] Empty
ToolAnnotationstitle is no longer included in the JSON response, which caused some MCP clients (e.g. IBM Bob IDE) to not display available tools. (#748) -
[1.12.0]
McpLog#error(Throwable, String, Object…)now correctly delegates tologger.errorf(…)instead oflogger.infof(…). (#744) -
[1.12.0] The server now sends a proper error response when a client subscribes to or unsubscribes from a non-existent resource URI, instead of throwing an uncaught exception. (#716)
-
[1.12.0] The
Iconclass is now registered for reflection, fixing missing icons in native mode. (#706) -
[1.12.0] Streamable HTTP transport no longer uses
McpMetadatain the hot path, reducing unnecessary allocations in larger deployments. (#722) -
[1.12.1] Custom Jackson serializers and deserializers are now honored for
@ToolArgparameters of scalar and custom types, fixing incorrect schema generation and argument conversion. (backported from 1.13.x) (#774)
1.11.x
| Version | Date |
|---|---|
April 8, 2026 |
|
March 25, 2026 |
New Features
-
Multiple
@McpServerbindings: The@McpServerannotation is now repeatable, allowing a single feature (tool, resource, prompt) to be bound to multiple server configurations. A configuration flag is available to enable backward compatibility mode. (#595) -
Schema validator module: A new module validates all MCP client requests and notifications against the relevant MCP specification JSON schema. (#17)
-
Tool name validation: An optional validation of tool names according to the MCP specification rules can be enabled via configuration. (#691)
-
DNS rebinding protection: Streamable HTTP servers bound to localhost now have DNS rebinding protection enabled by default, with options to configure or disable it. (#657)
-
Disable HTTP/WebSocket transport per server: Individual HTTP or WebSocket transports can now be disabled for a specific server configuration. (#633)
-
Elicitation schema builders: Convenient builder APIs for elicitation schema properties, including a new
IntegerSchema. (#652) -
InitialResponseInfo: A new API that provides access to the initialization response details inInitialCheckimplementations. (#597) -
Dev UI improvements: Aligned Dev UI screens with the Dev MCP look and feel, and added internationalization support. (#615)
Important Bug Fixes
-
[1.11.0] Pagination cursor is now based on a snapshot timestamp instead of name, making it resilient to concurrent modifications. (#672)
-
[1.11.0] Fixed a race condition in pagination. (#686)
-
[1.11.0] Elicitation and sampling now work correctly in native image. (#679)
-
[1.11.0] Elicitation schema properties are now encoded correctly. (#645)
-
[1.11.0] The
AudioContentreturn type is now encoded correctly. (#644) -
[1.11.0] Build-time validation of
@Iconsproviders now correctly handles inner classes. (#649) -
[1.11.0] Fixed incorrect validation of tool default value converters. (#619)
-
[1.11.1] The
Iconclass is now registered for reflection, fixing missing icons in native mode. (backported from 1.12.x) (#706) -
[1.11.1] The server now sends a proper error response when a client subscribes to or unsubscribes from a non-existent resource URI, instead of throwing an uncaught exception. (backported from 1.12.x) (#716)
-
[1.11.1] Streamable HTTP transport no longer uses
McpMetadatain the hot path, reducing unnecessary allocations in larger deployments. (backported from 1.12.x) (#722)
1.10.x
| Version | Date |
|---|---|
June 2, 2026 |
|
April 8, 2026 |
|
March 30, 2026 |
|
March 12, 2026 |
|
February 24, 2026 |
|
February 17, 2026 |
|
February 10, 2026 |
Breaking Changes
-
[1.10.6] The
audienceattribute of the@Resource.Annotationsannotation and theContent.Annotationsrecord now supports multiple roles. The annotation attribute type changed fromRoletoRole[]and the record field type changed fromRoletoList<Role>. A backwards-compatible constructor accepting a singleRoleis provided. (backported from 1.13.x) (#788)
New Features
-
Metrics support: Basic metrics for MCP server operations are now available when Micrometer is present. (#589)
-
FilterContext: Filters can now access additional metadata from the_metafield, the request ID, and the JSON-RPC method name. (#582) -
Relaxed initialization phase: The initialization phase constraints have been relaxed to allow more flexible server startup. (#586)
-
Resource usability improvements: Improved resource content encoding with a default
ResourceContentsEncoderimplementation. (#601)
Important Bug Fixes
-
[1.10.1] Fixed icons parsing when icon theme is null. (#611)
-
[1.10.2] Fixed incorrect validation of tool default value converters. (backported from 1.11.x) (#619)
-
[1.10.3] Elicitation schema properties are now encoded correctly. (backported from 1.11.x) (#645)
-
[1.10.3] The
AudioContentreturn type is now encoded correctly. (backported from 1.11.x) (#644) -
[1.10.3] Pagination cursor is now based on a snapshot timestamp instead of name, making it resilient to concurrent modifications. (backported from 1.11.x) (#672)
-
[1.10.4] Elicitation and sampling now work correctly in native image. (backported from 1.11.x) (#679)
-
[1.10.4] Fixed a race condition in pagination. (backported from 1.11.x) (#686)
-
[1.10.4] The
Iconclass is now registered for reflection, fixing missing icons in native mode. (backported from 1.12.x) (#706) -
[1.10.5] The server now sends a proper error response when a client subscribes to or unsubscribes from a non-existent resource URI, instead of throwing an uncaught exception. (backported from 1.12.x) (#716)
-
[1.10.5] Streamable HTTP transport no longer uses
McpMetadatain the hot path, reducing unnecessary allocations in larger deployments. (backported from 1.12.x) (#722) -
[1.10.6] Empty
ToolAnnotationstitle is no longer included in the JSON response, which caused some MCP clients (e.g. IBM Bob IDE) to not display available tools. (backported from 1.12.x) (#748) -
[1.10.6]
McpLog#error(Throwable, String, Object…)now correctly delegates tologger.errorf(…)instead oflogger.infof(…). (backported from 1.12.x) (#744) -
[1.10.6] Build-time validation of resource template methods now correctly considers the
nameattribute of@ResourceTemplateArginstead of only matching against method parameter names. (backported from 1.13.x) (#806)
1.9.x
| Version | Date |
|---|---|
February 6, 2026 |
|
January 28, 2026 |
New Features
-
Icons for tools, resources, resource templates, and prompts: Features can now have associated icons for display in MCP clients. (#561)
-
Tool input/output guardrails: A new mechanism to validate or transform tool inputs before execution and tool outputs before they are returned to the client. (#556)
-
Elicitation updates: Support for default values in all primitive types for elicitation schemas, and updates to
ElicitResultandEnumSchema. (#552) -
Server/client
Implementationmetadata:description,icons, andwebsiteUrlfields are now supported in the server and clientImplementationrecords. (#548) -
Dummy initialization for Streamable HTTP: Allows performing a dummy initialization to work around clients that do not properly initialize the MCP connection. (#519)
Important Bug Fixes
-
[1.9.0] Fixed missing
$defsin generatedinputSchemaofDefaultSchemaGenerator, breaking support for recursive and complex types. (#540) -
[1.9.0] Input validation errors are now returned as tool response errors instead of JSON-RPC protocol errors. (#537)
-
[1.9.0] Tool error messages no longer leak internal Java class names during argument validation. (#554)
-
[1.9.1]
FilterContextintroduced — filters can now access metadata from themetafield, request ID, and JSON-RPC method name. _(backported from 1.10.x) (#582) -
[1.9.1] The initialization phase constraints have been relaxed to allow more flexible server startup. (backported from 1.10.x) (#586)
1.8.x
| Version | Date |
|---|---|
December 10, 2025 |
|
November 26, 2025 |
Breaking Changes
-
The
quarkus-mcp-server-sseartifact has been renamed toquarkus-mcp-server-http. Relocations and configuration fallbacks are provided for backward compatibility. (#501)
New Features
-
Feature metadata: Additional metadata can now be attached to feature definitions (tools, resources, prompts) via the
@MetaFieldannotation or the programmatic API. (#503) -
WrapBusinessError#unless(): A new option to conditionally skip error wrapping for specific exception types. (#505) -
Tool name max length configuration: A new
quarkus.mcp.server.tools.name-max-lengthconfig property to enforce tool name length limits. (#484) -
LangChain4j annotation support toggle: Support for LangChain4j
@Tool/@Pannotations can now be disabled via configuration. (#475)
Important Bug Fixes
-
[1.8.0] Fixed
Toolmethod returningUniwithstructuredContentenabled. (#480) -
[1.8.0] Fixed resource template completion when the client does not include the template name in the reference. (#494)
-
[1.8.0] Hibernate Validator processor no longer wraps all validated methods, only MCP feature methods. (#507)
-
[1.8.1] Dummy initialization for Streamable HTTP is now available. (backported from 1.9.x) (#519)
1.7.x
| Version | Date |
|---|---|
November 19, 2025 |
|
November 12, 2025 |
|
November 3, 2025 |
|
October 15, 2025 |
Important Bug Fixes
-
[1.7.1] Fixed
Toolmethod returningUniwithstructuredContentenabled. (backported from 1.8.x) (#479) -
[1.7.2] WebSocket endpoints now use
InboundProcessingMode#CONCURRENTfor proper concurrent message handling. (backported from 1.8.x) (#486) -
[1.7.3] WebSocket transport now ensures MCP connection is initialized before a message is consumed. (#499)
-
[1.7.3] Fixed HTTP transport compatibility with Quarkus 3.30+. (#491)
-
[1.7.3] Fixed resource template completion when the client does not include the template name in the reference. (backported from 1.8.x) (#493)
1.6.x
| Version | Date |
|---|---|
October 8, 2025 |
|
September 23, 2025 |
New Features
-
Hibernate Validator integration: A new
quarkus-mcp-server-hibernate-validatormodule integrates Hibernate Validator for automatic validation of tool inputs, with improved input schema generation for Jakarta Validation annotations. (#431) -
Instructions support: Servers can now include instructions in the initialization response. (#408)
-
McpExceptionin public API:McpExceptionhas been moved to the public API for use in feature implementations. (#424) -
quarkus-mcp-server-bom: Introduced a Bill of Materials artifact for dependency management. (#395)
Important Bug Fixes
-
[1.6.0] The CDI request context is now activated during
Notification.Type.INITIALIZEDprocessing. (#425) -
[1.6.1] Extracted
ObjectMapperCustomizerfromDefaultSchemaGeneratorto fix a timing issue whereObjectMapperstatic initialization could conflict withSchemaGeneratorConfigCustomizerimplementations that depend on runtime configuration. (#445)
1.5.x
| Version | Date |
|---|---|
September 8, 2025 |
|
September 8, 2025 |
|
September 8, 2025 |
|
August 27, 2025 |
Breaking Changes
-
The deprecated
ResourceInfo#sendUpdate()method has been removed. (#384)
New Features
-
Elicitation support: Servers can request additional input from users during tool execution. (#362)
-
Structured tool output: Tools can now return structured content alongside text responses. (#379)
-
Resource annotations: Support for annotations on resources, resource templates, and contents (audience, priority, lastModified). (#383)
-
Resource links in tool calls and prompts: Tool responses and prompts can now include resource links. (#370)
-
_metafield support: Additional metadata represented by the_metafield is now supported. (#367) -
Title for features: A human-readable
titlefield for display in UI is now supported. (#367) -
CompleteContext: A new context object for completion handlers. (#367) -
RawMessage: Access to the raw JSON-RPC message is now available. (#366) -
Programmatic API improvements: Interfaces are now used instead of records for arguments, and cancellation support has been added. (#365, #366)
-
quarkus-mcp-server-bom: [1.5.1] Introduced a Bill of Materials artifact for dependency management. (backported from 1.6.x) (#396)
1.4.x
| Version | Date |
|---|---|
July 31, 2025 |
|
July 17, 2025 |
New Features
-
Request cancellation: Support for cancelling in-progress MCP requests. (#332)
-
McpAssuredtesting API: A convenient new API for testing MCP servers in integration tests. (#316) -
Subsidiary SSE streams: Streamable HTTP transport now supports subsidiary SSE streams. (#330)
-
Pagination control: Pagination can now be disabled by setting the page size to zero or a negative value. (#327)
1.3.x
| Version | Date |
|---|---|
June 24, 2025 |
|
June 19, 2025 |
New Features
-
Multiple MCP server configurations: A single application can now host multiple MCP server configurations with separate endpoints. (#285)
-
Tool annotations: Support for MCP tool annotations (
readOnlyHint,destructiveHint, etc.). (#281) -
InitialCheck: A new hook to inspect and optionally reject client connections during initialization. (#294) -
InitialRequest#transport(): The transport type is now available in the initial request. (#296) -
Connection idle timeout: A configurable idle timeout for MCP connections. (#291)
-
Roots and sampling timeouts: Configurable timeouts for roots and sampling operations. (#288)
-
SSE query parameters: Query parameters from the SSE endpoint URL are now available in the message endpoint. (#290)
-
Nested tool argument schema generation: Annotation-based schema generation now supports nested argument classes. (#298)
1.2.x
| Version | Date |
|---|---|
June 4, 2025 |
|
May 28, 2025 |
|
May 22, 2025 |
New Features
-
Streamable HTTP transport: Initial support for the Streamable HTTP transport as defined in the MCP specification. (#240)
-
Filters: A mechanism to determine the set of visible and accessible features per connection. (#257)
-
Default values for
@ToolArgand@PromptArg: Annotations now support specifying default values. (#235) -
Dev UI bearer token input: The Dev UI now includes an input field for bearer token authentication. (#220)
1.1.x
| Version | Date |
|---|---|
April 23, 2025 |
|
April 17, 2025 |
New Features
-
CLI adapter: An early draft of the CLI adapter for exposing CLI tools as MCP tools. (#166)
-
Sampling support: Initial support for the MCP sampling capability. (#214)
-
Roots support: Initial support for the MCP roots capability. (#212)
-
Progress API: A new API for reporting progress of long-running tool operations. (#195)
-
Notification hook: A new
@Notificationannotation for post-initialization logic. (#212) -
Dev UI completion views: The Dev UI now includes views for completion APIs. (#210)
1.0.x
| Version | Date |
|---|---|
April 10, 2025 |
|
April 2, 2025 |
1.0.0 is the first stable release of the Quarkus MCP Server extension, preceded by six Alpha, five Beta, and one CR pre-releases. It provides core support for MCP tools, resources, resource templates, prompts, and completions over STDIO and SSE transports, with a Dev UI for interactive testing.