Compatibility
GATool is at 0.x. Until 1.0 these rules hold:
-
A patch release, such as 0.1.1 after 0.1.0, publishes the same tools for the same schema and operation files. It keeps the public Java API binary compatible. The exceptions are a security fix and a fix that the Model Context Protocol (MCP) or GraphQL requires. The release note names each one.
-
A minor release, such as 0.2.0, may change the tool contract, the public Java API, a property or a default. Its release note lists every such change.
-
Everything under
gatool.dev.experimentalmay change in any release.
The tool contract is what the model and its client see. It covers the name,
title, description, input schema, output schema and annotations of each tool.
It also covers the shape of a tool result, and the name and tags of the
gatool.call observation.
The public Java API is every public type in these packages:
| Module | Packages |
|---|---|
gatool-core | io.gatool.core.check, io.gatool.core.model, io.gatool.core.naming, io.gatool.core.search |
gatool-spring-boot | io.gatool.boot, io.gatool.boot.autoconfigure, io.gatool.boot.execution |
gatool-mcp-spring-boot | io.gatool.boot.mcp.autoconfigure, io.gatool.boot.mcp.limit, io.gatool.boot.mcp.security |
gatool-in-process-spring-boot | io.gatool.boot.inprocess, io.gatool.boot.inprocess.autoconfigure |
gatool-spring-boot-test | io.gatool.boot.test |
A package with internal in its name may change in any release. The published
Javadoc leaves those packages out.
GAToolProperties and the three classes beside it (GAToolApiProperties,
GAToolMcpProperties and GAToolDevProperties) have a narrower promise than
the rest of those packages. Their contract is the properties themselves: the
names, types and defaults under gatool.*. The rules above cover those. Their
getters and setters exist for Spring Boot's binder and may change in any
release. Spring Boot states the same rule for its own properties
classes.
An application replaces a part of GATool by publishing a bean of its type:
| Bean type | What it replaces |
|---|---|
GraphQlExecutor | How a document reaches the GraphQL API |
ApiCredentialStrategy | The credential GATool sends to the API |
ToolNamingStrategy | How an operation name becomes a tool name |
ToolRateLimiter | The rate limit in front of an MCP tool call |
SchemaSearch | The ranking behind searchSchema |
GAToolCatalog | The tools themselves, built in Java. GATool then leaves its executor unbuilt, so gatool.api.url may stay unset |
A public record may gain a component in a minor release. The constructor of the release before stays for at least one minor release. Code that takes a record apart with a record pattern changes with the record.