shipmail-mcp 0.5.4 → 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 +27 -14
- package/dist/capabilities.d.ts +9 -3
- package/dist/capabilities.js +15 -2
- package/dist/index.js +653 -169
- package/dist/server.d.ts +10 -2
- package/dist/server.js +3874 -3391
- package/package.json +2 -2
- package/server.json +2 -2
- package/smithery.yaml +1 -1
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,19 +223,25 @@ 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
|
|
226
|
-
|
|
|
227
|
-
| Status
|
|
228
|
-
| Domains
|
|
229
|
-
| Mailboxes
|
|
230
|
-
| Mailbox inbox
|
|
231
|
-
| Reply scans
|
|
232
|
-
| Messages and threads
|
|
233
|
-
| Webhooks
|
|
234
|
-
| Suppressions
|
|
235
|
-
| Audiences
|
|
236
|
-
| Newsletters
|
|
237
|
-
|
|
|
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
|
|
@@ -269,6 +276,11 @@ immediately. Partner grant consumption requires the exact `partner:mailbox_crede
|
|
|
269
276
|
scope and an operator-approved one-time grant. App-password creation and grant consumption do not
|
|
270
277
|
accept idempotency keys.
|
|
271
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
|
+
|
|
272
284
|
The server discovers the effective tool catalog from Shipmail before startup. It fails closed when
|
|
273
285
|
capability discovery fails. To change what an AI can do, edit the OAuth connection under
|
|
274
286
|
**Settings → Connections**, or edit the direct API key's scopes and constraints.
|
|
@@ -284,6 +296,7 @@ Read-only resources for inspection without tool calls:
|
|
|
284
296
|
- `shipmail://mailboxes/{id}`
|
|
285
297
|
- `shipmail://mailboxes/{id}/folders`
|
|
286
298
|
- `shipmail://mailboxes/{id}/identities`
|
|
299
|
+
- `shipmail://mailboxes/{id}/rules`
|
|
287
300
|
- `shipmail://mailboxes/{id}/inbox/messages`
|
|
288
301
|
- `shipmail://mailboxes/{id}/inbox/threads/{thread_id}`
|
|
289
302
|
- `shipmail://messages/{id}`
|
|
@@ -322,7 +335,7 @@ Shipmail generates the primary credential and never returns it to the partner.
|
|
|
322
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.
|
|
323
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.
|
|
324
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.
|
|
325
|
-
- **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.
|
|
326
339
|
|
|
327
340
|
Domain purchase is intentionally excluded.
|
|
328
341
|
|
package/dist/capabilities.d.ts
CHANGED
|
@@ -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;
|
package/dist/capabilities.js
CHANGED
|
@@ -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")) {
|