| 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. |
For agents — source-of-truth: This skill is authored in
roboflow/computer-vision-skillsand shipped with the Roboflow plugin. If your client has loaded the plugin (you'll seeroboflow:<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 atroboflow://skills/<name>/...is a fallback for clients without the plugin and may lag this repo. Don't callReadMcpResourceToolforroboflow://skills/...URIs when a localroboflow:<name>skill is available.
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.
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(fromcredentials_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 optionalmirror_configsglob 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 getstatus: "partial"with the ids so you can clean up withcredentials_delete/datasource_delete.
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_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 anAssumeRoleWithWebIdentitycredential; the server rejects the datasource otherwise.
bucket_type:s3orgcsbucket_name(no scheme/path),region(e.g.us-east-1)endpoint: custom URL for S3-compatible providers (S3 only)
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, defaultfullPath);namingStrategyMetadataKeyrequired whenmetadata.updateImageWhenNewer(true) /updateImageStrategy(overwrite).updateMetadataWhenNewer(true) /updateMetadataStrategy(mergeBucketWinsdefault; alsooverwrite|merge|mergeUserWins|untilFirstChange|append).runScheduledEvery(hours, default 0 = off) — >0 enables a recurring mirror (fixed 24h cadence today; only on/off is honored).
- Create (
datasource_create, orconnect_cloud_storage). Nothing is mirrored yet. - Validate (
datasource_validate) — checkslistFiles,headFile,getFile, and per-ruleheadGlobFile; returns{checks, errors}. Run it to self-diagnose a bad credential/bucket before triggering. - Trigger (
datasource_trigger) — starts the mirror job; consumes compute/storage credits. Returns{batchIds}. - Poll (
datasource_job_getwith abatchId) —status(running/completed/failed), per-stagecounters,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.
| 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 |
roboflow://skills/data-management/SKILL— what to do with the images once mirrored (tags, splits, versions, search)roboflow://skills/product-navigation/SKILL— the app'ssettings/datasourcespage