feat: implement size-limited LRU cache for JSON Schema validation by joaquinescalante23 · Pull Request #845 · modelcontextprotocol/java-sdk · GitHub
Skip to content

feat: implement size-limited LRU cache for JSON Schema validation - #845

Open
joaquinescalante23 wants to merge 1 commit into
modelcontextprotocol:mainfrom
joaquinescalante23:fix/json-schema-cache-resilience
Open

joaquinescalante23 wants to merge 1 commit into
modelcontextprotocol:mainfrom
joaquinescalante23:fix/json-schema-cache-resilience

Conversation

@joaquinescalante23

Copy link
Copy Markdown

I noticed that the current DefaultJsonSchemaValidator implementations (Jackson 2 and 3) were using an unbounded ConcurrentHashMap for schema caching, which could lead to memory leaks in long-running processes if exposed to a large number of dynamic schemas.

This PR addresses the TODO in both modules by:

  • Replacing the unbounded map with a thread-safe LRU Cache (defaulting to 1024 entries) using LinkedHashMap.
  • Making the cache size configurable via constructors for greater flexibility.
  • Improving the generateCacheKey logic to use a stable JSON representation of the schema instead of the default hashCode(), preventing potential collisions and ensuring cache hits are reliable regardless of map order.

These changes significantly improve the resilience and resource management of the SDK when validating complex MCP tool outputs.

@joaquinescalante23

Copy link
Copy Markdown
Author

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant