Skip to main content

Bucket Helper — utility functions for AWS S3 and any S3-compatible object storage (MinIO, Backblaze B2, DigitalOcean Spaces, Cloudflare R2, Wasabi, etc.) via boto3, exposed as library, argparse CLI, click CLI, FastAPI HTTP surface and MCP tools. credentials() loader, upload / download / list / delete / exists / make_bucket / remote_tempfile.

Project description

Bucket Helper

🇫🇷 · 🇬🇧

CI License: BSD-3-Clause Python

Bucket Helper belongs to a collection of libraries called AI Helpers developed for building Artificial Intelligence.

Utility functions for AWS S3 and any S3-compatible object storage — MinIO, Backblaze B2 S3 API, DigitalOcean Spaces, Cloudflare R2, Wasabi, and friends. Built on boto3. Same shape as sftp-helper: a credentials() loader, the usual CRUD (upload / download / delete / exists / list_prefix), and a remote_tempfile context manager for stage-and-share flows.

🌍 AI Helpers

logo

Documentation

💻 Documentation

📋 Examples

🎯 Triggers · 🧩 Agent skill

Installation

PrerequisitesPython 3.10–3.13 and git, cross-platform:

  • 🍎 macOS (Homebrew): brew install python git
  • 🐧 Ubuntu/Debian: sudo apt update && sudo apt install -y python3 python3-pip git
  • 🪟 Windows (PowerShell): winget install Python.Python.3.12 Git.Git

We recommend using Python environments. Check this link if you're unfamiliar with setting one up: 🥸 Tech tips.

From PyPI (recommended)

# Core library (credentials loader + CRUD + remote_tempfile)
pip install bucket-helper

# Optional surfaces
pip install "bucket-helper[cli]"       # click-based CLI twin
pip install "bucket-helper[api]"       # FastAPI HTTP surface
pip install "bucket-helper[api,mcp]"   # MCP tools over FastAPI

From source (no PyPI)

# Core library
pip install "git+https://github.com/warith-harchaoui/bucket-helper.git@v0.3.0"

# Optional surfaces
pip install "bucket-helper[cli] @ git+https://github.com/warith-harchaoui/bucket-helper.git@v0.3.0"
pip install "bucket-helper[api] @ git+https://github.com/warith-harchaoui/bucket-helper.git@v0.3.0"
pip install "bucket-helper[api,mcp] @ git+https://github.com/warith-harchaoui/bucket-helper.git@v0.3.0"

The argparse CLI is always available. The [cli] extra adds the click twin.

Configuration

A ready-to-fill template is committed at s3_config.json.example. Copy it to s3_config.json and edit in place — real *config.json files are gitignored so you cannot accidentally commit secrets:

cp s3_config.json.example s3_config.json
# then edit s3_config.json with your AWS / MinIO / R2 / B2 credentials

You may also write a s3_config.yaml, use a .env, or set environment variables — bucket-helper falls back in that order via os_helper.get_config. Required keys:

{
  "s3_access_key": "AKIA...",
  "s3_secret_key": "...",
  "s3_bucket":     "my-bucket",
  "s3_https":      "https://my-bucket.s3.eu-west-3.amazonaws.com"
}

Optional keys:

Key Default Notes
s3_region "us-east-1" AWS region; mostly cosmetic for MinIO / R2
s3_endpoint_url empty (= AWS S3) Set this for S3-compatible backends — see table below
s3_prefix empty Default key prefix added by upload(...) when no destination is given
s3_use_path_style "false" Force path-style addressing (endpoint/bucket/key instead of bucket.endpoint/key). Typical for MinIO with custom domains.
s3_verify_ssl "true" Disable only for dev MinIO with self-signed certs

Endpoint URLs for common S3-compatible storage

Set s3_endpoint_url to:

Provider Endpoint
AWS S3 leave empty / unset
MinIO http://minio.example.com:9000 (or https://... with TLS)
DigitalOcean Spaces https://nyc3.digitaloceanspaces.com (region in subdomain)
Cloudflare R2 https://<account_id>.r2.cloudflarestorage.com
Backblaze B2 (S3 API) https://s3.<region>.backblazeb2.com
Wasabi https://s3.<region>.wasabisys.com

Usage

For the full catalog of recipes (uploads / downloads / listings, S3-compatible endpoints — MinIO / R2 / B2 / Spaces / Wasabi, temporary remote keys with auto-cleanup, mirroring with sftp-helper), see 📋 EXAMPLES.md.

import bucket_helper as bh

# Load creds — JSON / YAML / env / .env (auto-fallback in that order)
cred = bh.credentials("path/to/s3_config.json")

# Upload a local file
uri = bh.upload("local.txt", cred, "folder/uploaded.txt")
# uri == "s3://my-bucket/folder/uploaded.txt"

assert bh.exists(uri, cred)

# Download
bh.download(uri, "downloaded.txt", cred)

# List
for key in bh.list_prefix("folder/", cred):
    print(key)

# Delete
bh.delete(uri, cred)

MinIO example

cred = {
    "s3_access_key":      "minioadmin",
    "s3_secret_key":      "minioadmin",
    "s3_bucket":          "uploads",
    "s3_https":           "http://minio.example.com:9000/uploads",
    "s3_endpoint_url":    "http://minio.example.com:9000",
    "s3_use_path_style":  "true",
    "s3_region":          "us-east-1",  # MinIO accepts any region string
}

