shipmail-mcp 0.6.3 → 0.6.5
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 +4 -1
- package/dist/capabilities.d.ts +1 -1
- package/dist/capabilities.js +1 -0
- package/dist/index.js +83 -5
- package/dist/server.js +83 -5
- package/package.json +2 -2
- package/server.json +2 -2
- package/smithery.yaml +1 -1
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
|
package/dist/capabilities.d.ts
CHANGED
|
@@ -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;
|
package/dist/capabilities.js
CHANGED
|
@@ -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_\-=.+/]
|
|
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().
|
|
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({
|
|
@@ -1210,6 +1211,31 @@ var inboxBodyValueSchema = z.object({
|
|
|
1210
1211
|
value: z.string(),
|
|
1211
1212
|
is_encoding_problem: z.boolean()
|
|
1212
1213
|
});
|
|
1214
|
+
var emailAuthVerdictSchema = z.enum([
|
|
1215
|
+
"pass",
|
|
1216
|
+
"fail",
|
|
1217
|
+
"softfail",
|
|
1218
|
+
"neutral",
|
|
1219
|
+
"none",
|
|
1220
|
+
"temperror",
|
|
1221
|
+
"permerror",
|
|
1222
|
+
"policy",
|
|
1223
|
+
"unknown"
|
|
1224
|
+
]);
|
|
1225
|
+
var emailAuthenticationResultsSchema = z.object({
|
|
1226
|
+
spf: emailAuthVerdictSchema,
|
|
1227
|
+
dkim: emailAuthVerdictSchema,
|
|
1228
|
+
dmarc: emailAuthVerdictSchema,
|
|
1229
|
+
spam: z.object({
|
|
1230
|
+
isSpam: z.boolean().nullable(),
|
|
1231
|
+
scoreMilli: z.number().int().nullable()
|
|
1232
|
+
}),
|
|
1233
|
+
raw: z.object({
|
|
1234
|
+
authenticationResults: z.string().nullable(),
|
|
1235
|
+
receivedSpf: z.string().nullable(),
|
|
1236
|
+
spamStatus: z.string().nullable()
|
|
1237
|
+
})
|
|
1238
|
+
});
|
|
1213
1239
|
var inboxMessageSchema = z.object({
|
|
1214
1240
|
object: z.literal("inbox_message"),
|
|
1215
1241
|
id: z.string(),
|
|
@@ -1224,7 +1250,8 @@ var inboxMessageSchema = z.object({
|
|
|
1224
1250
|
received_at: z.string(),
|
|
1225
1251
|
preview: z.string(),
|
|
1226
1252
|
has_attachment: z.boolean(),
|
|
1227
|
-
size: z.number()
|
|
1253
|
+
size: z.number(),
|
|
1254
|
+
authentication_results: emailAuthenticationResultsSchema.nullable()
|
|
1228
1255
|
});
|
|
1229
1256
|
var inboxFullMessageSchema = inboxMessageSchema.omit({ object: true }).extend({
|
|
1230
1257
|
object: z.literal("inbox_message_full"),
|
|
@@ -1468,6 +1495,23 @@ var messageSchema = z.object({
|
|
|
1468
1495
|
created_at: z.string(),
|
|
1469
1496
|
updated_at: z.string()
|
|
1470
1497
|
});
|
|
1498
|
+
var messageAnalyticsSchema = z.object({
|
|
1499
|
+
object: z.literal("message_analytics"),
|
|
1500
|
+
id: z.string(),
|
|
1501
|
+
mailbox_id: z.string(),
|
|
1502
|
+
thread_id: z.string().nullable(),
|
|
1503
|
+
client_reference: z.string().nullable(),
|
|
1504
|
+
direction: z.enum(["inbound", "outbound"]),
|
|
1505
|
+
contact_addresses: z.array(z.string().email()),
|
|
1506
|
+
recipient_count: z.number().int().nonnegative(),
|
|
1507
|
+
attachment_count: z.number().int().nonnegative(),
|
|
1508
|
+
source: z.enum(MESSAGE_SOURCES),
|
|
1509
|
+
mode: z.enum(["live", "test"]),
|
|
1510
|
+
status: z.enum(MESSAGE_STATUSES),
|
|
1511
|
+
scheduled_at: z.string().nullable(),
|
|
1512
|
+
created_at: z.string(),
|
|
1513
|
+
updated_at: z.string()
|
|
1514
|
+
});
|
|
1471
1515
|
var scheduledMessageSchema = z.object({
|
|
1472
1516
|
object: z.literal("scheduled_message"),
|
|
1473
1517
|
id: z.string(),
|
|
@@ -1686,6 +1730,12 @@ var messagesOutputSchema = z.object({
|
|
|
1686
1730
|
data: z.array(messageSchema),
|
|
1687
1731
|
pagination: paginationSchema
|
|
1688
1732
|
});
|
|
1733
|
+
var messageAnalyticsOutputSchema = z.object({
|
|
1734
|
+
data: z.array(messageAnalyticsSchema),
|
|
1735
|
+
pagination: paginationSchema.extend({
|
|
1736
|
+
snapshot_at: z.string()
|
|
1737
|
+
})
|
|
1738
|
+
});
|
|
1689
1739
|
var scheduledMessageOutputSchema = z.object({
|
|
1690
1740
|
scheduled_message: scheduledMessageSchema
|
|
1691
1741
|
});
|
|
@@ -2048,6 +2098,16 @@ var listMessagesInputSchema = paginationInputSchema.extend({
|
|
|
2048
2098
|
}).refine((value) => Boolean(value.mailbox_id || value.client_reference), {
|
|
2049
2099
|
message: "Provide mailbox_id or client_reference."
|
|
2050
2100
|
});
|
|
2101
|
+
var listMessageAnalyticsInputSchema = paginationInputSchema.extend({
|
|
2102
|
+
updated_after: z.iso.datetime({ offset: true }).optional(),
|
|
2103
|
+
updated_before: z.iso.datetime({ offset: true }).optional()
|
|
2104
|
+
}).refine(
|
|
2105
|
+
(value) => !(value.updated_after && value.updated_before) || new Date(value.updated_after).getTime() < new Date(value.updated_before).getTime(),
|
|
2106
|
+
{
|
|
2107
|
+
message: "updated_after must be earlier than updated_before.",
|
|
2108
|
+
path: ["updated_after"]
|
|
2109
|
+
}
|
|
2110
|
+
);
|
|
2051
2111
|
var openAiFileInputSchema = z.object({
|
|
2052
2112
|
// The component prefers a freshly minted host download URL and only falls back to this one.
|
|
2053
2113
|
// It is model-supplied and therefore reachable by prompt injection, so it is constrained to
|
|
@@ -3795,7 +3855,8 @@ function toInboxMessageSummary(message) {
|
|
|
3795
3855
|
received_at: message.received_at,
|
|
3796
3856
|
preview: message.preview,
|
|
3797
3857
|
has_attachment: message.has_attachment,
|
|
3798
|
-
size: message.size
|
|
3858
|
+
size: message.size,
|
|
3859
|
+
authentication_results: message.authentication_results
|
|
3799
3860
|
};
|
|
3800
3861
|
}
|
|
3801
3862
|
function toInboxMessageSummaries(messages) {
|
|
@@ -5459,6 +5520,23 @@ function registerTools(rawServer, client, allowedTools, grantedOrganizations = [
|
|
|
5459
5520
|
})
|
|
5460
5521
|
);
|
|
5461
5522
|
});
|
|
5523
|
+
registerIfAllowed("shipmail_list_message_analytics", () => {
|
|
5524
|
+
server.registerTool(
|
|
5525
|
+
"shipmail_list_message_analytics",
|
|
5526
|
+
{
|
|
5527
|
+
title: "List Message Analytics",
|
|
5528
|
+
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.",
|
|
5529
|
+
inputSchema: listMessageAnalyticsInputSchema,
|
|
5530
|
+
outputSchema: messageAnalyticsOutputSchema,
|
|
5531
|
+
annotations: { readOnlyHint: true, openWorldHint: false }
|
|
5532
|
+
},
|
|
5533
|
+
async (args) => runTool(
|
|
5534
|
+
"shipmail_list_message_analytics",
|
|
5535
|
+
messageAnalyticsOutputSchema,
|
|
5536
|
+
async () => client.messages.listAnalytics(args)
|
|
5537
|
+
)
|
|
5538
|
+
);
|
|
5539
|
+
});
|
|
5462
5540
|
registerIfAllowed("shipmail_get_message", () => {
|
|
5463
5541
|
server.registerTool(
|
|
5464
5542
|
"shipmail_get_message",
|
|
@@ -7090,7 +7168,7 @@ function registerTools(rawServer, client, allowedTools, grantedOrganizations = [
|
|
|
7090
7168
|
}
|
|
7091
7169
|
|
|
7092
7170
|
// src/version.ts
|
|
7093
|
-
var VERSION = "0.6.
|
|
7171
|
+
var VERSION = "0.6.5";
|
|
7094
7172
|
|
|
7095
7173
|
// src/server.ts
|
|
7096
7174
|
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_\-=.+/]
|
|
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().
|
|
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({
|
|
@@ -1113,6 +1114,31 @@ var inboxBodyValueSchema = z.object({
|
|
|
1113
1114
|
value: z.string(),
|
|
1114
1115
|
is_encoding_problem: z.boolean()
|
|
1115
1116
|
});
|
|
1117
|
+
var emailAuthVerdictSchema = z.enum([
|
|
1118
|
+
"pass",
|
|
1119
|
+
"fail",
|
|
1120
|
+
"softfail",
|
|
1121
|
+
"neutral",
|
|
1122
|
+
"none",
|
|
1123
|
+
"temperror",
|
|
1124
|
+
"permerror",
|
|
1125
|
+
"policy",
|
|
1126
|
+
"unknown"
|
|
1127
|
+
]);
|
|
1128
|
+
var emailAuthenticationResultsSchema = z.object({
|
|
1129
|
+
spf: emailAuthVerdictSchema,
|
|
1130
|
+
dkim: emailAuthVerdictSchema,
|
|
1131
|
+
dmarc: emailAuthVerdictSchema,
|
|
1132
|
+
spam: z.object({
|
|
1133
|
+
isSpam: z.boolean().nullable(),
|
|
1134
|
+
scoreMilli: z.number().int().nullable()
|
|
1135
|
+
}),
|
|
1136
|
+
raw: z.object({
|
|
1137
|
+
authenticationResults: z.string().nullable(),
|
|
1138
|
+
receivedSpf: z.string().nullable(),
|
|
1139
|
+
spamStatus: z.string().nullable()
|
|
1140
|
+
})
|
|
1141
|
+
});
|
|
1116
1142
|
var inboxMessageSchema = z.object({
|
|
1117
1143
|
object: z.literal("inbox_message"),
|
|
1118
1144
|
id: z.string(),
|
|
@@ -1127,7 +1153,8 @@ var inboxMessageSchema = z.object({
|
|
|
1127
1153
|
received_at: z.string(),
|
|
1128
1154
|
preview: z.string(),
|
|
1129
1155
|
has_attachment: z.boolean(),
|
|
1130
|
-
size: z.number()
|
|
1156
|
+
size: z.number(),
|
|
1157
|
+
authentication_results: emailAuthenticationResultsSchema.nullable()
|
|
1131
1158
|
});
|
|
1132
1159
|
var inboxFullMessageSchema = inboxMessageSchema.omit({ object: true }).extend({
|
|
1133
1160
|
object: z.literal("inbox_message_full"),
|
|
@@ -1371,6 +1398,23 @@ var messageSchema = z.object({
|
|
|
1371
1398
|
created_at: z.string(),
|
|
1372
1399
|
updated_at: z.string()
|
|
1373
1400
|
});
|
|
1401
|
+
var messageAnalyticsSchema = z.object({
|
|
1402
|
+
object: z.literal("message_analytics"),
|
|
1403
|
+
id: z.string(),
|
|
1404
|
+
mailbox_id: z.string(),
|
|
1405
|
+
thread_id: z.string().nullable(),
|
|
1406
|
+
client_reference: z.string().nullable(),
|
|
1407
|
+
direction: z.enum(["inbound", "outbound"]),
|
|
1408
|
+
contact_addresses: z.array(z.string().email()),
|
|
1409
|
+
recipient_count: z.number().int().nonnegative(),
|
|
1410
|
+
attachment_count: z.number().int().nonnegative(),
|
|
1411
|
+
source: z.enum(MESSAGE_SOURCES),
|
|
1412
|
+
mode: z.enum(["live", "test"]),
|
|
1413
|
+
status: z.enum(MESSAGE_STATUSES),
|
|
1414
|
+
scheduled_at: z.string().nullable(),
|
|
1415
|
+
created_at: z.string(),
|
|
1416
|
+
updated_at: z.string()
|
|
1417
|
+
});
|
|
1374
1418
|
var scheduledMessageSchema = z.object({
|
|
1375
1419
|
object: z.literal("scheduled_message"),
|
|
1376
1420
|
id: z.string(),
|
|
@@ -1589,6 +1633,12 @@ var messagesOutputSchema = z.object({
|
|
|
1589
1633
|
data: z.array(messageSchema),
|
|
1590
1634
|
pagination: paginationSchema
|
|
1591
1635
|
});
|
|
1636
|
+
var messageAnalyticsOutputSchema = z.object({
|
|
1637
|
+
data: z.array(messageAnalyticsSchema),
|
|
1638
|
+
pagination: paginationSchema.extend({
|
|
1639
|
+
snapshot_at: z.string()
|
|
1640
|
+
})
|
|
1641
|
+
});
|
|
1592
1642
|
var scheduledMessageOutputSchema = z.object({
|
|
1593
1643
|
scheduled_message: scheduledMessageSchema
|
|
1594
1644
|
});
|
|
@@ -1951,6 +2001,16 @@ var listMessagesInputSchema = paginationInputSchema.extend({
|
|
|
1951
2001
|
}).refine((value) => Boolean(value.mailbox_id || value.client_reference), {
|
|
1952
2002
|
message: "Provide mailbox_id or client_reference."
|
|
1953
2003
|
});
|
|
2004
|
+
var listMessageAnalyticsInputSchema = paginationInputSchema.extend({
|
|
2005
|
+
updated_after: z.iso.datetime({ offset: true }).optional(),
|
|
2006
|
+
updated_before: z.iso.datetime({ offset: true }).optional()
|
|
2007
|
+
}).refine(
|
|
2008
|
+
(value) => !(value.updated_after && value.updated_before) || new Date(value.updated_after).getTime() < new Date(value.updated_before).getTime(),
|
|
2009
|
+
{
|
|
2010
|
+
message: "updated_after must be earlier than updated_before.",
|
|
2011
|
+
path: ["updated_after"]
|
|
2012
|
+
}
|
|
2013
|
+
);
|
|
1954
2014
|
var openAiFileInputSchema = z.object({
|
|
1955
2015
|
// The component prefers a freshly minted host download URL and only falls back to this one.
|
|
1956
2016
|
// It is model-supplied and therefore reachable by prompt injection, so it is constrained to
|
|
@@ -3698,7 +3758,8 @@ function toInboxMessageSummary(message) {
|
|
|
3698
3758
|
received_at: message.received_at,
|
|
3699
3759
|
preview: message.preview,
|
|
3700
3760
|
has_attachment: message.has_attachment,
|
|
3701
|
-
size: message.size
|
|
3761
|
+
size: message.size,
|
|
3762
|
+
authentication_results: message.authentication_results
|
|
3702
3763
|
};
|
|
3703
3764
|
}
|
|
3704
3765
|
function toInboxMessageSummaries(messages) {
|
|
@@ -5362,6 +5423,23 @@ function registerTools(rawServer, client, allowedTools, grantedOrganizations = [
|
|
|
5362
5423
|
})
|
|
5363
5424
|
);
|
|
5364
5425
|
});
|
|
5426
|
+
registerIfAllowed("shipmail_list_message_analytics", () => {
|
|
5427
|
+
server.registerTool(
|
|
5428
|
+
"shipmail_list_message_analytics",
|
|
5429
|
+
{
|
|
5430
|
+
title: "List Message Analytics",
|
|
5431
|
+
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.",
|
|
5432
|
+
inputSchema: listMessageAnalyticsInputSchema,
|
|
5433
|
+
outputSchema: messageAnalyticsOutputSchema,
|
|
5434
|
+
annotations: { readOnlyHint: true, openWorldHint: false }
|
|
5435
|
+
},
|
|
5436
|
+
async (args) => runTool(
|
|
5437
|
+
"shipmail_list_message_analytics",
|
|
5438
|
+
messageAnalyticsOutputSchema,
|
|
5439
|
+
async () => client.messages.listAnalytics(args)
|
|
5440
|
+
)
|
|
5441
|
+
);
|
|
5442
|
+
});
|
|
5365
5443
|
registerIfAllowed("shipmail_get_message", () => {
|
|
5366
5444
|
server.registerTool(
|
|
5367
5445
|
"shipmail_get_message",
|
|
@@ -6993,7 +7071,7 @@ function registerTools(rawServer, client, allowedTools, grantedOrganizations = [
|
|
|
6993
7071
|
}
|
|
6994
7072
|
|
|
6995
7073
|
// src/version.ts
|
|
6996
|
-
var VERSION = "0.6.
|
|
7074
|
+
var VERSION = "0.6.5";
|
|
6997
7075
|
|
|
6998
7076
|
// src/server.ts
|
|
6999
7077
|
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
|
+
"version": "0.6.5",
|
|
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.
|
|
62
|
+
"shipmail": "0.4.11",
|
|
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.
|
|
9
|
+
"version": "0.6.5",
|
|
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.
|
|
30
|
+
"version": "0.6.5",
|
|
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
|
+
version: 0.6.5
|
|
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
|