Skip to content

CAMEL-24353: camel-mcp-server - selectable target server type for VertxMcpServerEngine - #25329

Merged
Croway merged 1 commit into
apache:mainfrom
Croway:CAMEL-24353-mcp-engine-target-server-type
Aug 4, 2026
Merged

CAMEL-24353: camel-mcp-server - selectable target server type for VertxMcpServerEngine#25329
Croway merged 1 commit into
apache:mainfrom
Croway:CAMEL-24353-mcp-engine-target-server-type

Conversation

@Croway

@Croway Croway commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

JIRA: CAMEL-24353 — the small enabler for CAMEL-23853 / #25203 discussed here.

VertxMcpServerEngine hardwired its router lookup to the main HTTP server (isMainServer()). This adds a targetServerType property (default server, unchanged behavior) so the engine can register the MCP endpoint on the management HTTP server router instead — ManagementHttpServer already binds its VertxPlatformHttpRouter with SERVER_TYPE_MANAGEMENT in the registry, so this is pure selection, no new plumbing.

Semantics:

  • Exact server-type match; an explicit management target never falls back to the public server (dev tools must not silently end up on the exposed port).
  • The single-router fallback for a bare VertxPlatformHttpServer (which carries no server type) is kept for the default target only.
  • Fail-fast messages name the missing server and how to enable it.

With this, #25203 can drive the SDK-backed engine directly — initialize(...) + toolAdded(...) with tools built from the JBang ToolRegistry — and drop its hand-rolled JSON-RPC engine while gaining the full streamable transport (sessions, SSE, GET replay, DELETE, tools/list_changed).

Testing

VertxMcpServerEngineTargetServerTypeTest:

  • Engine targeted at management with both servers running: full MCP conversation (SDK client) on the management port, 404 on the main port — also exercises the bridge-less, hand-built-tools usage exactly as CAMEL-23853: Embed MCP server on camel run/dev and Camel Main #25203 would.
  • management target with no management server: fails fast with an IllegalStateException naming the management server, even though a main-server router is present.

Full camel-mcp-server module suite green (10 tests).


This PR was written by Claude Code on behalf of Federico Mariani (@Croway).

🤖 Generated with Claude Code

…txMcpServerEngine

The engine hardwired its router lookup to the main HTTP server. The new
targetServerType property (default 'server') lets it register the MCP
endpoint on the management HTTP server router instead, which
ManagementHttpServer already binds in the registry with
SERVER_TYPE_MANAGEMENT. An explicit management target never falls back
to the public server; the bare-VertxPlatformHttpServer single-router
fallback is kept for the default target only.

Unblocks CAMEL-23853: the JBang dev-tools MCP can drive this SDK-backed
engine directly (tools built from its ToolRegistry) instead of
hand-rolling the streamable HTTP protocol.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

@davsclaus davsclaus left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Clean, well-scoped enabler for CAMEL-23853. The change is backward-compatible (default SERVER_TYPE_SERVER preserves existing behavior), security-conscious (explicit management target never silently falls back to the public server), and well-tested (positive + negative cases, AssertJ assertions, proper cleanup).

One minor observation: setTargetServerType(null) would cause an unhelpful NPE in lookupRouter() — a Objects.requireNonNull in the setter would be more defensive, though this is non-blocking since the API is internal.

LGTM.

This review was generated by an AI agent and may contain inaccuracies. Please verify all suggestions before applying.

Claude Code on behalf of Claus Ibsen (@davsclaus)

@Croway
Croway merged commit 3271116 into apache:main Aug 4, 2026
5 checks passed
@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

🌟 Thank you for your contribution to the Apache Camel project! 🌟
🤖 CI automation will test this PR automatically.

🐫 Apache Camel Committers, please review the following items:

  • First-time contributors require MANUAL approval for the GitHub Actions to run
  • You can use the command /component-test (camel-)component-name1 (camel-)component-name2.. to request a test from the test bot although they are normally detected and executed by CI.
  • You can label PRs using skip-tests and test-dependents to fine-tune the checks executed by this PR.
  • Build and test logs are available in the summary page. Only Apache Camel committers have access to the summary.

⚠️ Be careful when sharing logs. Review their contents before sharing them publicly.

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

🧪 CI tested the following changed modules:

  • components/camel-ai/camel-mcp-server

🔬 Scalpel shadow comparison — Scalpel: 9 tested, 29 compile-only — current: 9 all tested

Maveniverse Scalpel detected 38 affected modules (current approach: 9).

