Gmail plugin

The Gmail plugin lets a Vaubaan Gateway mission use Gmail without handing the agent a credential. Experimental, classifier-only : identity-zoned risks for reading, drafting and labelling in a Gmail mailbox. No tool is executable yet.

Experimental: the gateway registers this plugin and classifies its calls, but keeps it out of the connect and mission flows and lists none of its tools to agents.

Experimental. One account is one Gmail mailbox, which is also its single resource. The plugin models the permissions of reading, drafting and labelling by who the sender or the recipient is, but it executes nothing yet: no tool is offered to agents.

Permissions

Each permission is a named risk of the plugin's catalog: a mission holds an explicit list of them, never "all". The severity is computed from the permission's six axes (undo, blast radius, data, cost, visible to, lasts); nothing is decided from it.

PermissionWhat it allowsSeverityWhy it is a risk
gmail.read-mailboxRead mailbox structure (labels, threads, message headers)lowInventory of labels, thread ids, subjects and sender names, and the containment slice of a thread fetch (whose content risk is carried by the from-zone marker emitted alongside). Limited attack surface, but the baseline every read needs. Also covers the synthetic `gmail__describe_zones` tool, which returns the zoning configuration.
gmail.read-from-zone-automatedRead messages from automated / notification senderslowNotifications (GitHub, Stripe, Vercel…). Little direct PII, but the bodies often carry injectable URLs and markdown (OWASP LLM01). Kept distinct so an "ops" agent can read alerts without unlocking personal correspondence.
gmail.read-from-zone-internalRead messages from internal-domain senderslowCorrespondence between colleagues : may contain secrets, strategic decisions and privileged context. Distinct from the automated zone by least privilege.
gmail.read-from-zone-known-externalRead messages from known external contacts (allowlist)lowMessages from pre-approved partners and customers (allowlist). Routine business traffic, comparatively low risk.
gmail.read-from-zone-unknownRead messages from unknown senderslowMessages whose sender is neither internal nor allowlisted. The cardinal OWASP LLM01 vector — prompt injection through the message body. Strong posture recommended, tight quota and rate limit.
gmail.read-draftsRead existing draftslowDrafts reveal unsent intentions and earlier versions of external communications.
gmail.read-sensitive-labelRead messages tagged with a sensitive label (financial, legal, HR, …)lowZone override : whoever the sender is, a thread carrying a label the owner declared sensitive is escalated. Guard rail for structurally private correspondence (payroll, legal, HR, invoices). The labels of a thread are unknown before the fetch, so on a mailbox that declares sensitive labels every thread fetch needs this permission, and so does every search that does not exclude each of them with `-label:<name>`.
gmail.bulk-readBulk read across the mailbox (non-discriminating query)medium`search_threads(q="is:unread")`, or any query that is not a plain conjunction bounded by a `from:<address>` clause (a union, a grouping, a negated or missing sender), may return hundreds of threads at once and bypass per-message zoning. A distinct marker forces an explicit acceptance.
gmail.draft-writeCreate / modify a draft (any recipient)lowBaseline write of a draft, whatever its recipients ; the exfiltration axis is carried by the `draft-to-zone-*` permission needed alongside. Drafts are reversible (delete) and never sent by this plugin.
gmail.draft-to-zone-selfCreate / modify a draft addressed to self onlylowA memo to oneself. No external leak as long as the draft is not sent ; the official Google MCP server cannot send, so a draft is a terminal action here.
gmail.draft-to-zone-internalCreate / modify a draft addressed to internal recipients onlymediumA draft for colleagues. Stays internal while unsent ; no external exfiltration path.
gmail.draft-to-zone-allowlistCreate / modify a draft to pre-approved external contacts (allowlist)mediumA draft to pre-approved external contacts (CRM-like). Limited risk while unsent ; if a `send_draft` tool is ever wrapped, this permission covers it naturally.
gmail.draft-to-zone-external-unboundedCreate / modify a draft to an external recipient not in the allowlisthigh (deprecated)A draft to an arbitrary external address : the cardinal exfiltration vector once sent, and even unsent its existence can leak intentions. Never acceptable : the classifier refuses such a draft before any permission is evaluated, so holding this one grants nothing. The id is kept (ids are never deleted) and marked deprecated so no new mission is offered it.
gmail.label-writeApply / remove labels on a thread or message (single)lowMailbox organisation on one identified thread or message. UI-level and reversible (re-label). `TRASH` and `SPAM` are refused by the classifier (a deletion is not a label write) ; a label that is, or may be, one the owner declared sensitive also needs the fallback write permission.
gmail.bulk-label-writeBulk apply / remove labels across many threadsmediumOne call labelling many threads at once. Distinct from the single label write. No modelled tool can touch it today : `label_thread` takes exactly one thread id and a call without one is refused. Kept for a future batch tool ; in no preset until then.
gmail.uncategorized-writeUncategorized Gmail writemedium (the catch-all: touched only by a call no other permission covers)Catch-all for writes no entry above covers. Today : applying or removing a label the owner declared sensitive, or a user label the classifier cannot tell apart from one (`sensitive-label[..].W`). If the plugin ever surfaces `send_message`, `delete_message` or `create_filter`, they land here until a dedicated permission is added — fail-loud by design. Never offered in a preset.

