[ 
https://issues.apache.org/jira/browse/CAMEL-25639?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Federico Mariani updated CAMEL-25639:
-------------------------------------
    Description: 
camel-jbang-mcp lists 86 tools on main. In an evaluation of coding agents 
(Claude Code and IBM Bob) on legacy-to-Camel migration tasks with 4.22.1, 647 
calls used 22 of the 73 tools then exposed; the catalog tools, the validators, 
{{camel_component_properties}} and {{camel_configuration_validate}} were 98% of 
the calls, and several of the tools that were called answered with something a 
model could not use ({{camel_component_properties}} 15-124 K for one option 
name, {{camel_properties_translate}} main-to-main no-ops, 
{{camel_catalog_languages}} unfiltered 12-14 K). A code review of all 86 tools 
(October 2026) then found that about twenty are subsets, composites or copies 
of another tool, several with descriptions that promise more than the code 
does. Dropping and folding them removes wrong answers from the path the agents 
take, makes the surface easier for a model to pick from, and makes the profiles 
of CAMEL-25537 smaller to define.

The first group is the one the evaluation exercised; the second was never 
called in any session and is a cleanup.

h3. First: tools on the agents' path
|| Tool || Into || Why ||
| {{camel_component_properties}} | {{configKey}} on the component options of 
{{camel_catalog_doc}} | Same {{ComponentModel}}; its endpoint-options claim is 
false (CAMEL-25541). |
| {{camel_catalog_docs}} | drop, or a {{kind=page}} in {{find}} | A page index 
whose names {{camel_catalog_doc}} resolves only for the four artifact kinds 
({{CatalogDocs.java:227, 246, 270, 444}}). |
| {{camel_configuration_validate}} | {{camel_validate_source}} on a 
{{.properties}} file | {{validate_source}} already runs the same catalog 
validation per line ({{PropertiesChecks.java:137}}) plus nested-group hints, 
closest-name suggestions, line numbers and {{fixes}}; add 
{{runtime}}/{{platformBom}} there. CAMEL-25538 stays a catalog fix. |

h3. Second: never called in any evaluation session
|| Tool || Into || Why ||
| {{camel_runtime_receive}} | drop | Leaks a consumer (see the code-review 
umbrella issue). |
| {{camel_catalog_kamelets}}, {{camel_catalog_kamelet_doc}} | 
{{camel_catalog_doc}} / {{camel_catalog_find}} {{kind=kamelet}} (CAMEL-25379) | 
Same catalog jar; {{catalog_doc}} already adds the YAML shape, suggestions and 
project Kamelets. Add {{type}}, {{supportLevel}}, {{dependencies}} to the 
kamelet answer and let {{find}} take an empty term with a {{type}} filter. |
| {{camel_migration_compatibility}} | {{camel_migration_recipes}} with the Java 
check from {{camelReleases()}} | Static and wrong data, unused required 
argument (see the migration data issue). |
| {{camel_migration_analyze}} | {{camel_dependency_check}} {{projectInfo}} | 
Subset ({{DependencyCheckTools.java:87-88}}); {{camel_migration_wildfly_karaf}} 
takes {{sourceRuntime}} instead of a POM. |
| {{camel_openapi_mock_guidance}} | {{camel_openapi_scaffold}} output when 
{{missingOperation=mock}} | Static text plus a duplicate per-operation walk. |
| {{camel_runtime_route_analysis}}, {{camel_runtime_eip_stats}}, 
{{camel_runtime_config_drift}} | drop | Composites of two unbounded dumps each 
with six static hint strings and no analysis, aggregation or comparison 
({{ToolRegistry.java:681-774}}), despite descriptions promising all three. |
| {{camel_runtime_ai_trace}} | {{filter=ai}} on {{camel_runtime_history}} / 
{{top}} | Only true composite; sees one exchange. |
| {{camel_route_context}} | {{camel_project_overview}} with a {{content}} 
argument | Its EIP extraction is a substring match over all model names 
({{ExplainTools.java:106-122}}): every YAML route "uses" to, from, step, route; 
{{kafka:topic}} matches {{to}}. Use {{RouteNodes}}/{{RouteModel}}. |
| {{camel_route_harden_context}} | {{camel_security_scan}} behind 
{{includeContext}} | Same regexes, coarser ({{HardenTools.java:181-243}} vs 
{{SecurityScanTools.java:202-326}}); the prompts call only harden, never the 
line-level scanner. Keep the catalog component context and the CVE match. |
| {{camel_runtime_heap_histogram}}, {{heap_dump}}, {{memory_leak}} | one 
{{camel_runtime_heap view=histogram|dump|jfr}} | |
| {{camel_runtime_trace}} | split the read ({{dump}}) from 
{{enable}}/{{disable}} | Today the whole tool is {{readOnlyHint=false}}, so 
read-only clients cannot dump traces. |

{{ExampleTools}} becomes a thin wrapper of the registry (as {{AuthoringTools}} 
is): duplicated code with divergent not-found behaviour, CAMEL-25535.

h3. Arguments
* Process selector: {{nameOrPid}} on the runtime tools, {{name}} on 
{{camel_control}}/{{get_log}}/{{get_errors}}/{{eval_expression}}; required on 
{{ai_trace}} only.
* Booleans typed {{String}} in {{heap_dump}}, {{memory_leak}}, {{sql}}; 
{{limit}} {{Integer}} in browse/get_log but {{String}} in spans ({{limit}}) and 
sql ({{maxRows}}).
* Route selector {{routeId}} vs {{routeFilter}}; {{headers}} as {{key=value}} 
lines in {{send}} but JSON or {{name: value}} in {{http_request}}.
* Three camelVersion descriptions ({{VERSION_DESC}}, 
{{ToolArgDocs.CAMEL_VERSION}}, {{ToolArgDocs.VERSION_QUERY}} which asks for a 
Quarkus platform version); {{kind}} vocabularies differ between doc, find and 
sample; {{limit <= 0}} throws in docs, defaults in examples, is used raw in 
kamelets.
* Four tools take a POM as inline content; none takes a {{directory}} like 
{{camel_project_overview}} does.

h3. Output bounds the consoles support and the registry never passes
{{route_source}} ({{filter=*}} is every file in full), 
{{route_dump}}/{{route_structure}} ({{limit}}, {{brief}}), {{thread_dump}} 
(full stacks of every thread), {{trace}} dump ({{limit}}, {{bodyMaxChars}}), 
{{history}} ({{summary}} exists in the registry, {{ToolRegistry.java:220}}, not 
in the MCP wrapper), {{browse}} ({{bodyMaxChars}}), 
{{properties}}/{{endpoints}}/{{services}} (no filter).

h3. Hints
{{send}} destructive in MCP, not in the registry; {{route_control}} destructive 
for start/resume; {{sql}} destructive blocks read-write clients from SELECT (a 
SELECT-only check would allow it); {{heap_dump}} name unvalidated; 
{{write_file}} overwrites whole files as non-destructive.

h3. Also worth doing on the way
Hand-written tables with dead schemes: {{SecurityData}} lists websocket, 
rabbitmq, redis, ldaps, aws2-secrets-manager, cassandraql (not in the catalog; 
a component with an option marked {{secret}} or {{security=}} is derivable); 
{{TestInfraData}} maps 16 of 76 test-infra modules and sends sftp/ftps to plain 
FTP; {{DependencyData}} core-transitive list is only right for the 
{{camel-core}} aggregate. Regex heuristics with concrete false positives: 
{{security_scan}} flags {{to:}} producers and YAML {{- rest:}} blocks as 
consumers without a header filter, any {{sql:}} without {{:#}}, a log line with 
{{file:}} and {{${}}; {{route_cost_estimate}} prices Bedrock as Claude Sonnet 
regardless of {{modelId}}; {{route_test_scaffold}} generates a new 
{{from(first)}} to mock route so nothing of the real route is tested; 
{{camel_render_route_diagram}} says "parsed without running it" but boots a 
transient {{Run}}. Doc rows to refresh: DOC:349 ("only a plain file name"), 
DOC:493 (example levels), DOC:601 ("17 exceptions", 19), {{camel_control}} 
omits {{reload}}, {{tool_groups}} omits http/semantic, 
{{camel_migrate_project}} says pomContent required.

Blocks CAMEL-25537: define the profiles over the reduced surface.

h3. Added 2026-10-14: name the tools for the hosts that pick by name

How the agent hosts load the server (checked in their sources and docs):

|| Host || Tool schemas at session start || How the model reaches a tool || 
Server {{instructions}} ||
| Claude Code 2.1.29x | deferred: tool names only ({{ENABLE_TOOL_SEARCH}} unset 
= always defer; {{auto}} = defer above 10% of the context) | ToolSearch 
{{select:<name>}}: 113 such calls in the evaluation, every one by name | loaded 
at session start, up to 4096 characters |
| Codex CLI (main, 2026-10-14) | deferred: tool search is on by default 
({{core/tests/suite/search_tool.rs}}, {{mcp_tool_exposure.rs:84}}) | 
tool_search | read from {{initialize}}, used as server-wide guidance; the first 
512 characters matter most; {{enabled_tools}}/{{disabled_tools}} per server on 
the client side |
| OpenCode (main, 2026-10-14) | code mode by default: tools are not declared, 
the prompt carries one catalog line per tool | an {{execute}} script calling 
{{tools["<server>"]}} | full text in an {{<mcp_instructions>}} block, re-sent 
when it changes |
| Pi (main, 2026-10-14) | {{codemode}} by default (scripts use 
{{searchTools()}}), {{deferred}} via tool_search, {{direct}} per tool | scripts 
or tool_search | only the FIRST LINE reaches the system prompt; the full text 
through {{describeNamespace()}} in scripts |
| Bob Shell 2.0.5 | all schemas up front (995 evaluation calls, no search step) 
| direct | not documented |

On Claude Code, Codex and Pi the model chooses a tool by its NAME before it 
sees any description (113 ToolSearch calls in the evaluation, all 
{{select:<name>}}); on OpenCode and Pi code mode it sees one catalog line per 
tool. So for the consolidation: a name must state the question it answers, the 
first sentence of a description is the catalog line, and the unified 
{{camel_catalog_doc}} (components, EIPs, languages, data formats, Kamelets, 
beans, Java API, config groups under one name) should either keep a name per 
question or be backed by the instructions map of CAMEL-25646. In the evaluation 
{{camel_catalog_component_doc}} was selected 53 times by name; nothing in the 
list is named for the HTTP port or for what to declare for a JDBC driver, and 
those two questions were the largest waste (jar archaeology in plain and MCP 
arms, 44 knowledge searches).

_Claude Code on behalf of Croway_

  was:
camel-jbang-mcp lists 86 tools on main. In an evaluation of coding agents 
(Claude Code and IBM Bob) on legacy-to-Camel migration tasks with 4.22.1, 647 
calls used 22 of the 73 tools then exposed; the catalog tools, the validators, 
{{camel_component_properties}} and {{camel_configuration_validate}} were 98% of 
the calls, and several of the tools that were called answered with something a 
model could not use ({{camel_component_properties}} 15-124 K for one option 
name, {{camel_properties_translate}} main-to-main no-ops, 
{{camel_catalog_languages}} unfiltered 12-14 K). A code review of all 86 tools 
(October 2026) then found that about twenty are subsets, composites or copies 
of another tool, several with descriptions that promise more than the code 
does. Dropping and folding them removes wrong answers from the path the agents 
take, makes the surface easier for a model to pick from, and makes the profiles 
of CAMEL-25537 smaller to define.

The first group is the one the evaluation exercised; the second was never 
called in any session and is a cleanup.

h3. First: tools on the agents' path
|| Tool || Into || Why ||
| {{camel_component_properties}} | {{configKey}} on the component options of 
{{camel_catalog_doc}} | Same {{ComponentModel}}; its endpoint-options claim is 
false (CAMEL-25541). |
| {{camel_catalog_docs}} | drop, or a {{kind=page}} in {{find}} | A page index 
whose names {{camel_catalog_doc}} resolves only for the four artifact kinds 
({{CatalogDocs.java:227, 246, 270, 444}}). |
| {{camel_configuration_validate}} | {{camel_validate_source}} on a 
{{.properties}} file | {{validate_source}} already runs the same catalog 
validation per line ({{PropertiesChecks.java:137}}) plus nested-group hints, 
closest-name suggestions, line numbers and {{fixes}}; add 
{{runtime}}/{{platformBom}} there. CAMEL-25538 stays a catalog fix. |

h3. Second: never called in any evaluation session
|| Tool || Into || Why ||
| {{camel_runtime_receive}} | drop | Leaks a consumer (see the code-review 
umbrella issue). |
| {{camel_catalog_kamelets}}, {{camel_catalog_kamelet_doc}} | 
{{camel_catalog_doc}} / {{camel_catalog_find}} {{kind=kamelet}} (CAMEL-25379) | 
Same catalog jar; {{catalog_doc}} already adds the YAML shape, suggestions and 
project Kamelets. Add {{type}}, {{supportLevel}}, {{dependencies}} to the 
kamelet answer and let {{find}} take an empty term with a {{type}} filter. |
| {{camel_migration_compatibility}} | {{camel_migration_recipes}} with the Java 
check from {{camelReleases()}} | Static and wrong data, unused required 
argument (see the migration data issue). |
| {{camel_migration_analyze}} | {{camel_dependency_check}} {{projectInfo}} | 
Subset ({{DependencyCheckTools.java:87-88}}); {{camel_migration_wildfly_karaf}} 
takes {{sourceRuntime}} instead of a POM. |
| {{camel_openapi_mock_guidance}} | {{camel_openapi_scaffold}} output when 
{{missingOperation=mock}} | Static text plus a duplicate per-operation walk. |
| {{camel_runtime_route_analysis}}, {{camel_runtime_eip_stats}}, 
{{camel_runtime_config_drift}} | drop | Composites of two unbounded dumps each 
with six static hint strings and no analysis, aggregation or comparison 
({{ToolRegistry.java:681-774}}), despite descriptions promising all three. |
| {{camel_runtime_ai_trace}} | {{filter=ai}} on {{camel_runtime_history}} / 
{{top}} | Only true composite; sees one exchange. |
| {{camel_route_context}} | {{camel_project_overview}} with a {{content}} 
argument | Its EIP extraction is a substring match over all model names 
({{ExplainTools.java:106-122}}): every YAML route "uses" to, from, step, route; 
{{kafka:topic}} matches {{to}}. Use {{RouteNodes}}/{{RouteModel}}. |
| {{camel_route_harden_context}} | {{camel_security_scan}} behind 
{{includeContext}} | Same regexes, coarser ({{HardenTools.java:181-243}} vs 
{{SecurityScanTools.java:202-326}}); the prompts call only harden, never the 
line-level scanner. Keep the catalog component context and the CVE match. |
| {{camel_runtime_heap_histogram}}, {{heap_dump}}, {{memory_leak}} | one 
{{camel_runtime_heap view=histogram|dump|jfr}} | |
| {{camel_runtime_trace}} | split the read ({{dump}}) from 
{{enable}}/{{disable}} | Today the whole tool is {{readOnlyHint=false}}, so 
read-only clients cannot dump traces. |

{{ExampleTools}} becomes a thin wrapper of the registry (as {{AuthoringTools}} 
is): duplicated code with divergent not-found behaviour, CAMEL-25535.

h3. Arguments
* Process selector: {{nameOrPid}} on the runtime tools, {{name}} on 
{{camel_control}}/{{get_log}}/{{get_errors}}/{{eval_expression}}; required on 
{{ai_trace}} only.
* Booleans typed {{String}} in {{heap_dump}}, {{memory_leak}}, {{sql}}; 
{{limit}} {{Integer}} in browse/get_log but {{String}} in spans ({{limit}}) and 
sql ({{maxRows}}).
* Route selector {{routeId}} vs {{routeFilter}}; {{headers}} as {{key=value}} 
lines in {{send}} but JSON or {{name: value}} in {{http_request}}.
* Three camelVersion descriptions ({{VERSION_DESC}}, 
{{ToolArgDocs.CAMEL_VERSION}}, {{ToolArgDocs.VERSION_QUERY}} which asks for a 
Quarkus platform version); {{kind}} vocabularies differ between doc, find and 
sample; {{limit <= 0}} throws in docs, defaults in examples, is used raw in 
kamelets.
* Four tools take a POM as inline content; none takes a {{directory}} like 
{{camel_project_overview}} does.

h3. Output bounds the consoles support and the registry never passes
{{route_source}} ({{filter=*}} is every file in full), 
{{route_dump}}/{{route_structure}} ({{limit}}, {{brief}}), {{thread_dump}} 
(full stacks of every thread), {{trace}} dump ({{limit}}, {{bodyMaxChars}}), 
{{history}} ({{summary}} exists in the registry, {{ToolRegistry.java:220}}, not 
in the MCP wrapper), {{browse}} ({{bodyMaxChars}}), 
{{properties}}/{{endpoints}}/{{services}} (no filter).

h3. Hints
{{send}} destructive in MCP, not in the registry; {{route_control}} destructive 
for start/resume; {{sql}} destructive blocks read-write clients from SELECT (a 
SELECT-only check would allow it); {{heap_dump}} name unvalidated; 
{{write_file}} overwrites whole files as non-destructive.

h3. Also worth doing on the way
Hand-written tables with dead schemes: {{SecurityData}} lists websocket, 
rabbitmq, redis, ldaps, aws2-secrets-manager, cassandraql (not in the catalog; 
a component with an option marked {{secret}} or {{security=}} is derivable); 
{{TestInfraData}} maps 16 of 76 test-infra modules and sends sftp/ftps to plain 
FTP; {{DependencyData}} core-transitive list is only right for the 
{{camel-core}} aggregate. Regex heuristics with concrete false positives: 
{{security_scan}} flags {{to:}} producers and YAML {{- rest:}} blocks as 
consumers without a header filter, any {{sql:}} without {{:#}}, a log line with 
{{file:}} and {{${}}; {{route_cost_estimate}} prices Bedrock as Claude Sonnet 
regardless of {{modelId}}; {{route_test_scaffold}} generates a new 
{{from(first)}} to mock route so nothing of the real route is tested; 
{{camel_render_route_diagram}} says "parsed without running it" but boots a 
transient {{Run}}. Doc rows to refresh: DOC:349 ("only a plain file name"), 
DOC:493 (example levels), DOC:601 ("17 exceptions", 19), {{camel_control}} 
omits {{reload}}, {{tool_groups}} omits http/semantic, 
{{camel_migrate_project}} says pomContent required.

Blocks CAMEL-25537: define the profiles over the reduced surface.

_Claude Code on behalf of Croway_


> camel-jbang-mcp - consolidate the tool surface (86 to about 66 tools) and 
> normalise arguments, hints and output bounds
> ----------------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-25639
>                 URL: https://issues.apache.org/jira/browse/CAMEL-25639
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-jbang-mcp
>            Reporter: Federico Mariani
>            Priority: Major
>         Attachments: camel-jbang-mcp-review-2026-10.md
>
>
> camel-jbang-mcp lists 86 tools on main. In an evaluation of coding agents 
> (Claude Code and IBM Bob) on legacy-to-Camel migration tasks with 4.22.1, 647 
> calls used 22 of the 73 tools then exposed; the catalog tools, the 
> validators, {{camel_component_properties}} and 
> {{camel_configuration_validate}} were 98% of the calls, and several of the 
> tools that were called answered with something a model could not use 
> ({{camel_component_properties}} 15-124 K for one option name, 
> {{camel_properties_translate}} main-to-main no-ops, 
> {{camel_catalog_languages}} unfiltered 12-14 K). A code review of all 86 
> tools (October 2026) then found that about twenty are subsets, composites or 
> copies of another tool, several with descriptions that promise more than the 
> code does. Dropping and folding them removes wrong answers from the path the 
> agents take, makes the surface easier for a model to pick from, and makes the 
> profiles of CAMEL-25537 smaller to define.
> The first group is the one the evaluation exercised; the second was never 
> called in any session and is a cleanup.
> h3. First: tools on the agents' path
> || Tool || Into || Why ||
> | {{camel_component_properties}} | {{configKey}} on the component options of 
> {{camel_catalog_doc}} | Same {{ComponentModel}}; its endpoint-options claim 
> is false (CAMEL-25541). |
> | {{camel_catalog_docs}} | drop, or a {{kind=page}} in {{find}} | A page 
> index whose names {{camel_catalog_doc}} resolves only for the four artifact 
> kinds ({{CatalogDocs.java:227, 246, 270, 444}}). |
> | {{camel_configuration_validate}} | {{camel_validate_source}} on a 
> {{.properties}} file | {{validate_source}} already runs the same catalog 
> validation per line ({{PropertiesChecks.java:137}}) plus nested-group hints, 
> closest-name suggestions, line numbers and {{fixes}}; add 
> {{runtime}}/{{platformBom}} there. CAMEL-25538 stays a catalog fix. |
> h3. Second: never called in any evaluation session
> || Tool || Into || Why ||
> | {{camel_runtime_receive}} | drop | Leaks a consumer (see the code-review 
> umbrella issue). |
> | {{camel_catalog_kamelets}}, {{camel_catalog_kamelet_doc}} | 
> {{camel_catalog_doc}} / {{camel_catalog_find}} {{kind=kamelet}} (CAMEL-25379) 
> | Same catalog jar; {{catalog_doc}} already adds the YAML shape, suggestions 
> and project Kamelets. Add {{type}}, {{supportLevel}}, {{dependencies}} to the 
> kamelet answer and let {{find}} take an empty term with a {{type}} filter. |
> | {{camel_migration_compatibility}} | {{camel_migration_recipes}} with the 
> Java check from {{camelReleases()}} | Static and wrong data, unused required 
> argument (see the migration data issue). |
> | {{camel_migration_analyze}} | {{camel_dependency_check}} {{projectInfo}} | 
> Subset ({{DependencyCheckTools.java:87-88}}); 
> {{camel_migration_wildfly_karaf}} takes {{sourceRuntime}} instead of a POM. |
> | {{camel_openapi_mock_guidance}} | {{camel_openapi_scaffold}} output when 
> {{missingOperation=mock}} | Static text plus a duplicate per-operation walk. |
> | {{camel_runtime_route_analysis}}, {{camel_runtime_eip_stats}}, 
> {{camel_runtime_config_drift}} | drop | Composites of two unbounded dumps 
> each with six static hint strings and no analysis, aggregation or comparison 
> ({{ToolRegistry.java:681-774}}), despite descriptions promising all three. |
> | {{camel_runtime_ai_trace}} | {{filter=ai}} on {{camel_runtime_history}} / 
> {{top}} | Only true composite; sees one exchange. |
> | {{camel_route_context}} | {{camel_project_overview}} with a {{content}} 
> argument | Its EIP extraction is a substring match over all model names 
> ({{ExplainTools.java:106-122}}): every YAML route "uses" to, from, step, 
> route; {{kafka:topic}} matches {{to}}. Use {{RouteNodes}}/{{RouteModel}}. |
> | {{camel_route_harden_context}} | {{camel_security_scan}} behind 
> {{includeContext}} | Same regexes, coarser ({{HardenTools.java:181-243}} vs 
> {{SecurityScanTools.java:202-326}}); the prompts call only harden, never the 
> line-level scanner. Keep the catalog component context and the CVE match. |
> | {{camel_runtime_heap_histogram}}, {{heap_dump}}, {{memory_leak}} | one 
> {{camel_runtime_heap view=histogram|dump|jfr}} | |
> | {{camel_runtime_trace}} | split the read ({{dump}}) from 
> {{enable}}/{{disable}} | Today the whole tool is {{readOnlyHint=false}}, so 
> read-only clients cannot dump traces. |
> {{ExampleTools}} becomes a thin wrapper of the registry (as 
> {{AuthoringTools}} is): duplicated code with divergent not-found behaviour, 
> CAMEL-25535.
> h3. Arguments
> * Process selector: {{nameOrPid}} on the runtime tools, {{name}} on 
> {{camel_control}}/{{get_log}}/{{get_errors}}/{{eval_expression}}; required on 
> {{ai_trace}} only.
> * Booleans typed {{String}} in {{heap_dump}}, {{memory_leak}}, {{sql}}; 
> {{limit}} {{Integer}} in browse/get_log but {{String}} in spans ({{limit}}) 
> and sql ({{maxRows}}).
> * Route selector {{routeId}} vs {{routeFilter}}; {{headers}} as {{key=value}} 
> lines in {{send}} but JSON or {{name: value}} in {{http_request}}.
> * Three camelVersion descriptions ({{VERSION_DESC}}, 
> {{ToolArgDocs.CAMEL_VERSION}}, {{ToolArgDocs.VERSION_QUERY}} which asks for a 
> Quarkus platform version); {{kind}} vocabularies differ between doc, find and 
> sample; {{limit <= 0}} throws in docs, defaults in examples, is used raw in 
> kamelets.
> * Four tools take a POM as inline content; none takes a {{directory}} like 
> {{camel_project_overview}} does.
> h3. Output bounds the consoles support and the registry never passes
> {{route_source}} ({{filter=*}} is every file in full), 
> {{route_dump}}/{{route_structure}} ({{limit}}, {{brief}}), {{thread_dump}} 
> (full stacks of every thread), {{trace}} dump ({{limit}}, {{bodyMaxChars}}), 
> {{history}} ({{summary}} exists in the registry, {{ToolRegistry.java:220}}, 
> not in the MCP wrapper), {{browse}} ({{bodyMaxChars}}), 
> {{properties}}/{{endpoints}}/{{services}} (no filter).
> h3. Hints
> {{send}} destructive in MCP, not in the registry; {{route_control}} 
> destructive for start/resume; {{sql}} destructive blocks read-write clients 
> from SELECT (a SELECT-only check would allow it); {{heap_dump}} name 
> unvalidated; {{write_file}} overwrites whole files as non-destructive.
> h3. Also worth doing on the way
> Hand-written tables with dead schemes: {{SecurityData}} lists websocket, 
> rabbitmq, redis, ldaps, aws2-secrets-manager, cassandraql (not in the 
> catalog; a component with an option marked {{secret}} or {{security=}} is 
> derivable); {{TestInfraData}} maps 16 of 76 test-infra modules and sends 
> sftp/ftps to plain FTP; {{DependencyData}} core-transitive list is only right 
> for the {{camel-core}} aggregate. Regex heuristics with concrete false 
> positives: {{security_scan}} flags {{to:}} producers and YAML {{- rest:}} 
> blocks as consumers without a header filter, any {{sql:}} without {{:#}}, a 
> log line with {{file:}} and {{${}}; {{route_cost_estimate}} prices Bedrock as 
> Claude Sonnet regardless of {{modelId}}; {{route_test_scaffold}} generates a 
> new {{from(first)}} to mock route so nothing of the real route is tested; 
> {{camel_render_route_diagram}} says "parsed without running it" but boots a 
> transient {{Run}}. Doc rows to refresh: DOC:349 ("only a plain file name"), 
> DOC:493 (example levels), DOC:601 ("17 exceptions", 19), {{camel_control}} 
> omits {{reload}}, {{tool_groups}} omits http/semantic, 
> {{camel_migrate_project}} says pomContent required.
> Blocks CAMEL-25537: define the profiles over the reduced surface.
> h3. Added 2026-10-14: name the tools for the hosts that pick by name
> How the agent hosts load the server (checked in their sources and docs):
> || Host || Tool schemas at session start || How the model reaches a tool || 
> Server {{instructions}} ||
> | Claude Code 2.1.29x | deferred: tool names only ({{ENABLE_TOOL_SEARCH}} 
> unset = always defer; {{auto}} = defer above 10% of the context) | ToolSearch 
> {{select:<name>}}: 113 such calls in the evaluation, every one by name | 
> loaded at session start, up to 4096 characters |
> | Codex CLI (main, 2026-10-14) | deferred: tool search is on by default 
> ({{core/tests/suite/search_tool.rs}}, {{mcp_tool_exposure.rs:84}}) | 
> tool_search | read from {{initialize}}, used as server-wide guidance; the 
> first 512 characters matter most; {{enabled_tools}}/{{disabled_tools}} per 
> server on the client side |
> | OpenCode (main, 2026-10-14) | code mode by default: tools are not declared, 
> the prompt carries one catalog line per tool | an {{execute}} script calling 
> {{tools["<server>"]}} | full text in an {{<mcp_instructions>}} block, re-sent 
> when it changes |
> | Pi (main, 2026-10-14) | {{codemode}} by default (scripts use 
> {{searchTools()}}), {{deferred}} via tool_search, {{direct}} per tool | 
> scripts or tool_search | only the FIRST LINE reaches the system prompt; the 
> full text through {{describeNamespace()}} in scripts |
> | Bob Shell 2.0.5 | all schemas up front (995 evaluation calls, no search 
> step) | direct | not documented |
> On Claude Code, Codex and Pi the model chooses a tool by its NAME before it 
> sees any description (113 ToolSearch calls in the evaluation, all 
> {{select:<name>}}); on OpenCode and Pi code mode it sees one catalog line per 
> tool. So for the consolidation: a name must state the question it answers, 
> the first sentence of a description is the catalog line, and the unified 
> {{camel_catalog_doc}} (components, EIPs, languages, data formats, Kamelets, 
> beans, Java API, config groups under one name) should either keep a name per 
> question or be backed by the instructions map of CAMEL-25646. In the 
> evaluation {{camel_catalog_component_doc}} was selected 53 times by name; 
> nothing in the list is named for the HTTP port or for what to declare for a 
> JDBC driver, and those two questions were the largest waste (jar archaeology 
> in plain and MCP arms, 44 knowledge searches).
> _Claude Code on behalf of Croway_



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to