Reported issues for Backblaze B2 MCP Server
Pod holds 21 of 33 GitHub reports that passed its relevance review. This can include external user reports, maintainer-confirmed bugs, and concrete feature gaps. Treat them as evidence to inspect, not a count of distinct defects.
Back to Backblaze B2 MCP Server.
Most discussed
Support MCP 2026-07-28 stateless transport
Goal
Support the MCP 2026-07-28 stateless protocol and Streamable HTTP transport
while preserving deliberate backward compatibility for older clients during
the migration window.
Why
The 2026-07-28 MCP specification removes the initialize / initialized
exchange, protocol-level sessions, the Mcp-Session-Id header, standalone GET
streams, and DELETE session termination. Each request is self-describing and
can be routed to any server instance.
The current B2 MCP server…
Read the thread · 2026-08-16 · closed · outside contributor · 2 comments
[b2-mcp] Submit to the Claude Connectors Directory (desktop-extension form)
List the official Backblaze B2 MCP server in Anthropic's Claude Connectors Directory. Part of the discoverability epic #297 (see also #300).
This is the one-time human submission process. The engineering that produces the artifact it needs lives in #358 (build + attach the b2-mcp.mcpb desktop-extension bundle on every release).
Path: Desktop Extension (MCPB)
b2-mcp is a local stdio server that each user runs themselves with their own B2 keys, so it is distributed as a…
Read the thread · 2026-09-03 · open · outside contributor · 1 comment
[b2-mcp] Discoverability: list in OpenAI ChatGPT App Directory (needs hosted OAuth deployment decision)
Track listing the Backblaze B2 MCP server in OpenAI's ChatGPT App Directory (Apps SDK).
Part of the discoverability epic #297 (see also #300).
Why this is a product decision, not just a submission
ChatGPT Apps run against a hosted, remote /mcp URL with OAuth 2.0. The plugin submission portal (OpenAI Platform Dashboard, verified org) requires a production HTTPS /mcp endpoint, domain verification, explicit CSP domains, OAuth auth, reviewer credentials, and 5 positive + 3…
Read the thread · 2026-09-02 · open · outside contributor · 1 comment
[v0.1.2 QA] Findings from Claude Desktop and Claude Code client sessions against live B2
Summary
I operated the MCP server against real B2 accounts through two MCP clients — Claude Desktop and Claude Code — and this issue groups the findings so they can be prioritized or re-scoped as needed. Each finding is filed as its own issue and linked below.
Both sessions ran the server on stdio, built from source at v0.1.2. Findings were re-verified against main (ce044ec) before filing; all nine are still present in current code.
Test environment
**Session A — Claude…
Read the thread · 2026-08-28 · closed · 1 comment
[b2-mcp] Add credential-free local MCP runtime smoke
Context
A fresh local Quality Keeper run found strong deterministic coverage: 1,482 test cases passed across unit, contract, protocol, package, compatibility, and security checks.
QK also selected runtime smoke testing and ran pnpm run smoke, but that command requires MCP_URL. With no deployed endpoint configured, it exited with Missing required env: MCP_URL.
That behavior is correct for the existing remote smoke. The remaining gap is a separate credential-free local startup smoke…
Read the thread · 2026-08-18 · closed · outside contributor · 1 comment
[b2-mcp] Add OpenTelemetry tracing and metrics (opt-in, OTLP export)
Objective
Add opt-in OpenTelemetry instrumentation (distributed traces and metrics) to b2-mcp so operators can observe tool calls, B2/S3 and OAuth dependency calls, latency, errors, and saturation in any OTLP-compatible backend. b2-mcp has no telemetry today; observability is limited to pino structured logs and the /health endpoint. The codebase is already telemetry-safe (identifiers are a non-secret SHA-256 fingerprint, never raw keys or tokens), so instrumentation can be added without…
Read the thread · 2026-08-16 · open · outside contributor · 1 comment
[b2-mcp] Support MCP logging (setLevel + structured notifications)
Objective
Implement MCP logging (logging/setLevel and notifications/message) so a client can set a log level and receive structured, redacted log events describing what the server is doing.
What could be emitted
Tool execution events (tool name, outcome, duration) with arguments redacted.
Destructive-gate decisions: which policy applied, whether elicitation was required, and its outcome.
Auth outcomes: accepted or rejected and the reason class, with all token and key material…
Read the thread · 2026-08-16 · closed · outside contributor · 1 comment
[b2-mcp] Add MCP prompts for guided B2 workflows
Objective
Register MCP prompts (prompts/list, prompts/get) so users can invoke reusable, parameterized workflows (client slash-command style) that guide the model through the correct sequence of b2-mcp tool calls.
What could be exposed
Candidate prompts, each parameterized:
Provision a bucket with Object Lock compliance (inputs: name, mode, retention period), guiding create-bucket then lock and retention configuration.
Audit public exposure: list buckets, flag public ones, and…
Read the thread · 2026-08-16 · closed · outside contributor · 1 comment
Most recent
[b2-mcp] Add Troubleshooting/FAQ to README (npx ENOTEMPTY cache crash) + robust install guidance
Problem
A user following the documented Claude Desktop npx -y @backblaze-labs/b2-mcp setup hit a hard startup failure that looks like a b2-mcp bug but is actually a corrupted/stale npm _npx cache. The server reached server.ready (36 tools) and was then killed by npm's own cache-cleanup step:
npm error code ENOTEMPTY
npm error syscall rmdir
npm error path /Users/<user>/.npm/_npx/<hash>/node_modules/@aws-sdk/nested-clients/dist-es
npm error errno -66
npm error ENOTEMPTY: directory…
[Read the thread](https://github.com/backblaze-labs/b2-mcp/issues/371) · 2026-09-02 · open · outside contributor · 0 comments
### [b2-mcp] Credential-free tool discovery on both transports (unblock Glama release; stop scanner hacks)
## Problem
The server cannot be **tool-enumerated without valid B2 credentials** on either transport, which blocks credential-free directory scanners (Glama's containerized build test/inspection, and any MCP inspector) and forces ugly per-directory workarounds (`unset`, `B2_REGISTER_ALL_TOOLS`, editing the advertised env schema).
This surfaced trying to create a Glama **release** (containerized build → security scan → one-click deploy → A grade). Glama's build test *starts the server and…
[Read the thread](https://github.com/backblaze-labs/b2-mcp/issues/363) · 2026-09-02 · closed · outside contributor · 0 comments
### server: stdio should enumerate tools without credentials (discovery mode)
## Problem
Directory services (mcp.so, Glama build test, LobeHub `plugin init`) launch the stdio server with **no B2 credentials** to enumerate tools. Today `loadConfig()` throws `missing_credentials` and the process exits(1):
MCP error -32000: Connection closed ({"err":"Credential or capability resolution failed","msg":"server.fatal"})
So `tools/list` never runs and directories show "No tools detected". The only workaround is placeholder creds + `B2_REGISTER_ALL_TOOLS=true`, which…
[Read the thread](https://github.com/backblaze-labs/b2-mcp/issues/356) · 2026-09-01 · closed · outside contributor · 0 comments
### [QA F20] stdio bootstrap capability fetch can deadlock the MCP handshake
**Describe the bug**
<!-- Clear, concise description. Do NOT include B2 application keys or any credential values. -->
`startStdio()` awaits `fetchCapabilities()` — a live B2 authorize — before the transport is attached and before the first log line is written. Verified on `main` (`ce044ec`): `src/index.ts:48` awaits `fetchCapabilities(config)`; `serveStdio()` is only reached at `src/index.ts:64`.
The SDK retry budget is 4 attempts x 30s plus backoff (~127s); MCP clients cancel `initialize`…
[Read the thread](https://github.com/backblaze-labs/b2-mcp/issues/320) · 2026-08-28 · closed · 0 comments
### [QA F19] b2_egress_leaders reports a measured zero when no usage-report snapshots exist
**Describe the bug**
<!-- Clear, concise description. Do NOT include B2 application keys or any credential values. -->
When Usage Reports is enabled but no report snapshots exist yet, `b2_egress_leaders` reports `total_egress_gb: 0` with an empty leaderboard and no qualification of any kind. "No data has been collected" and "your egress was genuinely zero" are returned as the same answer, and the model passes the zero on as a fact.
Its sibling `b2_usage_growth`, reading the same reports on…
[Read the thread](https://github.com/backblaze-labs/b2-mcp/issues/319) · 2026-08-28 · closed · 0 comments
### [QA F16] Audit log cannot distinguish a model-supplied confirm from a human approval
**Describe the bug**
<!-- Clear, concise description. Do NOT include B2 application keys or any credential values. -->
#134 kept the `confirm` parameter *"for clients without elicitation and for the audit trail."* The audit-trail half does not currently work: a `confirm: true` supplied by the model and one supplied by a human are **indistinguishable after the fact** in the `tool.call` records.
The classification is already correct — #203 delivered stable `destructive_confirmation_required` /…
[Read the thread](https://github.com/backblaze-labs/b2-mcp/issues/318) · 2026-08-28 · closed · 0 comments
### [QA F15] The confirm fallback is satisfied by the model on clients without elicitation (follow-up to #134)
**Describe the bug**
<!-- Clear, concise description. Do NOT include B2 application keys or any credential values. -->
**This is not a request to remove the `confirm` fallback.** #134 explicitly designed it that way — *"the current `confirm: true` parameter is model-satisfiable (a prompt-injected model can set it), so it is a deliberate two-step and audit point, not real human consent"* — and its scope of work says to *"keep the `confirm: true` fallback for clients without elicitation."*…
[Read the thread](https://github.com/backblaze-labs/b2-mcp/issues/317) · 2026-08-28 · closed · 0 comments
### [QA F10] Support clearing S3 lifecycle configuration (empty rules / DeleteBucketLifecycle)
From #201 (finding 10).
`s3_put_bucket_lifecycle` with `rules: []` is schema-valid but the provider rejects the generated config with `MalformedXML` (HTTP 400). There is no delete-lifecycle tool, and clearing via native `b2_update_bucket` is discouraged because it regenerates S3 rule IDs.
Impact: medium lifecycle-management gap.
Expected: add an S3 delete-lifecycle tool, map `rules: []` to DeleteBucketLifecycle, or reject empty lists in the schema and document the supported cleanup path.
[Read the thread](https://github.com/backblaze-labs/b2-mcp/issues/214) · 2026-08-20 · closed · outside contributor · 0 comments
### [QA F9] s3_get_presigned_url PutObject: make contentType conditionally required, not a 500
From #201 (finding 9).
The `s3_get_presigned_url` schema marks `contentType` optional for `PutObject`, but omitting it fails at runtime with `HTTP 500: Presigned PutObject URLs requires a signed contentType`. Supplying `contentType` works.
Impact: medium. An apparently valid tool call fails with a server error.
Expected: make `contentType` conditionally required when `operation` is `PutObject`, or return a clear validation/client error instead of `internal_error`/500. (The live test now pins…
[Read the thread](https://github.com/backblaze-labs/b2-mcp/issues/213) · 2026-08-20 · closed · outside contributor · 0 comments
### [QA F8b] b2_largest_files/b2_unfinished_uploads must resolve via the authorized bucket, not unfiltered listBuckets()
From #201 (finding 8). Priority: HIGH.
`b2_largest_files` and `b2_unfinished_uploads` return `HTTP 401` even with the exact authorized bucket name/ID, because both resolve the bucket by first calling `b2Client.listBuckets()` with no filter, which a bucket-scoped key cannot do.
Impact: HIGH. These tools are unusable with the recommended bucket-scoped key.
Expected: resolve the supplied bucket using the authorized name/ID directly or pass the authorized bucket filter during resolution; or omit…
[Read the thread](https://github.com/backblaze-labs/b2-mcp/issues/212) · 2026-08-20 · closed · outside contributor · 0 comments
### [QA F8a] b2_list_buckets must honor allowedBuckets when no filter is supplied
From #201 (finding 8). Priority: HIGH.
With a key scoped to one bucket, authorize returns the bucket in `allowedBuckets`, but `b2_list_buckets({})` returns `HTTP 401` (empty provider message). Passing the authorized `bucketId` succeeds. `toBucketFilters()` does not use `allowedBuckets` when the caller omits a filter.
Impact: HIGH. Bucket-scoped least-privilege keys are the recommended configuration.
Expected: automatically constrain native bucket listing to the authorized bucket scope when…
[Read the thread](https://github.com/backblaze-labs/b2-mcp/issues/211) · 2026-08-20 · closed · outside contributor · 0 comments
### [QA F7a] Derive S3/report region from the authorize response instead of defaulting B2_REGION
From #201 (finding 7). Priority: HIGH.
`B2_REGION` defaults to `us-west-004`. A valid key whose authorize response advertises `us-east-005` starts up and authorizes, but S3/report tools fail with `HTTP 500: Authorized B2 S3 endpoint must match s3.us-west-004.backblazeb2.com`. `b2_usage_growth` and `b2_egress_leaders` reproduce immediately; `B2_REGION=us-east-005` fixes it. The server already receives the authoritative `s3ApiUrl` from `b2_authorize_account`.
Impact: HIGH for any account…
[Read the thread](https://github.com/backblaze-labs/b2-mcp/issues/209) · 2026-08-20 · closed · outside contributor · 0 comments
### [QA F3] Server-issued skills instructions do not match the shipped skills pack
From #201 (finding 3).
Server-issued instructions advertise backup / DR / SaaS multi-tenant / AI-training / AI-inference playbooks, but `skills/pack.json` ships `b2-backup-restore`, `b2-incident-response`, `b2-least-privilege-keys`, `b2-lifecycle-cost-hygiene`, `b2-migration`, `b2-object-lock`. The install note is Claude-specific though the server targets any MCP client.
Impact: low, but every modern MCP client receives these instructions.
Expected: derive/review server instructions against…
[Read the thread](https://github.com/backblaze-labs/b2-mcp/issues/205) · 2026-08-20 · closed · outside contributor · 0 comments
The remaining reports are on [the project's issue tracker](https://github.com/backblaze-labs/b2-mcp/issues).