Presets

A preset pre-fills the permissions of a mission for one account, with a limit per period, a rate and whether each permission runs freely or asks the mission creator first. The person creating the mission adjusts it; the mission stores the explicit list.

Read-only triage

read-only — List labels and drafts, search and read threads from automated, internal, allowlisted and unknown senders; no write, no bulk read, no sensitive label.

PermissionWhat it allowsLimit per periodRateRuns
gmail.read-mailboxRead mailbox structure (labels, threads, message headers)2000120 per minuteruns freely
gmail.read-from-zone-automatedRead messages from automated / notification senders100060 per minuteruns freely
gmail.read-from-zone-internalRead messages from internal-domain senders50030 per minuteruns freely
gmail.read-from-zone-known-externalRead messages from known external contacts (allowlist)50030 per minuteruns freely
gmail.read-from-zone-unknownRead messages from unknown senders20020 per minuteruns freely
gmail.read-draftsRead existing drafts20030 per minuteruns freely

Developer

developer — Experimental — read-only triage plus drafts to self, colleagues and allowlisted contacts and single-thread labelling; bulk reads ask first.

PermissionWhat it allowsLimit per periodRateRuns
gmail.read-mailboxRead mailbox structure (labels, threads, message headers)5000120 per minuteruns freely
gmail.read-from-zone-automatedRead messages from automated / notification senders200060 per minuteruns freely
gmail.read-from-zone-internalRead messages from internal-domain senders100030 per minuteruns freely
gmail.read-from-zone-known-externalRead messages from known external contacts (allowlist)100030 per minuteruns freely
gmail.read-from-zone-unknownRead messages from unknown senders30020 per minuteruns freely
gmail.read-draftsRead existing drafts50030 per minuteruns freely
gmail.draft-writeCreate / modify a draft (any recipient)30020 per minuteruns freely
gmail.draft-to-zone-selfCreate / modify a draft addressed to self only20020 per minuteruns freely
gmail.draft-to-zone-internalCreate / modify a draft addressed to internal recipients only20020 per minuteruns freely
gmail.draft-to-zone-allowlistCreate / modify a draft to pre-approved external contacts (allowlist)10010 per minuteruns freely
gmail.label-writeApply / remove labels on a thread or message (single)50060 per minuteruns freely
gmail.bulk-readBulk read across the mailbox (non-discriminating query)205 per minuteask me first

Tools

This plugin exposes no tool yet.

Health

Health: not enough reports yet. A plugin version is deemed validated by the community with at least 200 reports and 90 % of them successful, over the last 90 days, as reported by the instances whose operators turned community telemetry on. It is a community signal, not a security guarantee.

Last changed 2026-10-16. This page as Markdown: /plugins/gmail.md