From c8c08dd1a6524768fc326c1cb486e7b27fc9156a Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Fri, 11 Jul 2025 13:45:37 +0200 Subject: [PATCH] Add legacy constructors for backwards compatibility in McpSchema record types As a followup of #372 introduce new constructors to several record types in McpSchema (Resource, ResourceTemplate, Prompt, PromptArgument, Tool, PromptReference, and ResourceLink) to improve backwards compatibility with previous code versions. Signed-off-by: Christian Tzolov --- .../modelcontextprotocol/spec/McpSchema.java | 77 +++++++++++++++---- 1 file changed, 62 insertions(+), 15 deletions(-) diff --git a/mcp/src/main/java/io/modelcontextprotocol/spec/McpSchema.java b/mcp/src/main/java/io/modelcontextprotocol/spec/McpSchema.java index 79534c8..3a4b53d 100644 --- a/mcp/src/main/java/io/modelcontextprotocol/spec/McpSchema.java +++ b/mcp/src/main/java/io/modelcontextprotocol/spec/McpSchema.java @@ -578,6 +578,16 @@ public final class McpSchema { @JsonProperty("size") Long size, @JsonProperty("annotations") Annotations annotations) implements Annotated, ResourceContent {// @formatter:on + /** + * @deprecated Only exists for backwards-compatibility purposes. Use + * {@link Resource#builder()} instead. + */ + @Deprecated + public Resource(String uri, String name, String description, String mimeType, Long size, + Annotations annotations) { + this(uri, name, null, description, mimeType, null, annotations); + } + /** * @deprecated Only exists for backwards-compatibility purposes. Use * {@link Resource#builder()} instead. @@ -677,8 +687,13 @@ public final class McpSchema { @JsonProperty("title") String title, @JsonProperty("description") String description, @JsonProperty("mimeType") String mimeType, - @JsonProperty("annotations") Annotations annotations) implements Annotated, BaseMetadata { - } // @formatter:on + @JsonProperty("annotations") Annotations annotations) implements Annotated, BaseMetadata {// @formatter:on + + public ResourceTemplate(String uriTemplate, String name, String description, String mimeType, + Annotations annotations) { + this(uriTemplate, name, null, description, mimeType, annotations); + } + } @JsonInclude(JsonInclude.Include.NON_ABSENT) @JsonIgnoreProperties(ignoreUnknown = true) @@ -802,8 +817,12 @@ public final class McpSchema { @JsonProperty("name") String name, @JsonProperty("title") String title, @JsonProperty("description") String description, - @JsonProperty("arguments") List arguments) implements BaseMetadata { - } // @formatter:on + @JsonProperty("arguments") List arguments) implements BaseMetadata { // @formatter:on + + public Prompt(String name, String description, List arguments) { + this(name, null, description, arguments != null ? arguments : new ArrayList<>()); + } + } /** * Describes an argument that a prompt can accept. @@ -819,8 +838,12 @@ public final class McpSchema { @JsonProperty("name") String name, @JsonProperty("title") String title, @JsonProperty("description") String description, - @JsonProperty("required") Boolean required) implements BaseMetadata { - }// @formatter:on + @JsonProperty("required") Boolean required) implements BaseMetadata {// @formatter:on + + public PromptArgument(String name, String description, Boolean required) { + this(name, null, description, required); + } + } /** * Describes a message returned as part of a prompt. @@ -946,6 +969,15 @@ public final class McpSchema { @JsonProperty("inputSchema") JsonSchema inputSchema, @JsonProperty("annotations") ToolAnnotations annotations) implements BaseMetadata { // @formatter:on + /** + * @deprecated Only exists for backwards-compatibility purposes. Use + * {@link Tool#builder()} instead. + */ + @Deprecated + public Tool(String name, String description, JsonSchema inputSchema, ToolAnnotations annotations) { + this(name, null, description, inputSchema, annotations); + } + public Tool(String name, String description, String schema) { this(name, null, description, parseSchema(schema), null); } @@ -1688,17 +1720,21 @@ public final class McpSchema { public record PromptReference(// @formatter:off @JsonProperty("type") String type, @JsonProperty("name") String name, - @JsonProperty("title") String title ) implements McpSchema.CompleteReference, BaseMetadata { + @JsonProperty("title") String title ) implements McpSchema.CompleteReference, BaseMetadata { // @formatter:on - public PromptReference(String name) { - this("ref/prompt", name, null); - } + public PromptReference(String type, String name) { + this(type, name, null); + } - @Override - public String identifier() { - return name(); - } - }// @formatter:on + public PromptReference(String name) { + this("ref/prompt", name, null); + } + + @Override + public String identifier() { + return name(); + } + } @JsonInclude(JsonInclude.Include.NON_ABSENT) @JsonIgnoreProperties(ignoreUnknown = true) @@ -1911,6 +1947,17 @@ public final class McpSchema { @JsonProperty("size") Long size, @JsonProperty("annotations") Annotations annotations) implements Annotated, Content, ResourceContent { // @formatter:on + /** + * @deprecated Only exists for backwards-compatibility purposes. Use + * {@link ResourceLink#ResourceLink(String, String, String, String, String, Long, Annotations)} + * instead. + */ + @Deprecated + public ResourceLink(String name, String uri, String description, String mimeType, Long size, + Annotations annotations) { + this(name, null, uri, description, mimeType, size, annotations); + } + public static Builder builder() { return new Builder(); }