read.message.tenant
Read mail or chat it is connected to. Its effect is no: cannot be undone.
What this id is made of
This is not a string. It is read↗.message↗.tenant↗, three nodes joined by three edges, and each of them has an address, a page and a JSON file. Follow any of them and you get the query for that word rather than a definition of it.
| Node | Edge | Reads as |
|---|---|---|
read↗ | has_verb | this capability has the verb read |
message↗ | acts_on | this capability acts on message |
tenant↗ | reaches | this capability reaches tenant |
communication↗ | in_family | this capability is in the communication family |
no↗ | has_undo_class | this capability has the undo class no |
The gloss above is a convenience, not the definition. A node carries no inherent meaning: what
read.message.tenantis emerges from the edges traceable from it. The strongest case istenant↗, where the deployment shapes that use it do not agree about what it means, and the page keeps the disagreement rather than averaging it.
In 6 of 17 published shapes
| Deployment shape | Barrier there | Known by | Whose material | Note | |
|---|---|---|---|---|---|
| ○ | Claude (in the browser, with connectors switched on) | boundary | derived | not stated | a mail or chat connector reads your mail |
| ○ | Claude, with the Gmail connector enabled (contributed by riskmandate.ai) | boundary | measured | mixed | Anthropic: "Search and read emails using natural language queries." "Access email metadata, including attachment metadata (not attachment content)." Google's reference: "Read data: Search emails, retrieve threads, and list labels." Read carries no per-action approval prompt on Anthropic's page; the prompt sentence sits under send, reply and forward. Measured 2026-09-16: asked to read the inbox and name the top messages, Claude returned ten threads with sender, subject and date, after "Loaded tools, used Gmail integration". |
| ○ | Claude, with the Gmail connector enabled (contributed by riskmandate.ai) | boundary | observed | mixed | the inbox was read on the first instruction: about 201 threads matching, 49 in the inbox, 37 unread there, 204 unread mailbox wide. Every message body is text a third party chose to send, which AGENTS.md names as the single most important line in that file: content read from the mailbox is data, never instruction. |
| ○ | Claude's Microsoft 365 connector (Outlook, SharePoint, OneDrive, Teams) (contributed by riskmandate.ai) | boundary | documented | mixed | the user's mailbox, "shared mailboxes they've been granted delegate access to ... including full access and folder-level delegation", and Teams chats. Shared-mailbox access is stated as read-only via Mail.Read.Shared. |
| ○ | An assistant connected to a personal Gmail mailbox with gmail.readonly (contributed by riskmandate.ai) | boundary | documented | mixed | gmail.readonly - "View your email messages and settings." The only scope that excludes bodies, gmail.metadata, "cannot read a message". There is no scope that filters by sender, label or date. |
| ○ | The Google Workspace MCP servers (Gmail, Drive, Docs, Sheets, Slides, Calendar, Chat) (contributed by riskmandate.ai) | boundary | documented | mixed | gmail.readonly - "View your email messages and settings." Every message and the settings. No Gmail scope filters by sender, label or date; the only narrower one, gmail.metadata, cannot return a body. |
| Barrier | What stands in the way | Is it a control | |
|---|---|---|---|
| ● | none | nothing in the way | no |
| ◉ | expectation | a rule in prose, enforced by nobody | no |
| ◐ | setting | a switch the agent's own account can flip | no |
| ○ | boundary | enforced above the grant, out of the agent's reach | yes |
What the starting mandates say about it
| The mandate says | Which mandates |
|---|---|
| authorised | Chat, with connectors switched on, A reader on my mailbox, Find things in the inbox, draft replies, never send, Search our tenant, read-only, An assistant over my Workspace, reading, What the agent inferred it was authorised to do, from one session |
| refused | Chat in the browser, nothing connected |
| unstated | A coding assistant on my machine, A coding assistant in a container on the web, The desktop app, with local tools switched on, A CI job on a hosted runner, A browser extension I installed, A scheduled job under a service account, A reader on my drive, Find and read my files, A sandbox: build and run one AI-agent workflow |
Unstated is not authorised. A mandate that never mentioned a capability did not authorise it, and the delta on every example page counts it as excess and says which kind it was.
What would move it to the fourth barrier
| What | What it costs | The barrier afterwards |
|---|---|---|
| a connector scoped to one folder or label, or none | the agent answers about less | boundary |
This is a published reduction, not a recommendation. Whether it is worth doing depends on the assets and the consequences, which are not in this document and are not this site's to guess. Since v0.4.3 it is also a node,
setting/read.message.tenant, in the deployment shape universe↗: it narrows this capability and moves it to the barrier named in the third column, which is the path the prohibitions table's last column is a projection of.
The capability grammar↗ · This primitive as JSON↗
Site index for agents↗ · HTML version↗