2121import java .util .Collections ;
2222import java .util .HashMap ;
2323import java .util .HashSet ;
24+ import java .util .List ;
2425import java .util .Map ;
2526import java .util .Set ;
2627import java .util .concurrent .CompletableFuture ;
@@ -49,6 +50,9 @@ public final class McpToolboxClientImpl implements McpToolboxClient {
4950 /** Jackson ObjectMapper for JSON parsing. */
5051 private final ObjectMapper objectMapper ;
5152
53+ private final List <ToolPreProcessor > preProcessors ;
54+ private final List <ToolPostProcessor > postProcessors ;
55+
5256 /**
5357 * Constructs a new McpToolboxClientImpl.
5458 *
@@ -61,22 +65,14 @@ public McpToolboxClientImpl(final Transport clientTransport) {
6165 /**
6266 * Constructs a new McpToolboxClientImpl.
6367 *
64- * @param clientTransport The underlying MCP transport layer.
65- * @param clientHeaders Fallback headers for deprecated constructor compatibility.
66- * @param provider Fallback provider for deprecated constructor compatibility.
68+ * @param transport The underlying MCP transport layer.
69+ * @param headers Fallback headers for deprecated constructor compatibility.
70+ * @param credentialsProvider Fallback provider for deprecated constructor compatibility.
6771 */
6872 @ Deprecated
6973 public McpToolboxClientImpl (
70- final Transport clientTransport ,
71- final Map <String , String > clientHeaders ,
72- final CredentialsProvider provider ) {
73- this .transport = clientTransport ;
74- this .headers =
75- clientHeaders != null
76- ? java .util .Collections .unmodifiableMap (new java .util .HashMap <>(clientHeaders ))
77- : java .util .Collections .emptyMap ();
78- this .credentialsProvider = provider ;
79- this .objectMapper = new ObjectMapper ();
74+ Transport transport , Map <String , String > headers , CredentialsProvider credentialsProvider ) {
75+ this (transport , headers , credentialsProvider , null , null );
8076 }
8177
8278 /**
@@ -152,6 +148,32 @@ private static CredentialsProvider apiKeyToProvider(final String apiKey) {
152148 return () -> CompletableFuture .completedFuture (bearerKey );
153149 }
154150
151+ /**
152+ * Primary constructor for McpToolboxClientImpl.
153+ *
154+ * @param transport The underlying MCP transport layer.
155+ * @param headers Default HTTP headers.
156+ * @param credentialsProvider Provider for credentials.
157+ * @param preProcessors List of pre-processors.
158+ * @param postProcessors List of post-processors.
159+ */
160+ public McpToolboxClientImpl (
161+ Transport transport ,
162+ Map <String , String > headers ,
163+ CredentialsProvider credentialsProvider ,
164+ List <ToolPreProcessor > preProcessors ,
165+ List <ToolPostProcessor > postProcessors ) {
166+ this .transport = transport ;
167+ this .headers =
168+ headers != null
169+ ? java .util .Collections .unmodifiableMap (new java .util .HashMap <>(headers ))
170+ : java .util .Collections .emptyMap ();
171+ this .credentialsProvider = credentialsProvider ;
172+ this .preProcessors = preProcessors != null ? List .copyOf (preProcessors ) : List .of ();
173+ this .postProcessors = postProcessors != null ? List .copyOf (postProcessors ) : List .of ();
174+ this .objectMapper = new ObjectMapper ();
175+ }
176+
155177 private CompletableFuture <Map <String , String >> getMergedMetadata (
156178 final Map <String , String > extraMetadata ) {
157179 if (this .transport instanceof HttpMcpTransport ) {
@@ -250,6 +272,12 @@ public CompletableFuture<Map<String, Tool>> loadToolset(
250272 if (authBinds != null && authBinds .containsKey (toolName )) {
251273 authBinds .get (toolName ).forEach (tool ::addAuthTokenGetter );
252274 }
275+ for (ToolPreProcessor preProcessor : this .preProcessors ) {
276+ tool .addPreProcessor (preProcessor );
277+ }
278+ for (ToolPostProcessor postProcessor : this .postProcessors ) {
279+ tool .addPostProcessor (postProcessor );
280+ }
253281 tools .put (toolName , tool );
254282 }
255283 return tools ;
@@ -279,6 +307,12 @@ public CompletableFuture<Tool> loadTool(
279307 if (authTokenGetters != null ) {
280308 authTokenGetters .forEach (tool ::addAuthTokenGetter );
281309 }
310+ for (ToolPreProcessor preProcessor : this .preProcessors ) {
311+ tool .addPreProcessor (preProcessor );
312+ }
313+ for (ToolPostProcessor postProcessor : this .postProcessors ) {
314+ tool .addPostProcessor (postProcessor );
315+ }
282316 return tool ;
283317 });
284318 }
0 commit comments