Class McpInspectorClient

java.lang.Object
com.tnsai.mcp.testing.McpInspectorClient
All Implemented Interfaces:
McpTransport

public class McpInspectorClient extends Object implements McpTransport
Decorator transport that records all JSON-RPC messages for inspection.

Wraps an existing McpTransport and records every message sent and received, along with timing information. Useful for debugging and analyzing MCP interactions.

Usage

 McpTransport baseTransport = new MockMcpTransport(server);
 McpInspectorClient inspector = new McpInspectorClient(baseTransport);

 McpClient client = new McpClient(inspector);
 client.connect();
 client.initialize();

 // After operations...
 List<McpInspectorClient.MessageRecord> messages = inspector.getMessages();
 Duration avgLatency = inspector.getAverageLatency();
 
See Also:
  • Constructor Details

    • McpInspectorClient

      public McpInspectorClient(McpTransport delegate)
      Creates an inspector that wraps the given transport.
      Parameters:
      delegate - the transport to wrap
  • Method Details

    • connect

      public void connect() throws IOException
      Description copied from interface: McpTransport
      Connects to the MCP server.
      Specified by:
      connect in interface McpTransport
      Throws:
      IOException - if connection fails
    • send

      public void send(String message) throws IOException
      Description copied from interface: McpTransport
      Sends a message to the MCP server.
      Specified by:
      send in interface McpTransport
      Parameters:
      message - the message to send (JSON-RPC request)
      Throws:
      IOException - if sending fails
    • setOnMessage

      public void setOnMessage(Consumer<String> messageConsumer)
      Description copied from interface: McpTransport
      Sets a consumer for incoming messages from the MCP server.
      Specified by:
      setOnMessage in interface McpTransport
      Parameters:
      messageConsumer - the consumer for incoming messages (JSON-RPC response/notification)
    • setOnError

      public void setOnError(Consumer<Throwable> errorConsumer)
      Description copied from interface: McpTransport
      Sets a consumer for transport errors.
      Specified by:
      setOnError in interface McpTransport
      Parameters:
      errorConsumer - the consumer for transport errors
    • disconnect

      public void disconnect() throws IOException
      Description copied from interface: McpTransport
      Disconnects from the MCP server.
      Specified by:
      disconnect in interface McpTransport
      Throws:
      IOException - if disconnection fails
    • isConnected

      public boolean isConnected()
      Description copied from interface: McpTransport
      Checks if the transport is currently connected.
      Specified by:
      isConnected in interface McpTransport
      Returns:
      true if connected, false otherwise
    • getMessages

      public List<McpInspectorClient.MessageRecord> getMessages()
      Returns all recorded messages.
      Returns:
      list of message records
    • getMessagesByMethod

      public List<McpInspectorClient.MessageRecord> getMessagesByMethod(String method)
      Returns messages filtered by method name.
      Parameters:
      method - the method to filter by
      Returns:
      filtered list of message records
    • getAverageLatency

      public Duration getAverageLatency()
      Returns the average latency of all recorded request-response pairs.
      Returns:
      the average latency, or Duration.ZERO if no latencies recorded
    • getMethodCounts

      public Map<String,Long> getMethodCounts()
      Returns a count of messages grouped by method.
      Returns:
      map of method name to message count
    • clear

      public void clear()
      Clears all recorded messages.