# @backblaze-labs/b2-mcp

MCP server for Backblaze B2 with frozen Phase 1 B2 and S3-compatible tool profiles

- **Type:** MCP server
- **Trust:** 85/100 (A), scored on the package rubric
- **Verification:** verified (build provenance)
- **Version:** 0.2.1
- **Author:** Backblaze
- **License:** MIT
- **npm:** @backblaze-labs/b2-mcp
- **Source:** https://github.com/backblaze-labs/b2-mcp
- **Compatible clients:** claude-code, cursor, copilot, gemini (basis: transport)

## Trust

85/100 (A), scored on the package rubric
- Publisher verified: no
- Build provenance: verified attestation
- npm trusted publishing (OIDC): yes
- Install scripts: nothing suspicious found
- Prompt-injection scan: not run
- Obfuscation scan: not run
- Evidence age: 0 days

## Security scan

- **Status:** clean
- **Scanned:** 2026-09-05T20:21:58.921Z
- **Version scanned:** 0.2.1
- **CVEs:** none found by OSV at scan time

## Tools

40 declared. Statically extracted from the shipped source — a floor on the surface, not a census.
- `b2_list_buckets` — List B2 buckets for the authorized account. Optionally filter by bucket ID, name, or type. When the key is bucket-scoped and no bucketId/bucketName filter is su
- `b2_create_bucket`
- `b2_delete_bucket` — Delete a B2 bucket. The bucket must be empty — all files and file versions must be deleted first.
- `b2_update_bucket` — Update persistent settings on an existing B2 bucket: visibility, metadata, CORS, lifecycle, default encryption, replication, Object Lock, and default retention.
- `b2_get_bucket_notification_rules` — Read the B2 event-notification webhook rules for a bucket. Use before b2_set_bucket_notification_rules to diff or preserve existing rules, because set replaces 
- `b2_set_bucket_notification_rules` — Replace the complete B2 event-notification webhook rule set for a bucket. Use b2_get_bucket_notification_rules first and submit the full desired rule set; this 
- `s3_head_bucket` — Check whether a B2 bucket exists and is reachable on the S3-compatible endpoint with the current credentials. Use this to validate S3-surface reachability (the 
- `s3_put_bucket_lifecycle` — Set S3 lifecycle rules on a B2 bucket; pass rules: [] to clear the S3 lifecycle configuration. Supports AbortIncompleteMultipartUpload, Expiration, and Noncurre
- `s3_get_bucket_location` — Get the region (location constraint) of a B2 bucket via the S3-compatible API. No native b2_* equivalent — used to verify region/endpoint pairing.
- `b2_report_usage_growth`
- `b2_rank_egress_leaders` — Rank top egress (downloaded bytes) by account or bucket over a period — default month-to-date. For 'who's downloading the most', 'where is egress concentrated'.
- `b2_list_largest_files` — List a bucket's largest objects by size via a live listing. For 'largest files', 'what's taking up space in <bucket>'. Give the bucket by name or bucketId; opti
- `b2_unfinished_uploads` — Find abandoned multipart uploads that silently consume storage in a bucket. For 'bucket bloat', 'stuck/incomplete uploads', 'wasted storage'. Returns count, old
- `b2_create_key`
- `b2_list_keys` — List the application keys associated with the B2 account. Does not return the actual key secrets — only key IDs, names, capabilities, and restrictions.
- `b2_delete_key` — Permanently delete a B2 application key. Use b2_list_keys first to verify applicationKeyId, keyName, capabilities, and dependent systems; use b2_create_key befo
- `b2_authorize_account` — Authorize with B2 and return account info including accountId, apiUrl, and downloadUrl. The server handles authorization automatically, but this tool is useful 
- `s3_create_multipart_upload`
- `s3_get_presigned_upload_part_url`
- `s3_complete_multipart_upload` — Finalize an S3-compatible multipart upload in B2 by assembling uploaded parts. Use only after s3_create_multipart_upload and s3_get_presigned_upload_part_url (o
- `s3_abort_multipart_upload` — Abort an in-progress S3-compatible multipart upload and release all associated storage.
- `s3_list_multipart_uploads` — List in-progress S3-compatible multipart uploads for a B2 bucket. Use to resume or audit unfinished uploads before s3_get_presigned_upload_part_url, s3_complete
- `s3_list_parts` — List the parts that have been uploaded for an in-progress S3-compatible multipart upload.
- `s3_upload_part_copy`
- `b2_update_file_legal_hold` — Set or clear a legal hold on a specific file version in B2. When a legal hold is active, the file cannot be deleted regardless of retention settings. Requires t
- `b2_update_file_retention` — Set or modify the retention policy on a specific file version in B2. Supports governance and compliance retention modes. In compliance mode, the retain-until da
- `s3_put_object` — Upload a SMALL object inline (≤1 MiB) to a B2 bucket — for manifests, sidecars, and tiny configs. Provide base64-encoded content or a local file path. For real 
- `s3_get_object` — Read a SMALL object inline (≤1 MiB, returned base64) — for manifests, sidecars, and configs the agent must inspect — or stream any size to a local path with sav
- `s3_delete_object` — Delete one B2 object through the S3-compatible API. Use s3_list_object_versions first when you need to target a specific version or delete marker; use s3_delete
- `s3_delete_objects` — Delete multiple objects from a B2 bucket with bounded SDK concurrency (up to 1000 objects).
- `s3_head_object` — Get metadata for a B2 object without downloading it. Returns content type, size, last modified, ETag, and custom metadata.
- `s3_copy_object` — Copy an object within B2 or between B2 buckets via B2's S3-compatible CopyObject API. The acl input is retained as a no-op S3 compatibility hint; B2 access foll
- `s3_list_objects_v2`
- `s3_list_object_versions`
- `b2_list_groups`
- `b2_create_group_member`
- `b2_eject_group_member`
- `b2_list_group_members`
- `b2_reserve_trial_create_account`
- `s3_get_presigned_url`

## Install

**Verdict: install** — No blocking findings and no open coverage gaps — safe to install as configured.
**Config** (claude-code):
```json
"{\n  \"mcpServers\": {\n    \"b2\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@backblaze-labs/b2-mcp\"\n      ],\n      \"env\": {\n        \"B2_APPLICATION_KEY_ID\": \"<YOUR_B2_APPLICATION_KEY_ID>\",\n        \"B2_APPLICATION_KEY\": \"<YOUR_B2_APPLICATION_KEY>\",\n        \"B2_MASTER_KEY_ID\": \"<YOUR_B2_MASTER_KEY_ID>\",\n        \"B2_MASTER_KEY\": \"<YOUR_B2_MASTER_KEY>\"\n      }\n    }\n  }\n}"
```
**Credentials it will ask for** (names only — Forge never holds a value):
- `B2_APPLICATION_KEY_ID` — B2 Application Key ID (required)
- `B2_APPLICATION_KEY` — B2 Application Key (required)
- `B2_MASTER_KEY_ID` — B2 Master Key ID (optional)
- `B2_MASTER_KEY` — B2 Master Key (optional)
Placeholders only. Forge never holds, brokers, or transmits a credential value — replace each <YOUR_NAME> in your own config file. Do not send a value back to Forge; no Forge endpoint accepts one.
- This entry needs 4 credentials (2 required). The generated config carries placeholders, so it will fail in the editor rather than at runtime if they are left unset.

## Blast radius

Critical blast radius — deletes data; holds an api key.
- Floor 60, ceiling 60 (tier: critical)
- This is impact, not likelihood. A high radius is not a defect: a filesystem server is supposed to write files. It is never part of the trust score.

## Machine-readable views of this entry

- Signed JSON: https://forgeregistry.com/api/v1/packages/%40backblaze-labs%2Fb2-mcp
- Install plan: https://forgeregistry.com/api/v1/packages/%40backblaze-labs%2Fb2-mcp/install-plan
- Alternatives: https://forgeregistry.com/api/v1/alternatives/%40backblaze-labs%2Fb2-mcp
- HTML page: https://forgeregistry.com/registry/%40backblaze-labs%2Fb2-mcp
- MCP: POST https://forgeregistry.com/api/mcp → `forge_get_package` / `forge_install_plan`

## About this document

Generated by Forge (https://forgeregistry.com) — a compact rendering of the same record served, signed, at the JSON URL above. Trust and scan facts are the registry's own measurements; anything Forge did not measure is named as unmeasured rather than omitted.
