Skip to content

v0.1.0

Choose a tag to compare

@goanpeca goanpeca released this 18 Aug 18:49
· 129 commits to main since this release
v0.1.0
7f22207

@backblaze-labs/b2-mcp v0.1.0

Added

  • Added docs/AUTHENTICATION.md plus public-claim drift coverage for OAuth
    resource-server behavior, B2 credential custody, CLI/env references, package
    naming, and support-policy claims.
  • Added a bundled Phase 1 B2 skills pack with manifest-backed package-surface
    validation for backup/restore, least-privilege keys, Object Lock,
    lifecycle/cost hygiene, migration, and incident response playbooks.
  • Added B2_OAUTH_JWKS_URI local JWT access-token verification (using the
    jose library for JWK import and JWS signature verification) against cached
    JWKS with bounded refresh, made B2_OAUTH_INTROSPECTION_ENDPOINT optional
    for JWKS-only deployments, and added JWT/JWKS cache, timeout, retry, and
    clock-skew settings.
  • Added the hosted deployment matrix, shared deployment security contract,
    provider guides, troubleshooting checklist, and an experimental Cloudflare
    Worker adapter with a Wrangler runtime smoke gate.
  • Added an OAuth-secured Vercel adapter for the shared HTTP MCP pipeline,
    including protected-resource metadata, server-mode hosted deployment
    configuration, and headers / server / principal smoke credential modes.
  • Added a digest-pinned production Docker image, container CI smoke coverage,
    signed multi-platform GHCR release publishing, and Docker run docs for HTTP
    and stdio transports.
  • Added the supported customer-hosted container reference deployment to the
    published npm package with bounded logs, pinned runtime/proxy images, and
    package/build-context secret exclusion policy.
  • Added POSIX B2_LOG_FILE support for redacted structured JSON file logging,
    with owner-only file handling and SIGHUP reopen support for external rotation.
  • Added B2_SECRET_SINK=file for durable-secret-producing tools, defaulting to
    an owner-only local JSONL ledger on stdio while HTTP/serverless remains
    fail-closed unless an explicit sink path is configured.
  • Added issue #64 release verification for the unified CLI, published package
    docs, changelog release-note extraction, checksums, idempotent trusted npm
    publishing, and GitHub Release creation from the verified tarball.
  • Added deterministic test-layer scripts, JUnit/Vitest summaries, coverage
    summaries, packed-package install coverage, and the pnpm run verify
    no-credential quality gate.
  • Added live-safe test reporting: live layers keep JSON summaries but avoid
    third-party JUnit reporters while B2 credentials are present.
  • Added the official B2 SDK adoption contract, architecture record, and
    drift guard for the 40-tool SDK parity matrix.
  • Added an exact @backblaze-labs/b2-sdk@0.2.0 production dependency pin for
    the reviewed SDK migration boundary.
  • Added CODEOWNERS, version/build-pinned conda environment metadata, release process
    documentation, and public contract skeleton documents for Phase 1 ownership.
  • Added policy coverage for live workflow secret gates and the Streamable HTTP
    smoke helper contract.
  • Added explicit environment, per-request header, server-managed, and
    verified-principal B2 credential providers.
  • Added central recursive MCP response sanitization for secret-bearing field
    names, labeled tokens, configured B2 credentials, and audit/error paths.
  • Added opt-in token-efficient TOON tool-result text for structured successes
    via a repo-owned encoder for spec 4.1, while using compact JSON as the
    unset/default mode (B2_MCP_OUTPUT_FORMAT=json for explicit config).
  • Added a checked-in runtime dependency and package-footprint budget with CI
    enforcement and PR/release summary artifacts.
  • Added the frozen Phase 1 MCP tool-profile contract artifact, generated
    profile reference, and deterministic modern/legacy tools/list fixtures.
  • Added an advisory pnpm run smoke:client external MCP SDK client smoke for
    local stdio negotiation and contract-surface evidence without live B2 calls.
  • Added a locked pnpm run smoke:inspector MCP Inspector CLI smoke that runs
    with fake credentials from an isolated environment.

