R2 Bucket MCP
Allows uploading, downloading, listing, and deleting files on Cloudflare R2 buckets.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@R2 Bucket MCPupload vitalo APK v2.1.0"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
r2-bucket-mcp
Servidor MCP stdio para Cursor y otros clientes MCP. Sube archivos locales a Cloudflare R2 (S3-compatible) sin ejecutar scripts shell. Pensado para APKs de proyectos (vitalo, linkbox, nestle, …) y cualquier otro archivo.
Qué hace
Expone cinco tools MCP:
Tool | Uso |
| APKs con key |
| Cualquier archivo con key opcional |
| Descargar por key (URL o guardar local) |
| Listar objetos por prefijo |
| Borrar objeto por key |
La respuesta incluye downloadUrl (URL pública CDN si R2_PUBLIC_BASE_URL está configurada, o presigned URL temporal).
Related MCP server: MinIO Storage MCP
Instalación
cd /Users/samuelgerardocastrolopez/Desktop/r2-bucket-mcp
npm installCredenciales R2
Usa las mismas variables que opencode_whatsapp/.env (sin copiar secretos al repo):
Abre
opencode_whatsapp/.enven tu máquina.Copia los valores de
R2_ACCESS_KEY_ID,R2_SECRET_ACCESS_KEY,R2_BUCKET,R2_ENDPOINT(oR2_ACCOUNT_ID), y opcionalmenteR2_PUBLIC_BASE_URL.Para pruebas locales, crea
.enven este repo desde.env.example(nunca lo commitees).
Variable | Requerida | Descripción |
| sí | Access key R2 |
| sí | Secret key R2 |
| sí | Bucket (default: |
| sí* | Endpoint S3-compatible |
| sí* | Alternativa a endpoint explícito |
| no | Prefijo global opcional |
| no | CDN pública; si falta, presigned URL |
| no | Default: 604800 (7 días) |
| no | Límite validación MCP (default: 500 MB) |
* Al menos uno de R2_ENDPOINT o R2_ACCOUNT_ID.
Prueba manual
Arranque stdio (proceso queda esperando; Ctrl+C para salir):
node index.js
# stderr: [r2-bucket-mcp] ready (stdio)Smoke test con credenciales en .env local (sube un .smoke-test.txt temporal):
npm run smokeRegistrar en Cursor
Settings → MCP o edita ~/.cursor/mcp.json.
Usa la ruta absoluta de node (which node). Ejemplo:
{
"mcpServers": {
"r2-bucket": {
"type": "stdio",
"command": "/Users/samuelgerardocastrolopez/.nvm/versions/node/v22.17.0/bin/node",
"args": [
"/Users/samuelgerardocastrolopez/Desktop/r2-bucket-mcp/index.js"
],
"env": {
"R2_ACCESS_KEY_ID": "PEGAR_ACCESS_KEY",
"R2_SECRET_ACCESS_KEY": "PEGAR_SECRET_KEY",
"R2_BUCKET": "apks",
"R2_ENDPOINT": "https://<account-id>.r2.cloudflarestorage.com",
"R2_PUBLIC_BASE_URL": "https://cdn.tudominio.com"
}
}
}
}Reinicia Cursor o recarga servidores MCP tras cambiar mcp.json.
Uso desde agentes
APKs: preferir
upload_apkconproject,versionyfilePathabsoluto.Otros archivos:
upload_fileconfilePathy opcionalmentekey,prefix,contentType.Listar:
list_filesconprefixopcional (ej.vitalo/).Descargar:
get_fileconkey; opcionalfilePathabsoluto para guardar en disco.Borrar:
delete_fileconkeycompleta (ej.vitalo/2.1.0/app-release.apk).
Ejemplo de key generada por upload_apk:
vitalo/2.1.0/app-release.apkRespuesta JSON (campo principal para compartir el enlace):
{
"ok": true,
"bucket": "apks",
"key": "vitalo/2.1.0/app-release.apk",
"size": 12345678,
"contentType": "application/vnd.android.package-archive",
"downloadUrl": "https://cdn.tudominio.com/vitalo/2.1.0/app-release.apk",
"publicUrl": "https://cdn.tudominio.com/vitalo/2.1.0/app-release.apk",
"presignedUrl": null
}Si no hay R2_PUBLIC_BASE_URL, downloadUrl será una presigned URL y publicUrl será null.
Integración SDK
Con un agente SDK local y settingSources: ['user'], el agente carga el mismo MCP definido en ~/.cursor/mcp.json. También puedes pasar mcpServers inline en la config del agente con las mismas credenciales en env.
Tools
upload_file
Parámetro | Requerido | Descripción |
| sí | Ruta absoluta al archivo local |
| no | Clave en el bucket (default: basename) |
| no | Prefijo override (sin |
| no | MIME explícito |
upload_apk
Parámetro | Requerido | Descripción |
| sí | Ruta absoluta al APK |
| sí | Alias ( |
| sí | Versión ( |
| no | Default: |
get_file
Parámetro | Requerido | Descripción |
| sí | Clave del objeto (ej. |
| no | Ruta absoluta local para guardar; sin ella solo devuelve URLs |
list_files
Parámetro | Requerido | Descripción |
| no | Filtro de prefijo (ej. |
| no | Máximo por página (default: 100, max: 1000) |
| no | Token de paginación de una respuesta anterior |
delete_file
Parámetro | Requerido | Descripción |
| sí | Clave del objeto (ej. |
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ingsamcas/r2_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server