shipmail-mcp 0.5.3 → 0.5.7

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/README.md CHANGED
@@ -215,6 +215,7 @@ Once connected, ask your agent:
215
215
  - "Send the selected PDF to Christelle tomorrow at 08:00, then show me the scheduled message."
216
216
  - "List my scheduled messages and move the invoice email to Friday."
217
217
  - "Create a webhook that posts new email events to `https://example.com/hooks/shipmail`, then send a test event."
218
+ - "Read the existing rules for `billing@acme.com`, then add a rule that moves invoice messages to Billing and stars them."
218
219
  - "Show recent deliveries for webhook `whk_xyz`, then replay failed delivery `dlv_xyz`."
219
220
  - "List my newsletter sending domains and recent newsletter assets, draft a newsletter for audience `aud_abc123`, preview it, then send a test."
220
221
 
@@ -222,35 +223,44 @@ Once connected, ask your agent:
222
223
 
223
224
  All tools are namespaced with `shipmail_` to avoid collisions with peer MCP servers.
224
225
 
225
- | Group | Tools |
226
- | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
227
- | Status | `shipmail_status` |
228
- | Domains | `shipmail_list_domains`, `shipmail_get_domain`, `shipmail_get_domain_dns_records`, `shipmail_create_domain`, `shipmail_update_domain`, `shipmail_delete_domain`, `shipmail_verify_domain`, `shipmail_search_domains` |
229
- | Mailboxes | `shipmail_list_mailboxes`, `shipmail_get_mailbox`, `shipmail_create_mailbox`, `shipmail_update_mailbox`, `shipmail_delete_mailbox`, `shipmail_suspend_mailbox`, `shipmail_resume_mailbox`, `shipmail_list_mailbox_app_passwords`, `shipmail_create_mailbox_app_password`, `shipmail_revoke_mailbox_app_password`, `shipmail_list_mailbox_forwarding`, `shipmail_create_mailbox_forwarding`, `shipmail_delete_mailbox_forwarding`, `shipmail_list_mailbox_folders`, `shipmail_create_mailbox_folder`, `shipmail_update_mailbox_folder`, `shipmail_delete_mailbox_folder`, `shipmail_list_mailbox_identities`, `shipmail_reset_mailbox_password`, `shipmail_set_auto_reply`, `shipmail_set_spam_filter`, `shipmail_inject_sandbox_inbound` |
230
- | Mailbox inbox | `shipmail_list_mailbox_inbox_messages`, `shipmail_get_mailbox_inbox_message`, `shipmail_get_mailbox_inbox_thread`, `shipmail_list_mailbox_inbox_threads`, `shipmail_update_inbox_thread_reply_state`, `shipmail_create_inbox_reply_draft`, `shipmail_send_inbox_reply_draft`, `shipmail_update_inbox_message`, `shipmail_move_inbox_message`, `shipmail_delete_inbox_message` |
231
- | Reply scans | `shipmail_create_reply_scan`, `shipmail_get_reply_scan`, `shipmail_list_reply_scan_results` |
232
- | Messages and threads | `shipmail_list_messages`, `shipmail_get_message`, `shipmail_compose_message_with_file` (hosted MCP Apps), `shipmail_send_message`, `shipmail_list_scheduled_messages`, `shipmail_get_scheduled_message`, `shipmail_update_scheduled_message`, `shipmail_cancel_scheduled_message`, `shipmail_reply_to_message`, `shipmail_list_threads`, `shipmail_get_thread`, `shipmail_reply_to_thread`, `shipmail_reply_to_inbox_message`, `shipmail_reply_to_inbox_thread` |
233
- | Webhooks | `shipmail_list_webhooks`, `shipmail_get_webhook`, `shipmail_create_webhook`, `shipmail_update_webhook`, `shipmail_delete_webhook`, `shipmail_rotate_webhook_secret`, `shipmail_test_webhook`, `shipmail_list_webhook_deliveries`, `shipmail_get_webhook_delivery`, `shipmail_replay_webhook_delivery` |
234
- | Suppressions | `shipmail_list_suppressions`, `shipmail_remove_suppression` |
235
- | Audiences | `shipmail_list_audiences`, `shipmail_get_audience`, `shipmail_create_audience`, `shipmail_update_audience`, `shipmail_delete_audience`, `shipmail_list_subscribers`, `shipmail_get_subscriber`, `shipmail_get_subscriber_by_email`, `shipmail_add_subscriber`, `shipmail_add_subscribers_batch`, `shipmail_update_subscriber`, `shipmail_unsubscribe_subscriber`, `shipmail_resubscribe_subscriber`, `shipmail_remove_subscriber` |
236
- | Newsletters | `shipmail_list_newsletter_domains`, `shipmail_list_newsletter_assets`, `shipmail_list_newsletters`, `shipmail_get_newsletter`, `shipmail_preview_newsletter`, `shipmail_create_newsletter`, `shipmail_create_newsletter_from_changelog`, `shipmail_update_newsletter`, `shipmail_run_newsletter_preflight`, `shipmail_send_newsletter_test`, `shipmail_schedule_newsletter`, `shipmail_cancel_newsletter`, `shipmail_resume_newsletter` |
237
- | Partner beta | `shipmail_list_partner_organizations`, `shipmail_create_partner_organization`, `shipmail_get_partner_organization`, `shipmail_update_partner_organization`, `shipmail_resend_partner_ownership_invitation`, `shipmail_suspend_partner_organization`, `shipmail_resume_partner_organization`, `shipmail_offboard_partner_organization`, `shipmail_list_partner_mailbox_credential_grants`, `shipmail_consume_partner_mailbox_credential_grant`, `shipmail_get_partner_usage` |
226
+ | Group | Tools |
227
+ | --------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
228
+ | Status | `shipmail_status` |
229
+ | Domains | `shipmail_list_domains`, `shipmail_get_domain`, `shipmail_get_domain_dns_records`, `shipmail_create_domain`, `shipmail_update_domain`, `shipmail_delete_domain`, `shipmail_verify_domain`, `shipmail_search_domains` |
230
+ | Mailboxes | `shipmail_list_mailboxes`, `shipmail_get_mailbox`, `shipmail_create_mailbox`, `shipmail_update_mailbox`, `shipmail_delete_mailbox`, `shipmail_suspend_mailbox`, `shipmail_resume_mailbox`, `shipmail_list_mailbox_app_passwords`, `shipmail_create_mailbox_app_password`, `shipmail_revoke_mailbox_app_password`, `shipmail_list_mailbox_forwarding`, `shipmail_create_mailbox_forwarding`, `shipmail_delete_mailbox_forwarding`, `shipmail_list_mailbox_folders`, `shipmail_get_mailbox_rules`, `shipmail_set_mailbox_rules`, `shipmail_create_mailbox_folder`, `shipmail_update_mailbox_folder`, `shipmail_delete_mailbox_folder`, `shipmail_list_mailbox_identities`, `shipmail_reset_mailbox_password`, `shipmail_set_auto_reply`, `shipmail_set_spam_filter`, `shipmail_inject_sandbox_inbound` |
231
+ | Mailbox inbox | `shipmail_list_mailbox_inbox_messages`, `shipmail_get_mailbox_inbox_message`, `shipmail_get_mailbox_inbox_thread`, `shipmail_list_mailbox_inbox_threads`, `shipmail_update_inbox_thread_reply_state`, `shipmail_create_inbox_reply_draft`, `shipmail_send_inbox_reply_draft`, `shipmail_update_inbox_message`, `shipmail_move_inbox_message`, `shipmail_delete_inbox_message` |
232
+ | Reply scans | `shipmail_create_reply_scan`, `shipmail_get_reply_scan`, `shipmail_list_reply_scan_results` |
233
+ | Messages and threads | `shipmail_list_messages`, `shipmail_get_message`, `shipmail_compose_message_with_file` (hosted MCP Apps), `shipmail_prepare_staged_attachment_upload`, `shipmail_send_message`, `shipmail_list_scheduled_messages`, `shipmail_get_scheduled_message`, `shipmail_update_scheduled_message`, `shipmail_cancel_scheduled_message`, `shipmail_reply_to_message`, `shipmail_list_threads`, `shipmail_get_thread`, `shipmail_reply_to_thread`, `shipmail_reply_to_inbox_message`, `shipmail_reply_to_inbox_thread` |
234
+ | Webhooks | `shipmail_list_webhooks`, `shipmail_get_webhook`, `shipmail_create_webhook`, `shipmail_update_webhook`, `shipmail_delete_webhook`, `shipmail_rotate_webhook_secret`, `shipmail_test_webhook`, `shipmail_list_webhook_deliveries`, `shipmail_get_webhook_delivery`, `shipmail_replay_webhook_delivery` |
235
+ | Suppressions | `shipmail_list_suppressions`, `shipmail_remove_suppression` |
236
+ | Audiences | `shipmail_list_audiences`, `shipmail_get_audience`, `shipmail_create_audience`, `shipmail_update_audience`, `shipmail_delete_audience`, `shipmail_list_subscribers`, `shipmail_get_subscriber`, `shipmail_get_subscriber_by_email`, `shipmail_add_subscriber`, `shipmail_add_subscribers_batch`, `shipmail_update_subscriber`, `shipmail_unsubscribe_subscriber`, `shipmail_resubscribe_subscriber`, `shipmail_remove_subscriber` |
237
+ | Newsletters | `shipmail_list_newsletter_domains`, `shipmail_list_newsletter_assets`, `shipmail_list_newsletters`, `shipmail_get_newsletter`, `shipmail_preview_newsletter`, `shipmail_create_newsletter`, `shipmail_create_newsletter_from_changelog`, `shipmail_update_newsletter`, `shipmail_run_newsletter_preflight`, `shipmail_send_newsletter_test`, `shipmail_schedule_newsletter`, `shipmail_cancel_newsletter`, `shipmail_resume_newsletter` |
238
+ | Cross-organization lists (hosted OAuth) | `shipmail_list_domains_across_organizations`, `shipmail_list_mailboxes_across_organizations`, `shipmail_list_webhooks_across_organizations`, `shipmail_list_suppressions_across_organizations`, `shipmail_list_newsletters_across_organizations`, `shipmail_list_newsletter_domains_across_organizations`, `shipmail_list_newsletter_assets_across_organizations`, `shipmail_list_audiences_across_organizations`, `shipmail_list_booking_pages_across_organizations` |
239
+ | Partner beta | `shipmail_list_partner_organizations`, `shipmail_create_partner_organization`, `shipmail_get_partner_organization`, `shipmail_update_partner_organization`, `shipmail_resend_partner_ownership_invitation`, `shipmail_suspend_partner_organization`, `shipmail_resume_partner_organization`, `shipmail_offboard_partner_organization`, `shipmail_list_partner_mailbox_credential_grants`, `shipmail_consume_partner_mailbox_credential_grant`, `shipmail_get_partner_usage` |
240
+
241
+ Cross-organization list tools appear only on hosted OAuth connections with at least two
242
+ organization grants. They return a success or failure section for every organization and paginate
243
+ each section independently through `cursor_by_organization`. Lists that require a parent resource,
244
+ such as one mailbox's inbox messages or one audience's subscribers, remain organization-targeted.
238
245
 
239
246
  Message send and reply tools accept optional `client_reference`, scalar `metadata`,
240
247
  `source_rfc_message_id`, and validated safe `headers`. `shipmail_list_messages` accepts either a
241
248
  `mailbox_id` or an exact organization-scoped `client_reference`.
242
249
 
243
250
  MCP send and scheduled-update tools accept short-lived staged attachment IDs, not base64 bytes.
244
- Stage a raw file through the REST API, TypeScript SDK, Python SDK, CLI, or a supported host
245
- attachment component, then pass the returned `sat_...` ID. Scheduled messages can be listed,
246
- inspected, replaced, and cancelled before dispatch begins.
251
+ For a local file, calculate its exact byte size and SHA-256 digest, call
252
+ `shipmail_prepare_staged_attachment_upload`, then `POST` the unmodified bytes to the returned
253
+ five-minute, one-time `upload_url` using the declared content type. The upload response contains
254
+ the `sat_...` ID to pass to `shipmail_send_message`. The URL accepts only the declared bytes and
255
+ does not expose the MCP bearer credential. Scheduled messages can be listed, inspected, replaced,
256
+ and cancelled before dispatch begins.
247
257
 
248
258
  In ChatGPT, `shipmail_compose_message_with_file` renders an MCP Apps review card for a
249
259
  conversation or library file. The card obtains a fresh ChatGPT download URL, hashes the exact
250
- bytes, creates a five-minute one-time ShipMail upload URL through an app-only tool, uploads
251
- without exposing the connection credential, and calls `shipmail_send_message` only after the
252
- user presses **Upload and send** or **Upload and schedule**. The upload endpoint follows no source
253
- URL, rejects redirects and metadata mismatches, and consumes the signed token once.
260
+ bytes, creates a five-minute one-time ShipMail upload URL, uploads without exposing the connection
261
+ credential, and calls `shipmail_send_message` only after the user presses **Upload and send** or
262
+ **Upload and schedule**. The upload endpoint follows no source URL, rejects redirects and metadata
263
+ mismatches, and consumes the signed token once.
254
264
 
