bucket-helper-mcp

bucket-helper-mcp

Provides MCP tools for AWS S3 and S3-compatible storage, enabling file upload, download, listing, deletion, and temporary remote file staging via natural language.

Category
Visit Server

README

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

Installation

Prerequisites โ€” Python 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

Then install the package:

pip install --force-reinstall --no-cache-dir git+https://github.com/warith-harchaoui/bucket-helper.git@v0.2.2

Optional extras โ€” pick what you need:

# argparse CLI is always available. Add the click twin:
pip install 'bucket-helper[cli] @ git+https://github.com/warith-harchaoui/bucket-helper.git@v0.2.2'

# HTTP server (FastAPI + uvicorn + python-multipart):
pip install 'bucket-helper[api] @ git+https://github.com/warith-harchaoui/bucket-helper.git@v0.2.2'

# MCP tools (fastapi-mcp) โ€” requires the [api] plumbing:
pip install 'bucket-helper[api,mcp] @ git+https://github.com/warith-harchaoui/bucket-helper.git@v0.2.2'

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 CLI โ€” bucket-helper <subcommand> (installed by default).
  • click CLI โ€” bucket-helper-click <subcommand> (install [cli] extra).
  • FastAPI HTTP โ€” uvicorn bucket_helper.api:app --host 0.0.0.0 --port 8000 (install [api] extra).
  • MCP tools โ€” bucket-helper-mcp (install [api,mcp] extras).

Both CLIs share the same subcommand names and flags โ€” pick your favourite.

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: LANDSCAPE.md (competitive positioning) and GUI.md (visual product design plan).

Author

Acknowledgements

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

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured