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

Federico Mariani updated CAMEL-25639:
-------------------------------------
    Attachment: camel-jbang-mcp-review-2026-10.md

> 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.
> _Claude Code on behalf of Croway_



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

Reply via email to