What this release does
-
Tools from query and mutation operations. A query publishes
readOnlyHintandidempotentHintas true anddestructiveHintas false. A mutation publishes the three the other way round, which are the defaults of the Model Context Protocol (MCP). -
Streamable HTTP, stateless by default and stateful with
spring.ai.mcp.server.protocol: STREAMABLE. On the stateful transport,gatool.mcp.sessions.max-countandgatool.mcp.sessions.idle-timeoutbound the sessions the server keeps. Also stdio, for a client that runs on the same machine. -
An OAuth 2.1 resource server on the MCP endpoint, built with Spring Security. The scopes each operation file lists are checked on every call and named in every challenge. The endpoint runs unsecured only behind
gatool.mcp.security.unsafe.allow-mcp-calls-without-authentication, the unauthenticated switch. -
A static header, client credentials or token exchange towards the GraphQL API, proved against Keycloak.
-
Both embedded mode, where the GraphQL API runs inside the same application through Spring for GraphQL, and a remote API over HTTP.
-
On the stateful transport, GATool stops startup where the MCP server bean was built without immediate execution. It also refuses a tool call that arrives off the request thread. Both are described under The caller and the request thread.