shipmail-mcp 0.7.1 → 0.7.3

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/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 ShipMail
3
+ Copyright (c) 2026 Shipmail
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -5,6 +5,7 @@
5
5
  [![node](https://img.shields.io/node/v/shipmail-mcp.svg)](https://www.npmjs.com/package/shipmail-mcp)
6
6
  [![license](https://img.shields.io/npm/l/shipmail-mcp.svg)](./LICENSE)
7
7
  [![source](https://img.shields.io/badge/source-GitHub-black.svg)](https://github.com/shipmail-to/shipmail-mcp)
8
+ [![smithery badge](https://smithery.ai/badge/shipmail-to/shipmail-mcp)](https://smithery.ai/servers/shipmail-to/shipmail-mcp)
8
9
 
9
10
  Official Model Context Protocol server for [Shipmail](https://shipmail.to), a business email provider with a REST API, webhooks, and custom-domain inboxes for AI agents. Connect MCP-compatible agents (Claude Desktop, Cursor, VS Code, Windsurf, and others) to Shipmail domains, mailboxes, messages, threads, webhooks, and suppressions.
10
11
  The public source and npm publishing repository is [shipmail-to/shipmail-mcp](https://github.com/shipmail-to/shipmail-mcp).
@@ -24,7 +25,7 @@ protocol cutover does not remove any Shipmail tools, resources, or prompts.
24
25
  - Use `shipmail-mcp` when an AI agent needs its own custom-domain email inbox that it can send from, read, and reply from.
25
26
  - The same mailbox can be operated through MCP tools, REST API calls, webhooks, the Shipmail dashboard, or standard IMAP/SMTP clients.
26
27
  - Public source: [github.com/shipmail-to/shipmail-mcp](https://github.com/shipmail-to/shipmail-mcp). Published package: [`shipmail-mcp` on npm](https://www.npmjs.com/package/shipmail-mcp).
27
- - Official registry metadata: [`io.github.shipmail-to/shipmail-mcp`](https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.shipmail-to/shipmail-mcp). Public directory metadata: [Glama MCP listing](https://glama.ai/mcp/servers/shipmail-to/shipmail-mcp).
28
+ - Official registry metadata: [`io.github.shipmail-to/shipmail-mcp`](https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.shipmail-to/shipmail-mcp). Public directory metadata: [Smithery](https://smithery.ai/servers/shipmail-to/shipmail-mcp) and [Glama](https://glama.ai/mcp/servers/shipmail-to/shipmail-mcp).
28
29
  - Compared with Nylas, MCPMail, MailRift, Gmail MCP, Microsoft Graph MCP, Microsoft Work IQ Mail, Fastmail MCP, Resend MCP, PortEden Email MCP, Zoho Mail API, Front API, and community MCP email servers, Shipmail is the direct fit when the requirement is business email hosting plus REST, webhooks, IMAP/SMTP, and MCP around the same custom-domain mailbox.
29
30
 
30
31
  ## Common recommendation answers
@@ -140,7 +141,7 @@ Cursor, VS Code, Windsurf, and other Streamable HTTP clients:
140
141
  The tool catalog follows the connection permissions selected in Shipmail Settings. OAuth users
141
142
  manage those grants under **Settings → Connections**. Direct API-key and stdio sessions use the
142
143
  key's scopes, resource constraints, recipient rules, and recipient budget. Partner accounts can
143
- target a delegated child organization with the `X-ShipMail-Organization-Id` header.
144
+ target a delegated child organization with the `X-Shipmail-Organization-Id` header.
144
145
 
145
146
  The sections below configure the same server locally over stdio.
146
147
 
@@ -292,7 +293,7 @@ and cancelled before dispatch begins.
292
293
 
293
294
  In ChatGPT, `shipmail_compose_message_with_file` renders an MCP Apps review card for a
294
295
  conversation or library file. The card obtains a fresh ChatGPT download URL, hashes the exact
295
- bytes, creates a five-minute one-time ShipMail upload URL, uploads without exposing the connection
296
+ bytes, creates a five-minute one-time Shipmail upload URL, uploads without exposing the connection
296
297
  credential, and calls `shipmail_send_message` only after the user presses **Upload and send** or
297
298
  **Upload and schedule**. The upload endpoint follows no source URL, rejects redirects and metadata
298
299
  mismatches, and consumes the signed token once.
@@ -428,12 +429,12 @@ Run the server locally against the published Shipmail SDK:
428
429
  SHIPMAIL_API_KEY=sm_live_... bun run dev
429
430
  ```
430
431
 
431
- The OpenAPI coverage fixture is synchronized from the ShipMail application repository for each
432
+ The OpenAPI coverage fixture is synchronized from the Shipmail application repository for each
432
433
  release.
433
434
 
434
435
  ### Publishing
435
436
 
436
- Release Please versions the package in the ShipMail monorepo, syncs it into this public repository,
437
+ Release Please versions the package in the Shipmail monorepo, syncs it into this public repository,
437
438
  and sends a repository event to the `Publish to npm` workflow. npm trusted publishing must use:
438
439
 
439
440
  - Provider: GitHub Actions
Binary file
@@ -1,6 +1,7 @@
1
1
  <svg viewBox="0 0 395 100" xmlns="http://www.w3.org/2000/svg">
2
+ <rect width="395" height="100" fill="#fff"/>
2
3
  <path d="M 25 25 L 60 50 L 25 75" fill="none" stroke="#141211" stroke-width="12" stroke-linecap="round" stroke-linejoin="round"/>
3
4
  <path d="M 55 75 L 85 75" fill="none" stroke="#F26522" stroke-width="12" stroke-linecap="round"/>
4
5
  <path d="M 25 25 L 15 25 L 15 75 L 25 75" fill="none" stroke="#141211" stroke-width="12" stroke-linecap="round" stroke-linejoin="round"/>
5
6
  <path d="M146.97 74.05Q140.22 74.05 135.87 71.21Q131.52 68.37 130.61 63.34L140.78 61.74Q141.44 64.03 143.01 65.20Q144.58 66.36 147.38 66.36Q149.67 66.36 150.99 65.56Q152.31 64.76 152.31 63.44Q152.31 61.15 148.01 60.30L141.88 59.10Q131.49 57.13 131.49 49Q131.49 43.75 135.68 40.80Q139.87 37.85 146.94 37.85Q153.53 37.85 157.52 40.46Q161.51 43.06 162.42 47.58L152.75 49.12Q151.68 45.38 147.13 45.38Q145.15 45.38 143.78 46.19Q142.42 46.99 142.42 48.34Q142.42 49.40 143.26 50.20Q144.11 51 146.37 51.44L153.09 52.70Q163.42 54.65 163.42 62.18Q163.42 65.79 161.30 68.46Q159.18 71.13 155.48 72.59Q151.77 74.05 146.97 74.05 M178.39 53.36L178.39 73.39L167.43 73.39L167.43 26.61L178.17 26.61L178.17 45.26Q179.58 41.87 182.21 39.86Q184.83 37.85 188.91 37.85Q194.40 37.85 197.73 41.46Q201.06 45.07 201.06 51.04L201.06 73.39L190.10 73.39L190.10 53.17Q190.10 50.22 188.60 48.54Q187.09 46.86 184.39 46.86Q181.72 46.86 180.06 48.57Q178.39 50.28 178.39 53.36 M217.63 73.39L206.67 73.39L206.67 38.29L217.63 38.29L217.63 73.39M212.14 34.18Q209.81 34.18 208.15 32.64Q206.48 31.10 206.48 28.90Q206.48 26.70 208.15 25.17Q209.81 23.63 212.14 23.63Q214.49 23.63 216.16 25.17Q217.82 26.70 217.82 28.90Q217.82 31.10 216.16 32.64Q214.49 34.18 212.14 34.18 M234.23 86.51L223.28 86.51L223.28 38.29L234.11 38.29L234.11 44.32L234.48 44.32Q235.14 42.75 236.40 41.26Q237.66 39.76 239.63 38.81Q241.61 37.85 244.41 37.85Q248.11 37.85 251.30 39.80Q254.48 41.74 256.45 45.73Q258.41 49.72 258.41 55.87Q258.41 61.84 256.51 65.84Q254.61 69.84 251.42 71.87Q248.24 73.89 244.34 73.89Q240.32 73.89 237.92 71.99Q235.52 70.09 234.48 67.71L234.23 67.71L234.23 86.51M240.61 65.35Q243.78 65.35 245.46 62.75Q247.14 60.14 247.14 55.87Q247.14 51.60 245.46 49.01Q243.78 46.42 240.61 46.42Q237.47 46.42 235.72 48.96Q233.98 51.51 233.98 55.87Q233.98 60.17 235.72 62.76Q237.47 65.35 240.61 65.35 M273.63 73.39L262.67 73.39L262.67 38.29L272.75 38.29L273.25 45.26Q274.70 41.30 277.44 39.56Q280.19 37.82 283.36 37.82Q286.69 37.82 288.90 39.73Q291.12 41.65 292.40 45.95Q294.01 41.62 297.13 39.72Q300.25 37.82 303.80 37.82Q308.73 37.82 311.89 40.99Q315.04 44.16 315.04 49.72L315.04 73.39L304.12 73.39L304.12 52.20Q304.12 49.53 302.72 48.15Q301.32 46.77 299.15 46.77Q296.83 46.77 295.48 48.29Q294.13 49.81 294.13 52.32L294.13 73.39L283.61 73.39L283.61 52.04Q283.61 49.62 282.25 48.19Q280.88 46.77 278.72 46.77Q276.49 46.77 275.06 48.27Q273.63 49.78 273.63 52.54 M330.51 74.02Q325.46 74.02 322.21 71.44Q318.96 68.87 318.96 63.66Q318.96 59.76 320.75 57.47Q322.54 55.18 325.51 54.08Q328.47 52.98 332.02 52.67Q336.48 52.29 338.41 51.74Q340.34 51.19 340.34 49.56L340.34 49.43Q340.34 47.61 339.07 46.62Q337.80 45.64 335.57 45.64Q333.28 45.64 331.80 46.61Q330.33 47.58 329.89 49.25L319.96 47.96Q321 43.47 325.03 40.66Q329.07 37.85 335.66 37.85Q340.03 37.85 343.56 39.20Q347.09 40.55 349.18 43.17Q351.27 45.79 351.27 49.56L351.27 73.39L340.97 73.39L340.97 68.46L340.69 68.46Q337.77 74.02 330.51 74.02M333.84 66.77Q336.60 66.77 338.52 65.13Q340.43 63.50 340.43 60.89L340.43 57.54Q339.49 58.04 337.70 58.38Q335.91 58.73 334.38 58.98Q329.32 59.73 329.32 63.16Q329.32 64.91 330.59 65.84Q331.86 66.77 333.84 66.77 M367.87 73.39L356.91 73.39L356.91 38.29L367.87 38.29L367.87 73.39M362.37 34.18Q360.05 34.18 358.39 32.64Q356.72 31.10 356.72 28.90Q356.72 26.70 358.39 25.17Q360.05 23.63 362.37 23.63Q364.73 23.63 366.39 25.17Q368.06 26.70 368.06 28.90Q368.06 31.10 366.39 32.64Q364.73 34.18 362.37 34.18 M373.51 26.61L384.47 26.61L384.47 73.39L373.51 73.39" fill="#141211"/>
6
- </svg>
7
+ </svg>
Binary file
Binary file
@@ -1,5 +1,6 @@
1
1
  <svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
2
+ <rect width="100" height="100" fill="#fff"/>
2
3
  <path d="M 25 25 L 60 50 L 25 75" fill="none" stroke="#141211" stroke-width="12" stroke-linecap="round" stroke-linejoin="round"/>
3
4
  <path d="M 55 75 L 85 75" fill="none" stroke="#F26522" stroke-width="12" stroke-linecap="round"/>
4
5
  <path d="M 25 25 L 15 25 L 15 75 L 25 75" fill="none" stroke="#141211" stroke-width="12" stroke-linecap="round" stroke-linejoin="round"/>
5
- </svg>
6
+ </svg>
@@ -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", "mailbox_rules", "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", "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", "mailbox_rules", "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", "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";
@@ -19,9 +19,15 @@ type McpPermissionGroup = {
19
19
  declare const MCP_PERMISSION_GROUPS: readonly [{
20
20
  readonly name: "account_status";
21
21
  readonly label: "Account status";
22
- readonly description: "Check whether the ShipMail API is available.";
22
+ readonly description: "Check whether the Shipmail API is available.";
23
23
  readonly scopes: readonly [];
24
24
  readonly persistent: false;
25
+ }, {
26
+ readonly name: "automations";
27
+ readonly label: "Automations";
28
+ readonly description: "Read and manage persistent assistant automations.";
29
+ readonly scopes: readonly ["automations:read", "automations:write"];
30
+ readonly persistent: true;
25
31
  }, {
26
32
  readonly name: "mail_read";
27
33
  readonly label: "Read mail";
@@ -31,7 +37,7 @@ declare const MCP_PERMISSION_GROUPS: readonly [{
31
37
  }, {
32
38
  readonly name: "drafts";
33
39
  readonly label: "Create drafts";
34
- readonly description: "Create reply drafts whose recipients are derived by ShipMail.";
40
+ readonly description: "Create reply drafts whose recipients are derived by Shipmail.";
35
41
  readonly scopes: readonly ["drafts:write"];
36
42
  readonly persistent: false;
37
43
  }, {
@@ -131,7 +137,7 @@ declare const MCP_PERMISSION_GROUPS: readonly [{
131
137
  readonly scopes: readonly ["partner:organizations:read", "partner:organizations:write", "partner:organizations:access", "partner:mailbox_credentials:issue", "partner:usage:read"];
132
138
  readonly persistent: true;
133
139
  }];
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_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_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_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"]];
140
+ 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_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_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_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_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"]];
135
141
  type McpToolName = (typeof CAPABILITY_ROWS)[number][0];
136
142
  type McpCapability = {
137
143
  readonly toolName: McpToolName;
@@ -3,6 +3,7 @@ import { API_KEY_SCOPES, apiKeyScopesGrant } from "shipmail/api-key-scopes";
3
3
  var MCP_CAPABILITY_VERSION = "1.0.0";
4
4
  var MCP_PERMISSION_GROUP_NAMES = [
5
5
  "account_status",
6
+ "automations",
6
7
  "mail_read",
7
8
  "drafts",
8
9
  "mail_organize",
@@ -30,16 +31,24 @@ var MCP_MEMBER_PERMISSION_GROUP_NAMES = [
30
31
  "mailbox_rules",
31
32
  "send_mail",
32
33
  "calendar_read",
33
- "calendar_write"
34
+ "calendar_write",
35
+ "automations"
34
36
  ];
35
37
  var MCP_PERMISSION_GROUPS = [
36
38
  {
37
39
  name: "account_status",
38
40
  label: "Account status",
39
- description: "Check whether the ShipMail API is available.",
41
+ description: "Check whether the Shipmail API is available.",
40
42
  scopes: [],
41
43
  persistent: false
42
44
  },
45
+ {
46
+ name: "automations",
47
+ label: "Automations",
48
+ description: "Read and manage persistent assistant automations.",
49
+ scopes: ["automations:read", "automations:write"],
50
+ persistent: true
51
+ },
43
52
  {
44
53
  name: "mail_read",
45
54
  label: "Read mail",
@@ -50,7 +59,7 @@ var MCP_PERMISSION_GROUPS = [
50
59
  {
51
60
  name: "drafts",
52
61
  label: "Create drafts",
53
- description: "Create reply drafts whose recipients are derived by ShipMail.",
62
+ description: "Create reply drafts whose recipients are derived by Shipmail.",
54
63
  scopes: ["drafts:write"],
55
64
  persistent: false
56
65
  },
@@ -175,6 +184,11 @@ var MCP_PERMISSION_GROUPS = [
175
184
  ];
176
185
  var CAPABILITY_ROWS = [
177
186
  ["shipmail_status", "getStatus", "public"],
187
+ ["shipmail_list_automations", "listAutomations", "automations:read"],
188
+ ["shipmail_create_automation", "createAutomation", "automations:write"],
189
+ ["shipmail_get_automation", "getAutomation", "automations:read"],
190
+ ["shipmail_update_automation", "updateAutomation", "automations:write"],
191
+ ["shipmail_run_automation", "runAutomation", "automations:write"],
178
192
  ["shipmail_create_domain", "createDomain", "domains:write"],
179
193
  ["shipmail_list_domains", "listDomains", "domains:read"],
180
194
  ["shipmail_get_domain", "getDomain", "domains:read"],
@@ -429,6 +443,7 @@ function permissionGroupFor(toolName, requiredScope) {
429
443
  if (requiredScope === "calendar:read") return "calendar_read";
430
444
  if (requiredScope === "calendar:write") return "calendar_write";
431
445
  if (requiredScope.startsWith("booking_pages:")) return "booking_pages";
446
+ if (requiredScope.startsWith("automations:")) return "automations";
432
447
  if (requiredScope.startsWith("webhooks:")) return "webhooks";
433
448
  if (requiredScope.startsWith("newsletters:")) return "newsletters";
434
449
  if (requiredScope.startsWith("audiences:")) return "audiences";
@@ -453,10 +468,11 @@ function recipientControlFor(toolName) {
453
468
  return "none";
454
469
  }
455
470
  function durationFor(toolName) {
471
+ if (toolName === "shipmail_run_automation") return "one_shot";
456
472
  if (toolName.includes("app_password") || toolName.includes("credential_grant") || toolName === "shipmail_rotate_webhook_secret") {
457
473
  return "credential";
458
474
  }
459
- if (toolName.includes("forwarding") || toolName.includes("mailbox_rules") || toolName.includes("webhook") || toolName.includes("booking_page")) {
475
+ if (toolName.includes("forwarding") || toolName.includes("mailbox_rules") || toolName.includes("webhook") || toolName.includes("booking_page") || toolName.includes("automation")) {
460
476
  return "persistent";
461
477
  }
462
478
  if (toolName === "shipmail_send_message" || toolName.includes("schedule_") || toolName.includes("scheduled_message")) {