Atoti Intelligence SDK
This is part of the Atoti Intelligence SDK offer.To set up the MCP Server, see How to set up the Atoti MCP Server in Java or
How to set up the Atoti MCP Server in Python. For what the MCP Server is and why
to use it, see What is the Atoti MCP Server?.The Atoti MCP Server requires the Atoti Intelligence Extension tier, which itself requires
Essentials.
Where is the MCP endpoint?
On a Java application, the MCP Server answersPOST /mcp. On a session started from the Atoti
Python SDK, it answers f"{session.url}/mcp". Both speak the Streamable HTTP transport.
Spring AI’s own default transport is the older server-sent events transport, SSE. Atoti overrides
that default: a property contributed at the lowest precedence sets
spring.ai.mcp.server.protocol=STREAMABLE. An application that sets the property itself always wins
over it.
The server-sent events transport at /sse is deprecated for removal in Spring AI 2.0.0. Prefer
/mcp everywhere.
Which license tier does the MCP Server require?
The Atoti MCP Server requires a license including the Atoti Intelligence Extension tier, which itself requires Essentials. The Extension tier gates the whole MCP surface:- The MCP Server itself
- Its OAuth 2.1 discovery and self-issued authorization-server modes
- The credentials page
- Connecting out to other MCP Servers
What happens when the license does not include the Extension tier?
When the license lacks the Extension tier, Atoti forcesspring.ai.mcp.server.enabled=false at the
highest property precedence. The property cannot be overridden, even when set to true the forced value false wins. A warning is logged naming the ai-extension license component.
A license without Essentials does not start the server.
How does an MCP client authenticate?
The MCP endpoint and the deprecated/sse endpoint sit behind their own security filter chain. It
requires an authenticated user holding a user or admin role. Each SDK implements this separately.
- On a Java application: the required roles are the combined set of configured admin roles and user roles.
-
On a session started from the Atoti Python SDK, the required roles are
ROLE_USERorROLE_ADMIN.
OPTIONS requests are permitted without authentication, for CORS preflight.
The accepted credentials are the ones Atoti’s machine-to-machine security allows everywhere: HTTP
Basic, and a bearer JWT.
An unauthenticated request is answered 401 Unauthorized. When OAuth 2.1 discovery is enabled, that
response additionally carries WWW-Authenticate: Bearer realm="mcp", resource_metadata="...". A
compliant MCP client reads that header to discover the authorization server. It then drives the
browser PKCE flow with no manual token handling. See
Configure OAuth 2.1 discovery and
Configure self-issued OAuth 2.1 for the two modes.
The opt-in MCP credentials page is the alternative to embedding a
password in a client configuration. A signed-in user mints a long-lived bearer token once, then
pastes it into the client.
Which tools does the MCP Server expose?
The MCP Server exposes the same built-in cube tools that chat and Auto-Explain use internally:- Discovery tools, for cube names, dimensions, hierarchies, levels, members, measures, and KPIs
- Validation tools, for checking that a measure, level, hierarchy, or dimension exists
- MDX query tools, including
runMdxQueryandgetAvailableCubeNames - Auto-Explain tools, for running an analysis, listing analyses that already ran, and dropping one
- A single Atoti Server can show an external client the tools of a whole deployment.
- Each client is told only what its own credential can reach. See How connecting to other MCP Servers works.
getConnectedServers is registered for chat only, never on the MCP
endpoint. It puts deployment-internal addresses into the prompt.
No LLM is required to expose or call these tools. An LLM is only required for chat.
What does each SDK decide?
Server set up follows the same pattern for both Java and Python set up:- Install a package
- Supply minimal or no configuration
- The server is available.