shipmail-mcp 0.6.3 → 0.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -243,7 +243,7 @@ All tools are namespaced with `shipmail_` to avoid collisions with peer MCP serv
243
243
  | 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` |
244
244
  | 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` |
245
245
  | Reply scans | `shipmail_create_reply_scan`, `shipmail_get_reply_scan`, `shipmail_list_reply_scan_results` |
246
- | 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` |
246
+ | 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` |
247
247
  | 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` |
248
248
  | Suppressions | `shipmail_list_suppressions`, `shipmail_remove_suppression` |
249
249
  | Audiences | `shipmail_list_audiences`, `shipmail_get_audience`, `shipmail_create_audience`, `shipmail_update_audience`, `shipmail_delete_audience`, `shipmail_get_audience_feed`, `shipmail_update_audience_feed`, `shipmail_rotate_audience_feed`, `shipmail_revoke_audience_feed`, `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` |
@@ -259,6 +259,9 @@ such as one mailbox's inbox messages or one audience's subscribers, remain organ
259
259
  Message send and reply tools accept optional `client_reference`, scalar `metadata`,
260
260
  `source_rfc_message_id`, and validated safe `headers`. `shipmail_list_messages` accepts either a
261
261
  `mailbox_id` or an exact organization-scoped `client_reference`.
262
+ `shipmail_list_message_analytics` provides bounded incremental pagination over an
263
+ organization-wide safe projection and excludes subject, BCC addresses, headers, free-form
264
+ metadata, attachment filenames, auto-reply content, and message bodies.
262
265
 
263
266
  MCP send and scheduled-update tools accept short-lived staged attachment IDs, not base64 bytes.
264
267
  For a local file, calculate its exact byte size and SHA-256 digest, call
@@ -131,7 +131,7 @@ declare const MCP_PERMISSION_GROUPS: readonly [{
131
131
  readonly scopes: readonly ["partner:organizations:read", "partner:organizations:write", "partner:organizations:access", "partner:mailbox_credentials:issue", "partner:usage:read"];
132
132
  readonly persistent: true;
133
133
  }];
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: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"]];
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"]];
135
135
  type McpToolName = (typeof CAPABILITY_ROWS)[number][0];
136
136
  type McpCapability = {
137
137
  readonly toolName: McpToolName;
@@ -231,6 +231,7 @@ var CAPABILITY_ROWS = [
231
231
  ["shipmail_undo_mailbox_import", "undoMailboxImport", "mailboxes:write"],
232
232
  ["shipmail_inject_sandbox_inbound", "injectSandboxInbound", "messages:write"],
233
233
  ["shipmail_list_messages", "listMessages", "messages:read"],
234
+ ["shipmail_list_message_analytics", "listMessageAnalytics", "messages:read"],
234
235
  ["shipmail_compose_message_with_file", "prepareStagedAttachmentUpload", "messages:send"],
235
236
  ["shipmail_prepare_staged_attachment_upload", "prepareStagedAttachmentUpload", "messages:send"],
236
237
  ["shipmail_send_message", "sendMessage", "messages:send"],
package/dist/index.js CHANGED
@@ -216,6 +216,7 @@ var CAPABILITY_ROWS = [
216
216
  ["shipmail_undo_mailbox_import", "undoMailboxImport", "mailboxes:write"],
217
217
  ["shipmail_inject_sandbox_inbound", "injectSandboxInbound", "messages:write"],
218
218
  ["shipmail_list_messages", "listMessages", "messages:read"],
219
+ ["shipmail_list_message_analytics", "listMessageAnalytics", "messages:read"],
219
220
  ["shipmail_compose_message_with_file", "prepareStagedAttachmentUpload", "messages:send"],
220
221
  ["shipmail_prepare_staged_attachment_upload", "prepareStagedAttachmentUpload", "messages:send"],
221
222
  ["shipmail_send_message", "sendMessage", "messages:send"],
@@ -879,7 +880,7 @@ var EMAIL_MAX_LENGTH = 254;
879
880
  var RECIPIENT_NAME_MAX = 120;
880
881
  var NO_CONTROL_CHARS = /^[^\x00-\x1F\x7F]*$/;
881
882
  var DOMAIN_NAME_REGEX = /^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?(\.[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)+$/i;
882
- var CURSOR_REGEX = /^[A-Za-z0-9_\-=.+/]{1,512}$/;
883
+ var CURSOR_REGEX = /^[A-Za-z0-9_\-=.+/]+$/;
883
884
  var SUPPRESSION_REASONS = ["hard_bounce", "complaint", "manual"];
884
885
  var SYSTEM_FOLDER_NAMES = [
885
886
  "inbox",
@@ -984,7 +985,7 @@ var calendarEventIdInputSchema = z.string().min(1).max(256).refine((value) => NO
984
985
  var idempotencyKeySchema = z.string().regex(IDEMPOTENCY_REGEX, "Idempotency key must be 1-255 printable ASCII characters.").optional().describe("Optional idempotency key. If omitted, the MCP server generates one for POST tools.");
985
986
  var domainNameSchema = z.string().min(1).max(253).regex(DOMAIN_NAME_REGEX, "Must be a valid domain name (e.g. example.com).");
986
987
  var paginationInputSchema = z.object({
987
- cursor: z.string().regex(CURSOR_REGEX, "Cursor must be 1-512 characters of [A-Za-z0-9_\\-=.+/].").optional().describe("Pagination cursor returned by the previous call."),
988
+ cursor: z.string().max(8192, "Cursor must not exceed 8192 characters.").regex(CURSOR_REGEX, "Cursor must contain only [A-Za-z0-9_\\-=.+/].").optional().describe("Pagination cursor returned by the previous call."),
988
989
  limit: z.number().int().min(1).max(100).default(25).describe("Maximum results to return.")
989
990
  });
990
991
  var paginationSchema = z.object({
@@ -1468,6 +1469,23 @@ var messageSchema = z.object({
1468
1469
  created_at: z.string(),
1469
1470
  updated_at: z.string()
1470
1471
  });
1472
+ var messageAnalyticsSchema = z.object({
1473
+ object: z.literal("message_analytics"),
1474
+ id: z.string(),
1475
+ mailbox_id: z.string(),
1476
+ thread_id: z.string().nullable(),
1477
+ client_reference: z.string().nullable(),
1478
+ direction: z.enum(["inbound", "outbound"]),
1479
+ contact_addresses: z.array(z.string().email()),
1480
+ recipient_count: z.number().int().nonnegative(),
1481
+ attachment_count: z.number().int().nonnegative(),
1482
+ source: z.enum(MESSAGE_SOURCES),
1483
+ mode: z.enum(["live", "test"]),
1484
+ status: z.enum(MESSAGE_STATUSES),
1485
+ scheduled_at: z.string().nullable(),
1486
+ created_at: z.string(),
1487
+ updated_at: z.string()
1488
+ });
1471
1489
  var scheduledMessageSchema = z.object({
1472
1490
  object: z.literal("scheduled_message"),
1473
1491
  id: z.string(),
@@ -1686,6 +1704,12 @@ var messagesOutputSchema = z.object({
1686
1704
  data: z.array(messageSchema),
1687
1705
  pagination: paginationSchema
1688
1706
  });
1707
+ var messageAnalyticsOutputSchema = z.object({
1708
+ data: z.array(messageAnalyticsSchema),
1709
+ pagination: paginationSchema.extend({
1710
+ snapshot_at: z.string()
1711
+ })
1712
+ });
1689
1713
  var scheduledMessageOutputSchema = z.object({
1690
1714
  scheduled_message: scheduledMessageSchema
1691
1715
  });
@@ -2048,6 +2072,16 @@ var listMessagesInputSchema = paginationInputSchema.extend({
2048
2072
  }).refine((value) => Boolean(value.mailbox_id || value.client_reference), {
2049
2073
  message: "Provide mailbox_id or client_reference."
2050
2074
  });
2075
+ var listMessageAnalyticsInputSchema = paginationInputSchema.extend({
2076
+ updated_after: z.iso.datetime({ offset: true }).optional(),
2077
+ updated_before: z.iso.datetime({ offset: true }).optional()
2078
+ }).refine(
2079
+ (value) => !(value.updated_after && value.updated_before) || new Date(value.updated_after).getTime() < new Date(value.updated_before).getTime(),
2080
+ {
2081
+ message: "updated_after must be earlier than updated_before.",
2082
+ path: ["updated_after"]
2083
+ }
2084
+ );
2051
2085
  var openAiFileInputSchema = z.object({
2052
2086
  // The component prefers a freshly minted host download URL and only falls back to this one.
2053
2087
  // It is model-supplied and therefore reachable by prompt injection, so it is constrained to
@@ -5459,6 +5493,23 @@ function registerTools(rawServer, client, allowedTools, grantedOrganizations = [
5459
5493
  })
5460
5494
  );
5461
5495
  });
5496
+ registerIfAllowed("shipmail_list_message_analytics", () => {
5497
+ server.registerTool(
5498
+ "shipmail_list_message_analytics",
5499
+ {
5500
+ title: "List Message Analytics",
5501
+ description: "List an organization-wide, analytics-safe message projection in stable updated_at order. The response excludes subjects, BCC addresses, headers, free-form metadata, attachment filenames, and message bodies. contact_addresses and caller-defined client_reference values may contain personal data.",
5502
+ inputSchema: listMessageAnalyticsInputSchema,
5503
+ outputSchema: messageAnalyticsOutputSchema,
5504
+ annotations: { readOnlyHint: true, openWorldHint: false }
5505
+ },
5506
+ async (args) => runTool(
5507
+ "shipmail_list_message_analytics",
5508
+ messageAnalyticsOutputSchema,
5509
+ async () => client.messages.listAnalytics(args)
5510
+ )
5511
+ );
5512
+ });
5462
5513
  registerIfAllowed("shipmail_get_message", () => {
5463
5514
  server.registerTool(
5464
5515
  "shipmail_get_message",
@@ -7090,7 +7141,7 @@ function registerTools(rawServer, client, allowedTools, grantedOrganizations = [
7090
7141
  }
7091
7142
 
7092
7143
  // src/version.ts
7093
- var VERSION = "0.6.3";
7144
+ var VERSION = "0.6.4";
7094
7145
 
7095
7146
  // src/server.ts
7096
7147
  var INSTRUCTIONS = `ShipMail MCP exposes the business email and calendar tools authorized by the connection's current ShipMail permissions.
