Add Microsoft 365 Graph integration - #226
Conversation
Expose Outlook mail, calendar, OneDrive, Teams, and To Do through Microsoft Graph so agents can work across Microsoft 365 without leaving Switchboard. 💘 Generated with Crush Assisted-by: Crush:grok-4.6
Bring in Project Catalog, Slack MCP, Paperless, and Recoll so the PR can merge cleanly against current main. 💘 Generated with Crush Assisted-by: Crush:grok-4.6
acmacalister
left a comment
There was a problem hiding this comment.
Solid Microsoft 365 adapter — dispatch/compaction/markdown parity, PKCE OAuth, and the Graph response shaping all look in good shape. CI is green across build/test/lint/security/compose/rust-sdk. A few path-URL and next_link hardening notes inline; the OneDrive path colon issue looks like a real functional bug for path-based file ops.
Use Graph's path-colon convention, encode drive segments, allowlist pagination hosts, and cancel OAuth token exchange with request context. 💘 Generated with Crush Assisted-by: Crush:grok-4.6
Uploading into a folder path used an extra colon that Graph rejects, and downloads with no item_id or path hit the drive root. Align the tool docs with mailbox-wide list_messages behavior. 💘 Generated with Crush Assisted-by: Crush:grok-4.6
acmacalister
left a comment
There was a problem hiding this comment.
Nice Microsoft 365 adapter — dispatch/compaction/markdown parity looks solid, and the follow-ups on path colon encoding, next_link host checks, and OAuth context all landed cleanly. CI is green (build/test/lint/security/compose/rust-sdk). A few remaining notes on Graph pagination ergonomics, default scopes vs list_users, upload size guard, and live reconfigure after OAuth.
Prefer next_link over bare skiptoken, request User.Read.All so directory listing matches the setup flow, reject simple uploads over 4 MB, and reconfigure the live adapter after OAuth or token save. 💘 Generated with Crush Assisted-by: Crush:grok-4.6
|
Retriggering CI for 519fc05. |
Include HubSpot defaults and keep Microsoft 365 registered so config counts stay aligned after the main merge. 💘 Generated with Crush Assisted-by: Crush:grok-4.6
acmacalister
left a comment
There was a problem hiding this comment.
Solid Microsoft 365 adapter — dispatch/compaction/markdown parity, path encoding, next_link host checks, upload guard, and live Configure-after-OAuth all look in good shape, and prior review threads are resolved. CI is green (build/test/lint/security/compose/rust-sdk).
A few remaining notes around Graph $search quoting (mail/people/directory) and SharePoint scope vs tool copy — details inline.
Graph mail, people, and directory $search need quoted values. Bare directory terms now expand to displayName/mail clauses, and OAuth requests Files.ReadWrite.All so SharePoint libraries work after setup. 💘 Generated with Crush Assisted-by: Crush:grok-4.6
acmacalister
left a comment
There was a problem hiding this comment.
Solid Microsoft 365 adapter — prior review threads look resolved, and CI is green (build/test/lint/security/compose/rust-sdk). One remaining note on directory $search pagination keeping ConsistencyLevel on next_link follow-ups; details inline.
Directory and mail $search paging drops custom headers from @odata.nextLink, so later pages 400 without ConsistencyLevel. Re-send it when the next URL still has $search or $count. 💘 Generated with Crush Assisted-by: Crush:grok-4.6
acmacalister
left a comment
There was a problem hiding this comment.
Solid Microsoft 365 adapter — prior review threads look resolved, and CI is green (build/test/lint/security/compose/rust-sdk). A couple of leftover edge cases on empty file downloads and message $search+$orderby inline; nothing blocking.
Keep Microsoft 365 registered alongside Zendesk, Okta, and Intercom so default config counts stay aligned after the main merge. 💘 Generated with Crush Assisted-by: Crush:grok-4.6
Empty 200 file bodies were rewritten as success JSON, and Graph rejects combining $search with $orderby on messages. Keep true empty content and strip orderby whenever search is set. 💘 Generated with Crush Assisted-by: Crush:grok-4.6
acmacalister
left a comment
There was a problem hiding this comment.
Clean PR — prior review threads are resolved, and CI is green on this head (build/lint/security/compose/rust-sdk, with the matching CI run succeeding). Dispatch/compaction/markdown parity, Graph path encoding, next_link host checks, OAuth PKCE + live Configure-after-save, and the empty-download / search+orderby fixes all look solid. LGTM.
Summary
Test plan
make ci(or at leastgo test ./integrations/microsoft365/ ./config/ ./web/)searchforoutlook mail/onedrive/teamsandexecutemicrosoft365_get_me💘 Generated with Crush