* feat(mcp): relax MCP Schema JSON deserialization constraints
- Add @JsonIgnoreProperties(ignoreUnknown = true) annotation to all record
classes in McpSchema to make JSON deserialization more robust by ignoring
unknown properties.
- Make the JsonSchema record public
Resolves#36
This improves compatibility with third-party implementations like Cursor that are not MCP Schema compliant.
Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
- The type field and associated methods were redundant in Content implementations (TextContent, ImageContent, EmbeddedResource)
as the type information is already handled by Jackson's polymorphic type handling via @JsonSubTypes annotation.
- Add default implementation that returns the appropriate type string based on the implementing class (text, image, or resource)
- Added comprehensive unit tests for McpSchema to validate serialization/deserialization behavior of all schema components.
- Add deserialization tests for all content types
- Add json-unit-assertj for flexible JSON testing - ignores array order and extra array items, reducing test brittleness while
maintaining functional validation.
Resolves#26
Resolve https://github.com/spring-projects/spring-ai/issues/2350
Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
- Add Spring AI MCP documentation section with links to client/server starters
- Fix license link text
Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
- Change most INFO logs to DEBUG level for operational messages
- Keep stderr messages at INFO level
- Rename errorHandler to stdErrorHandler in StdioClientTransport
- Add debug logging for JSON message deserialization
Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
Accept HTTP status codes 200, 201, 202, and 206 as valid responses
for SSE stream connection. Improves error message to include actual
status code. Removes unused main method.
Resolves#68
Implement protocol version negotiation between MCP client and server to ensure
compatibility and graceful version handling.
The server will now suggest the latest supported version when an
unsupported version is requested, while the client will verify
version compatibility during initialization.
- Support multiple protocol versions in both client and server
- Negotiate compatible version during initialization
- Fall back to latest version when unsupported version requested
- Add comprehensive test coverage for version negotiation
Resolves#71
Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>