Upgrade to 0.11.0
Update send, bulk modify, MCP, and CLI clients for the new delivery contracts.
This release changes the response shapes for sends, forwards, and bulk message actions. Update clients before upgrading a production instance.
| Interface | Client changes |
|---|---|
| MCP | Add idempotencyKey to sends and forwards; read delivery operations and per-message bulk results; follow thread and body continuations; request inline attachment bytes when needed. |
| CLI | Add --idempotency-key to sends and forwards; read delivery operations and per-message bulk results; parse the default JSON envelope and handle the new exit codes. |
| REST | Keep Idempotency-Key on sends and forwards; read delivery operations and per-message bulk results. Existing keys may return the old send response during their remaining 24 hour lifetime. |
Apply only the row for each interface your clients use. Back up existing installations as described below.
Back up the data directory
Stop every Fluxmail process that shares the data directory and back up the complete directory, including the SQLite database and encryption.key. The first new process advances the store from format 3 to format 5 and writes a migration backup. Older releases cannot open the migrated store. To roll back, stop Fluxmail and restore the complete backup.
Update send and forward clients
REST still requires Idempotency-Key. MCP send_email and forward_email now require idempotencyKey. CLI emails send and emails forward now require --idempotency-key. Generate a stable key for each intended delivery and save it with the request. Reuse that key if the result is lost.
New delivery operation keys have no automatic expiry. Keep each key with its intended request so a later retry cannot send a duplicate. Reusing the key with different request data returns a conflict.
All three interfaces return a delivery operation instead of a sent message. Read operationId and status; the sent message ID is in result.id after success. A scheduled request starts at queued. Use REST GET /accounts/{accountId}/delivery-operations/{operationId}, MCP get_delivery_operation, or CLI emails delivery-status to check it. A failed result was rejected. An uncertain result may already have been delivered and is never retried automatically. Check the sent folder or recipient before creating another delivery request.
Status lookups work across a member's sessions and API keys when that member can access the account. Scheduled delivery status is available to anyone with access to the account.
Existing REST idempotency records remain available for their original 24 hour life. A retry during that period gets the old response shape. Handle that response during the transition, then remove the compatibility branch after old keys expire.
Update bulk actions
The modified count is gone. Read succeededIds, failed, and uncertainIds instead. Each failed entry has a messageId and safe code. Requests may contain at most 100 distinct IDs. Fluxmail processes independent messages after a failure, so check every result before retrying. Inspect uncertain messages first.
Update MCP and CLI clients
MCP tools provide structuredContent.data alongside readable text. Message bodies can be selected with bodyFormat; large bodies are truncated with continuation information. Use get_email_body to continue. get_thread pages messages. Attachment downloads provide a resource link unless you request inline content.
The CLI defaults to a JSON envelope. Use --format table or --format ndjson when needed. Scripts that read the old account, status, or mail text output need to parse data instead. Management commands wrap their displayed lines in data; interactive setup and connection flows still print prompts directly. JSON and NDJSON errors are JSON on stderr. Exit codes are 0 for success, 2 for input errors, 3 for partial or uncertain results, 4 for access errors, 5 for provider or network errors, and 1 for internal or uncategorized errors. emails list --all and emails search --all follow pages up to 1,000 results by default; --max-results can raise the limit to 10,000.
Drafts can be fetched with get_draft, drafts get, or REST GET /drafts/{draftId}. A send preview resolves sender and recipients without delivery. Draft updates still replace the full draft. Partial edits are withheld until a provider revision check can be proven to reject concurrent external edits.
Last updated