roboflow-cloud-storage

Use when connecting cloud storage (AWS S3 / S3-compatible or Google Cloud Storage) to Roboflow to mirror images into a workspace — creating storage credentials, defining datasources (bucket-mirror configs), selecting objects with glob rules, validating access, and running/scheduling mirror jobs.

roboflow/computer-vision-skills91 installsApache-2.0Synced Aug 26

Works with

Claude CodeCursorCodex CLIGitHub CopilotGemini CLI
---
name: roboflow-cloud-storage
description: Use when connecting cloud storage (AWS S3 / S3-compatible or Google Cloud Storage) to Roboflow to mirror images into a workspace — creating storage credentials, defining datasources (bucket-mirror configs), selecting objects with glob rules, validating access, and running/scheduling mirror jobs.
license: Apache-2.0
---

> **For agents — source-of-truth:** This skill is authored in [`roboflow/computer-vision-skills`](https://github.com/roboflow/computer-vision-skills) and shipped with the Roboflow plugin. If your client has loaded the plugin (you'll see `roboflow:<name>` skills in your available skills list), use those local skills — they're read fresh from disk every session. The same content served as MCP resources at `roboflow://skills/<name>/...` is a fallback for clients without the plugin and may lag this repo. **Don't call `ReadMcpResourceTool` for `roboflow://skills/...` URIs when a local `roboflow:<name>` skill is available.**

# Cloud Storage (Datasources & Credentials)

Mirror a cloud bucket's contents into a Roboflow workspace so new objects flow
in automatically. Two pieces work together:

- **Credential** — the secret Roboflow uses to reach the bucket (stored,
  masked server-side, reusable across datasources).
- **Datasource** — a *bucket-mirror configuration*: which bucket (via a
  credential), which objects (glob rules), and how they sync. "Datasource" is
  the user-facing name; the platform stores it as a bucket-mirror config.

> Imports land at the **workspace** level. The datasource API cannot target a
> specific project/dataset today.

## Fast path — one call

`connect_cloud_storage` does the whole flow in one shot: (optionally) create a
credential, create the datasource, validate access, and start the first mirror
run. Prefer it for new setups.

- Reuse a credential: pass `credential_id` (from `credentials_list`).
- Create a new credential: pass `credential_name` + `credential_type` (the
  secret is collected securely out-of-band — see Security).
- Describe the datasource so it can be created first: `bucket_type` (`s3`/`gcs`),
  `bucket_name`, `region`, plus optional `mirror_configs` glob rules (see
  Datasources). The datasource must exist before anything can be validated or
  triggered — there is nothing to mirror without it.
- `trigger` (default true) starts a mirror run **only if validation passes**;
  triggering consumes credits.
- Returns `{credentialId, credentialCreated, datasourceId, validation,
  triggered, batchIds?}`. If a new credential was created but a later step
  failed, you get `status: "partial"` with the ids so you can clean up with
  `credentials_delete` / `datasource_delete`.

## Credentials

### Security — secrets never enter the chat
The secret (keys, service-account JSON, password) is collected **out-of-band**
via MCP elicitation, never as a tool argument and never in the transcript or
model context. `credentials_list` returns only masked, non-secret fields.
If your client can't elicit securely, the tool returns
`manual_entry_required` with a URL to create the credential in the app
(`app.roboflow.com/<workspace>/settings/datasources`), then call
`credentials_list` to get its id.

### Credential types

| `credential_type` | Provider | Secret fields collected |
|---|---|---|
| `IAM` | AWS S3 | `accessKeyId`, `secretAccessKey`, `sessionToken?` |
| `AssumeRole` | AWS S3 | `roleArn`, `externalId`, `sessionName?` |
| `AssumeRoleWithWebIdentity` | AWS S3 | `roleArn`, `webIdentityAudience`, `webIdentityRoleArn`, `externalId`, `sessionName?` |
| `gcs` | Google Cloud Storage | `projectId`, `credentialFile` (full service-account JSON) |
| `usernamePassword` | S3-compatible | `username`, `password` |
| `apiKey` | S3-compatible | `apiKey` |

> **AWS PrivateLink (`require_vpce`)** requires an
> `AssumeRoleWithWebIdentity` credential; the server rejects the datasource
> otherwise.

## Datasources

### Bucket
- `bucket_type`: `s3` or `gcs`
- `bucket_name` (no scheme/path), `region` (e.g. `us-east-1`)
- `endpoint`: custom URL for S3-compatible providers (S3 only)

### Mirror rules (`mirror_configs`)
Optional list; omit to mirror the **whole bucket** with default settings. Each
rule selects a subset and controls sync behavior:

- **`glob_patterns`** (list) — the key field. Selects objects, e.g.
  `["images/**/*.jpg", "batch-*/**"]`. Set it to avoid importing unwanted files
  or to split a bucket into multiple rules. Omit only when you truly want
  everything.
- `glob_file_path` — alternative: path to a manifest file in the bucket whose
  lines list object paths to import.
- `id` — rule id (auto-generated; pass an existing id on update to edit in place).
- `settings` (omitted keys use server defaults):
  - `removeOrphanedSourcesWhenDisappeared` (default true) — delete mirrored
    images when the source object is removed.
  - `namingStrategy` (`fullPath`|`fileName`|`eTag`|`metadata`, default
    `fullPath`); `namingStrategyMetadataKey` required when `metadata`.
  - `updateImageWhenNewer` (true) / `updateImageStrategy` (`overwrite`).
  - `updateMetadataWhenNewer` (true) / `updateMetadataStrategy`
    (`mergeBucketWins` default; also `overwrite`|`merge`|`mergeUserWins`|
    `untilFirstChange`|`append`).
  - `runScheduledEvery` (hours, default 0 = off) — >0 enables a recurring mirror
    (fixed 24h cadence today; only on/off is honored).

## Lifecycle & validation

1. **Create** (`datasource_create`, or `connect_cloud_storage`). Nothing is
   mirrored yet.
2. **Validate** (`datasource_validate`) — checks `listFiles`, `headFile`,
   `getFile`, and per-rule `headGlobFile`; returns `{checks, errors}`. Run it to
   self-diagnose a bad credential/bucket **before** triggering.
3. **Trigger** (`datasource_trigger`) — starts the mirror job; **consumes
   compute/storage credits**. Returns `{batchIds}`.
4. **Poll** (`datasource_job_get` with a `batchId`) — `status`
   (running/completed/failed), per-stage `counters`, `errors`, timestamps.

**Update** (`datasource_update`): only fields you pass change; to change the
bucket pass `bucket_type` + `bucket_name` + `region` together.
**Delete** (`datasource_delete`): removes the config, **not** already-mirrored
images. Deleting a credential still referenced by a datasource makes its runs
fail.

## MCP Tools Available

| Tool | Purpose |
|------|---------|
| `connect_cloud_storage` | End-to-end: credential + datasource + validate + first run |
| `credentials_list` | List masked cloud-storage credentials |
| `credentials_create` | Create a credential (secret collected securely out-of-band) |
| `credentials_delete` | Delete a credential |
| `datasources_list` / `datasource_get` | List / inspect datasource configs |
| `datasource_create` / `datasource_update` / `datasource_delete` | Manage a datasource |
| `datasource_validate` | Check bucket access before a run |
| `datasource_trigger` | Start a mirror run (consumes credits) |
| `datasource_job_get` | Poll a mirror run's status and counters |

## Related Pages

- `roboflow://skills/data-management/SKILL` — what to do with the images once mirrored (tags, splits, versions, search)
- `roboflow://skills/product-navigation/SKILL` — the app's `settings/datasources` page

More DevOps & Infrastructure skills

← All DevOps & Infrastructure skills

Check your AI visibility

One URL in, a 0–100 score and the exact fixes out.

RUN THE CHECK

Browse all the tools

15 tools across six categories
13 of them never send your data anywhere

Free · No signup · No trial clock

SEE THE DIRECTORY