@littlebearapps/outlook-assistant 3.8.0 → 3.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/advanced/index.js +4 -2
- package/auth/tools.js +1 -1
- package/calendar/index.js +5 -3
- package/categories/index.js +4 -3
- package/contacts/index.js +3 -3
- package/email/index.js +8 -8
- package/folder/index.js +1 -1
- package/llms.txt +1 -1
- package/package.json +1 -1
- package/rules/index.js +1 -1
- package/settings/index.js +1 -1
package/advanced/index.js
CHANGED
|
@@ -606,7 +606,8 @@ async function handleFindMeetingRooms(args) {
|
|
|
606
606
|
const advancedTools = [
|
|
607
607
|
{
|
|
608
608
|
name: 'access-shared-mailbox',
|
|
609
|
-
description:
|
|
609
|
+
description:
|
|
610
|
+
'List emails from a shared mailbox the signed-in user has been granted access to (read-only). Returns paged messages from the named `sharedMailbox` (or alias `email`) and `folder` (default `inbox`) with id/subject/from/receivedDateTime/preview — same shape as `search-emails` list mode. Requires that the shared mailbox has been delegated to the signed-in user in Exchange (admin-configured). Use `outputVerbosity` to control field count and `count` (default 25, max 50) for page size. For full search/filter capability over a shared mailbox, prefer `search-emails` with a folder path scoped to the shared mailbox.',
|
|
610
611
|
annotations: {
|
|
611
612
|
title: 'Shared Mailbox',
|
|
612
613
|
readOnlyHint: true,
|
|
@@ -645,7 +646,8 @@ const advancedTools = [
|
|
|
645
646
|
},
|
|
646
647
|
{
|
|
647
648
|
name: 'find-meeting-rooms',
|
|
648
|
-
description:
|
|
649
|
+
description:
|
|
650
|
+
"Discover bookable meeting rooms in the user's organisation via the Graph rooms endpoint (read-only). Returns room resources with displayName, emailAddress, building, floor, capacity, and bookingType — suitable for piping into `create-event` as attendees. Filter by `query` (matches name/email), `building`, `floor`, or minimum `capacity`. Returns empty list on personal accounts (the rooms endpoint is M365-only). Use `outputVerbosity` to control field count.",
|
|
649
651
|
annotations: {
|
|
650
652
|
title: 'Meeting Rooms',
|
|
651
653
|
readOnlyHint: true,
|
package/auth/tools.js
CHANGED
|
@@ -386,7 +386,7 @@ const authTools = [
|
|
|
386
386
|
{
|
|
387
387
|
name: 'auth',
|
|
388
388
|
description:
|
|
389
|
-
'Manage authentication with Microsoft Graph API. action
|
|
389
|
+
'Manage authentication with the Microsoft Graph API. action=`status` (default) returns the current auth state and auto-refreshes the access token if it\'s expired but the refresh token is still valid (~90-day window) — call this first to check before other tools. action=`authenticate` starts the OAuth flow: with `method: "device-code"` (default, works headlessly) it returns a code + URL for the user to visit; with `method: "browser"` it opens the local auth server on :3333 (run `npm run auth-server` first). Pass `force: true` to re-authenticate over an existing valid session. action=`device-code-complete` finishes device-code auth after the user enters the code in their browser — call this once authentication shows as successful in the browser. action=`about` returns server version, configured audience, scope list, and other diagnostic info. Tokens persist to `~/.outlook-assistant-tokens.json` and survive server restarts.',
|
|
390
390
|
annotations: {
|
|
391
391
|
title: 'Authentication',
|
|
392
392
|
readOnlyHint: false,
|
package/calendar/index.js
CHANGED
|
@@ -12,7 +12,8 @@ const handleUpdateEvent = require('./update');
|
|
|
12
12
|
const calendarTools = [
|
|
13
13
|
{
|
|
14
14
|
name: 'list-events',
|
|
15
|
-
description:
|
|
15
|
+
description:
|
|
16
|
+
'List upcoming calendar events for the signed-in user (read-only). Returns an array of events with id, subject, start/end, attendees, location, organiser, and webLink. Use `count` (default 10, max 50) to control page size; this tool does not filter — use the Outlook UI or specific date ranges via Graph for filtered queries. Times are returned in the configured timezone (default Australia/Melbourne; override with `OUTLOOK_DEFAULT_TIMEZONE`).',
|
|
16
17
|
annotations: {
|
|
17
18
|
title: 'List Calendar Events',
|
|
18
19
|
readOnlyHint: true,
|
|
@@ -33,7 +34,8 @@ const calendarTools = [
|
|
|
33
34
|
},
|
|
34
35
|
{
|
|
35
36
|
name: 'create-event',
|
|
36
|
-
description:
|
|
37
|
+
description:
|
|
38
|
+
"Create a new calendar event on the signed-in user's default calendar. Returns the created event with its `id`, `webLink`, and (if attendees are present) an auto-generated online-meeting URL — attendees receive invitations on save. Times use the configured timezone (default Australia/Melbourne; override with `OUTLOOK_DEFAULT_TIMEZONE`); omit the `Z` suffix to send local time. Use `manage-event` action=`update` to modify an event after creation, or `manage-event` action=`cancel`/`delete` to remove it.",
|
|
37
39
|
annotations: {
|
|
38
40
|
title: 'Create Calendar Event',
|
|
39
41
|
readOnlyHint: false,
|
|
@@ -75,7 +77,7 @@ const calendarTools = [
|
|
|
75
77
|
{
|
|
76
78
|
name: 'manage-event',
|
|
77
79
|
description:
|
|
78
|
-
|
|
80
|
+
"Manage an existing calendar event (destructive: covers update/decline/cancel/delete — use dryRun where supported to preview). action=`update` edits fields in place via PATCH (subject, start, end, attendees, body, location, isOnlineMeeting, sensitivity, showAs, importance, categories, reminderMinutesBeforeStart) — only fields you pass are changed; pass `dryRun: true` to preview the PATCH payload. action=`decline` declines an invitation (optional `comment`). action=`cancel` cancels an event you organised and notifies attendees. action=`delete` permanently removes the event. Returns the updated event on update; status confirmation otherwise. Note: there is no `accept` action — accept invitations in the Outlook UI (Graph's accept verb is unreliable across personal/M365).",
|
|
79
81
|
annotations: {
|
|
80
82
|
title: 'Manage Calendar Event',
|
|
81
83
|
readOnlyHint: false,
|
package/categories/index.js
CHANGED
|
@@ -826,7 +826,7 @@ const categoriesTools = [
|
|
|
826
826
|
{
|
|
827
827
|
name: 'manage-category',
|
|
828
828
|
description:
|
|
829
|
-
|
|
829
|
+
"Manage the user's master category list (the colour-coded labels available across mail/calendar/contacts). action=`list` (default) returns categories with id/displayName/color. action=`create` adds a new category — `displayName` required, `color` optional (preset0-preset24, e.g. preset0=Red, preset7=Blue). action=`update` (alias `set` — deprecated) changes name/colour by `id`. action=`delete` removes a category — this does NOT untag messages already labelled with it; existing messages retain the orphaned label until manually cleaned. Use `apply-category` to tag/untag specific messages.",
|
|
830
830
|
annotations: {
|
|
831
831
|
title: 'Master Categories',
|
|
832
832
|
readOnlyHint: false,
|
|
@@ -899,7 +899,8 @@ const categoriesTools = [
|
|
|
899
899
|
},
|
|
900
900
|
{
|
|
901
901
|
name: 'apply-category',
|
|
902
|
-
description:
|
|
902
|
+
description:
|
|
903
|
+
"Tag or untag email messages with master categories (those created via `manage-category`). action=`set` (default) replaces the message's category set with the supplied `categories` array. action=`add` appends categories to whatever's already on the message. action=`remove` removes only the named categories, leaving the rest. Accepts either `messageId` (single) or `messageIds` (batch via Graph `$batch`). `categories` are matched by display name — names must already exist in the master list (create via `manage-category` first). Returns per-message confirmation.",
|
|
903
904
|
annotations: {
|
|
904
905
|
title: 'Apply Categories',
|
|
905
906
|
readOnlyHint: false,
|
|
@@ -938,7 +939,7 @@ const categoriesTools = [
|
|
|
938
939
|
{
|
|
939
940
|
name: 'manage-focused-inbox',
|
|
940
941
|
description:
|
|
941
|
-
'Manage Focused Inbox overrides. action
|
|
942
|
+
'Manage Focused Inbox sender overrides — explicit rules that force messages from a given sender into Focused or Other regardless of the ML classifier. action=`list` (default) returns existing overrides with id/sender/classifyAs. action=`set` creates or updates an override for `emailAddress` (optional `name`), routing future mail to `focused` (default) or `other`. action=`delete` removes the override for `emailAddress`. Note: this only works on accounts that have Focused Inbox enabled — personal Outlook.com accounts without it return an empty list.',
|
|
942
943
|
annotations: {
|
|
943
944
|
title: 'Focused Inbox',
|
|
944
945
|
readOnlyHint: false,
|
package/contacts/index.js
CHANGED
|
@@ -679,11 +679,11 @@ const contactsTools = [
|
|
|
679
679
|
{
|
|
680
680
|
name: 'manage-contact',
|
|
681
681
|
description:
|
|
682
|
-
'
|
|
682
|
+
"Full CRUD over the signed-in user's personal Outlook contacts (destructive: covers `delete` action). action=`list` (default) returns contacts with pagination via `skip`/`count` (default 50). action=`search` returns contacts matching `query` against name/email (default 25). action=`get` returns full contact detail by `id`. action=`create` adds a new contact and returns its `id`. action=`update` patches the given fields by `id` (only fields passed are changed). action=`delete` permanently removes the contact by `id`. Use `outputVerbosity` (minimal/standard/full) on list/search to control field count. Prefer `search-people` for cross-source relevance ranking (contacts + directory + recent comms) — this tool only searches your personal contact store.",
|
|
683
683
|
annotations: {
|
|
684
684
|
title: 'Contacts',
|
|
685
685
|
readOnlyHint: false,
|
|
686
|
-
destructiveHint:
|
|
686
|
+
destructiveHint: true,
|
|
687
687
|
openWorldHint: false,
|
|
688
688
|
},
|
|
689
689
|
inputSchema: {
|
|
@@ -801,7 +801,7 @@ const contactsTools = [
|
|
|
801
801
|
{
|
|
802
802
|
name: 'search-people',
|
|
803
803
|
description:
|
|
804
|
-
'
|
|
804
|
+
'Relevance-ranked search across personal contacts, organisation directory, and recent communications via the Microsoft Graph People API (read-only). Returns people objects with `displayName`, `emailAddresses`, `companyName`, `jobTitle`, and relevance metadata — ideal for "who is X?" or "who do I email about Y?" lookups. Use `manage-contact` action=`search` instead when you specifically need entries from your personal contact store only.',
|
|
805
805
|
annotations: {
|
|
806
806
|
title: 'People Search',
|
|
807
807
|
readOnlyHint: true,
|
package/email/index.js
CHANGED
|
@@ -33,7 +33,7 @@ const emailTools = [
|
|
|
33
33
|
{
|
|
34
34
|
name: 'search-emails',
|
|
35
35
|
description:
|
|
36
|
-
'Search
|
|
36
|
+
'Search, list, delta-sync, or thread-group emails — six modes selected by parameters (read-only). With no params: lists recent emails in `folder` (default `inbox`). With `query`/`from`/`to`/`subject`/date filters: full search (combines via OData filter). With `kqlQuery`: raw Keyword Query Language for advanced server-side search. With `deltaMode: true`: returns current state plus a `deltaToken`; pass the token back on the next call for incremental changes only — ideal for inbox monitoring. With `groupByConversation: true`: returns conversation threads. With `conversationId`: returns all messages in a single thread. With `internetMessageId`: looks up a message by its RFC Message-ID header. Personal Outlook.com accounts have limited `$search` support — this tool falls back through OData filters / boolean filters / recent listing automatically, but structured filters (`from`/`subject`/`receivedAfter`/`hasAttachments`/`unreadOnly`) return cleaner results. Returns paged messages with id/subject/from/receivedDateTime/preview by default; use `outputVerbosity` to expand.',
|
|
37
37
|
annotations: {
|
|
38
38
|
title: 'Search Emails',
|
|
39
39
|
readOnlyHint: true,
|
|
@@ -179,7 +179,7 @@ const emailTools = [
|
|
|
179
179
|
{
|
|
180
180
|
name: 'read-email',
|
|
181
181
|
description:
|
|
182
|
-
'Read email
|
|
182
|
+
'Read a single email by id (read-only). Default: returns the full message body (HTML stripped to text by default), subject, from/to/cc, receivedDateTime, conversationId, attachments metadata, and webLink as Markdown. With `headersMode: true`: returns RFC-822 forensic headers instead (DKIM, SPF, DMARC, Received chain, Message-ID, Authentication-Results) — pair with `importantOnly: true` for the security-relevant subset, `groupByType: true` for category-bucketed view, or `raw: true` for JSON instead of Markdown. With `includeHeaders: true` (non-headers-mode): adds basic headers alongside body. Use `outputVerbosity` (minimal/standard/full) to control field count.',
|
|
183
183
|
annotations: {
|
|
184
184
|
title: 'Read Email',
|
|
185
185
|
readOnlyHint: true,
|
|
@@ -237,7 +237,7 @@ const emailTools = [
|
|
|
237
237
|
{
|
|
238
238
|
name: 'send-email',
|
|
239
239
|
description:
|
|
240
|
-
'Compose and send an email.
|
|
240
|
+
'Compose and send an email immediately (destructive: sends external comms). Returns a confirmation with the saved-message id. Safety controls: `dryRun: true` returns the composed message for review without sending; `checkRecipients: true` runs `get-mail-tips` first to flag out-of-office / mailbox-full / delivery-restricted / external recipients; combine both for a full pre-send review. Subject to session rate limits (`OUTLOOK_MAX_EMAILS_PER_SESSION` env) and recipient allowlist (`OUTLOOK_ALLOWED_RECIPIENTS` env) when configured — calls outside the allowlist fail before any Graph request. For multi-step compose/review workflows prefer `draft` (action=`create` → `update` → `send`) since drafts can be inspected in Outlook before sending. Comma-separated recipient strings or arrays both accepted.',
|
|
241
241
|
annotations: {
|
|
242
242
|
title: 'Send Email',
|
|
243
243
|
readOnlyHint: false,
|
|
@@ -296,7 +296,7 @@ const emailTools = [
|
|
|
296
296
|
{
|
|
297
297
|
name: 'draft',
|
|
298
298
|
description:
|
|
299
|
-
'
|
|
299
|
+
'Full draft lifecycle for review-before-send workflows (destructive: covers `send` and `delete`). action=`create` saves a new draft in the Drafts folder and returns its id (use `dryRun: true` to preview without saving; `checkRecipients: true` runs mail-tips first). action=`update` patches an existing draft by `id` (only fields passed are changed). action=`send` dispatches an existing draft — shares the rate limit with `send-email`. action=`delete` removes a draft permanently. action=`reply`/`reply-all` creates a reply draft from a message `id` (use `comment` to prepend text — mutually exclusive with `body`). action=`forward` creates a forward draft (requires `id` and `to`). Recipient allowlist applies to create/update/forward. Returns the draft object on create/update/reply/forward; status confirmation on send/delete.',
|
|
300
300
|
annotations: {
|
|
301
301
|
title: 'Draft Operations',
|
|
302
302
|
readOnlyHint: false,
|
|
@@ -375,7 +375,7 @@ const emailTools = [
|
|
|
375
375
|
{
|
|
376
376
|
name: 'update-email',
|
|
377
377
|
description:
|
|
378
|
-
'Update
|
|
378
|
+
'Update message state without modifying content (idempotent — safe to retry). action=`mark-read`/`mark-unread` toggles the `isRead` flag on a single message by `id`. action=`flag` sets a follow-up flag with optional `dueDateTime`/`startDateTime` (ISO 8601). action=`unflag` clears the flag. action=`complete` marks the flag as done. Flag/unflag/complete accept either `id` (single) or `ids` (batch array) — batch operations use Graph `$batch` for efficiency. Returns status confirmation per message.',
|
|
379
379
|
annotations: {
|
|
380
380
|
title: 'Update Email',
|
|
381
381
|
readOnlyHint: false,
|
|
@@ -455,7 +455,7 @@ const emailTools = [
|
|
|
455
455
|
{
|
|
456
456
|
name: 'attachments',
|
|
457
457
|
description:
|
|
458
|
-
'
|
|
458
|
+
'Inspect or retrieve email attachments. action=`list` (default) returns metadata for all attachments on `messageId` (id, name, contentType, size, isInline) — read-only. action=`view` returns inline content for text/JSON/XML attachments via `attachmentId`; binary types require download. action=`download` saves the attachment to disk at `outputDir` (default system tmpdir, auto-created) and returns the saved file path. `messageId` is required for all actions; `attachmentId` is required for view/download. Use `outputVerbosity` to control list field count.',
|
|
459
459
|
annotations: {
|
|
460
460
|
title: 'Attachments',
|
|
461
461
|
readOnlyHint: false,
|
|
@@ -516,7 +516,7 @@ const emailTools = [
|
|
|
516
516
|
{
|
|
517
517
|
name: 'export',
|
|
518
518
|
description:
|
|
519
|
-
'Export emails. target
|
|
519
|
+
'Export emails to file formats for archival, forensics, or programmatic processing. target=`message` (default) exports a single email by `id` to `savePath` — accepts `mime`/`eml`/`markdown`/`json`/`csv`. target=`messages` batch-exports either an explicit `emailIds` array or messages matching `searchQuery` (or `query` shortcut) into `outputDir` — accepts `markdown`/`json`/`csv`. target=`conversation` exports a full thread by `conversationId` into `outputDir` (chronological by default; pass `order: "reverse"` for newest-first) — accepts `eml`/`mbox`/`markdown`/`json`/`html`/`csv`. target=`mime` returns raw RFC-822 MIME bytes for `id` (use `headersOnly` for just headers, `base64` for encoded transport, `maxSize` to cap at default 1MB). `includeAttachments` defaults to true for single-message exports and false for batch. Format support varies by target — see the format param enum.',
|
|
520
520
|
annotations: {
|
|
521
521
|
title: 'Export Emails',
|
|
522
522
|
readOnlyHint: false,
|
|
@@ -634,7 +634,7 @@ const emailTools = [
|
|
|
634
634
|
{
|
|
635
635
|
name: 'get-mail-tips',
|
|
636
636
|
description:
|
|
637
|
-
'
|
|
637
|
+
'Pre-send recipient validation via Graph `POST /me/getMailTips` (read-only; uses the existing `Mail.Read` scope — no extra permissions). Returns per-recipient tips covering automatic replies (out-of-office), mailbox full status, custom admin mail tips, delivery restrictions, moderation requirements, external-vs-internal scope, max message size, and group member counts (total + external). Use ahead of `send-email` or `draft` action=`create` to catch issues like OOO replies or external-recipient warnings before the message goes out; `send-email`/`draft` accept `checkRecipients: true` to invoke this automatically. Accepts either a comma-separated string or an array of addresses; `tipTypes` filters which tips are requested (defaults to all).',
|
|
638
638
|
annotations: {
|
|
639
639
|
title: 'Mail Tips',
|
|
640
640
|
readOnlyHint: true,
|
package/folder/index.js
CHANGED
|
@@ -12,7 +12,7 @@ const folderTools = [
|
|
|
12
12
|
{
|
|
13
13
|
name: 'folders',
|
|
14
14
|
description:
|
|
15
|
-
'Manage mail folders. action
|
|
15
|
+
'Manage mail folders (tool-level destructiveHint=true because `delete` permanently removes a folder; `list` and `stats` are read-only sub-actions despite the annotation). action=`list` (default) returns the folder tree with id/displayName/parentFolderId (toggle `includeItemCounts` for unread/total, `includeChildren` for hierarchy). action=`create` makes a new folder under the inbox (or under `folder`/`folderId`/`folderName`) and returns its id. action=`move` relocates emails (`emailIds` array) into `targetFolder`. action=`stats` returns counts (totalItemCount/unreadItemCount) suitable for pagination planning — pair with `outputVerbosity` to limit noise. action=`delete` permanently removes a folder and its contents — there is no recycle-bin recovery.',
|
|
16
16
|
annotations: {
|
|
17
17
|
title: 'Mail Folders',
|
|
18
18
|
readOnlyHint: false,
|
package/llms.txt
CHANGED
|
@@ -76,7 +76,7 @@ Requires an Azure app registration with Microsoft Graph delegated permissions. S
|
|
|
76
76
|
- [Connect Outlook to Claude](https://raw.githubusercontent.com/littlebearapps/outlook-assistant/main/docs/how-to/getting-started/connect-outlook-to-claude.md): Step-by-step setup guide for Claude Desktop / Claude Code
|
|
77
77
|
- [Verify Your Connection](https://raw.githubusercontent.com/littlebearapps/outlook-assistant/main/docs/how-to/getting-started/verify-your-connection.md): Test and troubleshoot the connection after installation
|
|
78
78
|
- [Azure Setup](https://raw.githubusercontent.com/littlebearapps/outlook-assistant/main/docs/guides/azure-setup.md): Azure app registration and API permissions walkthrough
|
|
79
|
-
- [FAQ](https://raw.githubusercontent.com/littlebearapps/outlook-assistant/main/docs/faq/
|
|
79
|
+
- [FAQ](https://raw.githubusercontent.com/littlebearapps/outlook-assistant/main/docs/faq/faq.md): Frequently asked questions — install, accounts, permissions, tokens, send safety, updates, uninstall (also at <https://littlebearapps.com/help/outlook-assistant/faq/>)
|
|
80
80
|
- [CLAUDE.md](https://raw.githubusercontent.com/littlebearapps/outlook-assistant/main/CLAUDE.md): Quick reference for development
|
|
81
81
|
- [CONTRIBUTING](https://raw.githubusercontent.com/littlebearapps/outlook-assistant/main/CONTRIBUTING.md): Contribution guidelines
|
|
82
82
|
- [CHANGELOG](https://raw.githubusercontent.com/littlebearapps/outlook-assistant/main/CHANGELOG.md): Version history (current: v3.8.0 — `manage-event` gains an `update` action covering 12 fields with `dryRun` (#173, closes #124); new `OUTLOOK_AUTH_AUDIENCE` env var fixes AADSTS9002331 for personal-only Azure apps (#174); new `OUTLOOK_DEFAULT_TIMEZONE` env var overrides the hardcoded Australia/Melbourne default (#175))
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@littlebearapps/outlook-assistant",
|
|
3
|
-
"version": "3.8.
|
|
3
|
+
"version": "3.8.1",
|
|
4
4
|
"mcpName": "io.github.littlebearapps/outlook-assistant",
|
|
5
5
|
"description": "Outlook Assistant — MCP server with 22 tools for email, calendar, contacts, and settings via Microsoft Graph API",
|
|
6
6
|
"main": "index.js",
|
package/rules/index.js
CHANGED
|
@@ -180,7 +180,7 @@ const rulesTools = [
|
|
|
180
180
|
{
|
|
181
181
|
name: 'manage-rules',
|
|
182
182
|
description:
|
|
183
|
-
'
|
|
183
|
+
'Server-side inbox rule CRUD (destructive: covers `delete`; supports `dryRun` on create/update for preview). Rules run on the Exchange server regardless of which client is open. action=`list` (default) returns rules with id/name/sequence — pass `includeDetails: true` to expand conditions/actions/exceptions. action=`create` builds a new rule from condition params (12 supported: fromAddresses, containsSubject, bodyContains, hasAttachments, importance, sentTo, sensitivity, etc.), action params (9 supported: moveToFolder, forwardTo, redirectTo, assignCategories, markAsRead, delete, etc.), and optional `except*` exceptions. action=`update` patches the named fields by `ruleId`. action=`reorder` changes execution priority via `sequence` (lower = earlier). action=`delete` removes a rule. Recipient allowlist applies to forwardTo/redirectTo. `permanentDelete` action is intentionally omitted (too dangerous for AI use — use the Outlook UI). Subject to session rate limits (`OUTLOOK_MAX_MANAGE_RULES_PER_SESSION`).',
|
|
184
184
|
annotations: {
|
|
185
185
|
title: 'Inbox Rules',
|
|
186
186
|
readOnlyHint: false,
|
package/settings/index.js
CHANGED
|
@@ -615,7 +615,7 @@ const settingsTools = [
|
|
|
615
615
|
{
|
|
616
616
|
name: 'mailbox-settings',
|
|
617
617
|
description:
|
|
618
|
-
'
|
|
618
|
+
'Read or update mailbox-level settings (idempotent — safe to retry; sets are PATCH-style and merge with existing state). action=`get` (default) returns settings — use `section` to filter (`language`, `timeZone`, `workingHours`, `automaticRepliesSetting`, or `all`). action=`set-auto-replies` configures out-of-office: `enabled` true/false, optional `startDateTime`/`endDateTime` (ISO 8601) for scheduled mode, `internalReplyMessage` and (optionally) `externalReplyMessage`. action=`set-working-hours` updates the schedule: `startTime`/`endTime` (HH:MM) and `daysOfWeek` (array of `monday`..`sunday`). Returns the updated settings object on set actions.',
|
|
619
619
|
annotations: {
|
|
620
620
|
title: 'Mailbox Settings',
|
|
621
621
|
readOnlyHint: false,
|