shipmail-mcp 0.8.6 → 0.8.8

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.
@@ -1,13 +1,19 @@
1
1
  {
2
+ "displayName": "Shipmail",
2
3
  "name": "shipmail",
3
- "version": "0.8.6",
4
- "description": "Operate secure custom-domain business email, calendars, and agent inboxes with Shipmail.",
4
+ "version": "0.8.8",
5
+ "description": "Triage custom-domain inboxes, draft replies, send approved messages, and manage calendars with Shipmail.",
5
6
  "author": {
6
7
  "name": "Shipmail",
7
8
  "email": "ops@shipmail.to",
8
9
  "url": "https://shipmail.to"
9
10
  },
10
11
  "homepage": "https://shipmail.to/docs/mcp",
12
+ "privacyPolicyUrl": "https://shipmail.to/privacy",
13
+ "supportUrl": "https://shipmail.to/support",
14
+ "documentationUrl": "https://shipmail.to/docs/mcp",
15
+ "termsOfServiceUrl": "https://shipmail.to/terms",
16
+ "icon": "./assets/shipmail-mark.svg",
11
17
  "repository": "https://github.com/shipmail-to/shipmail-mcp",
12
18
  "license": "MIT",
13
19
  "keywords": [
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shipmail",
3
- "version": "0.8.6",
3
+ "version": "0.8.8",
4
4
  "description": "Operate secure custom-domain business email, calendars, and agent inboxes with Shipmail.",
5
5
  "author": {
6
6
  "name": "Shipmail",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shipmail",
3
- "version": "0.8.6",
3
+ "version": "0.8.8",
4
4
  "description": "Operate secure custom-domain business email, calendars, and agent inboxes with Shipmail.",
5
5
  "author": {
6
6
  "name": "Shipmail",
package/README.md CHANGED
@@ -94,6 +94,9 @@ This repository is also a portable agent plugin. It combines the hosted MCP conn
94
94
  safety-focused Shipmail skill, so supported clients can install the server and its operating
95
95
  guidance together:
96
96
 
97
+ Claude users can install the hosted plugin from the
98
+ [nested Shipmail plugin bundle](./distribution/shipmail).
99
+
97
100
  | Client or standard | Manifest |
98
101
  | ------------------- | ---------------------------- |
99
102
  | OpenAI Codex | `.codex-plugin/plugin.json` |
@@ -261,7 +264,7 @@ All tools are namespaced with `shipmail_` to avoid collisions with peer MCP serv
261
264
  | Status | `shipmail_status` |
262
265
  | 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` |
263
266
  | 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_rules`, `shipmail_get_mailbox_rule`, `shipmail_create_mailbox_rule`, `shipmail_update_mailbox_rule`, `shipmail_delete_mailbox_rule`, `shipmail_list_mailbox_identities`, `shipmail_reset_mailbox_password`, `shipmail_set_auto_reply`, `shipmail_inject_sandbox_inbound` |
264
- | Mailbox inbox | `shipmail_list_mailbox_inbox_messages`, `shipmail_get_mailbox_inbox_message`, `shipmail_read_mailbox_inbox_attachment`, `shipmail_get_mailbox_inbox_thread`, `shipmail_list_mailbox_inbox_threads`, `shipmail_update_inbox_thread_attention`, `shipmail_create_inbox_reply_draft`, `shipmail_send_inbox_reply_draft`, `shipmail_update_inbox_message`, `shipmail_move_inbox_message`, `shipmail_delete_inbox_message` |
267
+ | Mailbox inbox | `shipmail_list_mailbox_inbox_messages`, `shipmail_get_mailbox_inbox_message`, `shipmail_read_mailbox_inbox_attachment`, `shipmail_get_mailbox_inbox_thread`, `shipmail_list_mailbox_inbox_threads`, `shipmail_update_inbox_thread_attention`, `shipmail_create_draft`, `shipmail_create_inbox_reply_draft`, `shipmail_send_inbox_reply_draft`, `shipmail_update_inbox_message`, `shipmail_move_inbox_message`, `shipmail_delete_inbox_message` |
265
268
  | Reply scans | `shipmail_create_reply_scan`, `shipmail_get_reply_scan`, `shipmail_list_reply_scan_results` |
266
269
  | Messages and threads | `shipmail_list_messages`, `shipmail_list_message_analytics`, `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` |
267
270
  | 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` |
@@ -321,6 +324,10 @@ thread version used to create the draft. `shipmail_send_inbox_reply_draft` rejec
321
324
  the conversation changed before approval. The direct reply tools remain available as lower-level
322
325
  operations for callers that already provide their own review and concurrency controls.
323
326
 
327
+ To start a new conversation without send access, use `shipmail_create_draft`. It saves the message
328
+ to the mailbox's Drafts folder and sends nothing; the user reviews, edits, and sends it from Drafts
329
+ in Shipmail or any mail client. It needs only the `drafts:compose` scope.
330
+
324
331
  With an `sm_test_...` API key, send and reply tools accept `sandbox_outcome` and the sandbox inbound tool creates fake inbound mail. The API keeps test storage and events isolated and never delivers sandbox mail to real recipients.
325
332
 
326
333
  App-password creation, revocation, and partner grant consumption are destructive/high-risk tools.
@@ -387,7 +394,7 @@ Shipmail generates the primary credential and never returns it to the partner.
387
394
  - **Input sanitization**: Email content, addresses, and error text are stripped of ASCII control characters, DEL, and Unicode directional or BiDi markers (U+061C, U+200E/F, U+202A-E, U+2066-9). Long strings are truncated.
388
395
  - **Error redaction**: 5xx and unexpected Shipmail errors are redacted to a generic message; the original `request_id` is preserved for support. Generic `Error` thrown values (network errors, deserialization) are redacted to "Internal MCP error" before reaching the LLM. Detail lands on stderr.
389
396
  - **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.
390
- - **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.
397
+ - **Least-privilege draft workflow**: Use `messages:read` for discovery, add `drafts:write` for reviewable reply drafts and `drafts:compose` for new-message drafts saved to Drafts, and grant `messages:send` only to agents that are allowed to transmit approved mail. A review-only agent does not need send access: `drafts:compose` saves a draft but can never send it.
391
398
  - **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.
392
399
  - **Destructive annotations**: Tools that delete, retarget, change 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_delete_mailbox_rule`, `shipmail_delete_mailbox_folder`, `shipmail_reset_mailbox_password`, and `shipmail_set_auto_reply` in addition to obvious deletes.
393
400
 
@@ -1,9 +1,9 @@
1
1
  import { ApiKeyScope } from 'shipmail/api-key-scopes';
2
2
 
3
3
  declare const MCP_CAPABILITY_VERSION = "1.1.0";
4
- declare const MCP_PERMISSION_GROUP_NAMES: readonly ["account_status", "automations", "mail_read", "drafts", "mail_organize", "send_mail", "calendar_read", "calendar_write", "booking_pages", "forwarding", "mailbox_rules", "members", "webhooks", "credentials", "mailbox_export", "domain_admin", "mailbox_admin", "newsletters", "audiences", "suppressions", "partner_admin"];
4
+ declare const MCP_PERMISSION_GROUP_NAMES: readonly ["account_status", "automations", "mail_read", "drafts", "compose_drafts", "mail_organize", "send_mail", "calendar_read", "calendar_write", "booking_pages", "forwarding", "mailbox_rules", "members", "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", "mailbox_rules", "send_mail", "calendar_read", "calendar_write", "automations"];
6
+ declare const MCP_MEMBER_PERMISSION_GROUP_NAMES: readonly ["account_status", "mail_read", "drafts", "compose_drafts", "mail_organize", "mailbox_rules", "send_mail", "calendar_read", "calendar_write", "automations"];
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";
@@ -40,6 +40,12 @@ declare const MCP_PERMISSION_GROUPS: readonly [{
40
40
  readonly description: "Create reply drafts whose recipients are derived by Shipmail.";
41
41
  readonly scopes: readonly ["drafts:write"];
42
42
  readonly persistent: false;
43
+ }, {
44
+ readonly name: "compose_drafts";
45
+ readonly label: "Compose drafts";
46
+ readonly description: "Save new messages to Drafts for review. Cannot send.";
47
+ readonly scopes: readonly ["drafts:compose"];
48
+ readonly persistent: false;
43
49
  }, {
44
50
  readonly name: "mail_organize";
45
51
  readonly label: "Organize mail";
@@ -143,7 +149,7 @@ declare const MCP_PERMISSION_GROUPS: readonly [{
143
149
  readonly scopes: readonly ["partner:organizations:read", "partner:organizations:write", "partner:organizations:access", "partner:mailbox_credentials:issue", "partner:usage:read"];
144
150
  readonly persistent: true;
145
151
  }];
146
- declare const CAPABILITY_ROWS: readonly [readonly ["shipmail_status", "getStatus", "public"], readonly ["shipmail_list_automations", "listAutomations", "automations:read"], readonly ["shipmail_create_automation", "createAutomation", "automations:write"], readonly ["shipmail_get_automation", "getAutomation", "automations:read"], readonly ["shipmail_update_automation", "updateAutomation", "automations:write"], readonly ["shipmail_run_automation", "runAutomation", "automations:write"], 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", "messages:write"], readonly ["shipmail_update_mailbox_folder", "updateMailboxFolder", "messages:write"], readonly ["shipmail_delete_mailbox_folder", "deleteMailboxFolder", "messages:write"], readonly ["shipmail_list_mailbox_rules", "getMailboxRules", "mailbox_rules:read"], readonly ["shipmail_get_mailbox_rule", "getMailboxRules", "mailbox_rules:read"], readonly ["shipmail_create_mailbox_rule", "updateMailboxRules", "mailbox_rules:write"], readonly ["shipmail_update_mailbox_rule", "updateMailboxRules", "mailbox_rules:write"], readonly ["shipmail_delete_mailbox_rule", "updateMailboxRules", "mailbox_rules: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_read_mailbox_inbox_attachment", "downloadMailboxInboxAttachment", "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_attention", "updateMailboxInboxThreadAttention", "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_get_mailbox_delivery_routing", "getMailboxDeliveryRouting", "mailboxes:read"], readonly ["shipmail_update_mailbox_delivery_routing", "updateMailboxDeliveryRouting", "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_resume_mailbox_import", "resumeMailboxImport", "mailboxes:write"], readonly ["shipmail_restore_mailbox_import", "restoreMailboxImport", "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_list_message_analytics", "listMessageAnalytics", "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:write"], readonly ["shipmail_get_reply_scan", "getReplyScan", "messages:read"], readonly ["shipmail_list_reply_scan_results", "listReplyScanResults", "messages:read"], readonly ["shipmail_list_members", "listMembers", "members:read"], readonly ["shipmail_get_member", "getMember", "members: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_get_audience_feed", "getAudienceFeed", "audiences:read"], readonly ["shipmail_update_audience_feed", "updateAudienceFeed", "audiences:write"], readonly ["shipmail_rotate_audience_feed", "rotateAudienceFeedToken", "audiences:write"], readonly ["shipmail_revoke_audience_feed", "revokeAudienceFeedToken", "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_list_newsletter_sender_identities", "listNewsletterSenderIdentities", "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_upload_newsletter_asset_with_file", "prepareNewsletterAssetUpload", "newsletters:write"], readonly ["shipmail_prepare_newsletter_asset_upload", "prepareNewsletterAssetUpload", "newsletters:write"], 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"]];
152
+ declare const CAPABILITY_ROWS: readonly [readonly ["shipmail_status", "getStatus", "public"], readonly ["shipmail_list_automations", "listAutomations", "automations:read"], readonly ["shipmail_create_automation", "createAutomation", "automations:write"], readonly ["shipmail_get_automation", "getAutomation", "automations:read"], readonly ["shipmail_update_automation", "updateAutomation", "automations:write"], readonly ["shipmail_run_automation", "runAutomation", "automations:write"], 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", "messages:write"], readonly ["shipmail_update_mailbox_folder", "updateMailboxFolder", "messages:write"], readonly ["shipmail_delete_mailbox_folder", "deleteMailboxFolder", "messages:write"], readonly ["shipmail_list_mailbox_rules", "getMailboxRules", "mailbox_rules:read"], readonly ["shipmail_get_mailbox_rule", "getMailboxRules", "mailbox_rules:read"], readonly ["shipmail_create_mailbox_rule", "updateMailboxRules", "mailbox_rules:write"], readonly ["shipmail_update_mailbox_rule", "updateMailboxRules", "mailbox_rules:write"], readonly ["shipmail_delete_mailbox_rule", "updateMailboxRules", "mailbox_rules: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_read_mailbox_inbox_attachment", "downloadMailboxInboxAttachment", "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_attention", "updateMailboxInboxThreadAttention", "messages:write"], readonly ["shipmail_create_draft", "createMailboxInboxDraft", "drafts:compose"], 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_get_mailbox_delivery_routing", "getMailboxDeliveryRouting", "mailboxes:read"], readonly ["shipmail_update_mailbox_delivery_routing", "updateMailboxDeliveryRouting", "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_resume_mailbox_import", "resumeMailboxImport", "mailboxes:write"], readonly ["shipmail_restore_mailbox_import", "restoreMailboxImport", "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_list_message_analytics", "listMessageAnalytics", "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:write"], readonly ["shipmail_get_reply_scan", "getReplyScan", "messages:read"], readonly ["shipmail_list_reply_scan_results", "listReplyScanResults", "messages:read"], readonly ["shipmail_list_members", "listMembers", "members:read"], readonly ["shipmail_get_member", "getMember", "members: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_get_audience_feed", "getAudienceFeed", "audiences:read"], readonly ["shipmail_update_audience_feed", "updateAudienceFeed", "audiences:write"], readonly ["shipmail_rotate_audience_feed", "rotateAudienceFeedToken", "audiences:write"], readonly ["shipmail_revoke_audience_feed", "revokeAudienceFeedToken", "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_list_newsletter_sender_identities", "listNewsletterSenderIdentities", "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_upload_newsletter_asset_with_file", "prepareNewsletterAssetUpload", "newsletters:write"], readonly ["shipmail_prepare_newsletter_asset_upload", "prepareNewsletterAssetUpload", "newsletters:write"], 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"]];
147
153
  type McpToolName = (typeof CAPABILITY_ROWS)[number][0];
148
154
  type McpCapability = {
149
155
  readonly toolName: McpToolName;
@@ -6,6 +6,7 @@ var MCP_PERMISSION_GROUP_NAMES = [
6
6
  "automations",
7
7
  "mail_read",
8
8
  "drafts",
9
+ "compose_drafts",
9
10
  "mail_organize",
10
11
  "send_mail",
11
12
  "calendar_read",
@@ -28,6 +29,7 @@ var MCP_MEMBER_PERMISSION_GROUP_NAMES = [
28
29
  "account_status",
29
30
  "mail_read",
30
31
  "drafts",
32
+ "compose_drafts",
31
33
  "mail_organize",
32
34
  "mailbox_rules",
33
35
  "send_mail",
@@ -64,6 +66,13 @@ var MCP_PERMISSION_GROUPS = [
64
66
  scopes: ["drafts:write"],
65
67
  persistent: false
66
68
  },
69
+ {
70
+ name: "compose_drafts",
71
+ label: "Compose drafts",
72
+ description: "Save new messages to Drafts for review. Cannot send.",
73
+ scopes: ["drafts:compose"],
74
+ persistent: false
75
+ },
67
76
  {
68
77
  name: "mail_organize",
69
78
  label: "Organize mail",
@@ -233,6 +242,7 @@ var CAPABILITY_ROWS = [
233
242
  ["shipmail_list_mailbox_inbox_threads", "listMailboxInboxThreads", "messages:read"],
234
243
  ["shipmail_get_mailbox_inbox_thread", "getMailboxInboxThread", "messages:read"],
235
244
  ["shipmail_update_inbox_thread_attention", "updateMailboxInboxThreadAttention", "messages:write"],
245
+ ["shipmail_create_draft", "createMailboxInboxDraft", "drafts:compose"],
236
246
  ["shipmail_create_inbox_reply_draft", "createMailboxInboxReplyDraft", "drafts:write"],
237
247
  ["shipmail_send_inbox_reply_draft", "sendMailboxInboxReplyDraft", "messages:send"],
238
248
  ["shipmail_reply_to_inbox_message", "replyToMailboxInboxMessage", "messages:send"],
@@ -433,6 +443,7 @@ var SERVER_DERIVED_RECIPIENT_TOOLS = /* @__PURE__ */ new Set([
433
443
  ]);
434
444
  var CALLER_SUPPLIED_RECIPIENT_TOOLS = /* @__PURE__ */ new Set([
435
445
  "shipmail_send_message",
446
+ "shipmail_create_draft",
436
447
  "shipmail_create_mailbox_forwarding",
437
448
  "shipmail_create_webhook",
438
449
  "shipmail_update_webhook",
@@ -455,6 +466,7 @@ function permissionGroupFor(toolName, requiredScope) {
455
466
  if (requiredScope.startsWith("mailbox_rules:")) return "mailbox_rules";
456
467
  if (requiredScope === "mailboxes:export") return "mailbox_export";
457
468
  if (requiredScope === "drafts:write") return "drafts";
469
+ if (requiredScope === "drafts:compose") return "compose_drafts";
458
470
  if (requiredScope === "messages:send") return "send_mail";
459
471
  if (requiredScope === "messages:write") return "mail_organize";
460
472
  if (requiredScope === "messages:read" || requiredScope === "threads:read") return "mail_read";