Skip to content

microsoft-365 and google-workspace request Mail.Send / gmail.send, but no agent exposes a send-mail command #495

Description

@pawellisowski

The gap

microsoft-365 and google-workspace both request send-mail scopes at connect time, but no installed agent exposes a command that sends mail. The consent is provisioned and then unusable.

Verified by execution (aware 0.132.0)

$ aware search mail
'mail' — 4 matches across 2 agent(s):

bluebeam-v1 (2):
  projects-api-invite-project → Invite user to project by email
  sessions-api-invite-session → Invite user to Studio Session by email

rhino-7 (2):
  field-dictionary-set-tag → ... THIS IS NOW OBSOLETE ...
  field-dictionary-try-get-tag → ... THIS IS NOW OBSOLETE ...

aware search email returns the same four. Neither is a mail-send command: the Bluebeam pair invite a user to a Bluebeam project/session, and the Rhino pair are unrelated (and obsolete).

But the consent is already there

cli/src/auth/config.rs requests these by default:

  • microsoft-365Mail.Read, Mail.Send (plus Calendars, Teams, Files, Sites, Tasks)
  • google-workspacegmail.readonly, gmail.send (plus Drive, Sheets, Calendar, Slides, Forms, Tasks)

The comment above the M365 block describes these as "Delegated scopes covering the curated command surface (drive/excel, SharePoint lists, mail, calendar, Teams, Planner)" — so mail is intended, but the command surface for it does not exist.

And the credential status is already reportable:

$ aware connect --list --json
[ { "integration": "microsoft-365", "status": "missing", "flows": ["device-code"], ... },
  { "integration": "google-workspace", "status": "missing", ... } ]

Observed vs expected

Observed: a user connects Microsoft 365, grants Mail.Send, and there is no way for an app or workflow to send a message.

Expected: a curated send command on both integrations — enough to send a plain-text or HTML body to named recipients, with optional attachments, e.g. microsoft-365 mail-send-message / google-workspace gmail-send-message.

Why it matters downstream

floless.app is building RFI records (pawellisowski/floless.app#1090). An RFI is a question addressed to somebody — the EOR, a fabricator — so sending it is the natural next step, from the user's own connected mailbox rather than a service address. The credential check (aware connect --list --json) and the consent are both in place; only the verb is missing, so the app has to fall back to "compose the body and let the user paste it into their own mail client".

Requesting a scope at connect time that nothing can use is also a consent smell: users grant Mail.Send for a capability that does not exist.

Scope note

Attachments matter for this use case (an RFI often carries the sheet extract), but a body-and-recipients send would already be useful on its own.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    qa-rejectedFailed QA verification — needs rework

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions