Serdar Gökay created CAMEL-25385:
------------------------------------
Summary: camel-jbang - the send_message MCP tool times out and
does not send the message when headers are given
Key: CAMEL-25385
URL: https://issues.apache.org/jira/browse/CAMEL-25385
Project: Camel
Issue Type: Bug
Components: camel-jbang
Affects Versions: 4.22.1
Environment: Camel JBang 4.22.1, JBang 0.142.0, Java 25.0.4, macOS;
also seen in a Linux container on Kubernetes
Reporter: Serdar Gökay
The {{send_message}} tool in the shared {{ToolRegistry}} documents {{headers}}
as "Message headers as key=value pairs separated by newlines". When headers are
given, the message is not sent. After 10 seconds the tool returns, with
isError=false:
{noformat}
{"result":"Timeout waiting for response from PID 39618 for action: send"}
{noformat}
The application logs:
{noformat}
WARN LocalCliConnector : Error executing action: send due to: class
java.lang.String cannot be cast to class java.util.Collection (java.lang.String
and java.util.Collection are in module java.base of loader 'bootstrap'). This
exception is ignored.
java.lang.ClassCastException: class java.lang.String cannot be cast to class
java.util.Collection (java.lang.String and java.util.Collection are in module
java.base of loader 'bootstrap')
{noformat}
The same call without headers succeeds, and the CLI delivers the header:
{noformat}
camel cmd send --endpoint=direct:echo --body=hi --header=foo=bar --reply demo
{noformat}
h3. Reproduce
Camel JBang 4.22.1. {{demo.camel.yaml}}:
{noformat}
- route:
id: tick
from:
uri: timer:tick
steps:
- log: tick
- route:
id: echo
from:
uri: direct:echo
steps:
- log: "foo=${header.foo}"
{noformat}
{noformat}
camel run demo.camel.yaml --mcp
{noformat}
Then call {{send_message}} from an MCP client connected to the {{/mcp}}
endpoint, with these arguments:
{noformat}
{"endpoint": "direct:echo", "body": "hi", "headers": "foo=bar"}
{noformat}
h3. Cause
{{RuntimeHelper.sendMessage}} puts the headers string into the action unchanged
({{root.put("headers", headers)}}). {{LocalCliConnector.doActionSendTask}}
reads {{root.getCollection("headers")}} and expects the array of key/value
objects that {{CamelSendAction}} builds from its header option. Converting the
key=value lines into that array in {{RuntimeHelper.sendMessage}} would fix it.
>From reading the code, {{camel_runtime_send}} in the {{camel mcp}} server
>({{RuntimeTools}} delegates to {{send_message}}) and the TUI
>({{McpFacade.sendMessage}}) use the same path. The code is unchanged on main.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)