v3.2.1
STDIO Transport Fix — the java -jar path documented in docs/setup.md started cleanly and
then never answered a request. stdio is now the default transport.
Thanks @senor14 for the contribution :)
Added
- MCP wire-protocol conformance tests:
McpProtocolConformanceITboots the server with the
httpprofile on a random port and asserts what a client actually observes on the wire — the
initializehandshake, the declaredtoolscapability, and a published tool list with unique
names, descriptions, and structurally valid input schemas.McpStdioConformanceITcovers the
same surface over stdio by launching the packaged jar the waydocs/setup.mddocuments
(#14).
Changed
- Protocol conformance runs in CI: a
protocol-conformancejob runs both wire-protocol ITs on
every pull request. The tool list is now asserted by exact tool name rather than by shape alone,
andMcpToolsConfigTestcovers the connected-client aggregation path with a stubbed
McpSyncClientinstead of deferring to a manual smoke test — the 3.1.0 Context7 regression, in
whichtools/listsilently returned only the nine native tools, would now turn a test red. skipUTs/skipITsare wired to the test plugins: both properties were declared and set by
theci,integration, andfullprofiles but never referenced by surefire or failsafe, so
-Pintegrationstill ran the unit tests and the integration job's-DskipUTs=truedid nothing.- Release metadata: aligned the project version, MCP runtime metadata, registry manifest, Docker
workflow fallbacks, and Unix/Windows build helper fallbacks for 3.2.1.
Fixed
- JAR started but never answered a single MCP request:
spring.ai.mcp.server.stdiowas set only
inapplication-docker.yaml, so every Docker path worked while thejava -jarinvocation
documented indocs/setup.mdcame up with no transport at all. Combined with
web-application-type: nonethere was nothing left to fail, so the server logged a clean startup
and then went silent — from the client side, an indefinite hang with no error or warning. stdio is
now enabled in the default profile, with an explicitstdio: falsein thehttpprofile (so the
STREAMABLE transport does not come up alongside it) and in the test profile (so no stdio transport
attaches toSystem.inunder surefire)
(#15).