Prev Next

Building MCP Servers with ToolGroups and OSGi Services

MCP Server development has become popular, and developers are frequently looking to build MCP Servers, and expose existing APIs and services as MCP Tools.

The ECF Project has recently added support for Dynamic Tool Groups based upon and extending the mcp-annotations project. Although not limited to OSGi frameworks, the ability to dynamically reflect and generate MCP Tool Specification Metadata from mcp annotated OSGi services makes it an excellent fit for the OSGi Service Registry and the Service Component Runtime.

We’ve recently added 3 new bndtools project templates for constructing and testing MCP Servers. These MCP Servers, can dynamically add or remove any mcp annotated OSGi service as an MCP Tool Group (set of associated tools), making it immediately available to any MCP Client for tool introspection or tool calling.

Below is a few screenshots showing the use of the 3 new project templates in bndtools to create an MCP ToolGroup OSGi service, dynamically add and remove the tools in that tool group to MCP sync or async server, and a simple example test client that to test the functioning of the MCP servers.

With Bndtoools 7.1+ installed an a recent version of Eclipse (4.36+), create a new Eclipse workspace and choose New->Bnd OSGi Workspace.

  1. Create a new Bndtools Workspace using the ECF Bndtools Workspace Template

bndtoolsnewwkspace

  1. Create a new bndtools project using the ArithmeticToolGroup API Project template

bndtoolsnewmcpapiproject

The new project wizard will request a name for the project. You should use a name with java package-like ‘dot’ notation for the project name…e.g.: my.arithmetic.api

  1. Create a MCP Server project using the ArithmeticToolGroup MCP Servers Project template from the New Bnd OSGi Project wizard as shown above.

The project name should be unique, but should have same dot notation as above. For example: my.arithmetic.mcpserver

After the new project name entry and Next> this dialog will appear:

bndtoolsnewmcpserver

The name given during api project creation should be provided in this field as shown in the screenshot above.

  1. Create a MCP Test Client project using the ArithmeticToolGroup MCP Test Client Project template from the New Bnd OSGi Project wizard.

As before, you should give a project name like the two previous projects: my.arithmetic.mcpclient

This dialog will then appear and you should complete both fields with the names for the projects used above and choose Finish

bndtoolsnewmcpclient

You should then have three projects in your workspace. You may examine the API class (ArithmeticToolGroup in API project) or API impl in the mcpserver project (ArithmeticToolGroupComponent) the two (sync and async) servers.

bndtoolsmcpworkspace

Run/Debug the ArithmeticToolGroup MCP Servers in Eclipse

To Run or Debug the ArithmeticToolGroup MCP Servers, to to the mcpserver project in your workspace and open the file mcpservers.bndrun. Once the bndrun editor is open you can launch (run or debug) by choosing the Run OSGi or Debug OSGi button in the upper right of the bndrun editor.

In the console you should then get debug output like this

