Skip to content

feat: add access to Fastmail Notes #1

Description

@kerryhatcher

Summary

There is no way to read Fastmail Notes through the CLI. Notes hold reference material worth
querying from a terminal or from an agent via the mcp server, and today they are invisible.

Current behaviour (v2.0.1)

No notes subcommand exists — the surface is mail (list/get/thread/search/send/move/
spam/mark-read/download/reply/forward), plus masked, contacts (CardDAV), calendars
and events (CalDAV), completions, and mcp.

The mail path can't reach them either. Per Fastmail's own docs, notes are
stored as messages in a special Notes IMAP folder,
so list mailboxes looks like it ought to surface them — but it doesn't:

$ fastmail-cli list mailboxes | grep -i note
$ fastmail-cli list mailboxes | grep -c '"name"'
15

All 15 mailboxes come back (Inbox, Archive, 2025, Drafts, Other, DMARC, caiios, Receipts,
Scheduled, Sent, Spam, Trash, VoteHatcher, pending, unimportant) and none is Notes. This isn't
client-side filtering: JmapClient::list_mailboxes (src/jmap/mod.rs:371) issues a plain
Mailbox/get with no role or name filter and returns whatever the server sends. With no mailbox
id, search and list emails have nothing to target.

Open question — worth resolving before designing anything

Two explanations fit the evidence above, and they lead to different implementations:

  1. Fastmail excludes the Notes folder from JMAP Mailbox/get while still exposing it over
    IMAP. If so, notes need a separate transport (IMAP), similar to how contacts and calendars
    already reach outside JMAP to CardDAV/CalDAV.
  2. The test account has no Notes folder at all because the Notes feature was never used, and
    the folder is created lazily on first note. If so, JMAP may work fine and this is only a
    discovery/documentation gap.

Checking an account with existing notes — via IMAP LIST and via Mailbox/get side by side —
settles it. I haven't done that, so treat the mechanism as unconfirmed.

Proposed scope

Read-only first, matching how contacts started:

  • notes list — enumerate notes (title, id, last modified)
  • notes get <id> — full note body
  • notes search -t <text> — full-text search over note bodies

Write support (create/update/delete) can follow if the transport turns out to be sane. Note
that Fastmail warns moving or renaming the Notes folder from an external client breaks note sync
on the web UI and iOS, so any write path should avoid touching the folder itself.

Exposing these through the mcp server matters as much as the CLI — notes are reference material,
which is exactly what an agent wants to read.

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions