What's new
- One process, two attach points. The container runs
serve: sync,
index, a Unix socket at/index/mcp.sockfor local clients, and the HTTP
listener only whenPUBLIC_URLis set. Local clients attach with
docker exec -i your-mail-mcp your-mail-mcp stdio, which bridges
stdin/stdout to that socket. With no socket,stdioruns the daemon
in-process for the life of the session and exits when the client closes
stdin, sodocker run -i --rm ghcr.io/wildsurfer/your-mail-mcpalone
answerstools/list. - Fresh mail first. Each account gets a second mbsync channel,
<name>-recent, that mirrors INBOX only, capped at 1000 messages. Today's
mail is searchable within minutes while the full history fills at the
provider's pace. Query tools say when an account's mirror is still
incomplete and how many messages are indexed so far, andstatusreports
whether the full mirror has completed. The recent channel stops once it
has. refreshis the scheduled pass. It syncs every folder of one account
or all of them, waits up to 20 seconds, joins a pass that is already
running instead of starting a second one, resets the sync ticker so a
manual refresh is not followed by a scheduled one moments later, and names
the accounts it skipped because they are in backoff.- A cut-off sync is not a failure. An mbsync run stopped by
SYNC_TIMEOUTresumes on the next pass and no longer counts toward
backoff, so a multi-day first mirror of a large Gmail account keeps its
cadence. - Attachments without a listener. With no
PUBLIC_URLthere is no URL
to sign, so a binary part larger than 5MB is saved under
/index/attachments/and the tool returns the path todocker cp. - Starts with no accounts. A missing or empty accounts file no longer
stops the process;statussays what to mount. An account name may not
end in-recent. The OAuth server is built before any goroutine contacts
a provider, so a setPUBLIC_URLwith a missingOAUTH_PASSPHRASEexits
at once. - Docs. The README walks one path: quick start on your machine, then
your phone through Tailscale, with the alternatives folded. The accounts
file, environment variables, provider notes and troubleshooting moved to
docs/reference.md; the VPS install and hardening todocs/server.md. - Registry. The MCP registry entry now lists a stdio package alongside
the streamable HTTP one.
Upgrade notes
The image starts in stdio mode when it is given no command, so a compose
file without a command: line gets a container that reads end of input and
exits at once, over and over. Add command: serve to the service before you
pull this image; the compose.yaml in the repository has it.
Two directories appear by themselves after the upgrade: <name>-recent/ in
the mail volume for each account, and mcp.sock plus attachments/ in the
index volume. The first sync after the upgrade pulls up to 1000 INBOX
messages per account again for the recent channel. The accounts file, the
environment variables and the tools are otherwise unchanged. Full text in
docs/upgrading.md.