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.

🌟28 stars • 470 forks
📥0 downloads

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 duration

Signals

Avg rating⭐ 0.0
Reviews0
Favorites0

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

Related Guides