# Ondes PRO Storage & CDN: online files your AI can manage

> Public or private buckets, immutable URLs, on-the-fly thumbnails: Ondes PRO’s object storage and CDN is driven through the API and by your AI over MCP.

Updated on 2026-10-21 · The Ondes PRO team · https://ondes.pro/en/integrations/mcp/modules/object-storage-cdn

**Ondes PRO object storage** keeps your files in **buckets**, public or private, served by a **CDN** under `/cdn/`. Catalogue images, PDF spec sheets, website videos: your coding assistant — Claude Code, Cursor, Visual Studio Code — creates buckets through the **MCP server**, writes the upload script and produces **immutable** URLs with on-the-fly thumbnails. All of it within your workspace’s storage, with no third-party service to sign up for.

## Move the site’s photos out of the repo and onto the CDN

_Example conversation · demo data (Atelier Lumen)_

> **You** : Create a public “visuels-catalogue” bucket in Ondes PRO, write a script that uploads public/img/collection to it, then swap the image paths in the pages for CDN URLs at 640 px thumbnails.
>
> 🔧 `ondes_ressource` Reads the `stockage/buckets` and `stockage/objets` sheets: fields, accepted formats (multipart or base64), image parameters.
>
> 🔧 `ondes_guide` Reads the guide section on storage: upload formats, immutable URLs, thumbnails.
>
> 🔧 `ondes_appeler` `POST stockage/buckets` — public “visuels-catalogue” bucket created.
>
> **Assistant** : The bucket is ready. I wrote `scripts/televerser-visuels.mjs`: it sends each image as multipart with your API key, read from `ONDES_API_KEY`, and keeps each object’s key (`collection/suspension-petrole-1.jpg`…). The pages now use the URL returned by the API, with its immutable `?v=` and `w=640` for the thumbnail. Run the script and I will check all 24 objects afterwards.
>
> **You** : Running. Did everything make it?
>
> 🔧 `ondes_appeler` `GET stockage/objets?bucket=…` — 24 objects, 38 MB; 2 identical photos were stored only once.
>
> **Assistant** : All 24 objects are online. Two Arc floor lamp photos were identical, so they share the same bytes with no duplicate in your storage. You can remove `public/img/collection` from the repository.

## Why pair object storage with an MCP server?

**Object storage** solves a simple problem: putting files online reliably, at a stable address, for a website, an app or a client. Connecting it to an **MCP server** lets your coding assistant do the integration work for you — create buckets, read quotas, write the upload script, replace paths in the code — based on your workspace’s exact documentation rather than guesswork.

