[
https://issues.apache.org/jira/browse/CAMEL-25646?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Work on CAMEL-25646 started by Federico Mariani.
------------------------------------------------
> camel-jbang-mcp - ship MCP server instructions: the rules an agent needs
> before its first call, front-loaded, version-aware
> ---------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-25646
> URL: https://issues.apache.org/jira/browse/CAMEL-25646
> Project: Camel
> Issue Type: Improvement
> Components: camel-jbang-mcp
> Reporter: Federico Mariani
> Assignee: Federico Mariani
> Priority: Major
>
> camel-jbang-mcp returns no {{instructions}} in its MCP {{initialize}}
> response: {{quarkus.mcp.server.server-info.instructions}} is unset and no
> {{io.quarkiverse.mcp.server.InitialResponseInfo}} bean exists
> (quarkus-mcp-server 2.0.2 supports both;
> {{McpMessageHandler.buildInstructions}} asks the beans first, then the
> property).
> Agent hosts read that field before the first tool call, and on the hosts that
> defer tool schemas it is the only text of the server the model sees at
> session start:
> || 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 |
> h3. Why it matters: the evaluation
> In an evaluation of coding agents (Claude Code with Haiku 5.5 and Sonnet 5.5,
> IBM Bob) on ten legacy-to-Camel migration tasks with camel-jbang-mcp 4.22.1
> (419 trials), the measured gain of the camel-kit arm came from its generated
> AGENTS.md rules and the .mcp.json, not from its skills, and the task prompt
> had to carry a note on how to call the server (components by scheme, the
> three version arguments, validate before finishing). The waste that remained
> came from questions no tool answers and the agents went hunting for:
> * {{camel.server.port}} under {{camel run}} needs
> {{camel.server.enabled=true}}: 30 knowledge searches, 12
> {{camel_component_properties platform-http}} calls and jar archaeology
> ({{Run.class}} disassembled in 35 plain-arm trials), 5 of 10 Bob trials on
> one task bound 8080 after 15-47 calls each.
> * extra jars: {{camel.jbang.dependencies}} in a properties file passed on the
> command line is ignored; agents grepped camel-jbang-core and camel-main jars
> for it in both plain and MCP arms (Sonnet in the MCP arm included, which made
> 0-2 MCP calls per trial).
> * mail: the Subject/From/To headers are ignored unless {{useHeader*=true}};
> 11 sessions sent a mail with an empty subject; plain arms disassembled
> {{MailConfiguration}} (31), {{MailBinding}} (15), {{MailConstants}} (11).
> * onException/errorHandler/routeConfiguration are top-level entries and
> {{handled}} is an expression: 44 of 53 {{camel_validate_yaml_dsl}} calls were
> invalid, placement 10 and the handled shape 3 of them.
> * {{smtp}} not {{mail}}, {{platform-http}} for the HTTP server: "Component
> not found: mail" and {{optionsFilter: tls}} hunts.
> None of this needs a tool call. Instructions reach every host above with zero
> calls, which is the one change that helps a small model (fewer unanswerable
> hunts) and a large one (Sonnet digs jars instead of calling tools) alike.
> h3. Proposal
> An {{InitialResponseInfo}} bean in camel-jbang-mcp (programmatic, so the text
> can carry the CLI's own Camel version and, later, the active profile of
> CAMEL-25537), under 4096 characters, front-loaded:
> # One summary line first: Pi shows only that line, Codex weights the first
> 512 characters. Something like: "Apache Camel <version> catalog, validation
> and run tools. Look components up by URI scheme (smtp, platform-http);
> validate with camel_validate_source before finishing."
> # The rules, in order of what they cost in the evaluation: components by
> scheme; onException/errorHandler/routeConfiguration/intercept/onCompletion
> are top-level entries beside {{route}}, never steps, and
> {{handled}}/{{continued}} are expressions ({{handled: {constant: "true"}}});
> under {{camel run}}: {{camel.server.enabled=true}} + {{camel.server.port}},
> extra jars with {{--dep}} or a {{//DEPS}} line, not in a properties file
> passed on the command line; mail: Subject/From/To headers ignored unless
> {{useHeaderSubject}}/{{useHeaderFrom}}/{{useHeaderRecipients}}; strip
> {{Camel*}} headers ({{removeHeaders}}) before an http or mail producer; xslt
> gets headers and variables as parameters; a YAML schema pass is not a runtime
> pass, run the app and read the log.
> # A question-to-tool map by tool name, since the deferred hosts pick a tool
> by its name before reading any description: options and URI rules of a
> component ({{camel_catalog_doc}}), which component for a protocol
> ({{camel_catalog_find}}), a validated YAML sample and where it goes
> ({{camel_catalog_sample}}), the Maven/{{--dep}} coordinates of a class
> ({{camel_dependency_for_class}}), validate ({{camel_validate_source}}), run
> and read the log ({{camel_run}}, {{camel_get_log}}, {{camel_get_errors}}).
> # Keep it versioned with the release: the mail defaults changed in 4.21, the
> YAML shape rules with the DSL.
> # Document the text in camel-jbang-mcp.adoc, and a test that the initialize
> response carries it and that it stays under 4096 characters.
> Not part of this issue: the same rules for the TUI ({{camel tui --mcp}}
> shares the registry but not the Quarkus server), and the eval-side probe of
> whether Bob shows the text to its model.
> Related: CAMEL-25537 (profiles; the instructions should name the tools of the
> active profile), CAMEL-25639 (consolidation; tool names chosen for name-level
> discovery), CAMEL-25541, CAMEL-25539, CAMEL-25534, CAMEL-25533.
> _Claude Code on behalf of Croway_
--
This message was sent by Atlassian Jira
(v8.20.10#820010)