package/dist/server.js CHANGED
@@ -219,6 +219,7 @@ var CAPABILITY_ROWS = [
219
219
  ["shipmail_undo_mailbox_import", "undoMailboxImport", "mailboxes:write"],
220
220
  ["shipmail_inject_sandbox_inbound", "injectSandboxInbound", "messages:write"],
221
221
  ["shipmail_list_messages", "listMessages", "messages:read"],
222
+ ["shipmail_list_message_analytics", "listMessageAnalytics", "messages:read"],
222
223
  ["shipmail_compose_message_with_file", "prepareStagedAttachmentUpload", "messages:send"],
223
224
  ["shipmail_prepare_staged_attachment_upload", "prepareStagedAttachmentUpload", "messages:send"],
224
225
  ["shipmail_send_message", "sendMessage", "messages:send"],
@@ -782,7 +783,7 @@ var EMAIL_MAX_LENGTH = 254;
782
783
  var RECIPIENT_NAME_MAX = 120;
783
784
  var NO_CONTROL_CHARS = /^[^\x00-\x1F\x7F]*$/;
784
785
  var DOMAIN_NAME_REGEX = /^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?(\.[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)+$/i;
785
- var CURSOR_REGEX = /^[A-Za-z0-9_\-=.+/]{1,512}$/;
786
+ var CURSOR_REGEX = /^[A-Za-z0-9_\-=.+/]+$/;
786
787
  var SUPPRESSION_REASONS = ["hard_bounce", "complaint", "manual"];
787
788
  var SYSTEM_FOLDER_NAMES = [
788
789
  "inbox",
@@ -887,7 +888,7 @@ var calendarEventIdInputSchema = z.string().min(1).max(256).refine((value) => NO
887
888
  var idempotencyKeySchema = z.string().regex(IDEMPOTENCY_REGEX, "Idempotency key must be 1-255 printable ASCII characters.").optional().describe("Optional idempotency key. If omitted, the MCP server generates one for POST tools.");
888
889
  var domainNameSchema = z.string().min(1).max(253).regex(DOMAIN_NAME_REGEX, "Must be a valid domain name (e.g. example.com).");
889
890
  var paginationInputSchema = z.object({
890
- cursor: z.string().regex(CURSOR_REGEX, "Cursor must be 1-512 characters of [A-Za-z0-9_\\-=.+/].").optional().describe("Pagination cursor returned by the previous call."),
891
+ cursor: z.string().max(8192, "Cursor must not exceed 8192 characters.").regex(CURSOR_REGEX, "Cursor must contain only [A-Za-z0-9_\\-=.+/].").optional().describe("Pagination cursor returned by the previous call."),
891
892
  limit: z.number().int().min(1).max(100).default(25).describe("Maximum results to return.")
892
893
  });
893
894
  var paginationSchema = z.object({
@@ -1371,6 +1372,23 @@ var messageSchema = z.object({
1371
1372
  created_at: z.string(),
1372
1373
  updated_at: z.string()
1373
1374
  });
1375
+ var messageAnalyticsSchema = z.object({
1376
+ object: z.literal("message_analytics"),
1377
+ id: z.string(),
1378
+ mailbox_id: z.string(),
1379
+ thread_id: z.string().nullable(),
1380
+ client_reference: z.string().nullable(),
1381
+ direction: z.enum(["inbound", "outbound"]),
1382
+ contact_addresses: z.array(z.string().email()),
1383
+ recipient_count: z.number().int().nonnegative(),
1384
+ attachment_count: z.number().int().nonnegative(),
1385
+ source: z.enum(MESSAGE_SOURCES),
1386
+ mode: z.enum(["live", "test"]),
1387
+ status: z.enum(MESSAGE_STATUSES),
1388
+ scheduled_at: z.string().nullable(),
1389
+ created_at: z.string(),
1390
+ updated_at: z.string()
1391
+ });
1374
1392
  var scheduledMessageSchema = z.object({
1375
1393
  object: z.literal("scheduled_message"),
1376
1394
  id: z.string(),
@@ -1589,6 +1607,12 @@ var messagesOutputSchema = z.object({
1589
1607
  data: z.array(messageSchema),
1590
1608
  pagination: paginationSchema
1591
1609
  });
1610
+ var messageAnalyticsOutputSchema = z.object({
1611
+ data: z.array(messageAnalyticsSchema),
1612
+ pagination: paginationSchema.extend({
1613
+ snapshot_at: z.string()
1614
+ })
1615
+ });
1592
1616
  var scheduledMessageOutputSchema = z.object({
1593
1617
  scheduled_message: scheduledMessageSchema
1594
1618
  });
@@ -1951,6 +1975,16 @@ var listMessagesInputSchema = paginationInputSchema.extend({
1951
1975
  }).refine((value) => Boolean(value.mailbox_id || value.client_reference), {
1952
1976
  message: "Provide mailbox_id or client_reference."
1953
1977
  });
1978
+ var listMessageAnalyticsInputSchema = paginationInputSchema.extend({
1979
+ updated_after: z.iso.datetime({ offset: true }).optional(),
1980
+ updated_before: z.iso.datetime({ offset: true }).optional()
1981
+ }).refine(
1982
+ (value) => !(value.updated_after && value.updated_before) || new Date(value.updated_after).getTime() < new Date(value.updated_before).getTime(),
1983
+ {
1984
+ message: "updated_after must be earlier than updated_before.",
1985
+ path: ["updated_after"]
1986
+ }
1987
+ );
1954
1988
  var openAiFileInputSchema = z.object({
1955
1989
  // The component prefers a freshly minted host download URL and only falls back to this one.
1956
1990
  // It is model-supplied and therefore reachable by prompt injection, so it is constrained to
@@ -5362,6 +5396,23 @@ function registerTools(rawServer, client, allowedTools, grantedOrganizations = [
5362
5396
  })
5363
5397
  );
5364
5398
  });
5399
+ registerIfAllowed("shipmail_list_message_analytics", () => {
5400
+ server.registerTool(
5401
+ "shipmail_list_message_analytics",
5402
+ {
5403
+ title: "List Message Analytics",
5404
+ description: "List an organization-wide, analytics-safe message projection in stable updated_at order. The response excludes subjects, BCC addresses, headers, free-form metadata, attachment filenames, and message bodies. contact_addresses and caller-defined client_reference values may contain personal data.",
5405
+ inputSchema: listMessageAnalyticsInputSchema,
5406
+ outputSchema: messageAnalyticsOutputSchema,
5407
+ annotations: { readOnlyHint: true, openWorldHint: false }
5408
+ },
5409
+ async (args) => runTool(
5410
+ "shipmail_list_message_analytics",
5411
+ messageAnalyticsOutputSchema,
5412
+ async () => client.messages.listAnalytics(args)
5413
+ )
5414
+ );
5415
+ });
5365
5416
  registerIfAllowed("shipmail_get_message", () => {
5366
5417
  server.registerTool(
5367
5418
  "shipmail_get_message",
@@ -6993,7 +7044,7 @@ function registerTools(rawServer, client, allowedTools, grantedOrganizations = [
6993
7044
  }
6994
7045
 
6995
7046
  // src/version.ts
6996
- var VERSION = "0.6.3";
7047
+ var VERSION = "0.6.4";
6997
7048
 
6998
7049
  // src/server.ts
6999
7050
  var INSTRUCTIONS = `ShipMail MCP exposes the business email and calendar tools authorized by the connection's current ShipMail permissions.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shipmail-mcp",
3
- "version": "0.6.3",
3
+ "version": "0.6.4",
4
4
  "mcpName": "io.github.shipmail-to/shipmail-mcp",
5
5
  "description": "Official Model Context Protocol (MCP) server for Shipmail, a business email provider with REST API, webhooks, and custom-domain inboxes for AI agents.",
6
6
  "type": "module",
@@ -59,7 +59,7 @@
59
59
  },
60
60
  "dependencies": {
61
61
  "@modelcontextprotocol/server": "2.0.0",
62
- "shipmail": "0.4.9",
62
+ "shipmail": "0.4.10",
63
63
  "zod": "4.4.3"
64
64
  },
65
65
  "devDependencies": {
package/server.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "url": "https://github.com/shipmail-to/shipmail-mcp",
7
7
  "source": "github"
8
8
  },
9
- "version": "0.6.3",
9
+ "version": "0.6.4",
10
10
  "websiteUrl": "https://shipmail.to/docs/mcp",
11
11
  "remotes": [
12
12
  {
@@ -27,7 +27,7 @@
27
27
  "registryType": "npm",
28
28
  "registryBaseUrl": "https://registry.npmjs.org",
29
29
  "identifier": "shipmail-mcp",
30
- "version": "0.6.3",
30
+ "version": "0.6.4",
31
31
  "transport": {
32
32
  "type": "stdio"
33
33
  },
package/smithery.yaml CHANGED
@@ -1,6 +1,6 @@
1
1
  # Smithery configuration file: https://smithery.ai/docs/build/project-config/smithery-yaml
2
2
  name: shipmail-mcp
3
- version: 0.6.3
3
+ version: 0.6.4
4
4
  description: Official Shipmail MCP server for AI-agent custom-domain business email inboxes with REST API and webhooks.
5
5
  author: ShipMail
6
6
  repository: https://github.com/shipmail-to/shipmail-mcp