bh.make_bucket("uploads", cred)
bh.upload("file.bin", cred, "file.bin")

Stage-and-share with remote_tempfile

Drop a generated file at a unique random key, hand the public URL to a downstream worker / webhook, and the object is deleted on block exit (even if the body raises):

import bucket_helper as bh
import requests

cred = bh.credentials("path/to/s3_config.json")

with bh.remote_tempfile(cred, ext="json", prefix="runs") as (s3_addr, public_url):
    bh.upload("payload.json", cred, s3_addr, content_type="application/json")
    # Hand the URL to something that fetches it once.
    requests.post("https://hook.example.com/process", json={"input_url": public_url}).raise_for_status()
# Object is gone here, no manual cleanup.

Multi-surface exposure

Every public function in the library is also exposed as:

  • argparse CLIbucket-helper <subcommand> (installed by default).
  • click CLIbucket-helper-click <subcommand> (install [cli] extra).
  • FastAPI HTTPuvicorn bucket_helper.api:app --host 0.0.0.0 --port 8000 (install [api] extra).
  • MCP toolsbucket-helper-mcp (install [api,mcp] extras).

Both CLIs share the same subcommand names and flags — pick your favourite.

Agent skill (Claude / OpenCode)

bucket-helper ships as a discoverable Claude Skill and OpenCode skill under skills/bucket-helper/, so an AI agent can run object-storage operations for you without you opening a terminal. Install it by symlinking:

ln -sfn "$PWD/skills/bucket-helper" ~/.claude/skills/bucket-helper     # Claude Code / Desktop
ln -sfn "$PWD/skills/bucket-helper" ~/.opencode/skills/bucket-helper   # OpenCode

The exhaustive catalogue of what triggers the toolkit — natural-language phrasings, commands, functions, address cues, and explicit SKIP rules — lives in TRIGGERS.md (mirrored in the skill's references/triggers.md). See skills/README.md for install details.

CLI examples

# argparse CLI (always available)
bucket-helper upload      --config s3_config.json --input local.txt --key folder/uploaded.txt
bucket-helper exists      --config s3_config.json --key folder/uploaded.txt
bucket-helper download    --config s3_config.json --key folder/uploaded.txt --output back.txt
bucket-helper list        --config s3_config.json --prefix folder/
bucket-helper delete      --config s3_config.json --key folder/uploaded.txt
bucket-helper make-bucket --config s3_config.json --bucket new-bucket
bucket-helper tempfile    --config s3_config.json --ext json --prefix runs
bucket-helper strip-path  --config s3_config.json --address s3://my-bucket/path/to/obj

# click CLI — same verbs, same flags
bucket-helper-click upload --config s3_config.json --input local.txt --key folder/uploaded.txt

HTTP + MCP server

# Serve HTTP + MCP (default credentials picked up from BUCKET_HELPER_CONFIG)
BUCKET_HELPER_CONFIG=$PWD/s3_config.json bucket-helper-mcp

# Or run only FastAPI directly:
uvicorn bucket_helper.api:app --host 0.0.0.0 --port 8000
# → Swagger UI at http://localhost:8000/docs

Per-request credentials can also be sent as multipart form fields (s3_access_key / s3_secret_key / s3_bucket / s3_https / …).

Docker

docker build -t bucket-helper .
docker run --rm -p 8000:8000 \
  -e BUCKET_HELPER_CONFIG=/config/s3_config.json \
  -v $PWD/s3_config.json:/config/s3_config.json:ro \
  bucket-helper

See also: TRIGGERS.md (what invokes the toolkit), skills/README.md (agent skill install), LANDSCAPE.md (competitive positioning) and GUI.md (visual product design plan — no GUI ships; bucket-helper is remote object-storage plumbing).

Author

Acknowledgements

Special thanks to Mohamed Chelali and Bachir Zerroug for fruitful discussions.

License

This project is licensed under the BSD-3-Clause License — see the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bucket_helper-0.3.0.tar.gz (33.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bucket_helper-0.3.0-py3-none-any.whl (28.9 kB view details)

Uploaded Python 3

File details

Details for the file bucket_helper-0.3.0.tar.gz.

File metadata

  • Download URL: bucket_helper-0.3.0.tar.gz
  • Upload date:
  • Size: 33.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for bucket_helper-0.3.0.tar.gz
Algorithm Hash digest
SHA256 9e4a66f5d20e9831bf850f40408d996f0151114568bd08ef175dbccb44f58b64
MD5 945c932e22859e4a3019e88e5ece1a38
BLAKE2b-256 02c3b13b68623264f5b61adc558c0973f891370eb1edeab6b8715057ef776d74

See more details on using hashes here.

File details

Details for the file bucket_helper-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: bucket_helper-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 28.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for bucket_helper-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a4e7e3d7f74f8881e1485dee87485576a437b2727a618f1a3beb98983fb45d7f
MD5 588a62d7a7c35e74ac9c9131ca866423
BLAKE2b-256 ca85286fb54ba4daa6d6743f34015cb07c1d1d361db0d1660989445c00f48320

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page