r2-upload
Upload files to Cloudflare R2, AWS S3, or any S3-compatible storage and generate secure presigned download links with configurable expiration
pinned to #9d252b3updated last month
Ask your AI client: “install mcps/r2-upload”.
Requires the metahub MCP server installed in your client. Set up MCP.
mh install mcps/r2-uploadmetahub onboarded this repo on the author's behalf.
If you own github.com/zebbern/claude-code-guide on GitHub, claim the listing to take over publishing. Your claim preserves the existing eval history and badges; only the curator label is replaced with verified-publisher on your next publish.
Stars
4,568
Last commit
last month
Latest release
published
- #ai
- #ai-agent
- #ai-agent-tools
- #anthropic-claude
- #claude
- #claude-ai
- #claude-api
- #claude-code
- #claude-code-communication
- #claude-code-guide
- #claude-code-skills
- #claude-commands
- #claude-desktop
- #claude-mcp
- #claude-sonnet
- #clawdbot
- #cloudflare
- #code
- #mcp
- #mcp-agents
- #mcp-tools
- #presigned-url
- #r2
- #s3
- #storage
- #upload
- #vscode-extension
Automated checks the publisher passed at publish time — structure, docs, safety, and whether the artifact behaves as claimed.9d252b3· last month
Structural
8 passed1 warningDeclared entry point existswarn
Declared entry point dist/index.js is not present.
Ship the built output, or declare a prepare/build script that produces it.
Repository is reachable
https://github.com/zebbern/claude-code-guide @ 9d252b3 — ★ 4,568 · Python · MIT · last push today
Manifest detected
kind=mcp slug=r2-upload · path=skills/r2-upload · source=package.json
Slug is URL-safe
"r2-upload" matches /^[a-z0-9][a-z0-9-]{0,62}$/
Slug is unique within kind
No collision found for mcp/r2-upload
Version is semver
1.0.0
Manifest present and parseable
Manifest found at package.json.
Name declared and well-formed
Name "r2-upload" is well-formed.
Version is semver
Version 1.0.0.
Release history
1- releasecurrent9d252b3warnlast month
Contents
R2/S3 Upload Skill
Upload files to Cloudflare R2, AWS S3, or any S3-compatible storage and generate secure presigned download links with configurable expiration.
Summary
A TypeScript-based MCP skill that lets you upload files to cloud storage and get shareable links. Perfect for quickly sharing files with temporary access. Features multi-bucket support, interactive onboarding, and 5-minute default expiration for security.
Quick Example:
- "Upload this report to R2" → Get a 5-minute download link
- "List files in my bucket" → See what's uploaded
- "Delete old-file.pdf" → Clean up storage
Quick Setup
Automated (Recommended)
cd skills/r2-upload
pnpm install
pnpm run onboard
This will:
- Install dependencies
- Guide you through credential setup
- Test your connection
- Create the config file
Manual Setup
- Install dependencies:
pnpm install
- Create config file:
cp example-config.yml ~/.r2-upload.yml
# Edit ~/.r2-upload.yml with your credentials
- Build:
pnpm run build
Usage
See SKILL.md for detailed documentation and examples.
Cloudflare R2 Setup
- Go to Cloudflare Dashboard → R2
- Create a bucket
- Go to R2 API Tokens:
https://dash.cloudflare.com/<ACCOUNT_ID>/r2/api-tokens - Create a new API token
- Important: Apply to specific bucket (select your bucket)
- Permissions: Object Read & Write
- Copy the Access Key ID and Secret Access Key
- Note your Account ID from the R2 dashboard URL
- Use endpoint:
https://<ACCOUNT_ID>.r2.cloudflarestorage.com
Custom Domain (Optional)
To use a custom domain for public URLs:
- In Cloudflare R2, connect your bucket to a custom domain
- Add the
public_urlfield to your bucket config:public_url: https://files.yourdomain.com
This allows you to generate clean public URLs instead of presigned ones.
Security Considerations
⚠️ Important Security Notes:
API Token Scope
When creating your R2 API token:
- ✅ Apply to specific bucket only (not account-wide)
- ✅ Use minimum permissions: Object Read & Write only
- ❌ Avoid: Admin permissions or account-wide access
Current Protections
- ✅ Config file secured with 600 permissions (owner-only)
- ✅ Presigned URLs expire (default: 5 minutes)
- ✅ UUID prefixes prevent predictable file paths
- ✅ Credentials isolated in external config
Known Limitations
- ⚠️ No file size limits (be careful with large files)
- ⚠️ No file type restrictions
- ⚠️ No rate limiting
Best Practices
- Keep expiration short - Default 5m is recommended
- Review uploads periodically - Use
r2_listto check your bucket - Don't share presigned URLs publicly unless intended
- Rotate credentials if you suspect compromise
- Use different buckets for different security levels
See SECURITY.md for detailed security information and recommendations.
Reviews
No reviews yet. Be the first.
Related
Hermes Agent
The self-improving AI agent — creates skills from experience, improves them during use, and runs anywhere
Caveman
MCP proxy that compresses prose fields (tool descriptions, etc.) using caveman rules. Same accuracy, fewer context tokens.
Nanobot
A lightweight personal AI assistant framework
mh install mcps/r2-upload