Claus Ibsen created CAMEL-26298:
-----------------------------------

             Summary: camel run --mcp-stdio fails at startup: No 
McpJsonMapperSupplier available
                 Key: CAMEL-26298
                 URL: https://issues.apache.org/jira/browse/CAMEL-26298
             Project: Camel
          Issue Type: Bug
          Components: camel-mcp-server, camel-jbang
    Affects Versions: 4.23.0
            Reporter: Claus Ibsen
             Fix For: 4.24.0


{{camel run --mcp-stdio}} does not start, in Camel 4.23.0 and on main 
(4.24.0-SNAPSHOT).

*How to reproduce*

{{tools.yaml}}:
{code:yaml}
- route:
    from:
      uri: ai-tool:hello
      parameters:
        tags: demo
        description: Say hello
      steps:
        - setBody:
            expression:
              constant:
                expression: Hello
{code}

{code}
camel run tools.yaml --mcp-stdio --mcp-tags=demo
camel run tools.yaml --camel-version=4.23.0 --mcp-stdio --mcp-tags=demo
{code}

Both stop at startup with:
{code}
java.util.ServiceConfigurationError: No McpJsonMapperSupplier available for 
creating McpJsonMapper
        at 
io.modelcontextprotocol.util.McpServiceLoader.getDefault(McpServiceLoader.java:59)
        at 
io.modelcontextprotocol.json.McpJsonDefaults.getMapper(McpJsonDefaults.java:58)
        at 
org.apache.camel.component.mcp.server.stdio.StdioMcpServerEngine.initialize(StdioMcpServerEngine.java:85)
        at 
org.apache.camel.component.mcp.server.McpServerBridge.doInit(McpServerBridge.java:135)
        ...
        at 
org.apache.camel.main.BaseMainSupport.setupMcpServer(BaseMainSupport.java:2326)
{code}

camel-mcp-server has {{mcp-json-jackson2}} as a normal dependency, so the jar 
is on the classpath. Most likely the MCP SDK's service lookup does not see it 
in the class loader that Camel JBang uses for downloaded dependencies (not 
verified). The stdio tests in camel-mcp-server run on a normal classpath, so 
they do not catch this.

The 4.23 release notes and the mcp-server documentation show {{camel run 
tools.yaml --mcp-stdio}}, including a Claude Desktop configuration, so users 
will try it.

*Second problem: route output goes into the MCP stream*

In stdio mode the MCP protocol is written to {{System.out}}, and nothing 
redirects {{System.out}} ({{StdioMcpServerEngine.setTransportStreams}} is never 
called). Logging goes to stderr, which is fine. But a route that writes to 
{{stream:out}}, a {{System.out.println}} in a bean, or a library banner writes 
into the MCP stream and breaks the client. This could not be tested yet, 
because of the startup error.

Suggested fix: in stdio mode, give the MCP transport the original 
{{System.out}} ({{setTransportStreams}}), and point {{System.out}} at stderr.




--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to