This is an automated email from the ASF dual-hosted git repository.
jamesnetherton pushed a commit to branch 3.40.x
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/3.40.x by this push:
new d897b0688a mcp-server: Document the mcp-server extension as streamable
HTTP only. Related to #9342.
d897b0688a is described below
commit d897b0688ae79643baa6ad3d143244751b528d52
Author: Alexandre Gallice <[email protected]>
AuthorDate: Mon Nov 2 08:35:25 2026 +0100
mcp-server: Document the mcp-server extension as streamable HTTP only.
Related to #9342.
Co-authored-by: Claude Opus 5 <[email protected]>
---
.../pages/reference/extensions/mcp-server.adoc | 85 ++++------------------
.../mcp-server/runtime/src/main/doc/intro.adoc | 12 +--
.../mcp-server/runtime/src/main/doc/usage.adoc | 72 ++----------------
3 files changed, 28 insertions(+), 141 deletions(-)
diff --git a/docs/modules/ROOT/pages/reference/extensions/mcp-server.adoc
b/docs/modules/ROOT/pages/reference/extensions/mcp-server.adoc
index 080044d97d..9528fb1b9e 100644
--- a/docs/modules/ROOT/pages/reference/extensions/mcp-server.adoc
+++ b/docs/modules/ROOT/pages/reference/extensions/mcp-server.adoc
@@ -24,12 +24,12 @@ extension. No route is needed for the server itself: add
the extension, tag
the `ai-tool` routes to expose, and any MCP client (another Camel
application, an IDE, a coding agent) can discover and call them.
-Tool semantics — tag-based opt-in (the untagged default pool is never
-exposed), flat-namespace collision refusal, per-call timeout and error
-sanitization — are owned by the runtime-agnostic `camel-mcp-server-api`
-bridge and are identical on every Camel runtime. Serving concerns (endpoint
-path, transports, authentication) are owned by quarkus-mcp-server and
-configured via `quarkus.mcp.server.*`.
+The server is exposed over streamable HTTP. Tool semantics — tag-based
+opt-in (the untagged default pool is never exposed), flat-namespace
+collision refusal, per-call timeout and error sanitization — are owned by
+the `camel-mcp-server-api` bridge. Serving concerns (endpoint path,
+authentication) are owned by quarkus-mcp-server and configured via
+`quarkus.mcp.server.*`.
[id="extensions-mcp-server-whats-inside"]
@@ -98,9 +98,10 @@ arrive as message headers in the route
(`${header.customerId}`).
=== Combining the Camel and quarkus-mcp-server configuration
The configuration is split by ownership: `quarkus.camel.mcp-server.*`
-decides *which tools exist and how they execute* (identical semantics on
-every Camel runtime), while `quarkus.mcp.server.*` decides *how the server
-is exposed*. Both are set side by side in `application.properties`:
+decides *which tools exist and how they execute* (semantics owned by the
+`camel-mcp-server-api` bridge), while `quarkus.mcp.server.*` decides *how
+the server is exposed*. Both are set side by side in
+`application.properties`:
[source,properties]
----
@@ -120,7 +121,7 @@ quarkus.mcp.server.traffic-logging.text-limit = 200
See the
https://docs.quarkiverse.io/quarkus-mcp-server/dev/index.html#configuration-reference[quarkus-mcp-server
configuration reference]
-for the full list of `quarkus.mcp.server.*` properties (transports, dev UI,
+for the full list of `quarkus.mcp.server.*` properties (dev UI,
authentication, guardrails, pagination, timeouts).
[id="extensions-mcp-server-usage-connecting-mcp-clients"]
@@ -155,63 +156,9 @@ A coding agent or IDE is configured with the same URL,
e.g. in an
}
----
-[id="extensions-mcp-server-usage-serving-over-stdio"]
-=== Serving over stdio
-
-Out of the box the tools are served over streamable HTTP. MCP clients that
-launch the server as a subprocess speak over stdin/stdout instead — add the
-stdio transport alongside the extension:
-
-[source,xml]
-----
-<dependency>
- <groupId>io.quarkiverse.mcp</groupId>
- <artifactId>quarkus-mcp-server-stdio</artifactId>
- <!-- the same version as the quarkus-mcp-server-http extension pulled in
- by camel-quarkus-mcp-server; the transports share their core module
-->
- <version>1.13.1</version>
-</dependency>
-----
-
-The stdio transport is active as soon as it is on the classpath
-(`quarkus.mcp.server.stdio.enabled` defaults to `true`), and the same Camel
-tools are then served over both transports. To serve over stdio *only*,
-disable the HTTP transport of the default MCP server:
-
-[source,properties]
-----
-quarkus.mcp.server."<default>".http.enabled = false
-----
-
-The server name of the default MCP server is the literal string
-`<default>`, so it has to be quoted. Conversely,
-`quarkus.mcp.server.stdio.enabled = false` keeps the stdio extension on the
-classpath without activating it, which is useful when the same application
-is deployed both ways.
-
-Because stdout carries the MCP protocol, nothing else may be written to it;
-`quarkus-mcp-server-stdio` takes care of this by routing console logging to
-stderr. A stdio server is typically built as a native executable and
-launched by the client:
-
-[source,json]
-----
-{
- "mcpServers": {
- "my-integration-app": {
- "command": "/path/to/target/my-integration-app-1.0.0-runner"
- }
- }
-}
-----
-
-See the
-https://docs.quarkiverse.io/quarkus-mcp-server/dev/getting-started-stdio.html[quarkus-mcp-server
stdio guide]
-and the
-https://docs.quarkiverse.io/quarkus-mcp-server/dev/reference-configuration.html[configuration
reference]
-for the transport options. On Spring Boot the equivalent setup is described
-in the
-https://docs.spring.io/spring-ai/reference/api/mcp/mcp-server-boot-starter-docs.html[Spring
AI MCP Server Boot Starter documentation].
+The tools are served over streamable HTTP only. The stdio transport, used
+by MCP clients that launch the server as a subprocess, is not supported by
+this extension.
[id="extensions-mcp-server-usage-mixing-with-quarkus-mcp-server-annotated-tools"]
=== Mixing with quarkus-mcp-server annotated tools
@@ -262,10 +209,6 @@ and a call exceeding
`quarkus.camel.mcp-server.tool-timeout` returns
`Tool execution timed out` while the route keeps running until it completes
on its own.
-On Camel Main and Camel JBang the equivalent setup is the
-`camel-mcp-server` module with the `camel.server.mcp-*` options; on Spring
-Boot it is the `camel-mcp-server-starter`.
-
[id="extensions-mcp-server-additional-camel-quarkus-configuration"]
== Additional Camel Quarkus configuration
diff --git a/extensions/mcp-server/runtime/src/main/doc/intro.adoc
b/extensions/mcp-server/runtime/src/main/doc/intro.adoc
index 7c60ee6f2d..74d1bc5019 100644
--- a/extensions/mcp-server/runtime/src/main/doc/intro.adoc
+++ b/extensions/mcp-server/runtime/src/main/doc/intro.adoc
@@ -5,9 +5,9 @@ extension. No route is needed for the server itself: add the
extension, tag
the `ai-tool` routes to expose, and any MCP client (another Camel
application, an IDE, a coding agent) can discover and call them.
-Tool semantics — tag-based opt-in (the untagged default pool is never
-exposed), flat-namespace collision refusal, per-call timeout and error
-sanitization — are owned by the runtime-agnostic `camel-mcp-server-api`
-bridge and are identical on every Camel runtime. Serving concerns (endpoint
-path, transports, authentication) are owned by quarkus-mcp-server and
-configured via `quarkus.mcp.server.*`.
+The server is exposed over streamable HTTP. Tool semantics — tag-based
+opt-in (the untagged default pool is never exposed), flat-namespace
+collision refusal, per-call timeout and error sanitization — are owned by
+the `camel-mcp-server-api` bridge. Serving concerns (endpoint path,
+authentication) are owned by quarkus-mcp-server and configured via
+`quarkus.mcp.server.*`.
diff --git a/extensions/mcp-server/runtime/src/main/doc/usage.adoc
b/extensions/mcp-server/runtime/src/main/doc/usage.adoc
index 595f81e6ed..27a9de1e12 100644
--- a/extensions/mcp-server/runtime/src/main/doc/usage.adoc
+++ b/extensions/mcp-server/runtime/src/main/doc/usage.adoc
@@ -36,9 +36,10 @@ arrive as message headers in the route
(`${header.customerId}`).
=== Combining the Camel and quarkus-mcp-server configuration
The configuration is split by ownership: `quarkus.camel.mcp-server.*`
-decides *which tools exist and how they execute* (identical semantics on
-every Camel runtime), while `quarkus.mcp.server.*` decides *how the server
-is exposed*. Both are set side by side in `application.properties`:
+decides *which tools exist and how they execute* (semantics owned by the
+`camel-mcp-server-api` bridge), while `quarkus.mcp.server.*` decides *how
+the server is exposed*. Both are set side by side in
+`application.properties`:
[source,properties]
----
@@ -58,7 +59,7 @@ quarkus.mcp.server.traffic-logging.text-limit = 200
See the
https://docs.quarkiverse.io/quarkus-mcp-server/dev/index.html#configuration-reference[quarkus-mcp-server
configuration reference]
-for the full list of `quarkus.mcp.server.*` properties (transports, dev UI,
+for the full list of `quarkus.mcp.server.*` properties (dev UI,
authentication, guardrails, pagination, timeouts).
=== Connecting MCP clients
@@ -92,62 +93,9 @@ A coding agent or IDE is configured with the same URL, e.g.
in an
}
----
-=== Serving over stdio
-
-Out of the box the tools are served over streamable HTTP. MCP clients that
-launch the server as a subprocess speak over stdin/stdout instead — add the
-stdio transport alongside the extension:
-
-[source,xml]
-----
-<dependency>
- <groupId>io.quarkiverse.mcp</groupId>
- <artifactId>quarkus-mcp-server-stdio</artifactId>
- <!-- the same version as the quarkus-mcp-server-http extension pulled in
- by camel-quarkus-mcp-server; the transports share their core module
-->
- <version>1.13.1</version>
-</dependency>
-----
-
-The stdio transport is active as soon as it is on the classpath
-(`quarkus.mcp.server.stdio.enabled` defaults to `true`), and the same Camel
-tools are then served over both transports. To serve over stdio *only*,
-disable the HTTP transport of the default MCP server:
-
-[source,properties]
-----
-quarkus.mcp.server."<default>".http.enabled = false
-----
-
-The server name of the default MCP server is the literal string
-`<default>`, so it has to be quoted. Conversely,
-`quarkus.mcp.server.stdio.enabled = false` keeps the stdio extension on the
-classpath without activating it, which is useful when the same application
-is deployed both ways.
-
-Because stdout carries the MCP protocol, nothing else may be written to it;
-`quarkus-mcp-server-stdio` takes care of this by routing console logging to
-stderr. A stdio server is typically built as a native executable and
-launched by the client:
-
-[source,json]
-----
-{
- "mcpServers": {
- "my-integration-app": {
- "command": "/path/to/target/my-integration-app-1.0.0-runner"
- }
- }
-}
-----
-
-See the
-https://docs.quarkiverse.io/quarkus-mcp-server/dev/getting-started-stdio.html[quarkus-mcp-server
stdio guide]
-and the
-https://docs.quarkiverse.io/quarkus-mcp-server/dev/reference-configuration.html[configuration
reference]
-for the transport options. On Spring Boot the equivalent setup is described
-in the
-https://docs.spring.io/spring-ai/reference/api/mcp/mcp-server-boot-starter-docs.html[Spring
AI MCP Server Boot Starter documentation].
+The tools are served over streamable HTTP only. The stdio transport, used
+by MCP clients that launch the server as a subprocess, is not supported by
+this extension.
=== Mixing with quarkus-mcp-server annotated tools
@@ -194,7 +142,3 @@ the client), a missing or invalid argument returns the
validation message,
and a call exceeding `quarkus.camel.mcp-server.tool-timeout` returns
`Tool execution timed out` while the route keeps running until it completes
on its own.
-
-On Camel Main and Camel JBang the equivalent setup is the
-`camel-mcp-server` module with the `camel.server.mcp-*` options; on Spring
-Boot it is the `camel-mcp-server-starter`.