Activation required. AI access management must be enabled for your tenant before you can use it. To get started, contact the C1 support team for a walkthrough.
What you’ll do
Setup spans two products. Some stages depend on someone other than you, so line those up before you start.Before you begin
Confirm all of these before you start. The organization policy change in particular can take time to arrange.- AI access management must be enabled for your tenant. See Enable AI access management.
- The users who will use Gemini Enterprise need C1 tool access already. Their access profiles determine which tools they can call, and a user with no toolset sees no tools at all. See Tools and toolsets.
- A Google Cloud project with a Gemini Enterprise app already created. In the console, open Gemini Enterprise and select Create app, or see Google’s Create a Gemini Enterprise app documentation. There is a command-line alternative in Enable the Google Cloud APIs.
- A Gemini Enterprise subscription with licenses available to assign. A new app starts with no users licensed. The identity provider must be set before you create the data store, and licenses must be assigned before tool discovery will work. Both are in Prepare Gemini Enterprise.
- Someone who holds
roles/orgpolicy.policyAdminat the organization level. Project Owner does not include it, and a project-level grant is not sufficient for the policy change below. - Optional. The gcloud CLI, authenticated with
gcloud auth login, if you prefer the command line for the Google Cloud steps.
Collect the values you’ll reuse
The steps below reuse these values. Collect them once.The commands in this guide use
global, which is what most setups run. If your app is in a different location, substitute it everywhere locations/global appears.Required roles
Grant these on the Google Cloud project, except where noted.
To check what you already hold on the project:
Enable the Google Cloud APIs
Enable both. In the console, go to APIs & Services > Library, search for the API by the name in the first column, and select Enable. The service ID is the identifier you use with thegcloud CLI.
The Cloud Storage API is enabled on new projects by default, so hosting the client metadata document needs no extra API.
Google’s setup documentation for custom MCP servers does not list any APIs, so this list was established by testing, and it is deliberately short. The Connectors, Application Integration, Secret Manager, and IAM APIs are not required. With all four disabled, creating the data connector, authorizing it, discovering tools, calling them, and running the role commands above all succeed.
Create the Gemini Enterprise app from the command line
Create the Gemini Enterprise app from the command line
If you do not already have an app, create one after the APIs are enabled. There is no An app created this way has no subscription attached. Add one under Manage users in the console before you assign licenses.
gcloud surface for this, so call the API directly:Allow custom MCP data connectors
Google Cloud blocks custom MCP data connectors by default through theconstraints/discoveryengine.managed.disableCustomMcpServerConnector organization policy. Turn it off for this project before you create the data store.
If the policy is enforced, creating the data store fails at the final step with:
roles/orgpolicy.policyAdmin, which project Owner does not include.
1
In the Google Cloud console, go to IAM & Admin > Organization policies.
2
Filter for
discoveryengine.managed.disableCustomMcpServerConnector and open it.3
Select Manage policy.
4
Select Override parent’s policy, then set the enforcement to Off.
5
Select Set policy.
policy.yaml:
describe command above. The effective policy reports enforce: false, and your project can create custom MCP data connectors.
Organization policy changes take a minute or two to take effect. Until then the console returns the same denial message, so a failure immediately after you apply the policy does not mean the policy is wrong.
If your organization restricts outbound hostnames
If your organization restricts outbound hostnames
Some organizations enforce If the constraint has never been set, this command returns
constraints/discoveryengine.managed.allowedEgressFqdns, which limits the hosts a data connector may reach. It applies only to projects with VPC Service Controls enabled, or to projects your organization has added to the constraint’s enforced list, so most setups never meet it. Check it with:NOT_FOUND: Requested entity was not found. That is the healthy answer and means nothing is restricting egress.If it does apply, allow the two hostnames your tenant uses. Use hostnames only, not full URLs. This is a boolean constraint that takes parameters, not a list of allowed values. Save this as egress.yaml and apply it with gcloud org-policies set-policy egress.yaml, keeping any hostnames your organization already allows:Prepare Gemini Enterprise
A new Gemini Enterprise app has neither of these, and both are needed. The identity provider blocks the data store form itself, with Create greyed out. Licenses do not block that form, but tool discovery fails later without them.Set the identity provider
Gemini Enterprise needs an identity provider selected for the location your app runs in. Until one is set, creating a data connector fails with You must configure your access control settings before you continue.1
In the Google Cloud console, open Gemini Enterprise.
2
Select Settings, then the Authentication tab.
3
Find the row for your app’s location, such as
global, and select the edit icon.4
Choose Google Identity if your users sign in with Google Workspace accounts, or 3rd Party Identity if you federate through a workforce identity pool.
5
Select Save.
"idpType": "GSUITE" once it is set.
This page reports You don’t have permissions to fetch Workforce Pools unless you hold a role that can read workforce pools at the organization level. The message is harmless if you are choosing Google Identity, which does not use them.
Assign Gemini Enterprise licenses
A new Gemini Enterprise app has a subscription but no licensed users, and the users list reads No existing users. Assign a license to yourself and to everyone who will use the connector.1
Open Gemini Enterprise.
2
Select Manage users.
3
Confirm a subscription is listed and Active, and note how many licenses are unassigned.
4
Select Add users.
5
Enter the email addresses, choose the subscription, and select Submit.
name ends in the subscription ID, such as free_trial_gemini. Then assign it, using your project number inside licenseConfig:
Get the OAuth client ID
Gemini Enterprise authenticates each user to C1 with the OAuth 2.0 authorization code flow, and it needs an OAuth client that already exists. It does not register one itself, and it does not publish a client identity you can point at. C1 does not hand out an opaque client ID from a registration form. Instead, the client ID is a URL: it points at a small public JSON file describing the client, called a Client ID Metadata Document. C1 fetches that URL to learn who the client is, which means someone has to host the document. Google is the party that should host it, since Gemini Enterprise is the client it describes. Today it does not, and Google’s own instructions are to register the MCP server as an OAuth client with your identity provider and take a client ID from it. Until Google publishes a document, somebody else has to host one on Google’s behalf.Host the document yourself for now. The C1-hosted document has not shipped, so every tenant returns a
404 from that URL, and it is a stopgap rather than the end state: a client identity carries the most weight when the client’s own vendor publishes it. Contact the C1 support team for timing.When Google publishes a client metadata document for Gemini Enterprise, use that URL as the client ID and retire whatever you were hosting.Host the client metadata document yourself
Publish this JSON at any public HTTPS URL you control. Two fields are unforgiving:client_id must exactly equal the URL the document is served from, and redirect_uris must contain Google’s redirect endpoint verbatim.
Save the file as gemini-enterprise-oauth-client.json. The Cloud Storage commands below serve it at https://storage.googleapis.com/YOUR_BUCKET/gemini-enterprise-oauth-client.json, so set client_id to exactly that, with your own bucket name:
YOUR_BUCKET with a bucket name you choose, which must be globally unique across all of Cloud Storage:
client_id matches the URL you requested:
If an organization policy blocks the public binding
If an organization policy blocks the public binding
The two constraints below are separate from the constraint in Allow custom MCP data connectors, and both need The constraint does not accept Public access prevention. If Check the effective value of either constraint with:
roles/orgpolicy.policyAdmin. To change either in the console, use the same IAM & Admin > Organization policies flow described there, searching for the constraint name below instead.Domain restricted sharing. If constraints/iam.allowedPolicyMemberDomains is enforced, granting allUsers fails with:allUsers as an allowed value, so the override has to permit all values. Save this as drs.yaml and apply it with gcloud org-policies set-policy drs.yaml:constraints/storage.publicAccessPrevention is enforced, the binding is refused regardless of the constraint above. Save this as pap.yaml and apply it with gcloud org-policies set-policy pap.yaml:Organization policy changes take a minute or two to take effect, in both directions. After you apply the override, the binding can still fail with the same
412 for a short while, and describe --effective may report the new value before enforcement catches up. Retry the binding rather than assuming the override is wrong, and confirm success by fetching the document URL.Create the data store
Connect the C1 MCP gateway to your Gemini Enterprise app.Creating the connector is the one step you cannot script. The public Discovery Engine API refuses it:It accepts only a pre-obtained access token, not the OAuth client configuration, so it cannot run the per-user authorization this integration depends on. Discovering the tool list is console-only too, because the method behind Reload custom actions is not on the public endpoint. Choosing which actions are enabled, however, can be scripted once the tools are discovered. See Enable the actions.
Use the Custom MCP Server card, not a server imported from Agent Registry. A connector created from a registry import fails tool discovery with
Failed to reload custom actions and a FAILED_PRECONDITION error, while an otherwise identical connector created from the Custom MCP Server card completes normally.Finish Prepare Gemini Enterprise before you open this form. If you leave the wizard partway through to set the identity provider, you return to a partially reset form and it is easy to submit it incomplete.
1
In the Google Cloud console, open Gemini Enterprise.
2
Select your app.
3
Select Connected data stores, then select New data store.
4
In Select a data source, search for
Custom MCP.5
On the Custom MCP Server card, select Add MCP server.
6
Under Authentication settings, choose OAuth 2.0.
7
Complete the fields. The third column is where this form most often goes wrong.
8
Select Verify Auth. A window opens for you to sign in through your identity provider and authorize the connection.
9
Select Continue.
10
Enter your Data connector name, then select Continue.Leave Location as it is, and leave Sensitive data protection policy empty unless your organization requires one.
11
Select Create.Some versions of the console add a Select the pricing model step first. If you see it, leave General pricing selected unless your organization has chosen a subscription, then select Create.
Sign in to the web app
Do this before you reload the actions. Tool discovery runs as the signed-in user, and it fails if that user has never opened the Gemini Enterprise web app. The console gives no hint that this is the cause: Reload custom actions simply reports Failed to reload custom actions.This is the step most often missed, because nothing in the admin console mentions it and nothing about the connector looks wrong. The connector reads Active, every setting is correct, and discovery still fails until a licensed user has signed in once.Signing in through Verify Auth while creating the connector does not count. That authorizes the connector; this is a separate sign-in to the web app itself.
1
In the Google Cloud console, open Gemini Enterprise.
2
Select your app, then open Overview.
3
Copy the web app URL shown there. It looks like
https://vertexaisearch.cloud.google.com/home/cid/<id>.4
Open that URL as a licensed user and select Get started on the welcome panel.
lastLoginTime is present:
lastLoginTime has never opened the web app, and tool discovery will fail for them.
Enable the actions
Gemini Enterprise calls MCP tools actions, and imports every one of them turned off. Enable them on the data connector, not on the app’s Actions page, which only redirects you here. Turn on only the actions your users need: a data store supports a maximum of 100 enabled actions, and a shorter list makes the agent’s tool selection more accurate.Wait for the connector state to reach Active before you start. The reload fails while the connector is still creating.Reload custom actions takes about 30 seconds. Gemini Enterprise calls your MCP server for its tool list and holds the request open while it waits. The table stays empty until it finishes, which looks like a silent failure if you navigate away early. Wait for the Custom actions reloaded confirmation.
1
Open the data store, then select the Actions tab.
2
Select Reload custom actions. Gemini Enterprise queries your MCP server for its current tool list.
3
Select the actions to expose.
4
Select Enable actions.
Set the enabled actions from the command line
Once the tools are discovered, the enabled set is an ordinary field you can write, which is easier to keep consistent across environments than clicking through the table. Read the current list first:dynamicTools holds every discovered tool and bapConfig.enabledActions holds the enabled ones. Write a new set with a PATCH, sending the complete list, since it replaces rather than merges:
Reach every tool without spending your action budget
The C1 gateway publishes far more tools than the 100 a data store can enable. Rather than choosing a hundred of them, enable the twelve tools above. They let the agent find and run any tool your access profiles allow:
Add whichever named C1 actions your users ask for by name on top of those, and the rest stay reachable through
search_tools.
The enabled set still only decides what is offered. Every call is evaluated against the calling user’s access profiles, so this changes what the agent can find, never what a person is allowed to do.
Verify the Gemini Enterprise connection
Seeing actions listed does not confirm your credentials work. You confirm the setup only when a user successfully calls a C1 tool.1
Open your Gemini Enterprise web app as an end user who has C1 tool access.
2
In the message box, select the Connectors icon. Your connector is listed with an Authorize link beside it.
3
Select Authorize, sign in through your identity provider, and approve. The connector then shows a toggle, switched on.
Every user does this once, for themselves. Enabling actions as an administrator authorizes nobody. Until a user authorizes here, the assistant answers that it has no C1 integration, even though the actions are enabled and the connector is Active.
4
Ask a question that needs a C1 tool, naming the connector, such as “Using the C1 connector, list the access reviews in C1.”
5
The assistant names the action it wants to call and waits. Select Send to confirm it.
6
In C1, go to AI > C1 Gateway and select the AI clients tab. Gemini Enterprise is listed with a registration type of CIMD, and People connected counts the users who have authorized it. The AI connections tab shows one row per user. Users can see their own connections under their profile menu at AI & API > AI connections.
The Verified column shows the domain that serves your client metadata document, so a self-hosted document reads
storage.googleapis.com rather than a Google domain. That is expected while you host the document yourself.7
Confirm the tool call was logged. Every call through C1 MCP records the end user, the tool, the result, and a denial reason when refused. See Audit AI tool usage.
Troubleshoot Gemini Enterprise connection errors
To correct an authentication value, edit the existing connector’s settings rather than recreating it. The connector name cannot be changed after creation, as noted in Create the data store, so changing it means creating a new data store and removing the old one.
What this integration cannot do
These constraints come from Gemini Enterprise and Google Cloud.- VPC Service Controls and Private Service Connect are not supported for custom MCP data stores. If your Google Cloud perimeter requires either, this integration cannot run inside it.
- Gemini Enterprise supports egress mode only. It calls out to your MCP server; your MCP server cannot call in.
- A data store supports a maximum of 100 enabled actions.
Frequently asked questions about connecting Gemini Enterprise
Why does the Client Secret not matter?
Why does the Client Secret not matter?
The client is a public OAuth client with no secret. Client ID Metadata Document clients cannot use shared secrets, so C1 never reads the field. Security comes from the authorization code flow with PKCE, which you turn on with Enable PKCE Support.
Do I need Agent Gateway or Agent Registry?
Do I need Agent Gateway or Agent Registry?
No, and this was tested rather than taken on trust. A working connector reports
use_agent_gateway_egress: false, so its traffic never passes through Agent Gateway, and a setup built with no gateway and no registry discovers tools and serves live tool calls normally. C1 governs the tool calls.Agent Registry is a catalog of approved MCP servers. Listing the C1 gateway there is a separate exercise that changes nothing about this integration. If you do list it, still create your data connector from the Custom MCP Server card: a connector imported from the registry fails tool discovery.How do I cut off access in a hurry?
How do I cut off access in a hurry?
In C1, open AI > C1 Gateway, select the AI clients tab, find the Gemini Enterprise client, and use its kill switch. It revokes all tokens for that client immediately, for every user. To cut off one person instead, use Revoke on their row in the AI connections tab. See Manage AI clients.
Can I see what tools Gemini Enterprise called?
Can I see what tools Gemini Enterprise called?
Yes. Every tool call through C1 MCP is logged with the end user, the tool, the result, and a denial reason when refused. See Audit AI tool usage.
Pages related to governing AI tool access
These pages cover the C1 side of the integration.- Tools and toolsets covers the access profiles that decide which tools each user can call.
- Manage AI clients covers lifecycle states, the kill switch, and allowed client types.
- Connect to the C1 MCP covers the same gateway from desktop AI assistants.
- Audit AI tool usage covers what C1 logs for every tool call.