Skip to main content

Atoti Intelligence SDK

This is part of the Atoti Intelligence SDK offer.
The Model Context Protocol (MCP) Server is a lightweight service that exposes Atoti’s analytical capabilities to external Large Language Model (LLM) clients.
  • It acts as a bridge between an Atoti data model and AI tools
  • It enables dynamic, context-aware interactions

What does the MCP Server provide?

The MCP Server provides the following capabilities:
  • Query Atoti cubes, hierarchies, and measures through an LLM client
  • Call custom tools that encapsulate business-specific logic
  • Connect to any MCP-compatible LLM client, such as Claude Desktop
  • Use the tools of other MCP Servers as Atoti’s own

Why use the Atoti MCP Server?

  • Use Atoti’s analytical capabilities from external AI tools without modifying the Atoti application
  • No vendor lock-in: works with any MCP-compatible LLM client
  • Standardized protocol eliminates the need for custom integration code
For more information on Model Context Protocol, see the Model Context Protocol documentation.

Can Atoti connect to other MCP Servers?

Atoti Server is not only an MCP Server: it can also be an MCP client. It connects out to other MCP Servers. This is typically the other Atoti Servers of the same deployment.
  • Each server exposes its own cube.
  • Each cube uses their tools as its own, in chat and on its own MCP endpoint.
  • Every call runs under the identity of the user who triggered it. This means that the other cube’s role-based restrictions stay in force.
See How connecting to other MCP Servers works.

What are the best practices for MCP configuration?

When an Atoti deployment runs several Atoti Servers, each server exposes its own cubes. Two rules cover most deployments:
  1. Serve chat from one application
  2. Connect every other server to that application over MCP
The main application:
  • Holds the only LLM configuration for the deployment.
  • Answers every cube in one conversation.
The other applications do not serve chat. They keep their cubes, their own MCP endpoint and Auto-Explain.

How to configure chat across a deployment

Every application serves chat by default. For now, configure a deployment so that only one of them does:
  1. Pick the application that users send their prompts to, called the main application below.
  2. Turn chat off on every other application of the deployment.
  3. Declare, on the main application, one MCP connection per other application.
In the Atoti Java SDK, turn chat off with atoti.ai.chat.enabled, available from Atoti Server 6.2.1. Add the following to application.yaml:
In the Atoti Python SDK, set AiConfig.chat_enabled to False when starting the session:
This setting results in the following behavior:
  • The /chat endpoint is not registered.
  • The /versions endpoint stops advertising the activeviam/ai/chat namespace.
  • Auto-Explain and the MCP Server are unaffected
  • The cube tools stay available to the main application.
See How to turn Visualize This off for the full behavior of the setting.
This is the recommendation for Atoti Server 6.2.1. A later release may serve chat from several applications of one deployment. An application serving no chat still needs an LLM to produce the optional Auto-Explain AI summary.

How to connect to an external MCP Server

The practices below apply to every outbound connection, toward another Atoti Server as well as toward a third-party MCP Server. Connecting out requires a license including the Atoti Intelligence Extension tier, which itself requires Essentials.
  • Connect to every server directly. Tools do not chain from one connection to the next: a server asked by another aggregating server answers with its own tools alone. Connecting to a peer never brings in the servers that peer is itself connected to.
  • Use Streamable HTTP. Declare every connection under spring.ai.mcp.client.streamable-http.connections. It is the only transport supported for an outbound connection.
  • Match the authentication mode to the remote server. Use atoti-jwt for another application of the same deployment, sharing the same atoti.jwt.key signing key. Use pass-through for a server validating tokens against an external identity provider. Leave the default none only for a genuinely unauthenticated server, such as a local development server.
  • Name the connection after the server. The name prefixes every tool taken from it, and the model reads it. Keep it to 53 characters or fewer, and keep names distinct after normalization: pnl-server and pnl_server collide, and the application refuses to start.
  • Vet a server run as a local process. Such a server runs on the machine hosting the application, with that process’s rights. Declare only commands the deployment controls.
  • Plan no failover. An unreachable server costs only its own tools, and the failure is not cached. Every other server keeps answering, and the tools reappear on the next answered request.
Choose atoti-jwt only for servers under the same ownership. The minted token is accepted by every server sharing the deployment’s signing key, in the name of a real user.
The getConnectedServers chat tool reports the address of every connected server, so those addresses reach the model provider. Atoti registers the tool for chat only, never on the MCP endpoint. An application that must keep its internal addresses out of the prompt can exclude the connectedServersTools bean; see Connect to other MCP Servers in Java. For what a connection provides once declared, see How connecting to other MCP Servers works. To declare one, see Connect to other MCP Servers in Java or in Python.