6.1.25
2026-09-29Added
- PIVOT-14244 Chat: An application can now serve no chat, with
atoti.ai.chat.enabled=false. No chat endpoint is registered, so every call to a chat endpoint answers 404 and the Atoti UI reports chat as absent. This differs from configuring no LLM, which keeps the endpoints registered and refuses each call until an LLM is configured. Auto-Explain and the MCP Server are unaffected, and keep theactiveviam/ainamespace advertised on/versions. See Configure Visualize This. - PIVOT-14244 Atoti Python SDK: Added the
AiConfig.chat_enabledattribute to serve no chat. See Configure Visualize This. - PIVOT-14244 Atoti Intelligence: Chat and Auto-Explain each have their own REST namespace, so the two features version independently:
activeviam/ai/chatserving/activeviam/ai/chat/rest/v1, andactiveviam/ai/autoexplainserving/activeviam/ai/autoexplain/rest/v1. Both namespaces are advertised on the/versionsendpoint. The payloads are unchanged from the endpoints they replace. See the migration notes. - PIVOT-14244 MCP Server: An Atoti Server instance can now connect out to other MCP Servers, typically the other Atoti Server instances of the same deployment, and use their tools as its own, both in chat and on its own MCP endpoint. A connection is declared under
spring.ai.mcp.client.streamable-http.connections.<name>, whose new Atotiauthenticationkey selects how it authenticates as the calling user. This requires the Atoti Intelligence Extension tier. See the migration notes. - PIVOT-14244 Atoti Python SDK: Added the
AiConfig.mcpattribute, usingMcpClientConfig, to take the tools of other MCP Servers, eitherHttpMcpServerConfigover HTTP orStdioMcpServerConfigas a local process. See Connect to other MCP Servers in Python. - PIVOT-14121 Chat: The assistant can now display the interactive Auto-Explain page of an analysis it ran, on top of the summary it already returned. This requires Atoti UI 5.2.28 or higher. See Configure Auto-Explain.
- PIVOT-14121 Chat: An Auto-Explain analysis that has already run can now be listed, displayed again, or dropped from the chat, instead of being run a second time. How many analyses stay retrievable, and for how long, are set with
atoti.ai.autoexplain.results.maximum-sizeandatoti.ai.autoexplain.results.time-to-live. See Configure Auto-Explain. - PIVOT-14121 Atoti Python SDK: Added the
AiConfig.auto_explain_retained_run_countandAiConfig.auto_explain_run_lifetimeattributes, setting how many Auto-Explain analyses stay retrievable from the chat, and for how long. See Configure Auto-Explain. - PIVOT-14839 Atoti Intelligence: Added a guard on how many times the LLM provider re-sends a request,
atoti.ai.max-attempts: one property for every provider, counting attempts with the first one included, defaulting to 5. Declaring it overrides the count Spring AI exposes,spring.ai.retry.max-attempts, wherever that is declared; leaving it out lets it stand. See Retries and timeouts. - PIVOT-14839 Chat: Added a timeout guard on the whole prompt,
atoti.ai.prompt-timeout, covering every tool call and every provider retry underneath it. It defaults to 5 minutes; when it expires the prompt is abandoned, the run reports a timeout, and the partial answer is dropped from the conversation history. The deadline is now checked wherever a cancellation is, including at every round of the tool-calling loop, so a model looping over a set of tools is stopped at the next round whichever tools it chose. See Retries and timeouts. - PIVOT-14839 Chat: Added a guard on repeated tool calls,
atoti.ai.max-consecutive-identical-tool-calls. Past 3 rounds in a row asking for the same tool with the very same arguments, the call is no longer run: the model is told it was just made and returned the same result, and does something else instead. Round after round, an identical call makes no progress, and a prompt instructing the model to retry until it works previously repeated it for as long as the model kept asking, nothing in the tool-calling loop being able to stop it. Each call is counted on its own, so a round asking for several tools loses only the one the model is stuck on and still runs the others, though it is charged one tool error for the refusal; any round without that call starts a fresh run. See Retries and timeouts. - PIVOT-14839 Chat: Added a guard on failing tool calls,
atoti.ai.max-tool-errors. Once 5 tool calls have failed in one prompt, retries included, no further tool call is run: the model is told to stop and answer the user with what it has. Every failure counts, whether the tool ran in Atoti Server or in Atoti UI, and so does a round in which a call was refused, once for the round however many of its calls were refused. See Retries and timeouts. - PIVOT-14839 Chat: Added a guard on rounds that run no tool at all,
atoti.ai.max-consecutive-refused-rounds. Once 3 rounds in a row have run nothing, the run ends and the user is told the question could not be answered; any round that runs a tool starts the count over. Refusing a call answers the model, which may ask for it again, and Spring AI’s tool-calling loop has no iteration cap of its own, so nothing but the prompt deadline used to stop a model that would not take the refusal. See Retries and timeouts. - PIVOT-14839 Chat: The
atoti.ai.prompt-timeout,atoti.ai.max-retry-attempts,atoti.ai.max-consecutive-identical-tool-calls,atoti.ai.max-tool-errors,atoti.ai.max-consecutive-refused-roundsandatoti.ai.max-attemptsguard properties are validated at startup, so a value no prompt could work within stops the application from starting instead of surfacing on someone’s first question. - PIVOT-14839 Atoti Python SDK: Added the
atoti_ai.AiConfig.prompt_timeout,atoti_ai.AiConfig.max_consecutive_identical_tool_calls,atoti_ai.AiConfig.max_tool_errors,atoti_ai.AiConfig.max_consecutive_refused_rounds,atoti_ai.AiConfig.max_retry_attemptsandatoti_ai.AiConfig.max_attemptsattributes. - PIVOT-14924 Atoti Intelligence: AI server tool calls are now gated by a
read/writecapability, configurable withatoti.ai.tools.default-modeandatoti.ai.tools.capabilities. See Tool capabilities. - PIVOT-14915 Chat: Added a
createCalculatedMembertool, gated behind thewritecapability, the newatoti.ai.tools.experimentalswitch, and being named in the newatoti.ai.tools.extra-toolslist, all off by default. See Tool capabilities for how to enable it. - PIVOT-14916 Chat: Added a
deleteCalculatedMembertool, gated behind thewritecapability, theatoti.ai.tools.experimentalswitch, and being named in theatoti.ai.tools.extra-toolslist, all off by default. See Tool capabilities for how to enable it. - PIVOT-14917 Chat: Added an
updateCalculatedMembertool, gated behind thewritecapability, theatoti.ai.tools.experimentalswitch, and being named in theatoti.ai.tools.extra-toolslist, all off by default. See Tool capabilities for how to enable it. - PIVOT-14918 Chat: Added a
retrieveOneCalculatedMembertool, returning the full definition of one calculated member on a cube. See Tool capabilities for how to enable it.
Changed
- PIVOT-14547 Chat: The tools of the assistant now return their result directly, instead of wrapping it in an internal envelope that also carried an unused message for the model. The tool results streamed to Atoti UI and sent to the model are unchanged.
- PIVOT-14839 Chat: A client that stops listening now aborts the prompt running behind it, instead of the whole prompt being run again, tools included, with nobody left to read the answer.
Deprecated
- PIVOT-14244 MCP Server: The server-sent events transport is deprecated, following Spring AI 2.0.0, which deprecates it for removal in favour of Streamable HTTP. Use
POST /mcpeverywhere: it is what the starter configures by default, and what an MCP client expects. Connecting out to another MCP Server, and reporting the tools of connected servers, both require Streamable HTTP. See MCP transport. - PIVOT-14244 Atoti Intelligence: The
activeviam/ainamespace, which served both chat and Auto-Explain, is deprecated in favour of the one namespace per feature described above./activeviam/ai/rest/v2/chatand/activeviam/ai/rest/v2/autoexplainkeep answering exactly as before, and the namespace stays advertised on/versions, so existing applications and Atoti UI need no change. Both addresses are served by the same instances, so a conversation started on one is visible from the other. They will be removed in a future major release.
Fixed
- PIVOT-14569 Chat: A question the assistant answers with tools no longer takes several entries in the conversation memory. The memory keeps the question and the assistant’s answer, where it used to also record every tool call and tool result of that question, so the assistant now remembers about three times more of the conversation, and remembers it the same way whether dynamic tool discovery is on or off.
Security
6.1.24
2026-08-13Added
- PIVOT-14344 Chat: The assistant can now run a query that takes context values into account. It discovers which context values the cube accepts, along with the type of value each one takes, its description and the default the cube applies, and sets the ones it needs on the query. Those values tune that query only and are discarded once it completes. Context values holding access control data or expecting an internal payload cannot be set, and a value that does not match its declared type is rejected.
- PIVOT-14439 Chat: Dynamic tool discovery can now be turned off with
spring.ai.chat.client.tool-search-advisor.enabled=false, which sends the whole tool set to the model on every request instead. It stays enabled by default. See Configure Visualize This. - PIVOT-14439 Atoti Python SDK: Added the
AiConfig.dynamic_tool_discoveryattribute to turn dynamic tool discovery off. See Configure Visualize This.
Fixed
- PIVOT-14402 Atoti Intelligence: A license that does not enable the AI components is now reported at startup. When an Atoti AI module is on the classpath but the license misses the
ai-essentialscomponent, a warning explains that the/activeviam/aiREST service is not registered, which previously surfaced only in Atoti UI as “Unable to find the AI service on any of the servers”. Theai-extensioncomponent is reported the same way when the MCP Server starter is present. - PIVOT-14292 Atoti Intelligence: A license without the Ai Extension tier now keeps the MCP Server off even when the application sets
spring.ai.mcp.server.enabled=true. The tier check is applied at the highest property precedence, so it can no longer be overridden fromapplication.yml, an environment variable or a command-line argument. A license enablingai-extensionwithoutai-essentialsno longer starts the MCP Server either, as the Extension tier builds on Essentials. - PIVOT-14310 Chat: AG-UI streaming responses now carry
X-Accel-Buffering: noandCache-Control: no-cache, no-transformso that reverse proxies do not buffer or compress the event stream. A buffering proxy delivered the tool-call events to the browser only at the end of the run, so client tools always hit the server-side timeout. Client tool timeouts, stale tool results and retried chat prompts are now logged. See Monitoring.
6.1.23
2026-07-09Added
- PIVOT-14139 Visualize This: The chat assistant now uses the Tool Search Tool pattern for dynamic tool discovery. Instead of sending every available tool to the model at the start of a conversation, the model is offered a single synthetic search tool and retrieves only the relevant tools on demand. This reduces token consumption and improves tool-selection accuracy.
-
PIVOT-14122 Visualize This: Added a Python API for the chat assistant.
Session.chatexposes the chat configuration from the Atoti Python SDK, includingChat.system_promptto read and customize the system prompt directly from Python. See Set up Visualize This in Python. -
PYTHON-922 Auto-Explain: Added a Python API to configure Auto-Explain from the Atoti Python SDK.
Cube.auto_explainexposes the tuning constants, including drill-down depth, absolute and relative contribution thresholds, the variation threshold, entropy and member limits, and included or excluded hierarchies overall and per measure. See Set up Auto-Explain in Python.
Changed
- PYTHON-859 Auto-Explain: Root-cause analysis (root-cause members, contribution percentages, and contribution tables) no longer requires an LLM and is always available without an AI provider configured. An LLM is now only required for the optional AI summary. When no LLM is configured, the AI summary is unavailable. See Set up Auto-Explain in Java or in Python.
Fixed
- PIVOT-14236 Chat: Fixed filters being added without their members. Member validation now resolves members by their full name path, so the assistant reliably finds them in the cube.
-
PIVOT-14139 Visualize This: Added a dependency on the Spring AI Community
tool-search-toollibrary (org.springaicommunity:tool-search-tool). On the Spring AI 1.1.x line, the Tool Search Tool advisor is not part of the core Spring AI release (it ships in Spring AI core from 2.0 onwards), so this community artifact is required to enable the feature.
6.1.22
2026-06-18 No changes were made since the last release.6.1.21
2026-06-17 No changes were made since the last release.6.1.20
2026-05-29Added
- PIVOT-12824 Auto-Explain: Added observability instrumentation. Auto-Explain now emits OpenTelemetry spans and metrics that cover request handling, recursive analysis and summary generation. See Monitoring.
- PIVOT-12824 Visualize This: Added observability instrumentation. The chat assistant now emits OpenTelemetry spans and metrics that cover conversation lifecycle, prompt execution and tool invocations. See Monitoring.
- PIVOT-12996 Auto-Explain: Exposed Auto-Explain as a Spring AI tool so it can be invoked from Visualize This as part of a chat conversation.
- PIVOT-13680 Visualize This: AI cube descriptions now expose XMLA properties, and dimension, hierarchy and level descriptions are nested under their parent to give the model a structured view of the cube. See How to configure Visualize This.
- PIVOT-13832 Added a customizable AI disclaimer that is returned with every AI response and displayed in the UI. A default disclaimer is provided when none is configured. See Set up a custom disclaimer in Java or in Python.
- PIVOT-13978 MCP Server: Added an MCP credentials page in
starter-ai-mcp-serverthat lets users mint and download tokens to connect MCP clients to the Atoti MCP Server. See MCP credentials page. - PIVOT-13970 MCP Server: Added self-issued OAuth 2.1 mode, where the Atoti server acts as its own authorization server.
MCP clients (Claude Code, Claude Desktop, Cursor, …) drive the browser-based PKCE flow against Atoti and users sign
in with their existing Atoti credentials, with no external identity provider required. The browser PKCE flow includes a
user consent page that requests approval before issuing an authorization code; the consent step can be disabled via
atoti.server.endpoint.mcp.oauth2.authserver.consent.enabled. See Configure self-issued OAuth 2.1.
Changed
- Upgraded Spring AI to 1.1.6.
- PIVOT-13970 MCP Server: The
starter-ai-mcp-servernow defaults the MCP transport to Streamable HTTP (spring.ai.mcp.server.protocol=STREAMABLE, served atPOST /mcp) instead of the previous Server-Sent Events transport. If you rely on the SSE transport, restore it explicitly withspring.ai.mcp.server.protocol: SSE. - PIVOT-12494 AI license: When the license does not include the AI feature, Atoti now logs an informational message instead of throwing, so applications can start without AI features enabled.
- PYTHON-826 Atoti Python SDK:
SessionConfignow handles AI properties, allowing AI connection and chat options to be configured directly from Python.
Removed
- PIVOT-13932 Chat: Removed the legacy Chat v1 REST API and its associated payload types. Use the v2 streamable HTTP API instead.
6.1.19
2026-04-16Added
- Visualize This: The chat assistant now exposes the AI’s reasoning process in real time. When the model reasons through a request before responding, the reasoning steps appear in the chat interface, giving visibility into how the assistant arrived at its answer.
Changed
- PIVOT-13553 Visualize This: Renamed the Spring Boot starter from
starter-ai-visualize-thistostarter-ai-chat. See How to set up Visualize This in Java for the updated dependency. - PIVOT-13674 Visualize This: Possibility to add system prompt. See How to configure Visualize This
- PIVOT-13800 Auto-Explain: Updated the YAML configuration. See How to configure Auto-Explain for the updated configuration format.