255
265
  For mailbox agents, prefer the reply queue or a reply scan followed by
256
266
  `shipmail_create_inbox_reply_draft`. The server derives recipients from the thread and records the
@@ -266,6 +276,11 @@ immediately. Partner grant consumption requires the exact `partner:mailbox_crede
266
276
  scope and an operator-approved one-time grant. App-password creation and grant consumption do not
267
277
  accept idempotency keys.
268
278
 
279
+ `shipmail_set_mailbox_rules` replaces the complete rule list. Call
280
+ `shipmail_get_mailbox_rules` first and preserve every rule that should remain. Inbox rules are
281
+ deterministic filters for moving, marking as read, starring, or emitting a
282
+ `mailbox.rule_matched` event to subscribed webhook endpoints.
283
+
269
284
  The server discovers the effective tool catalog from Shipmail before startup. It fails closed when
270
285
  capability discovery fails. To change what an AI can do, edit the OAuth connection under
271
286
  **Settings → Connections**, or edit the direct API key's scopes and constraints.
@@ -281,6 +296,7 @@ Read-only resources for inspection without tool calls:
281
296
  - `shipmail://mailboxes/{id}`
282
297
  - `shipmail://mailboxes/{id}/folders`
283
298
  - `shipmail://mailboxes/{id}/identities`
299
+ - `shipmail://mailboxes/{id}/rules`
284
300
  - `shipmail://mailboxes/{id}/inbox/messages`
285
301
  - `shipmail://mailboxes/{id}/inbox/threads/{thread_id}`
286
302
  - `shipmail://messages/{id}`
@@ -319,7 +335,7 @@ Shipmail generates the primary credential and never returns it to the partner.
319
335
  - **Circuit breaker**: Each session enforces per-tool rate limits and a hard total-call ceiling as a runaway-agent guard. These are not abuse controls. Real abuse limits live at the API per API key. Restart the server to reset.
320
336
  - **Least-privilege reply workflow**: Use `messages:read` for discovery, add `drafts:write` for reviewable draft creation, and grant `messages:send` only to agents that are allowed to transmit approved mail. A review-only agent does not need send access.
321
337
  - **Webhook URL validation**: Webhook URLs must be public https endpoints. Localhost, RFC1918, link-local, ULA, IPv4-mapped IPv6, `0.0.0.0`, decimal-int IPs, `.local`, and `.internal` hosts are rejected at input time.
322
- - **Destructive annotations**: Tools that delete, retarget, rotate, reset credentials, or create automatic outbound responses are annotated with `destructiveHint`. Hosts that gate on this annotation will prompt the user. Annotated tools include `shipmail_update_domain`, `shipmail_update_webhook`, `shipmail_rotate_webhook_secret`, `shipmail_delete_mailbox_folder`, `shipmail_reset_mailbox_password`, and `shipmail_set_auto_reply` in addition to obvious deletes.
338
+ - **Destructive annotations**: Tools that delete, retarget, replace persistent rules, rotate, reset credentials, or create automatic outbound responses are annotated with `destructiveHint`. Hosts that gate on this annotation will prompt the user. Annotated tools include `shipmail_update_domain`, `shipmail_update_webhook`, `shipmail_rotate_webhook_secret`, `shipmail_set_mailbox_rules`, `shipmail_delete_mailbox_folder`, `shipmail_reset_mailbox_password`, and `shipmail_set_auto_reply` in addition to obvious deletes.
323
339
 
324
340
  Domain purchase is intentionally excluded.
325
341
 
@@ -1,9 +1,9 @@
1
1
  import { ApiKeyScope } from 'shipmail/api-key-scopes';
2
2
 
3
3
  declare const MCP_CAPABILITY_VERSION = "1.0.0";
4
- declare const MCP_PERMISSION_GROUP_NAMES: readonly ["account_status", "mail_read", "drafts", "mail_organize", "send_mail", "calendar_read", "calendar_write", "booking_pages", "forwarding", "webhooks", "credentials", "mailbox_export", "domain_admin", "mailbox_admin", "newsletters", "audiences", "suppressions", "partner_admin"];
4
+ declare const MCP_PERMISSION_GROUP_NAMES: readonly ["account_status", "mail_read", "drafts", "mail_organize", "send_mail", "calendar_read", "calendar_write", "booking_pages", "forwarding", "mailbox_rules", "webhooks", "credentials", "mailbox_export", "domain_admin", "mailbox_admin", "newsletters", "audiences", "suppressions", "partner_admin"];
5
5
  type McpPermissionGroupName = (typeof MCP_PERMISSION_GROUP_NAMES)[number];
6
- declare const MCP_MEMBER_PERMISSION_GROUP_NAMES: readonly ["account_status", "mail_read", "drafts", "mail_organize", "send_mail", "calendar_read", "calendar_write"];
6
+ declare const MCP_MEMBER_PERMISSION_GROUP_NAMES: readonly ["account_status", "mail_read", "drafts", "mail_organize", "mailbox_rules", "send_mail", "calendar_read", "calendar_write"];
7
7
  type McpRole = "owner" | "member";
8
8
  type McpCapabilityEffect = "read" | "local_write" | "external_write" | "destructive";
9
9
  type McpRecipientControl = "none" | "server_derived" | "caller_supplied";
