Commit graph

237 commits

Author SHA1 Message Date
Christian Tzolov
cb1578e9aa Release version 0.8.1 v0.8.1
Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
2025-03-26 12:19:01 +01:00
Christian Tzolov
96e6d9cc15 refactor(server): Fi StdioServerTransportProvider initialization flow (#74)
Extract message processing initialization from StdioMcpSessionTransport constructor into a
separate initProcessing() method.

Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
2025-03-26 12:10:52 +01:00
Christian Tzolov
d7177f15a3 Next development version
Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
2025-03-21 17:34:55 +01:00
Christian Tzolov
7be502fb6c Release version 0.8.0 v0.8.0
Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
2025-03-21 17:34:29 +01:00
Christian Tzolov
a72abf6e33
(pom) Enable automatic publishing to Maven Central (#63)
Set autoPublish to true in the Maven configuration to
automatically publish artifacts to the Central repository when the release is performed.

Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
2025-03-21 17:05:06 +01:00
Christian Tzolov
33329bfabb
feat(mcp): Add builder for CreateMessageRequest (#60)
- Implements a builder pattern for CreateMessageRequest
- Updates corresponding tests to use the new builder syntax
- Add ModelPreferences builder and ModelHint helper
- Use builder pattern for CreateMessageRequest in integration tests

Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
2025-03-21 16:43:27 +01:00
Christian Tzolov
3e2139fa27 refactor(McpSchema): convert StopReason enum values to camelCase
Change format from snake_case to camelCase:
- end_turn → endTurn
- stop_sequence → stopSequence
- max_tokens → maxTokens

Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
2025-03-20 21:59:55 +01:00
ryan xu
5bd950d668 Update PING request handler, return empty map instead of empty string
Co-authored-by: NAME <NAME@EXAMPLE.COM>
Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
2025-03-20 21:50:16 +01:00
Christian Tzolov
64f424d91b fix: update McpSchemaTests to align with changes in #9
Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
2025-03-20 21:50:16 +01:00
Piotr Roterski
c35e896aa2 Fix CreateMessageRequest includeContext enum values to match MCP specification 2025-03-20 21:50:16 +01:00
Dariusz Jędrzejczyk
34a733509d refactor: introduce session-based architecture for MCP server (#31)
This commit introduces a major refactoring of the MCP Java SDK to implement a session-based architecture
for server-side implementations. The changes improve the SDK's ability to handle multiple concurrent
client connections and provide an API better aligned with the MCP specification.

Key changes:

- Introduce McpServerTransportProvider interface to manage client connections
- Rename ClientMcpTransport to McpClientTransport and ServerMcpTransport to McpServerTransport
- Add exchange objects (McpAsyncServerExchange, McpSyncServerExchange) for client interaction
- Update handler signatures to include exchange parameter: (args) -> result to (exchange, args) -> result
- Rename Registration classes to Specification classes
- Update method names (e.g., rootsChangeConsumers to rootsChangeHandlers)
- Deprecate old interfaces and classes for removal in 0.9.0
- Add migration guide (migration-0.8.0.md)

Resolves #9, #15

Co-authored-by: Christian Tzolov <christian.tzolov@broadcom.com>
Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
2025-03-20 21:49:51 +01:00
Dariusz Jędrzejczyk
9c2b836e41 Sync async client tests between mcp and mcp-test module
Signed-off-by: Dariusz Jędrzejczyk <dariusz.jedrzejczyk@broadcom.com>
2025-03-20 09:48:09 +01:00
Dariusz Jędrzejczyk
e996a5de1e Follow-up fix client tests reliability
Signed-off-by: Dariusz Jędrzejczyk <dariusz.jedrzejczyk@broadcom.com>
2025-03-20 09:15:35 +01:00
Dariusz Jędrzejczyk
37120f2ae5 Improve client test reliability and execution time
This change uses VirtualTimeScheduler and pretends enough time has
passed to trigger a timeout on the initialization.
Another problem with reliability of the tests was that the used
testcontainer for the SSE server does not support multiple clients and
the existence of both the global client for the entire suite and some
customized local clients in some tests caused responses to be delivered
to the other client at some racing situations. Now each test creates a
dedicated client and performs cleanup locally.
While these tests were improved, two other issues were found and fixed.
The first one is that the closeGracefully of DefaultMcpSession was not
lazy and would trigger connection disposal before the returned Mono was
subscribed. The second one was dealing with closing the StdIo client
before the process was started. In such a case there should not be an
error but rather a warning and successful completion.
2025-03-19 18:33:18 +01:00
Christian Tzolov
92ec67a965 Increase the request timeout to 14 sec
Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
2025-03-19 12:19:24 +01:00
Christian Tzolov
264a0c9041 Address review comments
Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
2025-03-19 12:19:24 +01:00
Christian Tzolov
914a14a92a adjust test timeout values
Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
2025-03-19 12:19:24 +01:00
Christian Tzolov
1a673b3567 refactor: improve MCP client timeout handling and reactive testing
- Add configurable initialization timeout separate from request timeout
- Rename ServletSse* test classes to HttpSse* for better naming consistency
- Replace direct .block() calls with StepVerifier for better reactive testing
- Change ping() method to return Mono instead of Mono
- Improve error handling and reactive programming patterns throughout tests
- Chain reactive operations for cleaner test flow

Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
2025-03-19 12:19:24 +01:00
Christian Tzolov
6ef1b58034 Update README.md
Fix the build status badge
2025-03-19 07:28:35 +01:00
Dariusz Jędrzejczyk
ec5383c23a Add CI GitHub Action and rename snapshot publish workflow 2025-03-18 13:37:49 +01:00
He-Pin(kerr)
ab0baf9d8e chore: Make closeLatch a final. 2025-03-13 16:29:35 +01:00
Christian Tzolov
109aab20e8
feat(client): Improve initialization state handling in McpAsyncClient (#39)
- Add proper initialization state tracking using AtomicBoolean and Sinks
- Implement timeout handling for requests requiring initialization
- Ensure all client methods verify initialization state before proceeding
- Fix rootsListChangedNotification to check initialization state
- Improve error messages for uninitialized client operations
- improve JavaDoc
- Add tests to verify proper error handling for uninitialized clients
  - Replace hardcoded timeout constants with configurable getTimeoutDuration() method
  - Remove automatic initialization in setUp methods to allow explicit testing

Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
2025-03-13 15:13:50 +01:00
Christian Tzolov
4eff00c8da
feat(mcp): relax MCP Schema JSON deserialization constraints (#37)
* 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>
2025-03-10 12:36:54 +01:00
Christian Tzolov
1bee8d4744
refactor(mcp): remove redundant type field from Content implementations (#27)
- 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>
2025-03-03 13:57:41 +01:00
Christian Tzolov
b2c62d50cb
Update README with Maven wrapper commands and test prerequisites (#23)
Resolves #20

Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
2025-02-27 10:13:25 +01:00
Christian Tzolov
718042644a
refactor(client): improve validation and remove server methods (#14)
Add client initialization and capability validation checks

- New isInitialized() method to check client state
- Validate server capabilities before tool/resource operations
- Add clear error messages for common failure cases
- Remove server-side notification methods from client: sendResourcesListChanged(), promptListChangedNotification()
- Improve protocol version handling
- Testing improvements and new initialization tests
- Redesign MockMcpTransport internals and adapt tests
- Correct McpError messages
- clean unused imports

Resolves #13

Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
Signed-off-by: Dariusz Jędrzejczyk <dariusz.jedrzejczyk@broadcom.com>
Co-authored-by: Dariusz Jędrzejczyk <dariusz.jedrzejczyk@broadcom.com>
2025-02-27 10:00:04 +01:00
konczdev
d9c4818607 Generate OSGi metadata 2025-02-26 18:55:46 +01:00
Mariano Gonzalez
2c500b9cdc
Resources and prompts cannot be added after server start (#18)
* Resources and prompts cannot be added after server start #17
2025-02-26 11:49:30 +01:00
JermaineHua
7165fea5ec Fix some typos
Signed-off-by: JermaineHua <crazyhzm@apache.org>
2025-02-25 12:33:25 +01:00
Dennis Kawurek
bb6514e808 Remove closed sessions from list in WebMvcSseServerTransport 2025-02-25 10:56:51 +01:00
zeko.zhang
dac5c545b0 Fix issue, SSE connection will terminate after 30 seconds (DEFAULT). 2025-02-25 10:33:04 +01:00
Christian Tzolov
c69cc18eb6 docs: add Spring AI MCP documentation and improve README clarity
- 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>
2025-02-17 13:44:06 +01:00
Christian Tzolov
352ec2db09 Next development version 0.8.0-SNAPSHOT
Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
2025-02-14 13:39:20 +01:00
Christian Tzolov
d14b10e014 Enable maven-central auto-publish
Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
2025-02-14 13:07:57 +01:00
Christian Tzolov
dfe576b461 Update pom and GH actions
Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
2025-02-14 12:40:27 +01:00
Christian Tzolov
01aa720862 clean the Readme
Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
2025-02-13 20:44:34 +01:00
Christian Tzolov
871add4e45 refactor: reduce log verbosity by adjusting log levels
- 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>
2025-02-11 16:45:11 +01:00
Christian Tzolov
5d27a13a4d Migrate the docs to the io.mcp 2025-02-05 18:14:46 +01:00
Christian Tzolov
df35c78aeb Improve docs 2025-02-03 14:14:01 +01:00
Christian Tzolov
48e4cf4b13 Minor pom config 2025-02-03 11:37:05 +01:00
Christian Tzolov
196596670e Another round of cleaning the readme 2025-01-29 15:14:45 +01:00
Christian Tzolov
0dc93e134d Improve README.md 2025-01-29 15:11:23 +01:00
Christian Tzolov
8cd3cfdf3f Improve docs 2025-01-29 14:32:43 +01:00
Christian Tzolov
585f30cf33 Module and Package restructoring
- mcp-transport -> mcp-spring
- mcp-webflux-sse-transport -> mcp-spring-webflux
 - pom coordinates changed accordingly
- mpc-webmvc-sse-transport -> mcp-spring-webmvc
 - pom coordinates changed accordingly
- docs contains the mdx version of the documentation
2025-01-29 13:40:53 +01:00
Mark Pollack
7e73152ada Convert asciidoc/antor docs to mintlify 2025-01-29 11:54:10 +01:00
Christian Tzolov
a439e4ae6a Re-enable the CI tests 2025-01-28 19:45:56 +01:00
Christian Tzolov
c78c1adcc6 Migrate to central-publishing-maven-plugin 2025-01-28 19:36:27 +01:00
Christian Tzolov
1a506d0563
Update pom.xml
update nexus plugin version to 1.7.0
2025-01-28 17:52:23 +01:00
Christian Tzolov
181e1f25ab Change the top domain from org to io 2025-01-28 17:25:58 +01:00
Christian Tzolov
91a0332009 Update nexus-staging-maven-plugin conf 2025-01-28 17:04:45 +01:00