Sep 08, 2025 2:54:17 PM org.apache.aries.spifly.BaseActivator log
INFO: Registered provider org.slf4j.simple.SimpleServiceProvider of service org.slf4j.spi.SLF4JServiceProvider in bundle slf4j.simple
[FelixStartLevel] DEBUG my.arithmetic.mcpserver.AsyncMcpToolGroupServerComponent - starting async server with uds path=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\a.socket
[FelixStartLevel] DEBUG reactor.util.Loggers - Using Slf4j logging framework
[FelixStartLevel] DEBUG com.composent.ai.mcp.transport.uds.UDSMcpServerTransportProvider - Session transport initProcessing completed
[FelixStartLevel] DEBUG my.arithmetic.mcpserver.AsyncMcpToolGroupServerComponent - async server started
[FelixStartLevel] DEBUG my.arithmetic.mcpserver.SyncMcpToolGroupServerComponent - starting sync server with uds at path=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\s.socket
[FelixStartLevel] DEBUG com.composent.ai.mcp.transport.uds.UDSMcpServerTransportProvider - Session transport initProcessing completed
[FelixStartLevel] DEBUG my.arithmetic.mcpserver.SyncMcpToolGroupServerComponent - sync server started
[FelixStartLevel] DEBUG com.github.victools.jsonschema.generator.impl.SchemaGenerationContextImpl - storing configured custom inline type for double as definition (since it is the main schema "#")
[FelixStartLevel] DEBUG com.github.victools.jsonschema.generator.impl.SchemaGenerationContextImpl - storing configured custom inline type for double as definition (since it is the main schema "#")
[FelixStartLevel] DEBUG com.composent.ai.mcp.toolgroup.provider.SyncMcpToolGroupProvider - created sync toolspec=SyncToolSpecification[tool=Tool[name=my.arithmetic.api.ArithmeticToolGroup.add, title=null, description=computes the sum of the two double precision input arguments a and b, inputSchema=JsonSchema[type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y], additionalProperties=null, defs=null, definitions=null], outputSchema=null, annotations=ToolAnnotations[title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true, returnDirect=null], meta=null], call=null, callHandler=org.springaicommunity.mcp.method.tool.SyncMcpToolMethodCallback@2b941329]
[FelixStartLevel] DEBUG com.github.victools.jsonschema.generator.impl.SchemaGenerationContextImpl - storing configured custom inline type for double as definition (since it is the main schema "#")
[FelixStartLevel] DEBUG com.github.victools.jsonschema.generator.impl.SchemaGenerationContextImpl - storing configured custom inline type for double as definition (since it is the main schema "#")
[FelixStartLevel] DEBUG com.composent.ai.mcp.toolgroup.provider.SyncMcpToolGroupProvider - created sync toolspec=SyncToolSpecification[tool=Tool[name=my.arithmetic.api.ArithmeticToolGroup.multiply, title=null, description=return the product of the two given double precision arguments named a and b, inputSchema=JsonSchema[type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y], additionalProperties=null, defs=null, definitions=null], outputSchema=null, annotations=ToolAnnotations[title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true, returnDirect=null], meta=null], call=null, callHandler=org.springaicommunity.mcp.method.tool.SyncMcpToolMethodCallback@293229b1]
[FelixStartLevel] DEBUG com.github.victools.jsonschema.generator.impl.SchemaGenerationContextImpl - storing configured custom inline type for java.lang.String as definition (since it is the main schema "#")
[FelixStartLevel] DEBUG com.composent.ai.mcp.toolgroup.provider.SyncMcpToolGroupProvider - created sync toolspec=SyncToolSpecification[tool=Tool[name=my.arithmetic.api.ArithmeticToolGroup.get-image-and-message-tool, title=null, description=Tool returning CallToolResult with an image and message, inputSchema=JsonSchema[type=object, properties={message={type=string, description=Message to associate with image}}, required=[message], additionalProperties=null, defs=null, definitions=null], outputSchema=null, annotations=ToolAnnotations[title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true, returnDirect=null], meta=null], call=null, callHandler=org.springaicommunity.mcp.method.tool.SyncMcpToolMethodCallback@f34732d]
[FelixStartLevel] DEBUG io.modelcontextprotocol.server.McpAsyncServer - Added tool handler: my.arithmetic.api.ArithmeticToolGroup.add
[FelixStartLevel] DEBUG com.composent.ai.mcp.toolgroup.AbstractSyncMcpToolGroupServer - added tool specification=my.arithmetic.api.ArithmeticToolGroup.add to sync server=io.modelcontextprotocol.server.McpSyncServer@e154bde
[FelixStartLevel] DEBUG io.modelcontextprotocol.server.McpAsyncServer - Added tool handler: my.arithmetic.api.ArithmeticToolGroup.multiply
[FelixStartLevel] DEBUG com.composent.ai.mcp.toolgroup.AbstractSyncMcpToolGroupServer - added tool specification=my.arithmetic.api.ArithmeticToolGroup.multiply to sync server=io.modelcontextprotocol.server.McpSyncServer@e154bde
[FelixStartLevel] DEBUG io.modelcontextprotocol.server.McpAsyncServer - Added tool handler: my.arithmetic.api.ArithmeticToolGroup.get-image-and-message-tool
[FelixStartLevel] DEBUG com.composent.ai.mcp.toolgroup.AbstractSyncMcpToolGroupServer - added tool specification=my.arithmetic.api.ArithmeticToolGroup.get-image-and-message-tool to sync server=io.modelcontextprotocol.server.McpSyncServer@e154bde
[FelixStartLevel] DEBUG com.github.victools.jsonschema.generator.impl.SchemaGenerationContextImpl - storing configured custom inline type for double as definition (since it is the main schema "#")
[FelixStartLevel] DEBUG com.github.victools.jsonschema.generator.impl.SchemaGenerationContextImpl - storing configured custom inline type for double as definition (since it is the main schema "#")
[FelixStartLevel] DEBUG com.composent.ai.mcp.toolgroup.provider.AsyncMcpToolGroupProvider - created async toolspec=AsyncToolSpecification[tool=Tool[name=my.arithmetic.api.ArithmeticToolGroup.asyncAdd, title=null, description=asynchronously computes the sum of the two double precision input arguments a and b, inputSchema=JsonSchema[type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y], additionalProperties=null, defs=null, definitions=null], outputSchema=null, annotations=ToolAnnotations[title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true, returnDirect=null], meta=null], call=null, callHandler=org.springaicommunity.mcp.method.tool.AsyncMcpToolMethodCallback@70c3b659]
[FelixStartLevel] DEBUG com.github.victools.jsonschema.generator.impl.SchemaGenerationContextImpl - storing configured custom inline type for double as definition (since it is the main schema "#")
[FelixStartLevel] DEBUG com.github.victools.jsonschema.generator.impl.SchemaGenerationContextImpl - storing configured custom inline type for double as definition (since it is the main schema "#")
[FelixStartLevel] DEBUG com.composent.ai.mcp.toolgroup.provider.AsyncMcpToolGroupProvider - created async toolspec=AsyncToolSpecification[tool=Tool[name=my.arithmetic.api.ArithmeticToolGroup.asyncMultiply, title=null, description=asynchronously computes the product of the two given double precision arguments named a and b, inputSchema=JsonSchema[type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y], additionalProperties=null, defs=null, definitions=null], outputSchema=null, annotations=ToolAnnotations[title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true, returnDirect=null], meta=null], call=null, callHandler=org.springaicommunity.mcp.method.tool.AsyncMcpToolMethodCallback@1710062c]
[FelixStartLevel] DEBUG io.modelcontextprotocol.server.McpAsyncServer - Added tool handler: my.arithmetic.api.ArithmeticToolGroup.asyncAdd
[FelixStartLevel] DEBUG com.composent.ai.mcp.toolgroup.AbstractAsyncMcpToolGroupServer - added tool specification=my.arithmetic.api.ArithmeticToolGroup.asyncAdd to async server=io.modelcontextprotocol.server.McpAsyncServer@463ac911
[FelixStartLevel] DEBUG io.modelcontextprotocol.server.McpAsyncServer - Added tool handler: my.arithmetic.api.ArithmeticToolGroup.asyncMultiply
[FelixStartLevel] DEBUG com.composent.ai.mcp.toolgroup.AbstractAsyncMcpToolGroupServer - added tool specification=my.arithmetic.api.ArithmeticToolGroup.asyncMultiply to async server=io.modelcontextprotocol.server.McpAsyncServer@463ac911
____________________________
Welcome to Apache Felix Gogo

g! 

The debug output indicates that both async and sync mcp servers were created (see AsyncMcpToolGroupServerComponent and SyncMcpToolGroupServerComponent), and that the ArithmeticToolGroupComponent api implementation was created but the api was dynamically inspected, tool specifications created, and then added to the sync or async servers appropriately. See ArithmeticToolGroupComponent.activate() method.

Run/Debug the Test MCP Client in Eclipse

In your MCP client project in workspace, open the mcpclient.bndrun file and choose Run OSGi/Debug OSGI as desired. The MCP Test Client has both an async client (McpAsyncClientCompoent) and sync client (McpSyncClientComponent). Both of these client connect via the Unix Domain Socket Transport to the async or sync MCP server that should be already running, and then call some of the async/sync method calls via the MCP protocol.