⚠️ Modules only in Scalpel (29)
  • apache-camel
  • camel-allcomponents
  • camel-catalog
  • camel-catalog-console
  • camel-catalog-lucene
  • camel-catalog-maven
  • camel-catalog-suggest
  • camel-componentdsl
  • camel-csimple-maven-plugin
  • camel-endpointdsl
  • camel-endpointdsl-support
  • camel-itest
  • camel-jbang-core
  • camel-jbang-it
  • camel-jbang-main
  • camel-jbang-plugin-edit
  • camel-jbang-plugin-generate
  • camel-jbang-plugin-kubernetes
  • camel-jbang-plugin-test
  • camel-kamelet-main
  • camel-launcher
  • camel-report-maven-plugin
  • camel-route-parser
  • camel-yaml-dsl
  • camel-yaml-dsl-deserializers
  • camel-yaml-dsl-maven-plugin
  • coverage
  • docs
  • dummy-component

Skip-tests mode would test 9 modules (1 direct + 8 downstream), skip tests for 29 (generated code, meta-modules)

Modules Scalpel would test (9)
  • camel-jbang-mcp
  • camel-jbang-plugin-mcp
  • camel-jbang-plugin-route-parser
  • camel-jbang-plugin-tui
  • camel-jbang-plugin-validate
  • camel-launcher-container
  • camel-mcp-server
  • camel-yaml-dsl-validator
  • camel-yaml-dsl-validator-maven-plugin
Modules with tests skipped (29)
  • apache-camel
  • camel-allcomponents
  • camel-catalog
  • camel-catalog-console
  • camel-catalog-lucene
  • camel-catalog-maven
  • camel-catalog-suggest
  • camel-componentdsl
  • camel-csimple-maven-plugin
  • camel-endpointdsl
  • camel-endpointdsl-support
  • camel-itest
  • camel-jbang-core
  • camel-jbang-it
  • camel-jbang-main
  • camel-jbang-plugin-edit
  • camel-jbang-plugin-generate
  • camel-jbang-plugin-kubernetes
  • camel-jbang-plugin-test
  • camel-kamelet-main
  • camel-launcher
  • camel-report-maven-plugin
  • camel-route-parser
  • camel-yaml-dsl
  • camel-yaml-dsl-deserializers
  • camel-yaml-dsl-maven-plugin
  • coverage
  • docs
  • dummy-component

ℹ️ Shadow mode — Scalpel observes but does not affect test execution. Learn more

⚠️ Some tests are disabled on GitHub Actions (@DisabledIfSystemProperty(named = "ci.env.name")) and require manual verification:

  • components/camel-ai/camel-mcp-server: 1 test(s) disabled on GitHub Actions
All tested modules (38 modules)
  • Camel :: AI :: MCP Server
  • Camel :: All Components Sync point
  • Camel :: Assembly
  • Camel :: Catalog :: CSimple Maven Plugin (deprecated)
  • Camel :: Catalog :: Camel Catalog
  • Camel :: Catalog :: Camel Report Maven Plugin
  • Camel :: Catalog :: Camel Route Parser
  • Camel :: Catalog :: Console
  • Camel :: Catalog :: Dummy Component
  • Camel :: Catalog :: Lucene (deprecated)
  • Camel :: Catalog :: Maven
  • Camel :: Catalog :: Suggest
  • Camel :: Component DSL
  • Camel :: Coverage
  • Camel :: Docs
  • Camel :: Endpoint DSL
  • Camel :: Endpoint DSL :: Support
  • Camel :: Integration Tests
  • Camel :: JBang :: Core
  • Camel :: JBang :: Integration tests
  • Camel :: JBang :: MCP
  • Camel :: JBang :: Main
  • Camel :: JBang :: Plugin :: Edit
  • Camel :: JBang :: Plugin :: Generate
  • Camel :: JBang :: Plugin :: Kubernetes
  • Camel :: JBang :: Plugin :: MCP
  • Camel :: JBang :: Plugin :: Route Parser
  • Camel :: JBang :: Plugin :: TUI
  • Camel :: JBang :: Plugin :: Testing
  • Camel :: JBang :: Plugin :: Validate
  • Camel :: Kamelet Main
  • Camel :: Launcher
  • Camel :: Launcher :: Container
  • Camel :: YAML DSL
  • Camel :: YAML DSL :: Deserializers
  • Camel :: YAML DSL :: Maven Plugins
  • Camel :: YAML DSL :: Validator
  • Camel :: YAML DSL :: Validator Maven Plugin

⚙️ View full build and test results

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants