mcpField
R
r2-upload

r2-upload

github.com/zebbernCloud & DevOps4.7k39 installsUpdated 1d ago
Repository

About r2-upload

r2-upload is a command-line tool for uploading files to Cloudflare R2 or other S3-compatible storage and generating expiring download links. It also supports multiple bucket configurations and file listing and deletion.

Key features

  1. 01Upload to R2 or S3-compatible storage
  2. 02Generate presigned links with configurable expiry
  3. 03Configure multiple buckets
  4. 04Detect content type automatically
  5. 05List recent uploads and delete files

Use cases

  1. 01Upload files and share temporary download links
  2. 02Choose configured buckets for different purposes
  3. 03Set a custom object path or public URL
  4. 04Review recent uploads and remove files

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/zebbern/claude-code-guide --skill r2-upload

After installing, type/r2-uploadin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

_meta.json
CLAWDHUB.md
example-config.yml
package.json
pnpm-lock.yaml
README.md
SECURITY.md
tsconfig.json
src/
index.ts
onboard.ts

Details

From the project README

Send Me My Files - R2 Upload with Short Lived Signed URLs

Upload files to Cloudflare R2 or any S3-compatible storage and generate presigned download links.

Features

  • Upload files to R2/S3 buckets
  • Generate presigned download URLs (configurable expiration)
  • Support for any S3-compatible storage (R2, AWS S3, MinIO, etc.)
  • Multiple bucket configurations
  • Automatic content-type detection

Configuration

Create ~/.r2-upload.yml (or set R2_UPLOAD_CONFIG env var):

# Default bucket (used when no bucket specified)
default: my-bucket

# Bucket configurations
buckets:
  my-bucket:
    endpoint: https://abc123.r2.cloudflarestorage.com
    access_key_id: your_access_key
    secret_access_key: your_secret_key
    bucket_name: my-bucket
    public_url: https://files.example.com  # Optional: custom domain
    region: auto  # For R2, use "auto"

  # Additional buckets
  personal:
    endpoint: https://xyz789.r2.cloudflarestorage.com
    access_key_id: ...
    secret_access_key: ...
    bucket_name: personal-files
    region: auto
Cloudflare R2 Setup
  1. Go to Cloudflare Dashboard → R2
  2. Create a bucket
  3. Go to R2 API Tokens: https://dash.cloudflare.com/<ACCOUNT_ID>/r2/api-tokens
  4. Create a new API token
    • Important: Apply to specific bucket (select your bucket)
    • Permissions: Object Read & Write
  5. Copy the Access Key ID and Secret Access Key
  6. Use endpoint format: https://<account_id>.r2.cloudflarestorage.com
  7. Set region: auto
AWS S3 Setup
aws-bucket:
  endpoint: https://s3.us-east-1.amazonaws.com
  access_key_id: ...
  secret_access_key: ...
  bucket_name: my-aws-bucket
  region: us-east-1

Usage

Upload a file
r2-upload /path/to/file.pdf
# Returns: https://files.example.com/abc123/file.pdf?signature=...
Upload with custom path
r2-upload /path/to/file.pdf --key uploads/2026/file.pdf
Upload to specific bucket
r2-upload /path/to/file.pdf --bucket personal
Custom expiration (default: 5 minutes)
r2-upload /path/to/file.pdf --expires 24h
r2-upload /path/to/file.pdf --expires 1d
r2-upload /path/to/file.pdf --expires 300  # seconds
Public URL (no signature)
r2-upload /path/to/file.pdf --public

Tools

  • r2_upload - Upload file and get presigned URL
  • r2_list - List recent uploads
  • r2_delete - Delete a file

Environment Variables

  • R2_UPLOAD_CONFIG - Path to config file (default: ~/.r2-upload.yml)
  • R2_DEFAULT_BUCKET - Override default bucket
  • R2_DEFAULT_EXPIRES - Default expiration in seconds (default: 300 = 5 minutes)

Notes

  • Uploaded files are stored with their original filename unless --key is specified
  • Automatic UUID prefix added to prevent collisions (e.g., abc123/file.pdf)
  • Content-Type automatically detected from file extension
  • Presigned URLs expire after the configured duration

Comments

Markdown supported