gmail multi-account.
gmail driven by an agent: search with native gmail syntax, full message read, send, threaded reply, drafts, archiving, trash. multiple google accounts connected per user — the agent picks the sending account.
setup & usage
From this card, click connect: Google asks you to authorize Gmail only (scope gmail.modify) on the account you choose. The Google account itself (address, token) is carried by the Google Account connector — one account can authorize several services, one service at a time, without re-authorizing the others.
_account=<email> (the tools' account=<email> is the same choice — two different addresses are refused), otherwise the one the project pins, otherwise the default; an unknown address is refused, never replaced by another, and the response names the account that served (_account); google_accounts tells you which ones have authorized GmailTwo tools, under the chosen account: gmail(op=search|get|attachment|drafts|draft|accounts) reads or prepares a draft — nothing leaves, nothing is deleted; gmail_act(op=send|archive|trash|delete_draft) acts, and your client asks you to confirm it.
gmail(query="is:unread newer_than:7d"); "archive the newsletters" → gmail_act(op="archive", message_ids=[…])gmail(op="draft", reply_to="…", body="…"); "send it" → gmail_act(op="send", draft_id="…"), the draft as it stands; "delete this draft" → gmail_act(op="delete_draft", draft_id="…") (the draft id, not its message_id: trash answers 404 on a draft)gmail op=draft, or gmail_act op=send with a full message) appends the sending account's Gmail signature (after --), like the web client — the Gmail API never does it on its own. sign=False composes without it; the response reports signature: appended, none_configured or disabled.xlsx spreadsheet attached to this email, devis sheet" — an attachment (op=attachment) comes back as CSV per sheet, truncatedA {kind: "url"} attachment of a composed mail is read server-side: under a project with excluded_url_prefixes, a matching url is refused, naming the pattern (file_source seam). Details: docs/projects.md.
this connector accepts multiple comptes: connecting with another compte adds it alongside the others, named by its address; reconnecting with the same one replaces its own.
_account="<name>" on the tool; list them: oto_identity(op='list', connector='gmail')oto_identity(op='set', connector='gmail', identity_id='<name>')_account) and adding upoutils
usage
claude plugin marketplace add otomata-tech/oto-plugin — mcp + skill configured.pipx install oto-cli then oto gmail …