Changed

  • Adopted tag-driven release publishing for issue #187: pnpm version now
    promotes the changelog before git push --follow-tags starts the protected
    publish workflow from trusted ci-green resolver code, while keeping the
    existing SBOM, live-contract, package-budget, GHCR, manual publish guard, and
    ci-green gates.
  • Bumped @backblaze-labs/b2-sdk to exact-pinned 0.3.0 and moved
    Partner/Groups read/eject/list tooling onto the SDK /partner operations;
    durable-secret create/reserve tools now run when the reviewed secret sink is
    active and remain unavailable stubs when B2_SECRET_SINK=off.
  • Restored the transport-independent b2_create_key lockdown: key-management
    grants and unscoped write/delete keys are refused by default, optional
    B2_MAX_KEY_DURATION_SECONDS caps lifetime, and HTTP inline secret responses
    require the dedicated B2_ALLOW_INLINE_SECRETS=true opt-in.
  • Defaulted JWT/JWKS verification to RS256; operators can still opt into
    other supported algorithms with B2_OAUTH_ALLOWED_ALGORITHMS.
  • Documented the exported OAuth config TypeScript surface change: token-cache
    fields now use tokenCache* names and OAuthResourceServerConfig models
    verifier-specific introspection or JWKS modes. The legacy
    B2_OAUTH_INTROSPECTION_CACHE_* environment variables remain accepted.
  • Moved all s3_* data-plane object, presigned URL, multipart, bucket, and
    lifecycle paths onto the AWS S3 SDK configured for B2's S3-compatible
    endpoint, while native b2_* control-plane tools remain on the B2 SDK.
  • Require non-browser-executable contentType values for s3_put_object and
    presigned PutObject URLs so upload URLs cannot be minted without a signed
    content-type constraint.
  • Added /ready alongside /health for HTTP deployments and gated readiness
    metadata behind the same Host/Origin checks used for MCP traffic.
  • Replaced the ts-node dev runner with exact-pinned tsx@4.23.11 and
    explicitly denied esbuild install builds in pnpm-workspace.yaml.
  • Split unit, contract, modern protocol, legacy protocol, slow, package, and
    live test files by stable suffix so pnpm test works from a clean checkout
    without relying on dist/.
  • Migrated deterministic test layers from Jest to Vitest projects and extended
    coverage to every non-live layer.
  • Restored pnpm test typechecking, made package-install
    verification use the pnpm cache offline, and kept it off the ci-green
    deploy-gating path.
  • Canonicalized repository, package, workflow, security, and setup metadata for
    backblaze-labs/b2-mcp.
  • Aligned package metadata on the 0.1.0 Phase 1 release line.
  • Aligned the enforced runtime policy with the official B2 SDK floor:
    engines.node is >=22.3.0, CI verifies production dependencies and the full
    toolchain on Node.js 22.23.1, 24, and 26, local and live 22.x jobs use a
    patched Node 22 LTS release, the packed-package smoke runs on the Node.js
    22.3.0 engine floor, and workflow drift is checked from runtime-policy.json.
  • Kept coverage, slow lifecycle, package install, runtime floor, package budget,
    and supply-chain checks as independent required CI gates, with CODEOWNER
    review required for protected files.
  • Migrated linting and Biome-supported formatting from ESLint and Prettier to
    Biome while keeping the existing package script names used by CI and
    pnpm run verify; Markdown and YAML files are no longer part of the automated
    format gate.
  • Exact-pinned the runtime-sensitive opossum dependency and changed the packed
    consumer smoke gate to exercise a fresh lockfile-less npm install path.
  • Migrated HTTP and stdio serving to the MCP TypeScript SDK v2 modern entry
    points for MCP 2026-07-28.
  • Removed the unused @aws-sdk/s3-presigned-post dependency because S3 POST
    Object form uploads are not in the Phase 1 MCP contract.
  • Made b2-mcp the canonical CLI binary while preserving b2-mcp-server as a
    transition alias.
  • Switched the smoke helper to Streamable HTTP /mcp and the generated Phase 1
    tool-profile contract.
  • Tightened the smoke helper to require an expected frozen tool profile by
    default and compare normalized tool-contract hashes, with an explicit
    any-profile opt-in for exploratory local runs.
  • Read-only credentials no longer expose or allow PutObject on
    s3_get_presigned_url; upload presigned URLs now require the same
    confirmation policy as destructive write paths.
  • Reworked live B2 contract workflows to use explicit test:live:b2-*
    commands, protected manual/main/scheduled/release triggers, ci-green
    validation for reusable release calls, test-owned mcp-contract-* resources,
    serialized Node.js 22.23.1/24/26 coverage, best-effort cleanup, and a
    scheduled janitor instead of customer bucket fixtures.
  • Hardened live smoke and cleanup by correlating smoke with successful
    deployment SHAs, adding bounded MCP retries/timeouts, requiring a live
    test-account allowlist before janitor deletion, and clearing Object Lock
    protections before bypass-governance version cleanup.
  • Made release publishing attach the SBOM only after npm publish succeeds and
    removed whole-suite retries from live B2 contract publication evidence.
  • Replaced b2_create_key, b2_create_group_member, and
    b2_reserve_trial_create_account with unavailable compatibility stubs until a
    reviewed out-of-band secret sink exists.
  • Structured successful tool results now keep canonical sanitized JSON in
    structuredContent while emitting only one selected text serialization in
    content; the default text JSON changed from 2-space pretty-printed JSON to
    compact JSON, and errors and concise status strings remain plain text.
  • HTTP readiness now rejects unsupported B2_MCP_OUTPUT_FORMAT values and TOON
    preflight failures in every credential mode before serving traffic.
  • Centralized the remaining AWS S3 peer imports behind the approved temporary
    S3-material adapter while the upstream SDK helper gap is open.

Fixed

  • Made hosted live B2 test selection fail loudly with B2_REQUIRE_LIVE_TESTS=1
    when credentials are missing, and documented the required live-test secrets
    and key capabilities.

Security

  • Added a keyv/cacheable supply-chain denylist and IOC scanner, disabled npm
    lifecycle scripts for normal installs, isolated provenance-backed npm
    publishing to a protected prebuilt-tarball workflow, and documented the
    branch/artifact/tarball scan plus host and credential response runbook for
    issue #89.
  • Added the production npm audit gate, durable release SBOM attachment, pinned
    zizmor workflow scanning, and cooled-down Dependabot grouping for issue #62.
  • Hardened the denylist scanner internals with importable schema, lockfile, and
    scanner modules; tarballs with path traversal or link members are rejected
    before extraction, and release tags may publish after later ci-green moves
    as long as the tag remains reachable from that protected history.
  • Patched all currently reported npm advisories by updating brace-expansion,
    js-yaml, and Babel core, and replaced the MCP Node adapter with a minimal
    platform-only bridge so vulnerable @hono/node-server code is absent from
    both development and published dependency graphs.
  • Added explicit read-only workflow permissions and consolidated the safe AWS
    SDK, Axios, and TypeScript dependency updates from superseded Dependabot PRs.

Removed

  • Removed the b2_create_key lockdown toggles
    B2_ALLOW_KEY_MGMT_GRANTS, B2_ALLOW_UNSCOPED_KEYS, and
    B2_MAX_KEY_DURATION_SECONDS because the durable-secret-producing handler is
    no longer exposed in Phase 1.