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)

Reply via email to