Sep 08, 2025 3:12:23 PM org.apache.aries.spifly.BaseActivator log
INFO: Registered provider org.slf4j.simple.SimpleServiceProvider of service org.slf4j.spi.SLF4JServiceProvider in bundle slf4j.simple
[FelixStartLevel] DEBUG my.arithmetic.mcpclient.McpAsyncClientComponent - starting uds async client with socket path=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\a.socket
[FelixStartLevel] DEBUG reactor.util.Loggers - Using Slf4j logging framework
[FelixStartLevel] DEBUG io.modelcontextprotocol.client.LifecycleInitializer - Initialization process started
[boundedElastic-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - connect targetAddress=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\a.socket
[boundedElastic-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - connect targetAddress=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\a.socket
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - select returned count=1
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - client=java.nio.channels.SocketChannel[connection-pending remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\a.socket]
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - connected client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\a.socket]
[pool-4-thread-1] INFO com.composent.ai.mcp.transport.uds.UDSMcpClientTransport - CONNECTED to targetAddress=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\a.socket
[boundedElastic-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - connected client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\a.socket]
[FelixStartLevel] DEBUG io.modelcontextprotocol.spec.McpClientSession - Sending message for method initialize
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - select returned count=1
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\a.socket]
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\a.socket] msg=
[pool-4-thread-1] DEBUG io.modelcontextprotocol.spec.McpSchema - Received JSON message: {"jsonrpc":"2.0","method":"notifications/tools/list_changed"}
[pool-2-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing msg={"jsonrpc":"2.0","method":"initialize","id":"28bf018d-0","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"Spring AI MCP Client","version":"0.3.1"}}}

[pool-2-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - doWrite message={"jsonrpc":"2.0","method":"initialize","id":"28bf018d-0","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"Spring AI MCP Client","version":"0.3.1"}}}

[pool-2-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing done msg={"jsonrpc":"2.0","method":"initialize","id":"28bf018d-0","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"Spring AI MCP Client","version":"0.3.1"}}}

[pool-4-thread-1] DEBUG io.modelcontextprotocol.spec.McpClientSession - Received notification: JSONRPCNotification[jsonrpc=2.0, method=notifications/tools/list_changed, params=null]
[pool-4-thread-1] DEBUG io.modelcontextprotocol.client.LifecycleInitializer - Joining previous initialization
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - select returned count=1
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\a.socket]
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\a.socket] msg=
[pool-4-thread-1] DEBUG io.modelcontextprotocol.spec.McpSchema - Received JSON message: {"jsonrpc":"2.0","method":"notifications/tools/list_changed"}
[pool-4-thread-1] DEBUG io.modelcontextprotocol.spec.McpClientSession - Received notification: JSONRPCNotification[jsonrpc=2.0, method=notifications/tools/list_changed, params=null]
[pool-4-thread-1] DEBUG io.modelcontextprotocol.client.LifecycleInitializer - Joining previous initialization
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - select returned count=1
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\a.socket]
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\a.socket] msg=
[pool-4-thread-1] DEBUG io.modelcontextprotocol.spec.McpSchema - Received JSON message: {"jsonrpc":"2.0","id":"28bf018d-0","result":{"protocolVersion":"2024-11-05","capabilities":{"logging":{},"tools":{"listChanged":true}},"serverInfo":{"name":"my.arithmetic.mcpserver.AsyncMcpToolGroupServerComponent","version":"1.0.0"}}}
[pool-4-thread-1] DEBUG io.modelcontextprotocol.spec.McpClientSession - Received Response: JSONRPCResponse[jsonrpc=2.0, id=28bf018d-0, result={protocolVersion=2024-11-05, capabilities={logging={}, tools={listChanged=true}}, serverInfo={name=my.arithmetic.mcpserver.AsyncMcpToolGroupServerComponent, version=1.0.0}}, error=null]
[pool-4-thread-1] INFO io.modelcontextprotocol.client.LifecycleInitializer - Server response with Protocol: 2024-11-05, Capabilities: ServerCapabilities[completions=null, experimental=null, logging=LoggingCapabilities[], prompts=null, resources=null, tools=ToolCapabilities[listChanged=true]], Info: Implementation[name=my.arithmetic.mcpserver.AsyncMcpToolGroupServerComponent, title=null, version=1.0.0] and Instructions null
[pool-2-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing msg={"jsonrpc":"2.0","method":"notifications/initialized"}

[pool-2-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - doWrite message={"jsonrpc":"2.0","method":"notifications/initialized"}

[pool-2-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing done msg={"jsonrpc":"2.0","method":"notifications/initialized"}

[pool-4-thread-1] DEBUG io.modelcontextprotocol.spec.McpClientSession - Sending message for method tools/list
[pool-2-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing msg={"jsonrpc":"2.0","method":"tools/list","id":"28bf018d-1","params":{}}

[pool-4-thread-1] DEBUG io.modelcontextprotocol.spec.McpClientSession - Sending message for method tools/list
[FelixStartLevel] DEBUG my.arithmetic.mcpclient.McpAsyncClientComponent - uds async client initialized
[pool-2-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - doWrite message={"jsonrpc":"2.0","method":"tools/list","id":"28bf018d-1","params":{}}

[pool-2-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing done msg={"jsonrpc":"2.0","method":"tools/list","id":"28bf018d-1","params":{}}

[pool-2-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing msg={"jsonrpc":"2.0","method":"tools/list","id":"28bf018d-2","params":{}}

[pool-2-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - doWrite message={"jsonrpc":"2.0","method":"tools/list","id":"28bf018d-2","params":{}}

[pool-2-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing done msg={"jsonrpc":"2.0","method":"tools/list","id":"28bf018d-2","params":{}}

[FelixStartLevel] DEBUG io.modelcontextprotocol.client.LifecycleInitializer - Joining previous initialization
[FelixStartLevel] DEBUG io.modelcontextprotocol.spec.McpClientSession - Sending message for method tools/call
[FelixStartLevel] DEBUG io.modelcontextprotocol.client.LifecycleInitializer - Joining previous initialization
[FelixStartLevel] DEBUG io.modelcontextprotocol.spec.McpClientSession - Sending message for method tools/call
[FelixStartLevel] DEBUG my.arithmetic.mcpclient.McpSyncClientComponent - starting uds client with socket at path=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\s.socket
[pool-2-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing msg={"jsonrpc":"2.0","method":"tools/call","id":"28bf018d-3","params":{"name":"my.arithmetic.api.ArithmeticToolGroup.asyncAdd","arguments":{"y":"26.32","x":"25.1"}}}

[pool-2-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - doWrite message={"jsonrpc":"2.0","method":"tools/call","id":"28bf018d-3","params":{"name":"my.arithmetic.api.ArithmeticToolGroup.asyncAdd","arguments":{"y":"26.32","x":"25.1"}}}

[pool-2-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing done msg={"jsonrpc":"2.0","method":"tools/call","id":"28bf018d-3","params":{"name":"my.arithmetic.api.ArithmeticToolGroup.asyncAdd","arguments":{"y":"26.32","x":"25.1"}}}

[pool-2-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing msg={"jsonrpc":"2.0","method":"tools/call","id":"28bf018d-4","params":{"name":"my.arithmetic.api.ArithmeticToolGroup.asyncMultiply","arguments":{"y":"223.86","x":"210.71"}}}

[pool-2-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - doWrite message={"jsonrpc":"2.0","method":"tools/call","id":"28bf018d-4","params":{"name":"my.arithmetic.api.ArithmeticToolGroup.asyncMultiply","arguments":{"y":"223.86","x":"210.71"}}}

[pool-2-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing done msg={"jsonrpc":"2.0","method":"tools/call","id":"28bf018d-4","params":{"name":"my.arithmetic.api.ArithmeticToolGroup.asyncMultiply","arguments":{"y":"223.86","x":"210.71"}}}

[FelixStartLevel] DEBUG io.modelcontextprotocol.client.LifecycleInitializer - Initialization process started
[FelixStartLevel] DEBUG io.modelcontextprotocol.spec.McpClientSession - Sending message for method initialize
[boundedElastic-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - connect targetAddress=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\s.socket
[boundedElastic-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - connect targetAddress=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\s.socket
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - select returned count=1
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - client=java.nio.channels.SocketChannel[connection-pending remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\s.socket]
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - connected client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\s.socket]
[pool-9-thread-1] INFO com.composent.ai.mcp.transport.uds.UDSMcpClientTransport - CONNECTED to targetAddress=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\s.socket
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - select returned count=1
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\s.socket]
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\s.socket] msg=
[pool-9-thread-1] DEBUG io.modelcontextprotocol.spec.McpSchema - Received JSON message: {"jsonrpc":"2.0","method":"notifications/tools/list_changed"}
[boundedElastic-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - connected client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\s.socket]
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - select returned count=1
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\a.socket]
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read partial={"jsonrpc":"2.0","id":"28bf018d-1","result":{"tools":[{"name":"my.arithmetic.api.ArithmeticToolGroup.asyncAdd","description":"asynchronously computes the sum of the two double precision input arguments a and b","inputSchema":{"type":"object","properties":{"x":{"type":"number","format":"double","description":"x is the first argument"},"y":{"type":"number","format":"double","description":"y is the second argument"}},"required":["x","y"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}},{"name":"my.arithmetic.api.ArithmeticToolGroup.asyncMultiply","description":"asynchronously computes the product of the two given double precision arguments named a and b","inputSchema":{"type":"object","properties":{"x":{"type":"number","format":"double","description":"x is the first argument"},"y":{"type":"number","format":"double","description":"y is the second argument"}},"required":["x","y"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":tr
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - select returned count=1
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\a.socket]
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\a.socket] msg=
[pool-4-thread-1] DEBUG io.modelcontextprotocol.spec.McpSchema - Received JSON message: {"jsonrpc":"2.0","id":"28bf018d-1","result":{"tools":[{"name":"my.arithmetic.api.ArithmeticToolGroup.asyncAdd","description":"asynchronously computes the sum of the two double precision input arguments a and b","inputSchema":{"type":"object","properties":{"x":{"type":"number","format":"double","description":"x is the first argument"},"y":{"type":"number","format":"double","description":"y is the second argument"}},"required":["x","y"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}},{"name":"my.arithmetic.api.ArithmeticToolGroup.asyncMultiply","description":"asynchronously computes the product of the two given double precision arguments named a and b","inputSchema":{"type":"object","properties":{"x":{"type":"number","format":"double","description":"x is the first argument"},"y":{"type":"number","format":"double","description":"y is the second argument"}},"required":["x","y"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}}]}}
[pool-4-thread-1] DEBUG io.modelcontextprotocol.spec.McpClientSession - Received Response: JSONRPCResponse[jsonrpc=2.0, id=28bf018d-1, result={tools=[{name=my.arithmetic.api.ArithmeticToolGroup.asyncAdd, description=asynchronously computes the sum of the two double precision input arguments a and b, inputSchema={type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y]}, annotations={title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true}}, {name=my.arithmetic.api.ArithmeticToolGroup.asyncMultiply, description=asynchronously computes the product of the two given double precision arguments named a and b, inputSchema={type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y]}, annotations={title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true}}]}, error=null]
[pool-8-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing msg={"jsonrpc":"2.0","method":"initialize","id":"2b502ad0-0","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"Java SDK MCP Client","version":"1.0.0"}}}

[pool-8-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - doWrite message={"jsonrpc":"2.0","method":"initialize","id":"2b502ad0-0","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"Java SDK MCP Client","version":"1.0.0"}}}

[pool-8-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing done msg={"jsonrpc":"2.0","method":"initialize","id":"2b502ad0-0","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"Java SDK MCP Client","version":"1.0.0"}}}

[pool-4-thread-1] DEBUG io.modelcontextprotocol.client.McpAsyncClient - Tools changed: [Tool[name=my.arithmetic.api.ArithmeticToolGroup.asyncAdd, title=null, description=asynchronously computes the sum of the two double precision input arguments a and b, inputSchema=JsonSchema[type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y], additionalProperties=null, defs=null, definitions=null], outputSchema=null, annotations=ToolAnnotations[title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true, returnDirect=null], meta=null], Tool[name=my.arithmetic.api.ArithmeticToolGroup.asyncMultiply, title=null, description=asynchronously computes the product of the two given double precision arguments named a and b, inputSchema=JsonSchema[type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y], additionalProperties=null, defs=null, definitions=null], outputSchema=null, annotations=ToolAnnotations[title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true, returnDirect=null], meta=null]]
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - select returned count=1
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\a.socket]
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read partial={"jsonrpc":"2.0","id":"28bf018d-2","result":{"tools":[{"name":"my.arithmetic.api.ArithmeticToolGroup.asyncAdd","description":"asynchronously computes the sum of the two double precision input arguments a and b","inputSchema":{"type":"object","properties":{"x":{"type":"number","format":"double","description":"x is the first argument"},"y":{"type":"number","format":"double","description":"y is the second argument"}},"required":["x","y"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}},{"name":"my.arithmetic.api.ArithmeticToolGroup.asyncMultiply","description":"asynchronously computes the product of the two given double precision arguments named a and b","inputSchema":{"type":"object","properties":{"x":{"type":"number","format":"double","description":"x is the first argument"},"y":{"type":"number","format":"double","description":"y is the second argument"}},"required":["x","y"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":tr
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - select returned count=1
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\a.socket]
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\a.socket] msg=
[pool-4-thread-1] DEBUG io.modelcontextprotocol.spec.McpSchema - Received JSON message: {"jsonrpc":"2.0","id":"28bf018d-2","result":{"tools":[{"name":"my.arithmetic.api.ArithmeticToolGroup.asyncAdd","description":"asynchronously computes the sum of the two double precision input arguments a and b","inputSchema":{"type":"object","properties":{"x":{"type":"number","format":"double","description":"x is the first argument"},"y":{"type":"number","format":"double","description":"y is the second argument"}},"required":["x","y"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}},{"name":"my.arithmetic.api.ArithmeticToolGroup.asyncMultiply","description":"asynchronously computes the product of the two given double precision arguments named a and b","inputSchema":{"type":"object","properties":{"x":{"type":"number","format":"double","description":"x is the first argument"},"y":{"type":"number","format":"double","description":"y is the second argument"}},"required":["x","y"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}}]}}
[pool-4-thread-1] DEBUG io.modelcontextprotocol.spec.McpClientSession - Received Response: JSONRPCResponse[jsonrpc=2.0, id=28bf018d-2, result={tools=[{name=my.arithmetic.api.ArithmeticToolGroup.asyncAdd, description=asynchronously computes the sum of the two double precision input arguments a and b, inputSchema={type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y]}, annotations={title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true}}, {name=my.arithmetic.api.ArithmeticToolGroup.asyncMultiply, description=asynchronously computes the product of the two given double precision arguments named a and b, inputSchema={type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y]}, annotations={title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true}}]}, error=null]
[pool-4-thread-1] DEBUG io.modelcontextprotocol.client.McpAsyncClient - Tools changed: [Tool[name=my.arithmetic.api.ArithmeticToolGroup.asyncAdd, title=null, description=asynchronously computes the sum of the two double precision input arguments a and b, inputSchema=JsonSchema[type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y], additionalProperties=null, defs=null, definitions=null], outputSchema=null, annotations=ToolAnnotations[title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true, returnDirect=null], meta=null], Tool[name=my.arithmetic.api.ArithmeticToolGroup.asyncMultiply, title=null, description=asynchronously computes the product of the two given double precision arguments named a and b, inputSchema=JsonSchema[type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y], additionalProperties=null, defs=null, definitions=null], outputSchema=null, annotations=ToolAnnotations[title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true, returnDirect=null], meta=null]]
[pool-9-thread-1] DEBUG io.modelcontextprotocol.spec.McpClientSession - Received notification: JSONRPCNotification[jsonrpc=2.0, method=notifications/tools/list_changed, params=null]
[pool-9-thread-1] DEBUG io.modelcontextprotocol.client.LifecycleInitializer - Joining previous initialization
[pool-9-thread-1] DEBUG io.modelcontextprotocol.spec.McpSchema - Received JSON message: {"jsonrpc":"2.0","method":"notifications/tools/list_changed"}
[pool-9-thread-1] DEBUG io.modelcontextprotocol.spec.McpClientSession - Received notification: JSONRPCNotification[jsonrpc=2.0, method=notifications/tools/list_changed, params=null]
[pool-9-thread-1] DEBUG io.modelcontextprotocol.client.LifecycleInitializer - Joining previous initialization
[pool-9-thread-1] DEBUG io.modelcontextprotocol.spec.McpSchema - Received JSON message: {"jsonrpc":"2.0","method":"notifications/tools/list_changed"}
[pool-9-thread-1] DEBUG io.modelcontextprotocol.spec.McpClientSession - Received notification: JSONRPCNotification[jsonrpc=2.0, method=notifications/tools/list_changed, params=null]
[pool-9-thread-1] DEBUG io.modelcontextprotocol.client.LifecycleInitializer - Joining previous initialization
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - select returned count=1
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\s.socket]
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\s.socket] msg=
[pool-9-thread-1] DEBUG io.modelcontextprotocol.spec.McpSchema - Received JSON message: {"jsonrpc":"2.0","id":"2b502ad0-0","result":{"protocolVersion":"2024-11-05","capabilities":{"logging":{},"tools":{"listChanged":true}},"serverInfo":{"name":"my.arithmetic.mcpserver.SyncMcpToolGroupServerComponent","version":"1.0.0"}}}
[pool-9-thread-1] DEBUG io.modelcontextprotocol.spec.McpClientSession - Received Response: JSONRPCResponse[jsonrpc=2.0, id=2b502ad0-0, result={protocolVersion=2024-11-05, capabilities={logging={}, tools={listChanged=true}}, serverInfo={name=my.arithmetic.mcpserver.SyncMcpToolGroupServerComponent, version=1.0.0}}, error=null]
[pool-9-thread-1] INFO io.modelcontextprotocol.client.LifecycleInitializer - Server response with Protocol: 2024-11-05, Capabilities: ServerCapabilities[completions=null, experimental=null, logging=LoggingCapabilities[], prompts=null, resources=null, tools=ToolCapabilities[listChanged=true]], Info: Implementation[name=my.arithmetic.mcpserver.SyncMcpToolGroupServerComponent, title=null, version=1.0.0] and Instructions null
[pool-9-thread-1] DEBUG io.modelcontextprotocol.spec.McpClientSession - Sending message for method tools/list
[pool-9-thread-1] DEBUG io.modelcontextprotocol.spec.McpClientSession - Sending message for method tools/list
[pool-9-thread-1] DEBUG io.modelcontextprotocol.spec.McpClientSession - Sending message for method tools/list
[FelixStartLevel] DEBUG my.arithmetic.mcpclient.McpSyncClientComponent - uds sync client initialized
[pool-8-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing msg={"jsonrpc":"2.0","method":"notifications/initialized"}

[pool-8-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - doWrite message={"jsonrpc":"2.0","method":"notifications/initialized"}

[pool-8-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing done msg={"jsonrpc":"2.0","method":"notifications/initialized"}

[FelixStartLevel] DEBUG io.modelcontextprotocol.client.LifecycleInitializer - Joining previous initialization
[pool-8-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing msg={"jsonrpc":"2.0","method":"tools/list","id":"2b502ad0-1","params":{}}

[pool-8-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - doWrite message={"jsonrpc":"2.0","method":"tools/list","id":"2b502ad0-1","params":{}}

[pool-8-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing done msg={"jsonrpc":"2.0","method":"tools/list","id":"2b502ad0-1","params":{}}

[FelixStartLevel] DEBUG io.modelcontextprotocol.spec.McpClientSession - Sending message for method tools/list
[pool-8-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing msg={"jsonrpc":"2.0","method":"tools/list","id":"2b502ad0-2","params":{}}

[pool-8-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - doWrite message={"jsonrpc":"2.0","method":"tools/list","id":"2b502ad0-2","params":{}}

[pool-8-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing done msg={"jsonrpc":"2.0","method":"tools/list","id":"2b502ad0-2","params":{}}

[pool-8-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing msg={"jsonrpc":"2.0","method":"tools/list","id":"2b502ad0-3","params":{}}

[pool-8-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - doWrite message={"jsonrpc":"2.0","method":"tools/list","id":"2b502ad0-3","params":{}}

[pool-8-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing done msg={"jsonrpc":"2.0","method":"tools/list","id":"2b502ad0-3","params":{}}

[pool-8-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing msg={"jsonrpc":"2.0","method":"tools/list","id":"2b502ad0-4","params":{}}

[pool-8-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - doWrite message={"jsonrpc":"2.0","method":"tools/list","id":"2b502ad0-4","params":{}}

[pool-8-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing done msg={"jsonrpc":"2.0","method":"tools/list","id":"2b502ad0-4","params":{}}

[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - select returned count=1
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\a.socket]
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\a.socket] msg=
[pool-4-thread-1] DEBUG io.modelcontextprotocol.spec.McpSchema - Received JSON message: {"jsonrpc":"2.0","id":"28bf018d-3","result":{"content":[{"type":"text","text":"51.42"}],"isError":false}}
[pool-4-thread-1] DEBUG io.modelcontextprotocol.spec.McpClientSession - Received Response: JSONRPCResponse[jsonrpc=2.0, id=28bf018d-3, result={content=[{type=text, text=51.42}], isError=false}, error=null]
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - select returned count=1
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\s.socket]
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read partial={"jsonrpc":"2.0","id":"2b502ad0-1","result":{"tools":[{"name":"my.arithmetic.api.ArithmeticToolGroup.add","description":"computes the sum of the two double precision input arguments a and b","inputSchema":{"type":"object","properties":{"x":{"type":"number","format":"double","description":"x is the first argument"},"y":{"type":"number","format":"double","description":"y is the second argument"}},"required":["x","y"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}},{"name":"my.arithmetic.api.ArithmeticToolGroup.multiply","description":"return the product of the two given double precision arguments named a and b","inputSchema":{"type":"object","properties":{"x":{"type":"number","format":"double","description":"x is the first argument"},"y":{"type":"number","format":"double","description":"y is the second argument"}},"required":["x","y"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - select returned count=1
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\s.socket]
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\s.socket] msg=
[pool-9-thread-1] DEBUG io.modelcontextprotocol.spec.McpSchema - Received JSON message: {"jsonrpc":"2.0","id":"2b502ad0-1","result":{"tools":[{"name":"my.arithmetic.api.ArithmeticToolGroup.add","description":"computes the sum of the two double precision input arguments a and b","inputSchema":{"type":"object","properties":{"x":{"type":"number","format":"double","description":"x is the first argument"},"y":{"type":"number","format":"double","description":"y is the second argument"}},"required":["x","y"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}},{"name":"my.arithmetic.api.ArithmeticToolGroup.multiply","description":"return the product of the two given double precision arguments named a and b","inputSchema":{"type":"object","properties":{"x":{"type":"number","format":"double","description":"x is the first argument"},"y":{"type":"number","format":"double","description":"y is the second argument"}},"required":["x","y"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}},{"name":"my.arithmetic.api.ArithmeticToolGroup.get-image-and-message-tool","description":"Tool returning CallToolResult with an image and message","inputSchema":{"type":"object","properties":{"message":{"type":"string","description":"Message to associate with image"}},"required":["message"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}}]}}
[pool-9-thread-1] DEBUG io.modelcontextprotocol.spec.McpClientSession - Received Response: JSONRPCResponse[jsonrpc=2.0, id=2b502ad0-1, result={tools=[{name=my.arithmetic.api.ArithmeticToolGroup.add, description=computes the sum of the two double precision input arguments a and b, inputSchema={type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y]}, annotations={title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true}}, {name=my.arithmetic.api.ArithmeticToolGroup.multiply, description=return the product of the two given double precision arguments named a and b, inputSchema={type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y]}, annotations={title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true}}, {name=my.arithmetic.api.ArithmeticToolGroup.get-image-and-message-tool, description=Tool returning CallToolResult with an image and message, inputSchema={type=object, properties={message={type=string, description=Message to associate with image}}, required=[message]}, annotations={title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true}}]}, error=null]
[pool-9-thread-1] DEBUG io.modelcontextprotocol.client.McpAsyncClient - Tools changed: [Tool[name=my.arithmetic.api.ArithmeticToolGroup.add, title=null, description=computes the sum of the two double precision input arguments a and b, inputSchema=JsonSchema[type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y], additionalProperties=null, defs=null, definitions=null], outputSchema=null, annotations=ToolAnnotations[title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true, returnDirect=null], meta=null], Tool[name=my.arithmetic.api.ArithmeticToolGroup.multiply, title=null, description=return the product of the two given double precision arguments named a and b, inputSchema=JsonSchema[type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y], additionalProperties=null, defs=null, definitions=null], outputSchema=null, annotations=ToolAnnotations[title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true, returnDirect=null], meta=null], Tool[name=my.arithmetic.api.ArithmeticToolGroup.get-image-and-message-tool, title=null, description=Tool returning CallToolResult with an image and message, inputSchema=JsonSchema[type=object, properties={message={type=string, description=Message to associate with image}}, required=[message], additionalProperties=null, defs=null, definitions=null], outputSchema=null, annotations=ToolAnnotations[title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true, returnDirect=null], meta=null]]
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - select returned count=1
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\s.socket]
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read partial={"jsonrpc":"2.0","id":"2b502ad0-2","result":{"tools":[{"name":"my.arithmetic.api.ArithmeticToolGroup.add","description":"computes the sum of the two double precision input arguments a and b","inputSchema":{"type":"object","properties":{"x":{"type":"number","format":"double","description":"x is the first argument"},"y":{"type":"number","format":"double","description":"y is the second argument"}},"required":["x","y"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}},{"name":"my.arithmetic.api.ArithmeticToolGroup.multiply","description":"return the product of the two given double precision arguments named a and b","inputSchema":{"type":"object","properties":{"x":{"type":"number","format":"double","description":"x is the first argument"},"y":{"type":"number","format":"double","description":"y is the second argument"}},"required":["x","y"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - select returned count=1
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\s.socket]
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read partial=true}},{"name":"my.arithmetic.api.ArithmeticToolGroup.get-image-and-message-tool","description":"Tool returning CallToolResult with an image and message","inputSchema":{"type":"object","properties":{"message":{"type":"string","description":"Message to associate with image"}},"required":["message"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}}]}}
{"jsonrpc":"2.0","id":"2b502ad0-3","result":{"tools":[{"name":"my.arithmetic.api.ArithmeticToolGroup.add","description":"computes the sum of the two double precision input arguments a and b","inputSchema":{"type":"object","properties":{"x":{"type":"number","format":"double","description":"x is the first argument"},"y":{"type":"number","format":"double","description":"y is the second argument"}},"required":["x","y"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}},{"name":"my.arithmetic.api.ArithmeticToolGroup.multiply","description
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - select returned count=1
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\s.socket]
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read partial=":"return the product of the two given double precision arguments named a and b","inputSchema":{"type":"object","properties":{"x":{"type":"number","format":"double","description":"x is the first argument"},"y":{"type":"number","format":"double","description":"y is the second argument"}},"required":["x","y"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}},{"name":"my.arithmetic.api.ArithmeticToolGroup.get-image-and-message-tool","description":"Tool returning CallToolResult with an image and message","inputSchema":{"type":"object","properties":{"message":{"type":"string","description":"Message to associate with image"}},"required":["message"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}}]}}
{"jsonrpc":"2.0","id":"2b502ad0-4","result":{"tools":[{"name":"my.arithmetic.api.ArithmeticToolGroup.add","description":"computes the sum of the two double precision input arguments a an
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - select returned count=1
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\s.socket]
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read partial=d b","inputSchema":{"type":"object","properties":{"x":{"type":"number","format":"double","description":"x is the first argument"},"y":{"type":"number","format":"double","description":"y is the second argument"}},"required":["x","y"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}},{"name":"my.arithmetic.api.ArithmeticToolGroup.multiply","description":"return the product of the two given double precision arguments named a and b","inputSchema":{"type":"object","properties":{"x":{"type":"number","format":"double","description":"x is the first argument"},"y":{"type":"number","format":"double","description":"y is the second argument"}},"required":["x","y"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}},{"name":"my.arithmetic.api.ArithmeticToolGroup.get-image-and-message-tool","description":"Tool returning CallToolResult with an image and message","inputSchema":{"type":"object","
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - select returned count=1
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\s.socket]
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\s.socket] msg=
[pool-9-thread-1] DEBUG io.modelcontextprotocol.spec.McpSchema - Received JSON message: {"jsonrpc":"2.0","id":"2b502ad0-2","result":{"tools":[{"name":"my.arithmetic.api.ArithmeticToolGroup.add","description":"computes the sum of the two double precision input arguments a and b","inputSchema":{"type":"object","properties":{"x":{"type":"number","format":"double","description":"x is the first argument"},"y":{"type":"number","format":"double","description":"y is the second argument"}},"required":["x","y"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}},{"name":"my.arithmetic.api.ArithmeticToolGroup.multiply","description":"return the product of the two given double precision arguments named a and b","inputSchema":{"type":"object","properties":{"x":{"type":"number","format":"double","description":"x is the first argument"},"y":{"type":"number","format":"double","description":"y is the second argument"}},"required":["x","y"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}},{"name":"my.arithmetic.api.ArithmeticToolGroup.get-image-and-message-tool","description":"Tool returning CallToolResult with an image and message","inputSchema":{"type":"object","properties":{"message":{"type":"string","description":"Message to associate with image"}},"required":["message"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}}]}}
[pool-9-thread-1] DEBUG io.modelcontextprotocol.spec.McpClientSession - Received Response: JSONRPCResponse[jsonrpc=2.0, id=2b502ad0-2, result={tools=[{name=my.arithmetic.api.ArithmeticToolGroup.add, description=computes the sum of the two double precision input arguments a and b, inputSchema={type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y]}, annotations={title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true}}, {name=my.arithmetic.api.ArithmeticToolGroup.multiply, description=return the product of the two given double precision arguments named a and b, inputSchema={type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y]}, annotations={title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true}}, {name=my.arithmetic.api.ArithmeticToolGroup.get-image-and-message-tool, description=Tool returning CallToolResult with an image and message, inputSchema={type=object, properties={message={type=string, description=Message to associate with image}}, required=[message]}, annotations={title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true}}]}, error=null]
[pool-9-thread-1] DEBUG io.modelcontextprotocol.client.McpAsyncClient - Tools changed: [Tool[name=my.arithmetic.api.ArithmeticToolGroup.add, title=null, description=computes the sum of the two double precision input arguments a and b, inputSchema=JsonSchema[type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y], additionalProperties=null, defs=null, definitions=null], outputSchema=null, annotations=ToolAnnotations[title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true, returnDirect=null], meta=null], Tool[name=my.arithmetic.api.ArithmeticToolGroup.multiply, title=null, description=return the product of the two given double precision arguments named a and b, inputSchema=JsonSchema[type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y], additionalProperties=null, defs=null, definitions=null], outputSchema=null, annotations=ToolAnnotations[title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true, returnDirect=null], meta=null], Tool[name=my.arithmetic.api.ArithmeticToolGroup.get-image-and-message-tool, title=null, description=Tool returning CallToolResult with an image and message, inputSchema=JsonSchema[type=object, properties={message={type=string, description=Message to associate with image}}, required=[message], additionalProperties=null, defs=null, definitions=null], outputSchema=null, annotations=ToolAnnotations[title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true, returnDirect=null], meta=null]]
[pool-9-thread-1] DEBUG io.modelcontextprotocol.spec.McpSchema - Received JSON message: {"jsonrpc":"2.0","id":"2b502ad0-3","result":{"tools":[{"name":"my.arithmetic.api.ArithmeticToolGroup.add","description":"computes the sum of the two double precision input arguments a and b","inputSchema":{"type":"object","properties":{"x":{"type":"number","format":"double","description":"x is the first argument"},"y":{"type":"number","format":"double","description":"y is the second argument"}},"required":["x","y"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}},{"name":"my.arithmetic.api.ArithmeticToolGroup.multiply","description":"return the product of the two given double precision arguments named a and b","inputSchema":{"type":"object","properties":{"x":{"type":"number","format":"double","description":"x is the first argument"},"y":{"type":"number","format":"double","description":"y is the second argument"}},"required":["x","y"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}},{"name":"my.arithmetic.api.ArithmeticToolGroup.get-image-and-message-tool","description":"Tool returning CallToolResult with an image and message","inputSchema":{"type":"object","properties":{"message":{"type":"string","description":"Message to associate with image"}},"required":["message"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}}]}}
[pool-9-thread-1] DEBUG io.modelcontextprotocol.spec.McpClientSession - Received Response: JSONRPCResponse[jsonrpc=2.0, id=2b502ad0-3, result={tools=[{name=my.arithmetic.api.ArithmeticToolGroup.add, description=computes the sum of the two double precision input arguments a and b, inputSchema={type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y]}, annotations={title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true}}, {name=my.arithmetic.api.ArithmeticToolGroup.multiply, description=return the product of the two given double precision arguments named a and b, inputSchema={type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y]}, annotations={title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true}}, {name=my.arithmetic.api.ArithmeticToolGroup.get-image-and-message-tool, description=Tool returning CallToolResult with an image and message, inputSchema={type=object, properties={message={type=string, description=Message to associate with image}}, required=[message]}, annotations={title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true}}]}, error=null]
[pool-9-thread-1] DEBUG io.modelcontextprotocol.client.McpAsyncClient - Tools changed: [Tool[name=my.arithmetic.api.ArithmeticToolGroup.add, title=null, description=computes the sum of the two double precision input arguments a and b, inputSchema=JsonSchema[type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y], additionalProperties=null, defs=null, definitions=null], outputSchema=null, annotations=ToolAnnotations[title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true, returnDirect=null], meta=null], Tool[name=my.arithmetic.api.ArithmeticToolGroup.multiply, title=null, description=return the product of the two given double precision arguments named a and b, inputSchema=JsonSchema[type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y], additionalProperties=null, defs=null, definitions=null], outputSchema=null, annotations=ToolAnnotations[title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true, returnDirect=null], meta=null], Tool[name=my.arithmetic.api.ArithmeticToolGroup.get-image-and-message-tool, title=null, description=Tool returning CallToolResult with an image and message, inputSchema=JsonSchema[type=object, properties={message={type=string, description=Message to associate with image}}, required=[message], additionalProperties=null, defs=null, definitions=null], outputSchema=null, annotations=ToolAnnotations[title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true, returnDirect=null], meta=null]]
[pool-9-thread-1] DEBUG io.modelcontextprotocol.spec.McpSchema - Received JSON message: {"jsonrpc":"2.0","id":"2b502ad0-4","result":{"tools":[{"name":"my.arithmetic.api.ArithmeticToolGroup.add","description":"computes the sum of the two double precision input arguments a and b","inputSchema":{"type":"object","properties":{"x":{"type":"number","format":"double","description":"x is the first argument"},"y":{"type":"number","format":"double","description":"y is the second argument"}},"required":["x","y"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}},{"name":"my.arithmetic.api.ArithmeticToolGroup.multiply","description":"return the product of the two given double precision arguments named a and b","inputSchema":{"type":"object","properties":{"x":{"type":"number","format":"double","description":"x is the first argument"},"y":{"type":"number","format":"double","description":"y is the second argument"}},"required":["x","y"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}},{"name":"my.arithmetic.api.ArithmeticToolGroup.get-image-and-message-tool","description":"Tool returning CallToolResult with an image and message","inputSchema":{"type":"object","properties":{"message":{"type":"string","description":"Message to associate with image"}},"required":["message"]},"annotations":{"title":"","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}}]}}
[pool-9-thread-1] DEBUG io.modelcontextprotocol.spec.McpClientSession - Received Response: JSONRPCResponse[jsonrpc=2.0, id=2b502ad0-4, result={tools=[{name=my.arithmetic.api.ArithmeticToolGroup.add, description=computes the sum of the two double precision input arguments a and b, inputSchema={type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y]}, annotations={title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true}}, {name=my.arithmetic.api.ArithmeticToolGroup.multiply, description=return the product of the two given double precision arguments named a and b, inputSchema={type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y]}, annotations={title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true}}, {name=my.arithmetic.api.ArithmeticToolGroup.get-image-and-message-tool, description=Tool returning CallToolResult with an image and message, inputSchema={type=object, properties={message={type=string, description=Message to associate with image}}, required=[message]}, annotations={title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true}}]}, error=null]
[FelixStartLevel] DEBUG my.arithmetic.mcpclient.McpSyncClientComponent - uds sync client seeing tool=Tool[name=my.arithmetic.api.ArithmeticToolGroup.add, title=null, description=computes the sum of the two double precision input arguments a and b, inputSchema=JsonSchema[type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y], additionalProperties=null, defs=null, definitions=null], outputSchema=null, annotations=ToolAnnotations[title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true, returnDirect=null], meta=null]
[FelixStartLevel] DEBUG my.arithmetic.mcpclient.McpSyncClientComponent - uds sync client seeing tool=Tool[name=my.arithmetic.api.ArithmeticToolGroup.multiply, title=null, description=return the product of the two given double precision arguments named a and b, inputSchema=JsonSchema[type=object, properties={x={type=number, format=double, description=x is the first argument}, y={type=number, format=double, description=y is the second argument}}, required=[x, y], additionalProperties=null, defs=null, definitions=null], outputSchema=null, annotations=ToolAnnotations[title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true, returnDirect=null], meta=null]
[FelixStartLevel] DEBUG my.arithmetic.mcpclient.McpSyncClientComponent - uds sync client seeing tool=Tool[name=my.arithmetic.api.ArithmeticToolGroup.get-image-and-message-tool, title=null, description=Tool returning CallToolResult with an image and message, inputSchema=JsonSchema[type=object, properties={message={type=string, description=Message to associate with image}}, required=[message], additionalProperties=null, defs=null, definitions=null], outputSchema=null, annotations=ToolAnnotations[title=, readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true, returnDirect=null], meta=null]
[FelixStartLevel] DEBUG io.modelcontextprotocol.client.LifecycleInitializer - Joining previous initialization
[FelixStartLevel] DEBUG io.modelcontextprotocol.spec.McpClientSession - Sending message for method tools/call
[pool-8-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing msg={"jsonrpc":"2.0","method":"tools/call","id":"2b502ad0-5","params":{"name":"my.arithmetic.api.ArithmeticToolGroup.add","arguments":{"y":"6.32","x":"5.1"}}}

[pool-8-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - doWrite message={"jsonrpc":"2.0","method":"tools/call","id":"2b502ad0-5","params":{"name":"my.arithmetic.api.ArithmeticToolGroup.add","arguments":{"y":"6.32","x":"5.1"}}}

[pool-8-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing done msg={"jsonrpc":"2.0","method":"tools/call","id":"2b502ad0-5","params":{"name":"my.arithmetic.api.ArithmeticToolGroup.add","arguments":{"y":"6.32","x":"5.1"}}}

[pool-4-thread-1] DEBUG my.arithmetic.mcpclient.McpAsyncClientComponent - asyncAdd(25.1,26.32) result=51.42
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - select returned count=1
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\a.socket]
[pool-4-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\a.socket] msg=
[pool-4-thread-1] DEBUG io.modelcontextprotocol.spec.McpSchema - Received JSON message: {"jsonrpc":"2.0","id":"28bf018d-4","result":{"content":[{"type":"text","text":"47169.54060000001"}],"isError":false}}
[pool-4-thread-1] DEBUG io.modelcontextprotocol.spec.McpClientSession - Received Response: JSONRPCResponse[jsonrpc=2.0, id=28bf018d-4, result={content=[{type=text, text=47169.54060000001}], isError=false}, error=null]
[pool-4-thread-1] DEBUG my.arithmetic.mcpclient.McpAsyncClientComponent - asyncMultiply(210.71,223.86) result=47169.54060000001
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - select returned count=1
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\s.socket]
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\s.socket] msg=
[pool-9-thread-1] DEBUG io.modelcontextprotocol.spec.McpSchema - Received JSON message: {"jsonrpc":"2.0","id":"2b502ad0-5","result":{"content":[{"type":"text","text":"11.42"}],"isError":false}}
[pool-9-thread-1] DEBUG io.modelcontextprotocol.spec.McpClientSession - Received Response: JSONRPCResponse[jsonrpc=2.0, id=2b502ad0-5, result={content=[{type=text, text=11.42}], isError=false}, error=null]
[FelixStartLevel] DEBUG my.arithmetic.mcpclient.McpSyncClientComponent - add(5.1,6.32) result=11.42
[FelixStartLevel] DEBUG io.modelcontextprotocol.client.LifecycleInitializer - Joining previous initialization
[FelixStartLevel] DEBUG io.modelcontextprotocol.spec.McpClientSession - Sending message for method tools/call
[pool-8-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing msg={"jsonrpc":"2.0","method":"tools/call","id":"2b502ad0-6","params":{"name":"my.arithmetic.api.ArithmeticToolGroup.multiply","arguments":{"y":"23.86","x":"10.71"}}}

[pool-8-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - doWrite message={"jsonrpc":"2.0","method":"tools/call","id":"2b502ad0-6","params":{"name":"my.arithmetic.api.ArithmeticToolGroup.multiply","arguments":{"y":"23.86","x":"10.71"}}}

[pool-8-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - writing done msg={"jsonrpc":"2.0","method":"tools/call","id":"2b502ad0-6","params":{"name":"my.arithmetic.api.ArithmeticToolGroup.multiply","arguments":{"y":"23.86","x":"10.71"}}}

[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - select returned count=1
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\s.socket]
[pool-9-thread-1] DEBUG org.eclipse.ecf.ai.mcp.transports.AbstractStringChannel - read client=java.nio.channels.SocketChannel[connected local= remote=C:\Users\slewi\eclipse-workspace.bndtools.workspace.test.1\my.arithmetic.mcpserver\s.socket] msg=
[pool-9-thread-1] DEBUG io.modelcontextprotocol.spec.McpSchema - Received JSON message: {"jsonrpc":"2.0","id":"2b502ad0-6","result":{"content":[{"type":"text","text":"255.5406"}],"isError":false}}
[pool-9-thread-1] DEBUG io.modelcontextprotocol.spec.McpClientSession - Received Response: JSONRPCResponse[jsonrpc=2.0, id=2b502ad0-6, result={content=[{type=text, text=255.5406}], isError=false}, error=null]
[FelixStartLevel] DEBUG my.arithmetic.mcpclient.McpSyncClientComponent - multiply(10.71,23.86) result=255.5406
____________________________
Welcome to Apache Felix Gogo

g! 

Prev Next