# Connect MySQL or MariaDB to your AI client

> Connect MySQL or MariaDB to Bonnard through a read-only user and an IP allowlist, the first step to querying it from Claude, ChatGPT or another AI client.

Updated: 2026-10-12

To chart MySQL or MariaDB data in Claude, ChatGPT or another AI client, connect it here, then create an app on it.
Bonnard reads MySQL or MariaDB through a read-only user, so your apps query only what you grant.

[Video: Connecting MySQL / MariaDB: the Data page, the MySQL / MariaDB form, Test & connect, the tenancy choice, and Connection saved]

## Requirements

- The Admin role in your Bonnard workspace.
- A MySQL or MariaDB user that can create users and grant privileges.

## 1. Create a read-only user

Bonnard connects as this user. Agents can query only the tables it can read.

```sql
-- A user that can log in, nothing more. '%' accepts any client address;
-- a narrower host part must match Bonnard's IP addresses
CREATE USER 'mcp_reader'@'%' IDENTIFIED BY '<password>';

-- Run this once for each database apps should query
-- SHOW VIEW lets agents read how each view is defined
GRANT SELECT, SHOW VIEW ON <database>.* TO 'mcp_reader'@'%';
```

Replace `<password>` and `<database>` with your own. The grant covers tables you add to the database later. If each
tenant (the customer a caller belongs to) has its own database, grant each one.

## 2. Allow Bonnard's IP addresses

If your database limits who can connect, allow Bonnard's IP addresses on port `3306`. The connect form lists them
under **Allow our IP addresses**. Bonnard cannot reach databases on a private network.

## 3. Add the connection

1. In the console at `app.bonnard.ai`, select **Data**, then **MySQL / MariaDB**.
   [Image: The Data page with MySQL / MariaDB under Databases]
2. Enter a **Connection name** and the user's details from the table below. To fill them from a URL, paste it into
   **Import from connection string (optional)** and select **Fill fields**.
   [Image: The MySQL / MariaDB connection form]
3. Select **Test & connect**. Bonnard logs in as the user and reads the tables it can see.

Table: MySQL / MariaDB connection fields

| Field | Enter |
| --- | --- |
| **Connection name** | A name for this database in Bonnard, such as `Production`. |
| **Host** | The server's public hostname. With `verify-full`, an IP address fails the certificate check. |
| **Port** | `3306`, unless your server listens on another port. |
| **Database** | The database to read. |
| **User** and **Password** | The read-only user from step 1, such as `mcp_reader`. |
| **SSL mode** | Keep `verify-full`. For a private CA, such as Amazon RDS, paste its bundle into **CA certificate (PEM)**. |

## 4. Choose the tenancy

Choose how callers see the data, then select **Save & continue**.

Table: Tenancy options

| Option | Use it when |
| --- | --- |
| **No tenancy** | Every caller should see the same data. |
| **Database per tenant** | Each tenant's tables sit in their own database, named by a pattern such as `customer_{tenant}`. |

[Image: The tenancy step for MySQL / MariaDB]

**Connection saved** shows the number of tables discovered.

[Image: Connection saved, with the tables discovered]

## Troubleshooting

- `Host resolves to a private or reserved address.` Use the public hostname. Bonnard cannot reach private networks.
- The test times out. Check that Bonnard's IP addresses are allowed (step 2).
- `Connected, but introspect failed: <message>` The user cannot read the table list. Fix what the message names.
- A table is missing. Grant `SELECT` on it, then select **Re-introspect** on the database's **Tables** tab.
- `Hostname/IP does not match certificate's altnames: <reason>` **Host** is an IP address and **SSL mode** is
  `verify-full`. Enter the hostname the certificate names, or choose `verify-ca`.
- Any other error is MySQL's or MariaDB's own message. Check the field it names, then select **Test & connect** again.

## Charts in your AI client

[Create an app](https://bonnard.ai/docs/apps/create-an-app.md) on this database, so AI clients such as Claude and ChatGPT can query it and draw charts.