Each object is a **key** in a bucket (say `collection/lampe-trepied.jpg`) pointing to bytes identified by their SHA-256 fingerprint. That split gives deduplication, integrity checks and long-lived caching in one go. The [MCP server overview](https://ondes.pro/en/integrations/mcp) introduces the tools that serve this documentation.

## Storage resources and actions in the API

Object storage accepts API keys: uploading from a script is exactly what it is for.

| Resource or action | Role |
| --- | --- |
| `stockage/buckets` | Create, list and configure buckets (public or private, optional quota). |
| `stockage/objets` | Upload as multipart (`fichier`) or JSON (`contenu_base64` + `nom`), list, rename, delete. |
| `…/buckets/{id}/usage/` | What a bucket uses, and its company’s quota. |
| `…/buckets/{id}/lien-televersement/` | A direct upload address, so a browser can upload without exposing a key. |
| `…/objets/{id}/lien-signe/` | A temporary read URL for an object in a private bucket. |
| `…/buckets/{id}/revoquer-liens/` | Invalidates every signed link already handed out, in one go. |

## CDN rules designed never to serve a stale file

- **Two URL forms**: with `?v=` (eight characters of the fingerprint), the file is cached for a year, because that content will never change; the bare URL is cached for five minutes, because a key can be overwritten.
- **Private buckets**: no permanent URL, only signed links, returned with their expiry date so no client stores a perishable URL without knowing it.
- **Bounded on-the-fly thumbnails**: width and height from 16 to 4,096 pixels, rounded to a multiple of 16, quality from 40 to 95. Those bounds stop a loop over thousands of sizes from filling your storage. Images are never upscaled.
- **Active files defused**: an uploaded HTML page or SVG is served as a download, never executed on your admin’s origin.
- **Editing never swaps bytes**: renaming or moving an object never changes its contents, so immutable URLs already published are not silently invalidated.

## Serve a website’s images from the Ondes PRO CDN

1. **Connect your coding assistant** — Add your workspace’s MCP server to Claude Code, Cursor or VS Code. You need the **Storage** and **API & Developers** modules.

```
https://your-workspace.ondes.pro/mcp/
```
2. **Create an API key for the script** — Under **API & Developers → API keys**, create a key limited to storage. Your script reads it from an environment variable, never from the code.
3. **Let the assistant create the bucket and the script** — Describe what you need: public or private bucket, folder to upload, thumbnail sizes. The assistant reads the exact sheets and writes the code.
4. **Upload, then verify** — Run the script, then ask the assistant to count the objects and report any error. The immutable URLs are ready for production.

> **Bytes kept out of the public area, deduplication kept per company** — Object storage files are kept outside the instance’s public file area: a private bucket is genuinely private, not just hidden. With several companies, deduplication is partitioned per company — otherwise uploading a document and seeing it cost nothing would reveal that a sister company already holds it.

## How much space, and whose allowance does it use?

Objects draw on your **workspace storage**, the same pool as the drive and email: 5 GB on Essentiel, 50 GB on Pro, more on Entreprise, and extra gigabytes can be ordered when needed. A per-bucket quota is still available if you want to cap one use. When storage is full, a new upload is refused with a clear message, identical from the API, the admin file explorer and a direct upload link.

For a robust integration, the `contenu_base64` form accepts an `Idempotency-Key` header: an upload replayed after a network drop does not create two objects. The [guide to building an integration](https://ondes.pro/en/integrations/mcp/guides/build-an-integration) covers these conventions.

## Keep exploring

- [Encrypted drive](https://ondes.pro/en/integrations/mcp/modules/drive) — An end-to-end encrypted drive: your AI helps organise it, but can never read your files.
- [Connect your website](https://ondes.pro/en/integrations/mcp/guides/connect-your-website) — Show the catalogue and take Stripe payments from a site that is already live, without rebuilding it.
- [Cursor](https://ondes.pro/en/integrations/mcp/clients/cursor) — One `.cursor/mcp.json` file, one OAuth sign-in: Cursor’s agent codes against your real workspace.
- [REST API v1](https://ondes.pro/en/integrations/rest-api) — Around 135 REST resources, scoped keys, an OpenAPI schema and signed webhooks.

## Frequently asked questions

### What is Ondes PRO object storage?

File buckets, public or private, served by a CDN under your workspace’s `/cdn/`. Each object has a readable key and an immutable URL; images can be served as on-the-fly thumbnails. It is driven from the admin, the API and your AI assistant over MCP.

### Can I upload a file through the MCP server?

The MCP server is for creating and configuring buckets, listing objects and writing integration code. To send the files themselves, a script calls the API over direct HTTP, as multipart or base64: the reliable route as soon as files weigh several megabytes.

### How is it different from the drive?

The drive is end-to-end encrypted and holds private documents the server cannot read. Object storage is for publishing files: it serves them as they are, publicly or through signed links, with caching and thumbnails.

### How do I share a private file for a limited time?

Use the `lien-signe/` action on an object in a private bucket: the URL is temporary and comes with its expiry date. The bucket’s `revoquer-liens/` action invalidates every link already shared, in one go.

### What happens when storage is full?

New uploads are refused with an explicit message; files already online keep being served. You can free up space or order extra gigabytes from your workspace.

### Are object storage and the CDN included?

Yes, in every Ondes PRO plan, together with the MCP server. They use the storage included in your plan. See [pricing](https://ondes.pro/en/pricing).
