General
r2-upload - Claude MCP Skill
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.
SEO Guide: Enhance your AI agent with the r2-upload tool. This Model Context Protocol (MCP) server allows Claude Desktop and other LLMs to upload files to cloudflare r2, aws s3, or any s3-compatible storage (like minio) and generate secure... Download and configure this skill to unlock new capabilities for your AI workflow.
Documentation
SKILL.md# 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):
```yaml
# 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
```yaml
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:
```bash
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 durationSignals
Information
- Repository
- zebbern/claude-code-guide
- Author
- zebbern
- Last Sync
- 11/2/2026
- Repo Updated
- 11/2/2026
- Created
- 6/1/2026
Reviews (0)
No reviews yet. Be the first to review this skill!
Related Skills
CLAUDE
Claude-Mem: AI Development Instructions
cursorrules
CrewAI Development Rules
firecrawl-build-interact
Integrate Firecrawl `/interact` into product code for dynamic pages and browser actions after scraping. Use when a feature needs clicks, form fills, pagination, authentication-aware flows, or other multi-step interactions that plain `/scrape` cannot complete.
firecrawl-build
Integrate Firecrawl into application code whenever a product, agent, or workflow needs web data inside the app — web search, live search results, page scraping, structured extraction, or browser interaction. Use when building any feature that needs data from the web in code, even if the user does not mention Firecrawl explicitly and only describes wanting web data, website content, search, scraping, or interaction in an application. Trigger for Firecrawl requests, "fire girl" shorthand, and generic app-level web-data needs that should map to `/scrape`, `/search`, or `/interact`. Do not use this skill for one-off terminal-only web tasks during the current session; use `firecrawl/cli` for those.
Related Guides
Bear Notes Claude Skill: Your AI-Powered Note-Taking Assistant
Learn how to use the bear-notes Claude skill. Complete guide with installation instructions and examples.
OpenAI Whisper API Claude Skill: Complete Guide to AI-Powered Audio Transcription
Learn how to use the openai-whisper-api Claude skill. Complete guide with installation instructions and examples.
Mastering the Oracle CLI: A Complete Guide to the Claude Skill for Database Professionals
Learn how to use the oracle Claude skill. Complete guide with installation instructions and examples.