Tags

Tags give the ability to mark specific points in history as being important
  • v0.4.15

    Fixes the documented `/mcp` endpoint for Streamable HTTP clients that do not
    follow redirects.
    
    - `POST /mcp` returned `307` to `/mcp/` because the raw ASGI mount matched only
      the slash form. This broke MCP clients that retain the documented `/mcp` URL
      and do not follow redirects on Streamable HTTP requests.
    - The app now normalizes only the exact `/mcp` path before routing. Bearer auth
      remains outermost, `/mcp/` still works, and the other HTTP routes keep their
      existing slash behavior.
    - MCP contract tests now disable redirect following and cover both endpoint
      forms, so another redirect cannot pass unnoticed.
    - Removed stale wording from the CI workflow comment. No behavior change.
  • v0.4.14

    v0.4.14: refresh MCP dependencies and lock the Python environment
    
    Refreshes the MCP stack and locks the Python dependency graph.
    
    - Upgraded the MCP SDK to 1.28.1 and Black to 26.3.1. Runtime and
      development images now install strictly from uv.lock.
    - Added a Streamable HTTP MCP contract test that initializes the mounted route,
      lists tools, and calls mailboxes through the application.
    - Fixed package update commands for exact pins and the dev group.
    - Aligned runtime, package, health example, and Codex plugin versions.
  • v0.4.13

    v0.4.13: fix IMAP command injection in folder/uid/search (issue #1)
    
    Fixes an IMAP command injection vulnerability (issue #1). Closes #1.
    
    - The folder, uid and search values that reach the IMAP client were
      string-interpolated into IMAP commands and handed to Python's imaplib, which
      does not sanitize its own arguments. A CR/LF in any of them (reachable from an
      ordinary %0D%0A in an HTTP query or path parameter) ended the current command
      and spliced a second, attacker-chosen IMAP command onto the same
      authenticated connection, including a STORE +FLAGS (\Deleted) + EXPUNGE pair
      that deletes a whole folder through the read-only message routes.
    - Every such value is now validated before it reaches imaplib: folder, search
      and structured search terms (including since/before) reject CR, LF and NUL;
      uid must be digits and sequence-set punctuation only; and folder names have
      any embedded " and \ escaped so they cannot break out of the IMAP quoted
      string. The checks live in imap_client, so both the HTTP API and the MCP
      server inherit them.
    - Added an in-process mock IMAP server and an IMAP test suite: the happy path
      (list, fetch, structured search) plus the injection cases, including the
      verbatim issue #1 payload driven through the read-only GET route.
  • v0.4.12

    v0.4.12: fix the CI lint failure so the image builds and publishes
    
    Fixes the CI lint failure introduced by v0.4.11 so the image builds and publishes.
    
    - v0.4.11 added make lint to CI for the first time, which surfaced a pre-existing flake8
      E501: a 103-character line in src/mailboxd/server.py. The lint job failed and the image
      build and publish steps, which depend on it, were skipped. Wrapped the line so flake8
      passes. No behavior change.
  • v0.4.11

    v0.4.11: CI lints, tests and security-scans before building the image
    
    CI now lints, tests, and security-scans the code before building the image, via
    the generic reusable code-workflow.
    
    - New code pipeline job runs make lint (flake8 + mypy), make test (pytest unit +
      docker-in-docker integration), and make sec, and the image build now waits on
      it. The pipeline previously built and published the image without running any
      of these.
    - New make sec: semgrep, bandit and pip-audit run in parallel and their findings
      merge into sec.sarif for the GitHub Security tab. It never fails the build;
      findings are reported, not gated. The scanners live in an isolated venv in the
      dev image so semgrep's bundled mcp pin cannot collide with the project's
      mcp==1.9.0.
    - Removed the make check alias; use make lint, make test, make sec.
    - Kept .telemetry/ out of git and out of the image.
  • v0.4.10

    v0.4.10 — CI plumbing only, no code changes
  • v0.4.9

    v0.4.9 — document the missing Codex install command
  • v0.4.8

    v0.4.8 — rename the plugin from docker-mailbox to mailbox
  • v0.4.6

    v0.4.6 — CI status badge
  • v0.4.5

    bcdc8a02 · v0.4.5: add README badges ·
    v0.4.5 — README badges
  • v0.4.4

    v0.4.4 — list on the official MCP Registry (server.json + OIDC publish)
  • v0.4.3

    v0.4.3 — third-party license notices (THIRD_PARTY.md + LICENSES/)
  • v0.4.2

    v0.4.2 — de-duplicate docker-mailbox skill deletion notes (docs only)
  • v0.4.1

    v0.4.1 — security-documentation hardening for docker-mailbox skill
  • v0.4.0

    v0.4.0 — ClawHub plugin; pipeline publishes skill + plugin
  • v0.3.1

    v0.3.1 — ClawHub skill publishing + .agents/skills layout
  • v0.3.0

    docker-mailbox v0.3.0 — reader mode
    
    `?reader=true` on message fetch (HTTP + MCP) adds a `body_reader` field —
    the HTML body flattened to clean markdown via html2text. Drops styles,
    scripts, tracking pixels, and table chrome; keeps headings, inline links,
    bold/italic. Built for LLMs that don't want to parse raw HTML.
    
    Original body_text/body_html still returned; reader is additive. Off by
    default to keep payload size sane on bulk reads.
  • v0.2.0

    docker-mailbox v0.2.0 — flat MCP tool set
    
    MCP now exposes one flat tool catalog. Per-mailbox tools take `mailbox` as
    a parameter (name or address) instead of being namespaced. Tool count is
    now O(1) instead of O(N) in mailbox count — agents can scale to 100+
    inboxes without drowning in tool definitions.
    
    BREAKING for MCP clients: `<name>__list_messages` → `list_messages(mailbox=...)`.
  • v0.1.0

    docker-mailbox v0.1.0 — first release
    
    REST + MCP control plane over IMAP/SMTP. One process, one port, one
    bearer-auth gate. Configure mailboxes in config.yaml, mount read-only,
    ship.
    
    Highlights:
    - /mailboxes, /inbox, per-mailbox IMAP + SMTP endpoints
    - /mcp streamable-HTTP transport for agent integration
    - Multi-token bearer auth with constant-time comparison
    - Thunderbird MUA masquerade for self-send deliverability