This is an automated email from the ASF dual-hosted git repository.
xtsong pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/flink-agents.git
The following commit(s) were added to refs/heads/main by this push:
new 8d50fb9a [FLINK-AGENTS] Fix MCPTool deserialization: add @JsonIgnore
on Tool getters per review feedback (#532)
8d50fb9a is described below
commit 8d50fb9a31baaeccf0cac4ca81a67b7a6f1a7393
Author: Avichay Marciano <[email protected]>
AuthorDate: Wed Mar 4 09:06:33 2026 +0200
[FLINK-AGENTS] Fix MCPTool deserialization: add @JsonIgnore on Tool getters
per review feedback (#532)
---
.../org/apache/flink/agents/api/tools/Tool.java | 4 +++
.../flink/agents/integrations/mcp/MCPToolTest.java | 29 ++++++++++++++++++++++
2 files changed, 33 insertions(+)
diff --git a/api/src/main/java/org/apache/flink/agents/api/tools/Tool.java
b/api/src/main/java/org/apache/flink/agents/api/tools/Tool.java
index e2b80602..a0238400 100644
--- a/api/src/main/java/org/apache/flink/agents/api/tools/Tool.java
+++ b/api/src/main/java/org/apache/flink/agents/api/tools/Tool.java
@@ -18,6 +18,7 @@
package org.apache.flink.agents.api.tools;
+import com.fasterxml.jackson.annotation.JsonIgnore;
import org.apache.flink.agents.api.resource.ResourceType;
import org.apache.flink.agents.api.resource.SerializableResource;
@@ -41,6 +42,7 @@ public abstract class Tool extends SerializableResource {
}
/** Return resource type of class. */
+ @JsonIgnore
@Override
public final ResourceType getResourceType() {
return ResourceType.TOOL;
@@ -53,11 +55,13 @@ public abstract class Tool extends SerializableResource {
public abstract ToolResponse call(ToolParameters parameters);
/** Get the tool name from metadata. */
+ @JsonIgnore
public final String getName() {
return metadata.getName();
}
/** Get the tool description from metadata. */
+ @JsonIgnore
public final String getDescription() {
return metadata.getDescription();
}
diff --git
a/integrations/mcp/src/test/java/org/apache/flink/agents/integrations/mcp/MCPToolTest.java
b/integrations/mcp/src/test/java/org/apache/flink/agents/integrations/mcp/MCPToolTest.java
index 2d89cb4d..2d1b233f 100644
---
a/integrations/mcp/src/test/java/org/apache/flink/agents/integrations/mcp/MCPToolTest.java
+++
b/integrations/mcp/src/test/java/org/apache/flink/agents/integrations/mcp/MCPToolTest.java
@@ -34,6 +34,35 @@ class MCPToolTest {
private static final String DEFAULT_ENDPOINT = "http://localhost:8000/mcp";
+ @Test
+ @DisabledOnJre(JRE.JAVA_11)
+ @DisplayName(
+ "JSON round-trip works because @JsonIgnore on Tool getters
prevents redundant fields")
+ void testJsonDeserializationWithDefaultMapper() throws Exception {
+ ToolMetadata metadata = new ToolMetadata("add", "Add two numbers",
"{\"type\":\"object\"}");
+ MCPServer server = MCPServer.builder(DEFAULT_ENDPOINT).build();
+ MCPTool original = new MCPTool(metadata, server);
+
+ // Use a default ObjectMapper — @JsonIgnore on
Tool.getName()/getDescription()/
+ // getResourceType() prevents these from being serialized, so
deserialization
+ // succeeds without needing @JsonIgnoreProperties on MCPTool.
+ ObjectMapper mapper = new ObjectMapper();
+ String json = mapper.writeValueAsString(original);
+
+ // Verify redundant top-level fields are not serialized
+ // (name/description inside metadata are expected)
+ com.fasterxml.jackson.databind.JsonNode tree = mapper.readTree(json);
+ assertThat(tree.has("name")).isFalse();
+ assertThat(tree.has("description")).isFalse();
+ assertThat(tree.has("resourceType")).isFalse();
+
+ MCPTool deserialized = mapper.readValue(json, MCPTool.class);
+
+ assertThat(deserialized.getName()).isEqualTo("add");
+ assertThat(deserialized.getMetadata()).isEqualTo(metadata);
+ assertThat(deserialized.getMcpServer()).isEqualTo(server);
+ }
+
@Test
@DisabledOnJre(JRE.JAVA_11)
@DisplayName("Create MCPTool with metadata and server")