How access is decided
Two things must both be true for someone to reach the admin UI:- Their provider authenticates them
- Their verified email matches your allowlist
OAUTH_ALLOWED_DOMAINS— comma-separated domains, admitting anyone with an address at themOAUTH_ALLOWED_EMAILS— comma-separated individual addresses
Create a provider application
Pick the provider you want to sign in with. Configuring both is fine — operators then choose at the sign-in screen.- Google
- Microsoft
Google has 2 provider specific environment variables, both retrievable in the Create the OAuth Client step:
GOOGLE_OAUTH_CLIENT_IDGOOGLE_OAUTH_CLIENT_SECRET
1
Create a Google Cloud project
In the Google Cloud console, open the project picker in the top bar and choose New Project. Name it something recognizable, such as
ai-implement-sso.If your company has Google Workspace, set the parent organization so the project is governed by it. No billing is required for what follows.2
Configure the consent screen
Find Google Auth Platform and click Get started. A fresh project shows nothing else until this wizard is finished.Work through its four steps:
- App information — an app name and a user support email.
- Audience — choose External.
- Contact information — an email for Google’s notices.
- Finish — accept the user-data policy and click Create.
Internal restricts sign-in to addresses in your Workspace domain, which locks out any operator who doesn’t have one.External lets your allowlist be the gate instead, which is where you want that decision made.
3
Publish the consent screen
On the Audience page, click Publish app to move the consent screen from testing to production.The three scopes this app requests are non-sensitive (
openid, email, profile), so Google requires no verification and the publish takes effect immediately.Publishing clears two limits that testing mode imposes:- The 100-account cap on who can authenticate
- The “unverified app” interstitial shown at sign-in
OAUTH_ALLOWED_EMAILS / OAUTH_ALLOWED_DOMAINS) stays the real access gate. Publishing widens who Google will authenticate, but the orchestrator still admits only allowlisted addresses, fail-closed — so it does not weaken access control.4
Declare the scopes
On the Data Access page, click Add or remove scopes and select the three the orchestrator requests:
openid.../auth/userinfo.email.../auth/userinfo.profile
5
Create the OAuth client
On the Clients page, click Create client and choose application type Web application. Give it an internal name — this one isn’t shown to operators.Under Authorized redirect URIs, add two entries per orchestrator — one for admin sign-in and one for the MCP client flow:Leave Authorized JavaScript origins empty. The orchestrator exchanges the authorization code server-side, so that field is unused.Create the client, then copy the Client ID and Client secret into
GOOGLE_OAUTH_CLIENT_ID and GOOGLE_OAUTH_CLIENT_SECRET.Wire the orchestrator
Alongside the provider credentials above, every orchestrator needs the callback base URL and the allowlist:The shared access code
ADMIN_ACCESS_CODE still works and is the right choice for local development, but it is deprecated for deployed orchestrators — it identifies nobody and cannot be revoked for one person.
The admin UI is enabled when the access code or any sign-in provider is configured, so you can leave the code in place while operators move across, then remove it.
What’s next
Environment variables
Every sign-in variable, with its accepted values and defaults.
Admin UI reference
What each panel in the admin UI does once you’re signed in.