A read-only connection lets an AI read and search your mail and nothing else. This page lists what it can do, what it cannot, and how each limit is enforced.
read:email permission, and optionally search:email, which adds nothing on top.insufficient_scope.EXAMINE, the read-only form of SELECT. Your mail provider then refuses any flag change, move or delete in that session, whatever our code does.BODY.PEEK, so reading a message never marks it as read. This holds for every connection, not only read-only ones.mark_as_read option was removed; marking as read is a separate action that needs the manage:folders permission.SEARCH. We download only the page of results that was asked for, up to 100 messages, and the AI pages through the rest.mcpemails is open source. These files implement and test what this page describes:
imap-read-only.ts EXAMINE for read-only connectionsimap-read-only.test.ts Tests for EXAMINE, including the provider refusing a flag changescopes.ts The permission listargument-aliases.ts Removal of mark_as_read from the reading toolimap-client.ts The IMAP client: every body fetch uses BODY.PEEK