Skip to content
Documentation
Skill

/r2-upload

Upload files to Cloudflare R2, AWS S3, or any S3-compatible storage (like MinIO) and generate secure, time-limited presigned download links with configurable expiration, typically set to 5 minutes. Use when the user needs to upload a file to cloud storage and get a shareable

From plugin
claude-code-guide
4.7k78 skills

Claude Code

$ npx -y skills add zebbern/claude-code-guide --skill r2-upload --agent claude-code

SKILL.md

r2-upload.SKILL.md
name: r2-upload
description: "Upload files to Cloudflare R2, AWS S3, or any S3-compatible storage (like MinIO) and generate secure, time-limited presigned download links with configurable expiration, typically set to 5 minutes. Use when the user needs to upload a file to cloud storage and get a shareable link, or mentions R2, S3, presigned URLs, temporary links, or file uploads with expiration."
summary: TypeScript-based MCP skill for uploading files to cloud storage (R2, S3, MinIO) with secure, temporary download links. Features multi-bucket support, interactive onboarding, and 5-minute default expiration.

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

Setup

This skill is a stdio MCP server, not a shell command (there is no `r2-upload` binary). Build it once and register it with Claude Code:

cd "${CLAUDE_SKILL_DIR}" && npm install && npm run build
claude mcp add r2-upload -- node "${CLAUDE_SKILL_DIR}/dist/index.js"

Run `npm run onboard` in the same folder to create `~/.r2-upload.yml` interactively.

Tools

  • `r2_upload` - Upload `file_path` and return a presigned URL. Optional: `key` (custom object path), `bucket`, `expires` (`300`, `24h`, `1d`; default `5m`), `public` (unsigned URL, needs a public bucket), `content_type`
  • `r2_list` - List files in a bucket (`bucket`, `prefix`, `max_keys`)
  • `r2_delete` - Delete a file by `key`
  • `r2_generate_url` - Generate a new presigned URL for an existing `key`

Environment Variables

  • `R2_UPLOAD_CONFIG` - Path to config file (default: `~/.r2-upload.yml`)
  • `R2_DEFAULT_BUCKET` - Override default bucket

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
Read more
@zebbern
Ships withclaude-code-guide

Claude Code Guide - Setup, Commands, workflows, agents, skills & tips-n-tricks from beginner to power user!

Stars on GitHub

Momentum

stars in total
4.7k
Star history of zebbern/claude-code-guide on GitHub, a chart by star-history.com

Other skills on claude-code-guide.

audit-flow

audit-flow

Interactive system flow tracing across CODE, API, AUTH, DATA, NETWORK layers with SQLite persistence and Mermaid export. Use for…

More skills from other plugins.

context7-cli

context7-cli

Use the ctx7 CLI to fetch library documentation and configure Context7 MCP. Activate when the user mentions "ctx7" or "context7",…

context711d64k
@upstash@upstashInstall Skill
docs-components

docs-components

Comprehensive MDX component patterns (Note, Pitfall, DeepDive, Recipes, etc.) for all documentation types. Authoritative source…

@reactjs@reactjsInstall Skill
codebase-wiki

codebase-wiki

How to work in a Codebase Wiki project (the `codebase-wiki` starter pack): an agent-authored, source-grounded wiki of the…

@inkeep@inkeepInstall Skill
omm-push

omm-push

Push architecture docs to oh-my-mermaid cloud. Handles login, link, and push workflow with error guidance. Use when the user says…

@oh-my-mermaid@oh-my-mermaidInstall Skill

Questions about r2-upload.

Which coding agents can use r2-upload?
r2-upload installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.