# Publish an app to AI clients

> Turn on an app's production URL so people can add it to their AI client, and try each change first on a staging URL only your workspace can reach.

Updated: 2026-10-12

To let people use an app in Claude, ChatGPT or another AI client, publish it. Its production URL then answers, and your audience adds it
to their AI client. Test changes first on its staging URL, which only members of your workspace can use.

[Video: Publishing an app: Publish in the app's header, the switch turning on, and the toast "Published, your app is live."]

Both URLs are on the app's **Overview** tab, in the **Endpoints** card.

[Image: The Overview tab of the app Acme analytics (sample): the Endpoints card with the Staging and Production URLs, and the Audience card set to Internal]

Table: The two URLs of an app

| URL | Address | Answers | Who can use it |
| --- | --- | --- | --- |
| **Production** | `https://app.bonnard.ai/mcp/<slug>` | Once the app is published | The app's [audience](https://bonnard.ai/docs/apps/audience.md) |
| **Staging** | `https://app.bonnard.ai/mcp/<slug>/staging` | Always | Members of your workspace |

Both serve the same app, and a setting you save reaches both at once. Dashboards are the one difference: production
serves each as last published, staging its current draft.

## Publish the app

You need the Admin role.

1. In the console at `app.bonnard.ai`, open **Apps**, then the app.
2. In the header, select **Publish**.

The switch turns on and the console confirms: "Published, your app is live."

### Before you publish

[Image: The app before publishing: the Publish switch off, and the Endpoints card with its Staging and Production URLs]

Under **Production**, the card reads "This URL does not answer until you publish." **Copy URL** works, so you can share
the URL ahead of time. Its install links stay greyed out until you publish.

An AI client that calls it can still sign in, then gets `MCP server '<slug>' is not live.`

### If publishing fails

The console shows **Couldn't publish** with the reason, and a **Review audience** button that jumps to the Audience card.

Table: Why publishing fails

| Reason | What to do |
| --- | --- |
| `Requires admin role.` | Ask an admin or owner of your workspace to publish. |
| `Complete every required BigQuery customer mapping before turning this endpoint on.` | Map a dataset for at least one customer, and complete every mapping row. See [Audience](https://bonnard.ai/docs/apps/audience.md#bigquery-with-dataset-per-tenant). |

## Unpublish the app

1. In the header, turn off the **Published** switch.
2. In **Unpublish this app?**, select **Unpublish**.

Clients connected to production stop working at once, and staging keeps working. Publishing again brings back the
same URL.

## Test on staging

Use the staging URL to try a change in a real AI client before your audience sees it, dashboard drafts included.

- It answers whether or not the app is published.
- Any member of your workspace can use it, whatever their role. Anyone else gets
  `Staging is available to console admins only.`
- The app's audience applies on staging too.
- Its sign-in is separate from production's, so install each URL on its own.
- Its calls count toward your usage, as production's do.

To install it, select the arrow next to the **Staging** URL (**More install options**). Its install links work before
you publish. See [Install in AI clients](https://bonnard.ai/docs/apps/install-in-ai-clients.md).

### Which customer staging acts as

A member of your workspace belongs to no customer. On a database with tenancy, staging acts as one customer with a
tenant (the value that marks a customer's data in your database), so you see that customer's data.

Table: Who staging acts as, by database tenancy and audience

| Database tenancy | Audience | Staging acts as |
| --- | --- | --- |
| No tenancy | Internal or All customers | You, with the same data as everyone else |
| No tenancy | Specific customers | No one: the call gets `This MCP server is not available to you.` |
| Any other | All customers or Specific customers | The one customer in the audience with a tenant. With none, or more than one, the call gets `Staging cannot tell which customer to serve this app as.` |

That last error asks for a test context, the customer you test as on one app. The console has no control to save one.

## Related

- [Install in AI clients](https://bonnard.ai/docs/apps/install-in-ai-clients.md): add the production or staging URL to Claude, ChatGPT, Cursor, or
  Codex.
- [Audience](https://bonnard.ai/docs/apps/audience.md): who the production URL admits.
