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")

Reply via email to