E5E8 GitHub - ECF/MCPToolGroups: Tool Groups Support for the Model Context Protocol
[go: up one dir, main page]

Skip to content

ECF/MCPToolGroups

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
3827
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MCP Dynamic Tool Groups

The Model Context Protocol (MCP) includes support for tools, allowing a common way for AI models to a) Get metadata (descriptions) of tool input and output; b) Provide input, run impl/take action and provide output via the use of one or more of the available tools.

Currently, the specification provides no way to declare tool groups. Tool grouping, however, will become important as the number, variety and function of tools increases, along with the need for orchestration of multiple tools (sequencing the input and output of multiple tools to accomplish a given task) becomes more common.

The project here provides a very small set of classes to define ToolGroups, and associated tooling for dynamically building tool specifications to add and remove tool groups to an MCP server at runtime.

Note: All of the this API can easily be duplicated in languages other than Java.

ToolGroups

In this package there is a ToolGroup class. This simple class is defined by an immutable and optional ToolGroupName parent and a String segmentName.

The ToolGroupName class defines a hierarchical namespace for the ToolGroup with a domain-name-like syntax (using '.' as separators)...e.g.: ...or 'MyToolGroupName' (no parent) to 'com.composent.ai.mcp.toolgroup.MyToolGroupName' (5 levels of parents). The name for the tool group can be resolved to a single String via the getFQName method. The ToolGroupName namespace allows unique ToolGroup names to be constructed as appropriate by ToolGroup developers. Note that other namespaces could be used/supported for ToolGroups by allowing other impls of ToolGroupName.

SyncToolGroup, AsyncToolGroup, SyncStatelessToolGroup, AsyncStatelessToolGroup

These four subclasses of ToolGroup each have a method named getSpecifications(). The type of returned specification is appropriate for each type of McpServer: Sync, Async, SyncStateless, AsyncStateless servers.

Example Usage of ToolGroups

In the com.composent.ai.mcp.examples.toolgroup.api project is the declaration of an ExampleToolGroup as a Java class:

public interface ExampleToolGroup {

	@McpTool(description = "computes the sum of the two double precision input arguments a and b")
	double add(@McpToolParam(description = "x is the first argument") double x,
			@McpToolParam(description = "y is the second argument") double y);

	@McpTool(description = "return the product of the two given double precision arguments named a and b")
	double multiply(@McpToolParam(description = "x is the first argument") double x,
			@McpToolParam(description = "y is the second argument") double y);

	@McpTool(name = "get-image-and-message-tool", description = "Tool returning CallToolResult")
	public CallToolResult getImageAndMessage(
			@McpToolParam(description = "Message to return along with tool group image") String message);

	@McpTool(description = "return asynchronously the sum of the two double precision input arguments a and b")
	Mono<Double> asyncAdd(@McpToolParam(description = "x is the first argument") double x,
			@McpToolParam(description = "y is the second argument") double y);

	@McpTool(description = "return asynchronously the product of the two given double precision arguments named a and b")
	Mono<Double> asyncMultiply(@McpToolParam(description = "x is the first argument") double x,
			@McpToolParam(description = "y is the second argument") double y);
}

Each method in the interface is annotated with the @McpTool and @McpToolParam annotations from the mcp-annotations project. There are both sync methods (add, multiply) and async methods (asyncAdd and asyncMultiply).

From the com.composent.ai.mcp.examples.toolgroup.mcpserver project, here is the full implementation of the above interface

@Component(immediate = true)
public class ToolGroupComponent implements ExampleToolGroup {

	private static Logger logger = LoggerFactory.getLogger(ToolGroupComponent.class);

	@Reference
	private SyncMcpToolGroupServer syncServer;
	@Reference
	private AsyncMcpToolGroupServer asyncServer;

	// Instance created in activate
	private List<SyncToolGroup> syncToolGroups;

	private List<AsyncToolGroup> asyncToolGroups;

	@Activate
	void activate() {
		syncToolGroups = new SyncMcpToolGroupProvider(this, ExampleToolGroup.class).getToolGroups();
		// Add to syncServer
		syncServer.addToolGroups(syncToolGroups);
		asyncToolGroups = new AsyncMcpToolGroupProvider(this, ExampleToolGroup.class).getToolGroups();
		// Add to asyncServer
		asyncServer.addToolGroups(asyncToolGroups);
	}

	@Deactivate
	void deactivate() {
		if (syncToolGroups != null) {
			this.syncServer.removeToolGroups(syncToolGroups);
			syncToolGroups = null;
		}
		if (asyncToolGroups != null) {
			this.asyncServer.removeToolGroups(asyncToolGroups);
			asyncToolGroups = null;
		}

	}

	@Override
	public double add(double x, double y) {
		logger.debug("Adding x={} y={}", x, y);
		return x + y;
	}

	@Override
	public double multiply(double x, double y) {
		logger.debug("Multiplying x={} y={}", x, y);
		return x * y;
	}

	@Override
	public CallToolResult getImageAndMessage(String message) {
		logger.debug("getImageAndMessage message={}", message);
		return CallToolResult.builder().addTextContent("Message is: " + message).addContent(
				new McpSchema.ImageContent(null, "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD...", "image/jpeg"))
				.build();
	}

	@Override
	public Mono<Double> asyncAdd(double x, double y) {
		logger.debug("Async Adding x={} y={}", x, y);
		return Mono.just(add(x, y));
	}

	@Override
	public Mono<Double> asyncMultiply(double x, double y) {
		logger.debug("Async Multiplying x={} y={}", x, y);
		return Mono.just(multiply(x, y));
	}
}

Note that instances of ToolGroupComponent provide an implementation of the ExampleToolGroup.class methods.

The McpServer SyncToolGroup is created from 'this' and the ExampleToolGroup.class here:

		syncToolGroups = new SyncMcpToolGroupProvider(this, ExampleToolGroup.class).getToolGroups();

The newly created syncToolGroups list can then be added to a running sync MCP Server

	// Add to syncServer
	syncServer.addToolGroups(syncToolGroups);

Once SyncToolGroups are added to a sync server, MCP client models will able to inspect the @McpTool and @McpToolParam descriptions of the tools in this group, use the descriptions to provide required input, take action and receive appropriate output (i.e. call the tool method) from all the relevant sync tool specifications in this group.

The activate method also shows the creation and use of AsyncToolGroups for adding to an async server.

The use of Java classes/interfaces in this example allow MCP metadata (descriptions from the @McpTool and @McpToolParam) to be used in the service api contract. Such an approach can easily duplicated in other languages...e.g. Python, C++, or Typescript via decorators, annotations, and abstract classes, or not used at all if appropriate.

Using Bndtools Project Templates to Build a Dynamic MCP ToolGroup Server

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.modelc
3827
ontextprotocol.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
32F9
 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=Js
98BB
onSchema[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! 

About

Tool Groups Support for the Model Context Protocol

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

0