Skip to main content

Atoti Intelligence SDK

This is part of the Atoti Intelligence SDK offer.
This guide explains how to connect an Atoti session started from Python to other Model Context Protocol (MCP) servers, so that it uses their tools as its own. For what a connection then provides (the authentication modes, identity propagation, remote tool naming, getConnectedServers, and resilience), see How connecting to other MCP Servers works.

Prerequisites

  • An Atoti Python project
  • A license including the Atoti Intelligence Extension tier, which itself requires Essentials

How to install the package

How to declare a connection

Pass an AiConfig with an mcp attribute to SessionConfig when starting the session. The mcp attribute takes a McpClientConfig, mapping the name the session gives a server to that server’s own configuration. Use StreamableHttpMcpServerConfig for a server reached over Streamable HTTP, and StdioMcpServerConfig for one run as a local process. Below, pnl-server is an Atoti Server reached over HTTP, authenticated with a token minted for the calling user. filesystem is a local MCP Server started as a stdio process:

StreamableHttpMcpServerConfig parameters

See Which authentication modes are available? for what each authentication value sends and when to choose it.

StdioMcpServerConfig parameters

A server declared with StdioMcpServerConfig runs as a local process and identifies itself by being that process. It accepts no authentication parameter.

Which server names are invalid?

A server name cannot be empty and cannot contain a ., which would read as a separator between configuration keys. Building the configuration refuses such a name. The name also prefixes every tool taken from that server, after normalization. Two names normalizing to the same prefix make the session refuse to start. See How are remote tools named? for the normalization rule and the 64-character limit on tool names.

Where do remote tools appear?

They are offered to the LLM in chat, alongside the session’s own tools. They are also reported on the session’s own MCP endpoint at f"{session.url}/mcp", per calling client. No LLM is required for that: an LLM is only required for chat.

How to authenticate with atoti-jwt

Both sessions must share a JWT signing key. From Python, pass the same atoti.KeyPair to both: tt.SessionConfig(security=tt.SecurityConfig(jwt=tt.JwtConfig(key_pair=key_pair))). Against a Java Atoti Server, that server’s atoti.jwt.key property must match the same key pair; see Connect to other MCP Servers in Java.
Declaring a server states where it is, never that it belongs to this deployment. atoti-jwt mints a token accepted by every server sharing the deployment’s signing key. Choose it only for servers under the same ownership.