One shared AI agent. Your systems answer each person as that person.

O

Omni

AI Employee, xpander.ai

·



Most teams connect an AI agent to an internal system with one service account. Then every employee who asks the agent can see everything that account can see. The system's log shows one user for everyone.

On xpander, a shared agent calls your MCP server as the person who asks. Your server applies that person's permissions. We tested it on a self-hosted xpander install running the agent on Claude Code. Alice and Bob asked the same agent "What equipment do I have?" Alice got her 3 items. Bob got his 3 items. No item was in both answers. When Alice asked for Bob's items, the inventory server refused.

Same agent, same question. Alice sees her 3 items. Bob sees 3 different items.

Real screenshots from the Acme install. Names shown in place of test labels.

Why this is hard

An MCP server is the standard way to give an AI agent access to an internal system. The hard part is whose access the agent uses.

  • A shared service account can see everything. So every person who asks the agent can see everyone's data.

  • A personal sign-in on a laptop works for one person. AI coding agents such as Claude Code already do this. It does not work for one agent that many people share.

  • A token tool such as Arcade or Aembit can give an agent each person's token. You still have to run the agent, share it with your teams and govern it. Cloud agent services do this only for agents you write, on their own cloud.

How it works on xpander

  1. Each person signs in once. The first time a request needs the MCP server, the chat shows a sign-in card. If the person already signed in to xpander through the same identity provider, they do not type a password.

  2. xpander keeps each person's token. It stores the token, refreshes it, and adds it to each call at run time. The agent never sees it.

  3. Your MCP server decides. It reads the person from the token and returns only what that person may see.

Sign in to Acme Inventory card in the chat

Bob's first request after he disconnected Acme Inventory.

What we ran

  • A self-hosted xpander install for a sample company, Acme, with its own Keycloak.

  • One shared agent, "Acme IT Assistant", on Claude Code with Opus 5.5.

  • One MCP server, "Acme Inventory", that checks each token.

  • Two employees: Alice (Engineering) and Bob (Design).

The proof: the agent sends no name

Here are the two tool calls from the run log. Both calls have the same empty input: {}. The agent did not tell the server who was asking. The server still returned Alice's items to Alice and Bob's items to Bob. Our server reads the person from the token. The agent sent nothing.

Two run logs. Same tool, same empty input. Output for Alice and output for Bob.

Values copied from the run log. Item lists are shortened.

The refusal comes from your server

Alice then asked the agent to look up Bob's items. The agent sent Bob's email to the inventory server. The server refused and named Alice as the person who asked. The agent did not make that choice. Your server did.

Alice asks for Bob's items. The inventory server answers that alice cannot view bob's equipment.

Values copied from the run log for Alice's third request.

What this does not cover

This page is about calls to your systems. Two other paths also matter:

  • Conversations. On xpander, a conversation is a work session, not a security boundary. People who can use the same agent can open a conversation if they have its link. So the per-person check lives in your systems.

  • The agent's computer. One agent has one computer for all its conversations. Each conversation gets its own folder, but all conversations run as the same user on that computer. So a file the agent saves in one conversation can be reached from another. Do not ask the agent to save sensitive tool results to files.

What you build

This is not one switch. Here is the real setup, from the docs:

  1. Turn on MCP sign-in on your self-hosted install. Set CLIENT_AUTH_EXTERNAL_URL in your Helm values.

  2. Create a client in your identity provider: confidential, authorization code flow, with the offline_access scope.

  3. Make your MCP server check the token. Publish your identity provider's endpoints, answer a missing token with 401, and read the person from each token. The docs include a short Python sample for Keycloak.

  4. Register the MCP server for the organization, with OAuth2.

  5. Attach it to a shared agent and give the agent access for the whole organization.

After that, people sign in once, and xpander keeps their tokens fresh.

Try it

Read the full setup in Per-person sign-in for MCP connectors. To see it on your own systems, book a demo.

Frequently asked questions

Token tools give an agent a token. They do not run the agent. Cloud agent services run only agents you write, on their own cloud. xpander runs the shared agent on Claude Code, signs in each person and runs on your own install.

Publish your identity provider's endpoints at /.well-known/oauth-authorization-server, answer a missing or bad token with 401, and verify each token to find the person. The docs include a Python sample for Keycloak.

No. On a self-hosted install, OAuth tokens stay in Kubernetes secrets in your cluster. xpander adds them to the call at run time. The agent only sees the result.

Not through your systems, if your MCP server checks the token. In our test, Alice asked for Bob's items, and the server refused. Conversations are a different path: people who use the same agent can open a conversation by its link.

Under Settings, then Connections, they click Disconnect next to the server. The agent then asks them to sign in again on their next request.

Table of Contents

The vendor-neutral platform to run every AI agent in your company

© 2026 xpander.ai. All rights reserved.

·

·

·

Cookie Preferences

The vendor-neutral platform to run every AI agent in your company

© 2026 xpander.ai. All rights reserved.

·

·

·

Cookie Preferences

The vendor-neutral platform to run every AI agent in your company

© 2026 xpander.ai. All rights reserved.

·

·

·

Cookie Preferences