@@ -70,6 +70,12 @@ declare const MCP_PERMISSION_GROUPS: readonly [{
70
70
  readonly description: "Read and manage persistent forwarding destinations.";
71
71
  readonly scopes: readonly ["mailbox_forwarding:read", "mailbox_forwarding:write"];
72
72
  readonly persistent: true;
73
+ }, {
74
+ readonly name: "mailbox_rules";
75
+ readonly label: "Inbox rules";
76
+ readonly description: "Read and manage persistent server-side sorting, move, read, and star rules.";
77
+ readonly scopes: readonly ["mailbox_rules:read", "mailbox_rules:write"];
78
+ readonly persistent: true;
73
79
  }, {
74
80
  readonly name: "webhooks";
75
81
  readonly label: "Webhooks";
@@ -125,7 +131,7 @@ declare const MCP_PERMISSION_GROUPS: readonly [{
125
131
  readonly scopes: readonly ["partner:organizations:read", "partner:organizations:write", "partner:organizations:access", "partner:mailbox_credentials:issue", "partner:usage:read"];
126
132
  readonly persistent: true;
127
133
  }];
128
- declare const CAPABILITY_ROWS: readonly [readonly ["shipmail_status", "getStatus", "public"], readonly ["shipmail_create_domain", "createDomain", "domains:write"], readonly ["shipmail_list_domains", "listDomains", "domains:read"], readonly ["shipmail_get_domain", "getDomain", "domains:read"], readonly ["shipmail_get_domain_dns_records", "getDomainDnsRecords", "domains:read"], readonly ["shipmail_update_domain", "updateDomain", "domains:write"], readonly ["shipmail_delete_domain", "deleteDomain", "domains:write"], readonly ["shipmail_verify_domain", "verifyDomain", "domains:write"], readonly ["shipmail_search_domains", "searchDomains", "domains:read"], readonly ["shipmail_create_mailbox", "createMailbox", "mailboxes:write"], readonly ["shipmail_list_mailboxes", "listMailboxes", "mailboxes:read"], readonly ["shipmail_get_mailbox", "getMailbox", "mailboxes:read"], readonly ["shipmail_list_mailbox_app_passwords", "listMailboxAppPasswords", "mailbox_credentials:read"], readonly ["shipmail_create_mailbox_app_password", "createMailboxAppPassword", "mailbox_credentials:write"], readonly ["shipmail_revoke_mailbox_app_password", "revokeMailboxAppPassword", "mailbox_credentials:write"], readonly ["shipmail_suspend_mailbox", "suspendMailbox", "mailboxes:write"], readonly ["shipmail_resume_mailbox", "resumeMailbox", "mailboxes:write"], readonly ["shipmail_create_mailbox_export", "createMailboxExport", "mailboxes:export"], readonly ["shipmail_get_mailbox_export", "getMailboxExport", "mailboxes:export"], readonly ["shipmail_update_mailbox", "updateMailbox", "mailboxes:write"], readonly ["shipmail_delete_mailbox", "deleteMailbox", "mailboxes:write"], readonly ["shipmail_list_mailbox_folders", "listMailboxFolders", "mailboxes:read"], readonly ["shipmail_create_mailbox_folder", "createMailboxFolder", "mailboxes:write"], readonly ["shipmail_update_mailbox_folder", "updateMailboxFolder", "mailboxes:write"], readonly ["shipmail_delete_mailbox_folder", "deleteMailboxFolder", "mailboxes:write"], readonly ["shipmail_list_mailbox_identities", "listMailboxIdentities", "mailboxes:read"], readonly ["shipmail_list_mailbox_inbox_messages", "listMailboxInboxMessages", "messages:read"], readonly ["shipmail_get_mailbox_inbox_message", "getMailboxInboxMessage", "messages:read"], readonly ["shipmail_list_mailbox_inbox_threads", "listMailboxInboxThreads", "messages:read"], readonly ["shipmail_get_mailbox_inbox_thread", "getMailboxInboxThread", "messages:read"], readonly ["shipmail_update_inbox_thread_reply_state", "updateMailboxInboxThreadReplyState", "messages:write"], readonly ["shipmail_create_inbox_reply_draft", "createMailboxInboxReplyDraft", "drafts:write"], readonly ["shipmail_send_inbox_reply_draft", "sendMailboxInboxReplyDraft", "messages:send"], readonly ["shipmail_reply_to_inbox_message", "replyToMailboxInboxMessage", "messages:send"], readonly ["shipmail_reply_to_inbox_thread", "replyToMailboxInboxThread", "messages:send"], readonly ["shipmail_update_inbox_message", "updateMailboxInboxMessage", "messages:write"], readonly ["shipmail_move_inbox_message", "moveMailboxInboxMessage", "messages:write"], readonly ["shipmail_delete_inbox_message", "deleteMailboxInboxMessage", "messages:write"], readonly ["shipmail_list_mailbox_forwarding", "listMailboxForwarding", "mailbox_forwarding:read"], readonly ["shipmail_create_mailbox_forwarding", "createMailboxForwarding", "mailbox_forwarding:write"], readonly ["shipmail_delete_mailbox_forwarding", "deleteMailboxForwarding", "mailbox_forwarding:write"], readonly ["shipmail_reset_mailbox_password", "resetMailboxPassword", "mailboxes:write"], readonly ["shipmail_set_auto_reply", "updateAutoReply", "mailboxes:write"], readonly ["shipmail_set_spam_filter", "updateSpamFilter", "mailboxes:write"], readonly ["shipmail_create_mailbox_import", "createMailboxImport", "mailboxes:write"], readonly ["shipmail_list_mailbox_imports", "listMailboxImports", "mailboxes:read"], readonly ["shipmail_get_mailbox_import", "getMailboxImport", "mailboxes:read"], readonly ["shipmail_cancel_mailbox_import", "cancelMailboxImport", "mailboxes:write"], readonly ["shipmail_undo_mailbox_import", "undoMailboxImport", "mailboxes:write"], readonly ["shipmail_inject_sandbox_inbound", "injectSandboxInbound", "messages:write"], readonly ["shipmail_list_messages", "listMessages", "messages:read"], readonly ["shipmail_compose_message_with_file", "prepareStagedAttachmentUpload", "messages:send"], readonly ["shipmail_prepare_staged_attachment_upload", "prepareStagedAttachmentUpload", "messages:send"], readonly ["shipmail_send_message", "sendMessage", "messages:send"], readonly ["shipmail_list_scheduled_messages", "listScheduledMessages", "messages:read"], readonly ["shipmail_get_scheduled_message", "getScheduledMessage", "messages:read"], readonly ["shipmail_update_scheduled_message", "updateScheduledMessage", "messages:send"], readonly ["shipmail_cancel_scheduled_message", "cancelScheduledMessage", "messages:send"], readonly ["shipmail_get_message", "getMessage", "messages:read"], readonly ["shipmail_reply_to_message", "replyToMessage", "messages:send"], readonly ["shipmail_list_threads", "listThreads", "threads:read"], readonly ["shipmail_get_thread", "getThread", "threads:read"], readonly ["shipmail_reply_to_thread", "replyToThread", "messages:send"], readonly ["shipmail_create_reply_scan", "createReplyScan", "messages:read"], readonly ["shipmail_get_reply_scan", "getReplyScan", "messages:read"], readonly ["shipmail_list_reply_scan_results", "listReplyScanResults", "messages:read"], readonly ["shipmail_create_webhook", "createWebhook", "webhooks:write"], readonly ["shipmail_list_webhooks", "listWebhooks", "webhooks:read"], readonly ["shipmail_get_webhook", "getWebhook", "webhooks:read"], readonly ["shipmail_update_webhook", "updateWebhook", "webhooks:write"], readonly ["shipmail_delete_webhook", "deleteWebhook", "webhooks:write"], readonly ["shipmail_rotate_webhook_secret", "rotateWebhookSecret", "webhooks:write"], readonly ["shipmail_test_webhook", "testWebhook", "webhooks:write"], readonly ["shipmail_list_webhook_deliveries", "listWebhookDeliveries", "webhooks:read"], readonly ["shipmail_get_webhook_delivery", "getWebhookDelivery", "webhooks:read"], readonly ["shipmail_replay_webhook_delivery", "replayWebhookDelivery", "webhooks:write"], readonly ["shipmail_list_suppressions", "listSuppressions", "suppressions:read"], readonly ["shipmail_remove_suppression", "removeSuppression", "suppressions:write"], readonly ["shipmail_create_audience", "createAudience", "audiences:write"], readonly ["shipmail_list_audiences", "listAudiences", "audiences:read"], readonly ["shipmail_get_audience", "getAudience", "audiences:read"], readonly ["shipmail_update_audience", "updateAudience", "audiences:write"], readonly ["shipmail_delete_audience", "deleteAudience", "audiences:write"], readonly ["shipmail_add_subscriber", "addSubscriber", "audiences:write"], readonly ["shipmail_add_subscribers_batch", "addSubscribersBatch", "audiences:write"], readonly ["shipmail_list_subscribers", "listSubscribers", "audiences:read"], readonly ["shipmail_get_subscriber", "getSubscriber", "audiences:read"], readonly ["shipmail_get_subscriber_by_email", "getSubscriberByEmail", "audiences:read"], readonly ["shipmail_update_subscriber", "updateSubscriber", "audiences:write"], readonly ["shipmail_unsubscribe_subscriber", "unsubscribeSubscriber", "audiences:write"], readonly ["shipmail_resubscribe_subscriber", "resubscribeSubscriber", "audiences:write"], readonly ["shipmail_remove_subscriber", "removeSubscriber", "audiences:write"], readonly ["shipmail_list_newsletter_domains", "listNewsletterDomains", "newsletters:read"], readonly ["shipmail_create_newsletter", "createNewsletter", "newsletters:write"], readonly ["shipmail_create_newsletter_from_changelog", "createNewsletterFromChangelog", "newsletters:write"], readonly ["shipmail_list_newsletters", "listNewsletters", "newsletters:read"], readonly ["shipmail_get_newsletter", "getNewsletter", "newsletters:read"], readonly ["shipmail_update_newsletter", "updateNewsletter", "newsletters:write"], readonly ["shipmail_list_newsletter_assets", "listNewsletterAssets", "newsletters:read"], readonly ["shipmail_register_newsletter_asset", "uploadNewsletterAsset", "newsletters:write"], readonly ["shipmail_preview_newsletter", "previewNewsletter", "newsletters:read"], readonly ["shipmail_run_newsletter_preflight", "runNewsletterPreflight", "newsletters:write"], readonly ["shipmail_send_newsletter_test", "sendNewsletterTest", "newsletters:write"], readonly ["shipmail_schedule_newsletter", "scheduleNewsletter", "newsletters:write"], readonly ["shipmail_cancel_newsletter", "cancelNewsletter", "newsletters:write"], readonly ["shipmail_resume_newsletter", "resumeNewsletter", "newsletters:write"], readonly ["shipmail_list_calendar_events", "listCalendarEvents", "calendar:read"], readonly ["shipmail_create_calendar_event", "createCalendarEvent", "calendar:write"], readonly ["shipmail_get_calendar_event", "getCalendarEvent", "calendar:read"], readonly ["shipmail_update_calendar_event", "updateCalendarEvent", "calendar:write"], readonly ["shipmail_delete_calendar_event", "deleteCalendarEvent", "calendar:write"], readonly ["shipmail_get_calendar_availability", "getCalendarAvailability", "calendar:read"], readonly ["shipmail_list_booking_pages", "listBookingPages", "booking_pages:read"], readonly ["shipmail_create_booking_page", "createBookingPage", "booking_pages:write"], readonly ["shipmail_get_booking_page", "getBookingPage", "booking_pages:read"], readonly ["shipmail_update_booking_page", "updateBookingPage", "booking_pages:write"], readonly ["shipmail_delete_booking_page", "deleteBookingPage", "booking_pages:write"], readonly ["shipmail_list_partner_organizations", "listPartnerOrganizations", "partner:organizations:read"], readonly ["shipmail_create_partner_organization", "createPartnerOrganization", "partner:organizations:write"], readonly ["shipmail_get_partner_organization", "getPartnerOrganization", "partner:organizations:read"], readonly ["shipmail_update_partner_organization", "updatePartnerOrganization", "partner:organizations:write"], readonly ["shipmail_resend_partner_ownership_invitation", "resendPartnerOwnershipInvitation", "partner:organizations:write"], readonly ["shipmail_suspend_partner_organization", "suspendPartnerOrganization", "partner:organizations:write"], readonly ["shipmail_resume_partner_organization", "resumePartnerOrganization", "partner:organizations:write"], readonly ["shipmail_offboard_partner_organization", "offboardPartnerOrganization", "partner:organizations:write"], readonly ["shipmail_list_partner_mailbox_credential_grants", "listPartnerMailboxCredentialGrants", "partner:mailbox_credentials:issue"], readonly ["shipmail_consume_partner_mailbox_credential_grant", "consumePartnerMailboxCredentialGrant", "partner:mailbox_credentials:issue"], readonly ["shipmail_get_partner_usage", "getPartnerUsage", "partner:usage:read"]];
134
+ declare const CAPABILITY_ROWS: readonly [readonly ["shipmail_status", "getStatus", "public"], readonly ["shipmail_create_domain", "createDomain", "domains:write"], readonly ["shipmail_list_domains", "listDomains", "domains:read"], readonly ["shipmail_get_domain", "getDomain", "domains:read"], readonly ["shipmail_get_domain_dns_records", "getDomainDnsRecords", "domains:read"], readonly ["shipmail_update_domain", "updateDomain", "domains:write"], readonly ["shipmail_delete_domain", "deleteDomain", "domains:write"], readonly ["shipmail_verify_domain", "verifyDomain", "domains:write"], readonly ["shipmail_search_domains", "searchDomains", "domains:read"], readonly ["shipmail_create_mailbox", "createMailbox", "mailboxes:write"], readonly ["shipmail_list_mailboxes", "listMailboxes", "mailboxes:read"], readonly ["shipmail_get_mailbox", "getMailbox", "mailboxes:read"], readonly ["shipmail_list_mailbox_app_passwords", "listMailboxAppPasswords", "mailbox_credentials:read"], readonly ["shipmail_create_mailbox_app_password", "createMailboxAppPassword", "mailbox_credentials:write"], readonly ["shipmail_revoke_mailbox_app_password", "revokeMailboxAppPassword", "mailbox_credentials:write"], readonly ["shipmail_suspend_mailbox", "suspendMailbox", "mailboxes:write"], readonly ["shipmail_resume_mailbox", "resumeMailbox", "mailboxes:write"], readonly ["shipmail_create_mailbox_export", "createMailboxExport", "mailboxes:export"], readonly ["shipmail_get_mailbox_export", "getMailboxExport", "mailboxes:export"], readonly ["shipmail_update_mailbox", "updateMailbox", "mailboxes:write"], readonly ["shipmail_delete_mailbox", "deleteMailbox", "mailboxes:write"], readonly ["shipmail_list_mailbox_folders", "listMailboxFolders", "mailboxes:read"], readonly ["shipmail_get_mailbox_rules", "getMailboxRules", "mailbox_rules:read"], readonly ["shipmail_set_mailbox_rules", "updateMailboxRules", "mailbox_rules:write"], readonly ["shipmail_create_mailbox_folder", "createMailboxFolder", "mailboxes:write"], readonly ["shipmail_update_mailbox_folder", "updateMailboxFolder", "mailboxes:write"], readonly ["shipmail_delete_mailbox_folder", "deleteMailboxFolder", "mailboxes:write"], readonly ["shipmail_list_mailbox_identities", "listMailboxIdentities", "mailboxes:read"], readonly ["shipmail_list_mailbox_inbox_messages", "listMailboxInboxMessages", "messages:read"], readonly ["shipmail_get_mailbox_inbox_message", "getMailboxInboxMessage", "messages:read"], readonly ["shipmail_list_mailbox_inbox_threads", "listMailboxInboxThreads", "messages:read"], readonly ["shipmail_get_mailbox_inbox_thread", "getMailboxInboxThread", "messages:read"], readonly ["shipmail_update_inbox_thread_reply_state", "updateMailboxInboxThreadReplyState", "messages:write"], readonly ["shipmail_create_inbox_reply_draft", "createMailboxInboxReplyDraft", "drafts:write"], readonly ["shipmail_send_inbox_reply_draft", "sendMailboxInboxReplyDraft", "messages:send"], readonly ["shipmail_reply_to_inbox_message", "replyToMailboxInboxMessage", "messages:send"], readonly ["shipmail_reply_to_inbox_thread", "replyToMailboxInboxThread", "messages:send"], readonly ["shipmail_update_inbox_message", "updateMailboxInboxMessage", "messages:write"], readonly ["shipmail_move_inbox_message", "moveMailboxInboxMessage", "messages:write"], readonly ["shipmail_delete_inbox_message", "deleteMailboxInboxMessage", "messages:write"], readonly ["shipmail_list_mailbox_forwarding", "listMailboxForwarding", "mailbox_forwarding:read"], readonly ["shipmail_create_mailbox_forwarding", "createMailboxForwarding", "mailbox_forwarding:write"], readonly ["shipmail_delete_mailbox_forwarding", "deleteMailboxForwarding", "mailbox_forwarding:write"], readonly ["shipmail_reset_mailbox_password", "resetMailboxPassword", "mailboxes:write"], readonly ["shipmail_set_auto_reply", "updateAutoReply", "mailboxes:write"], readonly ["shipmail_set_spam_filter", "updateSpamFilter", "mailboxes:write"], readonly ["shipmail_create_mailbox_import", "createMailboxImport", "mailboxes:write"], readonly ["shipmail_list_mailbox_imports", "listMailboxImports", "mailboxes:read"], readonly ["shipmail_get_mailbox_import", "getMailboxImport", "mailboxes:read"], readonly ["shipmail_cancel_mailbox_import", "cancelMailboxImport", "mailboxes:write"], readonly ["shipmail_undo_mailbox_import", "undoMailboxImport", "mailboxes:write"], readonly ["shipmail_inject_sandbox_inbound", "injectSandboxInbound", "messages:write"], readonly ["shipmail_list_messages", "listMessages", "messages:read"], readonly ["shipmail_compose_message_with_file", "prepareStagedAttachmentUpload", "messages:send"], readonly ["shipmail_prepare_staged_attachment_upload", "prepareStagedAttachmentUpload", "messages:send"], readonly ["shipmail_send_message", "sendMessage", "messages:send"], readonly ["shipmail_list_scheduled_messages", "listScheduledMessages", "messages:read"], readonly ["shipmail_get_scheduled_message", "getScheduledMessage", "messages:read"], readonly ["shipmail_update_scheduled_message", "updateScheduledMessage", "messages:send"], readonly ["shipmail_cancel_scheduled_message", "cancelScheduledMessage", "messages:send"], readonly ["shipmail_get_message", "getMessage", "messages:read"], readonly ["shipmail_reply_to_message", "replyToMessage", "messages:send"], readonly ["shipmail_list_threads", "listThreads", "threads:read"], readonly ["shipmail_get_thread", "getThread", "threads:read"], readonly ["shipmail_reply_to_thread", "replyToThread", "messages:send"], readonly ["shipmail_create_reply_scan", "createReplyScan", "messages:read"], readonly ["shipmail_get_reply_scan", "getReplyScan", "messages:read"], readonly ["shipmail_list_reply_scan_results", "listReplyScanResults", "messages:read"], readonly ["shipmail_create_webhook", "createWebhook", "webhooks:write"], readonly ["shipmail_list_webhooks", "listWebhooks", "webhooks:read"], readonly ["shipmail_get_webhook", "getWebhook", "webhooks:read"], readonly ["shipmail_update_webhook", "updateWebhook", "webhooks:write"], readonly ["shipmail_delete_webhook", "deleteWebhook", "webhooks:write"], readonly ["shipmail_rotate_webhook_secret", "rotateWebhookSecret", "webhooks:write"], readonly ["shipmail_test_webhook", "testWebhook", "webhooks:write"], readonly ["shipmail_list_webhook_deliveries", "listWebhookDeliveries", "webhooks:read"], readonly ["shipmail_get_webhook_delivery", "getWebhookDelivery", "webhooks:read"], readonly ["shipmail_replay_webhook_delivery", "replayWebhookDelivery", "webhooks:write"], readonly ["shipmail_list_suppressions", "listSuppressions", "suppressions:read"], readonly ["shipmail_remove_suppression", "removeSuppression", "suppressions:write"], readonly ["shipmail_create_audience", "createAudience", "audiences:write"], readonly ["shipmail_list_audiences", "listAudiences", "audiences:read"], readonly ["shipmail_get_audience", "getAudience", "audiences:read"], readonly ["shipmail_update_audience", "updateAudience", "audiences:write"], readonly ["shipmail_delete_audience", "deleteAudience", "audiences:write"], readonly ["shipmail_add_subscriber", "addSubscriber", "audiences:write"], readonly ["shipmail_add_subscribers_batch", "addSubscribersBatch", "audiences:write"], readonly ["shipmail_list_subscribers", "listSubscribers", "audiences:read"], readonly ["shipmail_get_subscriber", "getSubscriber", "audiences:read"], readonly ["shipmail_get_subscriber_by_email", "getSubscriberByEmail", "audiences:read"], readonly ["shipmail_update_subscriber", "updateSubscriber", "audiences:write"], readonly ["shipmail_unsubscribe_subscriber", "unsubscribeSubscriber", "audiences:write"], readonly ["shipmail_resubscribe_subscriber", "resubscribeSubscriber", "audiences:write"], readonly ["shipmail_remove_subscriber", "removeSubscriber", "audiences:write"], readonly ["shipmail_list_newsletter_domains", "listNewsletterDomains", "newsletters:read"], readonly ["shipmail_create_newsletter", "createNewsletter", "newsletters:write"], readonly ["shipmail_create_newsletter_from_changelog", "createNewsletterFromChangelog", "newsletters:write"], readonly ["shipmail_list_newsletters", "listNewsletters", "newsletters:read"], readonly ["shipmail_get_newsletter", "getNewsletter", "newsletters:read"], readonly ["shipmail_update_newsletter", "updateNewsletter", "newsletters:write"], readonly ["shipmail_list_newsletter_assets", "listNewsletterAssets", "newsletters:read"], readonly ["shipmail_register_newsletter_asset", "uploadNewsletterAsset", "newsletters:write"], readonly ["shipmail_preview_newsletter", "previewNewsletter", "newsletters:read"], readonly ["shipmail_run_newsletter_preflight", "runNewsletterPreflight", "newsletters:write"], readonly ["shipmail_send_newsletter_test", "sendNewsletterTest", "newsletters:write"], readonly ["shipmail_schedule_newsletter", "scheduleNewsletter", "newsletters:write"], readonly ["shipmail_cancel_newsletter", "cancelNewsletter", "newsletters:write"], readonly ["shipmail_resume_newsletter", "resumeNewsletter", "newsletters:write"], readonly ["shipmail_list_calendar_events", "listCalendarEvents", "calendar:read"], readonly ["shipmail_create_calendar_event", "createCalendarEvent", "calendar:write"], readonly ["shipmail_get_calendar_event", "getCalendarEvent", "calendar:read"], readonly ["shipmail_update_calendar_event", "updateCalendarEvent", "calendar:write"], readonly ["shipmail_delete_calendar_event", "deleteCalendarEvent", "calendar:write"], readonly ["shipmail_get_calendar_availability", "getCalendarAvailability", "calendar:read"], readonly ["shipmail_list_booking_pages", "listBookingPages", "booking_pages:read"], readonly ["shipmail_create_booking_page", "createBookingPage", "booking_pages:write"], readonly ["shipmail_get_booking_page", "getBookingPage", "booking_pages:read"], readonly ["shipmail_update_booking_page", "updateBookingPage", "booking_pages:write"], readonly ["shipmail_delete_booking_page", "deleteBookingPage", "booking_pages:write"], readonly ["shipmail_list_partner_organizations", "listPartnerOrganizations", "partner:organizations:read"], readonly ["shipmail_create_partner_organization", "createPartnerOrganization", "partner:organizations:write"], readonly ["shipmail_get_partner_organization", "getPartnerOrganization", "partner:organizations:read"], readonly ["shipmail_update_partner_organization", "updatePartnerOrganization", "partner:organizations:write"], readonly ["shipmail_resend_partner_ownership_invitation", "resendPartnerOwnershipInvitation", "partner:organizations:write"], readonly ["shipmail_suspend_partner_organization", "suspendPartnerOrganization", "partner:organizations:write"], readonly ["shipmail_resume_partner_organization", "resumePartnerOrganization", "partner:organizations:write"], readonly ["shipmail_offboard_partner_organization", "offboardPartnerOrganization", "partner:organizations:write"], readonly ["shipmail_list_partner_mailbox_credential_grants", "listPartnerMailboxCredentialGrants", "partner:mailbox_credentials:issue"], readonly ["shipmail_consume_partner_mailbox_credential_grant", "consumePartnerMailboxCredentialGrant", "partner:mailbox_credentials:issue"], readonly ["shipmail_get_partner_usage", "getPartnerUsage", "partner:usage:read"]];
129
135
  type McpToolName = (typeof CAPABILITY_ROWS)[number][0];
130
136
  type McpCapability = {
131
137
  readonly toolName: McpToolName;
@@ -151,8 +157,9 @@ type McpCapability = {
151
157
  };
152
158
  declare const MCP_CAPABILITIES: readonly McpCapability[];
153
159
  declare const MCP_TOOL_NAMES: readonly McpToolName[];
160
+ declare const MCP_HOSTED_OAUTH_PERMISSION_GROUP_NAMES: readonly McpPermissionGroupName[];
154
161
  declare function getMcpCapability(toolName: string): McpCapability | undefined;
155
162
  declare function getAllowedMcpToolNames(grantedScopes: readonly string[], transport: keyof McpCapability["transports"]): ReadonlySet<McpToolName>;
156
163
  declare function permissionGroupsToScopes(groupNames: readonly McpPermissionGroupName[]): readonly ApiKeyScope[];
157
164
 
158
- export { MCP_CAPABILITIES, MCP_CAPABILITY_VERSION, MCP_MEMBER_PERMISSION_GROUP_NAMES, MCP_PERMISSION_GROUPS, MCP_PERMISSION_GROUP_NAMES, MCP_TOOL_NAMES, type McpCapability, type McpCapabilityDuration, type McpCapabilityEffect, type McpIdempotencyBehavior, type McpPermissionGroup, type McpPermissionGroupName, type McpRecipientControl, type McpRole, type McpToolName, getAllowedMcpToolNames, getMcpCapability, permissionGroupsToScopes };
165
+ export { MCP_CAPABILITIES, MCP_CAPABILITY_VERSION, MCP_HOSTED_OAUTH_PERMISSION_GROUP_NAMES, MCP_MEMBER_PERMISSION_GROUP_NAMES, MCP_PERMISSION_GROUPS, MCP_PERMISSION_GROUP_NAMES, MCP_TOOL_NAMES, type McpCapability, type McpCapabilityDuration, type McpCapabilityEffect, type McpIdempotencyBehavior, type McpPermissionGroup, type McpPermissionGroupName, type McpRecipientControl, type McpRole, type McpToolName, getAllowedMcpToolNames, getMcpCapability, permissionGroupsToScopes };
@@ -11,6 +11,7 @@ var MCP_PERMISSION_GROUP_NAMES = [
11
11
  "calendar_write",
12
12
  "booking_pages",
13
13
  "forwarding",
14
+ "mailbox_rules",
14
15
  "webhooks",
15
16
  "credentials",
16
17
  "mailbox_export",
@@ -26,6 +27,7 @@ var MCP_MEMBER_PERMISSION_GROUP_NAMES = [
26
27
  "mail_read",
27
28
  "drafts",
28
29
  "mail_organize",
30
+ "mailbox_rules",
29
31
  "send_mail",
30
32
  "calendar_read",
31
33
  "calendar_write"
@@ -94,6 +96,13 @@ var MCP_PERMISSION_GROUPS = [
94
96
  scopes: ["mailbox_forwarding:read", "mailbox_forwarding:write"],
95
97
  persistent: true
96
98
  },
99
+ {
100
+ name: "mailbox_rules",
101
+ label: "Inbox rules",
102
+ description: "Read and manage persistent server-side sorting, move, read, and star rules.",
103
+ scopes: ["mailbox_rules:read", "mailbox_rules:write"],
104
+ persistent: true
105
+ },
97
106
  {
98
107
  name: "webhooks",
99
108
  label: "Webhooks",
@@ -187,6 +196,8 @@ var CAPABILITY_ROWS = [
187
196
  ["shipmail_update_mailbox", "updateMailbox", "mailboxes:write"],
188
197
  ["shipmail_delete_mailbox", "deleteMailbox", "mailboxes:write"],
189
198
  ["shipmail_list_mailbox_folders", "listMailboxFolders", "mailboxes:read"],
199
+ ["shipmail_get_mailbox_rules", "getMailboxRules", "mailbox_rules:read"],
200
+ ["shipmail_set_mailbox_rules", "updateMailboxRules", "mailbox_rules:write"],
190
201
  ["shipmail_create_mailbox_folder", "createMailboxFolder", "mailboxes:write"],
191
202
  ["shipmail_update_mailbox_folder", "updateMailboxFolder", "mailboxes:write"],
192
203
  ["shipmail_delete_mailbox_folder", "deleteMailboxFolder", "mailboxes:write"],
@@ -348,7 +359,8 @@ var DESTRUCTIVE_TOOLS = /* @__PURE__ */ new Set([
348
359
  "shipmail_create_mailbox_app_password",
349
360
  "shipmail_create_mailbox_export",
350
361
  "shipmail_rotate_webhook_secret",
351
- "shipmail_consume_partner_mailbox_credential_grant"
362
+ "shipmail_consume_partner_mailbox_credential_grant",
363
+ "shipmail_set_mailbox_rules"
352
364
  ]);
353
365
  var EXTERNAL_WRITE_TOOLS = /* @__PURE__ */ new Set([
354
366
  "shipmail_send_message",
@@ -396,6 +408,7 @@ function permissionGroupFor(toolName, requiredScope) {
396
408
  if (requiredScope.startsWith("domains:")) return "domain_admin";
397
409
  if (requiredScope.startsWith("mailbox_credentials:")) return "credentials";
398
410
  if (requiredScope.startsWith("mailbox_forwarding:")) return "forwarding";
411
+ if (requiredScope.startsWith("mailbox_rules:")) return "mailbox_rules";
399
412
  if (requiredScope === "mailboxes:export") return "mailbox_export";
400
413
  if (requiredScope === "drafts:write") return "drafts";
401
414
  if (requiredScope === "messages:send") return "send_mail";
@@ -431,7 +444,7 @@ function durationFor(toolName) {
431
444
  if (toolName.includes("app_password") || toolName.includes("credential_grant") || toolName === "shipmail_rotate_webhook_secret") {
432
445
  return "credential";
433
446
  }
434
- if (toolName.includes("forwarding") || toolName.includes("webhook") || toolName.includes("booking_page")) {
447
+ if (toolName.includes("forwarding") || toolName.includes("mailbox_rules") || toolName.includes("webhook") || toolName.includes("booking_page")) {
435
448
  return "persistent";
436
449
  }
437
450
  if (toolName === "shipmail_send_message" || toolName.includes("schedule_") || toolName.includes("scheduled_message")) {
@@ -474,12 +487,17 @@ function defineCapability(row) {
474
487
  transports: {
475
488
  hostedOAuth: permissionGroup !== "partner_admin",
476
489
  directApiKeyHttp: true,
477
- stdio: toolName !== "shipmail_compose_message_with_file" && toolName !== "shipmail_prepare_staged_attachment_upload"
490
+ stdio: toolName !== "shipmail_compose_message_with_file"
478
491
  }
479
492
  };
480
493
  }
481
494
  var MCP_CAPABILITIES = CAPABILITY_ROWS.map(defineCapability);
482
495
  var MCP_TOOL_NAMES = CAPABILITY_ROWS.map(([toolName]) => toolName);
496
+ var MCP_HOSTED_OAUTH_PERMISSION_GROUP_NAMES = MCP_PERMISSION_GROUPS.filter(
497
+ (group) => MCP_CAPABILITIES.some(
498
+ (capability) => capability.permissionGroup === group.name && capability.transports.hostedOAuth
499
+ )
500
+ ).map((group) => group.name);
483
501
  function getMcpCapability(toolName) {
484
502
  return MCP_CAPABILITIES.find((capability) => capability.toolName === toolName);
485
503
  }
@@ -501,6 +519,7 @@ function permissionGroupsToScopes(groupNames) {
501
519
  export {
502
520
  MCP_CAPABILITIES,
503
521
  MCP_CAPABILITY_VERSION,
522
+ MCP_HOSTED_OAUTH_PERMISSION_GROUP_NAMES,
504
523
  MCP_MEMBER_PERMISSION_GROUP_NAMES,
505
524
  MCP_PERMISSION_GROUPS,
506
525
  MCP_PERMISSION_GROUP_NAMES,