Governed MinIO ops: capacity RCA, bucket exposure audit, ILM gaps, healing, 29 tools.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Disclaimer: Community-maintained open-source project. Not affiliated with, endorsed by, or sponsored by MinIO, Inc. or any storage vendor. Product and trademark names belong to their owners. MIT licensed.
Governed AI-ops for MinIO object storage β for the homelab and small/medium
self-hosted deployments where MinIO actually lives. Talks to the S3 API
(official minio SDK, SigV4), the admin API (bucket quota, server info),
the unauthenticated health endpoints (/minio/health/live|ready|cluster),
and the cluster metrics endpoint (/minio/v2/metrics/cluster, bearer-token
or public auth) β with a built-in governance harness: a unified audit log,
a token/runaway budget guard, undo-token recording, and a descriptive risk
tier on every audit row. Self-contained: no external skill-family dependency.
Four flagship analyses, plus the guarded reads and writes around them:
capacity_rca β capacity vs used, offline drives/nodes, per-drive
hotspots and imbalance β each finding as cause + suggested action
(nearfull/full thresholds are named constants, not magic).bucket_exposure_audit β every bucket scored and ranked for
anonymous/public policy statements (read and, far worse, write), missing
default encryption, versioning off, no lifecycle.lifecycle_gap_analysis β the storage ILM should be reclaiming but
isn't: versioned buckets with no noncurrent expiry (old bytes accrue
forever), incomplete multipart uploads with no abort rule (invisible
space), large buckets with no lifecycle β with a clearly-labelled
reclaimable estimate.healing_health β heal backlog and per-erasure-set write-quorum
risk: how many more drive failures each set can tolerate, which sets are
healing, where heal errors are piling up.bucket_delete is refused unless the bucket is verifiably empty
(including versions and delete markers) and remove_incomplete_uploads
only touches uploads older than a safety window.minio-aiops ...): init, overview, doctor, health check/status, capacity rca/usage, heal status/drives/nodes, bucket ls/info/objects/audit/ilm-gap/uploads plus guarded writes (bucket versioning-set/policy-set/lifecycle-set/quota-set/purge-uploads/delete),
secret set/list/rm/migrate/rotate-password, mcp. Destructive commands
take --dry-run and double-confirm.minio-aiops mcp or minio-aiops-mcp): the full 48
tools (29 read, 19 write), every one wrapped with the bundled
@governed_tool harness. The CLI is a convenience subset; the MCP surface
is the whole tool. CLI writes delegate to the same governed functions, so
they are audited identically.~/.minio-aiops/secrets.enc (Fernet + scrypt) β never plaintext on
disk. Unlock with a master password from MINIO_AIOPS_MASTER_PASSWORD
(MCP/CI) or an interactive prompt (CLI).MINIO_PROMETHEUS_AUTH_TYPE=public are scraped directly; for the default
(jwt) mode the bearer token is derived from the stored credentials β
no extra secret to manage.| Group | Tools | Count | R/W |
|---|---|---|---|
| Health | health_live, health_ready, health_cluster, cluster_status, fleet_overview | 5 | read |
| Capacity | capacity_rca (flagship), usage_by_bucket | 2 | read |
| Healing | healing_health (flagship), drive_status, node_status | 3 | read |
| Exposure / ILM | bucket_exposure_audit (flagship), lifecycle_gap_analysis (flagship) | 2 | read |
| Buckets | bucket_ls, bucket_info, bucket_policy_get, bucket_lifecycle_get, bucket_versioning_get, bucket_quota_get, object_ls, incomplete_uploads_ls, server_info | 9 | read |
| Writes | set_bucket_policy (med, undo), delete_bucket_policy (med, undo), set_versioning (med, undo), set_lifecycle (med, undo), delete_lifecycle (med, undo), set_bucket_quota (med, undo) | 6 | write |
bucket_delete (high, dry-run, empty-only, irreversible), remove_incomplete_uploads (med, dry-run, priorState only) | 2 | write | |
| Object lock (WORM) | bucket_lock_config, object_lock_status, diagnose_retention_gaps (flagship) | 3 | read |
bucket_create (med, undo β the only way to enable object lock), set_default_retention (high, undo), clear_default_retention (med, undo), set_legal_hold (med, undo) | 4 | write | |
set_object_retention (critical, dry-run, extend-only, no undo exists) | 1 | write | |
| IAM | iam_users, iam_groups, iam_policies, diagnose_iam_exposure (flagship) | 4 | read |
create_user (med, undo, secret redacted + never returned), set_user_status (med, undo), attach_user_policy (med, undo), detach_user_policy (med, undo) β all refused for this tool's own credential | 4 | write | |
remove_user (high, dry-run, no undo: MinIO keeps no recoverable secret) | 1 | write | |
| Undo | undo_list, undo_apply | 2 | read + replay |
Totals: 48 tools β 29 read (incl. undo_list), 19 write (incl. undo_apply).
It delivers MinIO object-storage operations β reads and writes β accurately and efficiently, and records every one of them. It does not decide whether a write is allowed to happen. That is the agent's judgement, or the permission of the access key you connect it with: give the key a read-only IAM policy and the writes fail at the server β the place that actually owns the permission.
So there is no read-only switch, no policy file, no approval gate to configure.
The one thing the tool guarantees is that nothing is silent: every call, over
MCP and over the CLI alike, lands an audit row in ~/.minio-aiops/audit.db,
and reversible writes still capture their real prior state and record an inverse
undo descriptor.
Each tool declares a
risk_level, kept in agreement with its[READ]/[WRITE]documentation tag by a test, and carried into the audit row as a descriptive tier β so a reviewer can see at a glance that a row was a high-risk delete. It is a label, not a gate.
Running a smaller / local model? See agent-guardrails.md β it lists the guardrails this tool enforces for you (so you don't spend prompt budget restating them) and gives a ready-made system prompt for what's left.
Run as an MCP server (stdio):
Env-block caveat: MCP clients launch the server without a TTY and without your shell profile, so the master password cannot be prompted for and an
exportin~/.zshrcis not seen β it must be passed in the client'senvblock (or the client process's environment) as above. Everything else (targets, TLS, region, metrics mode) comes from~/.minio-aiops/config.yamlwritten byminio-aiops init.
~/.minio-aiops/config.yaml (non-secret connection details only):
The secret key is stored with minio-aiops secret set lab1 (encrypted; a
legacy MINIO_LAB1_SECRET_KEY env var is honoured as a fallback with a
migration warning).
Every MCP tool passes through the bundled @governed_tool harness:
MINIO_AUDIT_APPROVED_BY / MINIO_AUDIT_RATIONALE annotations) is logged to
~/.minio-aiops/audit.db (relocatable via MINIO_AIOPS_HOME).risk_level is recorded on the
audit row as a descriptive tier (bucket_delete is high). It is a label for
the reviewer, not a gate: there is no read-only switch, policy file, or
approval gate, and MINIO_AUDIT_APPROVED_BY / MINIO_AUDIT_RATIONALE are
optional annotations recorded when set, never required.server_info) need admin-capable keys. Generic S3 services are not
a target: the health/metrics/admin surfaces used here are MinIO-specific.public and bearer-token (default) auth modes are supported.connection.py.high and named PUBLIC_WRITE_POLICY), and
the governance loop (real set_versioning β undo restoring it to Suspended, the
correct S3 inverse). Distributed / multi-node MinIO is still unverified β
healing was never exercised against a real degraded drive or erasure set β as are
lifecycle/quota writes and TLS endpoints. See
docs/VERIFICATION.md; minio-aiops doctor is the fastest
live check.Site replication status, IAM policy authoring (creating and editing policy documents β attachment is supported), group membership writes, tiering to remote storage β not here yet. Open an issue or send a PR β feedback and contributions are welcome.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/minio-aiops)<a href="https://allmcps.com/mcp/minio-aiops"><img src="https://allmcps.com/api/badge/minio-aiops?style=directory" alt="MinIO AIops on AllMCPs" /></a>