Skip to content

CAMEL-23964: camel-openai - Add per-server MCP tool filtering via toolNames - #25209

Merged
gnodet merged 2 commits into
apache:mainfrom
gnodet:CAMEL-23964/mcp-tool-filtering
Jul 29, 2026
Merged

CAMEL-23964: camel-openai - Add per-server MCP tool filtering via toolNames#25209
gnodet merged 2 commits into
apache:mainfrom
gnodet:CAMEL-23964/mcp-tool-filtering

Conversation

@gnodet

@gnodet gnodet commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Summary

Add a per-server toolNames include list to the camel-openai MCP server configuration, allowing users to restrict which tools are registered from each MCP server.

Motivation: Currently, camel-openai registers all tools from every configured MCP server. Users need filtering to:

  • Reduce prompt size and token cost
  • Keep destructive tools away from the model
  • Work around duplicate tool names across servers

Configuration:

mcpServer.<name>.toolNames=tool1,tool2

When toolNames is set, only the listed tools are registered. When not set or empty, all tools are registered (backward compatible).

Changes

  • OpenAIEndpoint.java — Added filterTools() helper method that parses the per-server toolNames include list and filters tools. Applied in both initializeMcpServers() and doReconnectMcpServer() for consistent behavior across initial startup and connection recovery.
  • OpenAIConfiguration.java — Updated mcpServer metadata description to document the toolNames sub-property.
  • openai-mcp.adoc — Added "Tool Filtering" documentation section with Java, XML, and YAML examples.
  • OpenAIEndpointMcpToolFilteringTest.java — 9 new unit tests covering: basic filtering, no filter (all tools), empty filter, whitespace trimming, multiple servers with different filters, mixed filtered/unfiltered servers, reconnect filter persistence, single tool filter, and returnDirect interaction with filtering.
  • openai.json — Regenerated component metadata (auto-generated).

Test plan

  • All 151 unit tests pass (including 9 new filtering tests)
  • Source check (mvn -Psourcecheck validate) passes
  • CI build passes

Claude Code on behalf of gnodet

🤖 Generated with Claude Code

…lNames

Add a per-server toolNames include list to restrict which MCP tools are
registered from each server. This reduces prompt size/cost, keeps
destructive tools away from the model, and avoids duplicate tool names
across servers.

Configuration: mcpServer.<name>.toolNames=tool1,tool2 (comma-separated)

The filter is applied consistently in both initializeMcpServers() and
doReconnectMcpServer() so the tool set remains stable across connection
recovery. When toolNames is not set or empty, all tools are registered
(backward compatible).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions

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.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

🧪 CI tested the following changed modules:

  • catalog/camel-catalog
  • components/camel-ai/camel-openai
  • dsl/camel-endpointdsl

🔬 Scalpel shadow comparison — Scalpel: 11 tested, 27 compile-only — current: 10 all tested

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

⚠️ Modules only in Scalpel (28)
  • 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

Skip-tests mode would test 11 modules (3 direct + 8 downstream), skip tests for 27 (generated code, meta-modules)

Modules Scalpel would test (11)
  • camel-catalog
  • camel-endpointdsl
  • camel-jbang-mcp
  • camel-jbang-plugin-mcp
  • camel-jbang-plugin-route-parser
  • camel-jbang-plugin-tui
  • camel-jbang-plugin-validate
  • camel-launcher-container
  • camel-openai
  • camel-yaml-dsl-validator
  • camel-yaml-dsl-validator-maven-plugin
Modules with tests skipped (27)
  • apache-camel
  • camel-allcomponents
  • camel-catalog-console
  • camel-catalog-lucene
  • camel-catalog-maven
  • camel-catalog-suggest
  • camel-componentdsl
  • camel-csimple-maven-plugin
  • 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-openai: 6 test(s) disabled on GitHub Actions
All tested modules (38 modules)
  • Camel :: AI :: OpenAI
  • 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

@gnodet
gnodet marked this pull request as ready for review July 29, 2026 14:31
@gnodet
gnodet requested review from Croway and davsclaus July 29, 2026 14:32
@gnodet gnodet added this to the 4.22.0 milestone Jul 29, 2026
@gnodet gnodet self-assigned this Jul 29, 2026
@gnodet gnodet added the enhancement New feature or request label Jul 29, 2026
@gnodet
gnodet merged commit 169989c into apache:main Jul 29, 2026
6 checks passed
@gnodet
gnodet deleted the CAMEL-23964/mcp-tool-filtering branch July 29, 2026 14:37
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