MCP 服务器

Space Monkey Mailchimp Dashboard

com.igods/space-monkey
数据与分析 营销与广告 公开且可连接 MCP 2026-07-28

此 MCP 可以做什么

Provides Mailchimp campaign performance, audience engagement, member profiles, segmentation, growth, geography, and related analytics.

sm_get_account
Get account and quotas
Introspect the API key's own account — effective tier, per-service entitlements, current hour/month quota usage and project count. Use it to check headroom or diagnose a 403/429 before retrying.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': [], 'properties': {}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'code': {'type': 'string', 'description': 'A machine-readable identifier for the error type. For the full code taxonomy, see the sm_get_schema tool or the Enterprise API OpenAPI ErrorResponse component.'}, 'tier': {'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'A varchar tier identifier, typically free/starter/pro/enterprise.'}, 'displayName': {'type': 'string', 'description': 'Human-readable tier name.'}}, 'description': 'Tier information for the enterprise account.', 'additionalProperties': True}, 'error': {'type': 'string', 'description': 'A human-readable error message detailing what went wrong.'}, 'usage': {'type': 'object', 'properties': {'usedHour': {'type': 'integer', 'description': 'Requests utilized in the current hour window.'}, 'limitHour': {'type': 'integer', 'description': 'Maximum requests allowed per hour.'}, 'resetHour': {'type': 'integer', 'description': 'UTC Unix epoch seconds when the hourly limit resets.'}, 'usedMonth': {'type': 'integer', 'description': 'Requests utilized in the current month window.'}, 'limitMonth': {'type': 'integer', 'description': 'Maximum requests allowed per month.'}, 'resetMonth': {'type': 'integer', 'description': 'UTC Unix epoch seconds when the monthly limit resets.'}}, 'description': 'Current-hour and current-month quota usage.', 'additionalProperties': True}, 'account': {'type': 'object', 'properties': {'displayName': {'type': 'string', 'description': 'Human-readable account name.'}}, 'description': 'Basic enterprise account details.', 'additionalProperties': True}, 'entitlements': {'type': 'array', 'items': {'type': 'object', 'properties': {'service': {'type': 'string', 'description': 'The name of the service this entitlement governs.'}, 'isEnabled': {'type': 'boolean', 'description': 'True if the current subscription tier permits access.'}, 'rateLimitHour': {'type': 'integer', 'description': 'The hourly quota boundary for this service.'}, 'rateLimitMonth': {'type': 'integer', 'description': 'The monthly quota boundary for this service.'}}, 'additionalProperties': True}, 'description': 'Per-service entitlement rows defining allowed access.'}, 'projectCount': {'type': 'integer', 'description': 'Number of projects this key can read.'}}, 'description': 'Output for the sm_get_account tool. Failure payloads arrive in the same envelope as { error, code }.', 'additionalProperties': True}
sm_get_campaign
Get campaign report
Load one campaign's full report — delivery, open, click, click-to-open and bounce rates plus campaign metadata. Use after you have identified a campaign of interest. Returns a fixed-size set of campaign-level aggregates in one call regardless of audience size; per-variant, funnel and geography breakdowns are on sm_get_variate, not here.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['projectId', 'campaignId'], 'properties': {'projectId': {'type': 'string', 'minLength': 1, 'description': 'Required. The opaque alphanumeric project identifier of 8 or more characters to scope this request to. Call GET /_api/public/v1/enterprise/projects to list the project IDs available to your API key. Omitting it returns 400 VALIDATION_ERROR.'}, 'campaignId': {'type': 'string', 'minLength': 1, 'description': 'The opaque string identifier for the campaign as assigned by Mailchimp. List campaigns to obtain this ID. If the ID is invalid or does not exist in the project, the endpoint will return a 404 error.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'code': {'type': 'string', 'description': 'A machine-readable identifier for the error type. For the full code taxonomy, see the sm_get_schema tool or the Enterprise API OpenAPI ErrorResponse component.'}, 'error': {'type': 'string', 'description': 'A human-readable error message detailing what went wrong.'}, 'report': {'type': 'object', 'properties': {'listName': {'type': 'string', 'description': 'Audience the campaign was sent to.'}, 'openRate': {'type': 'number', 'description': 'Unique opens divided by delivered, as a percentage from 0 to 100.'}, 'sendTime': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'clickRate': {'type': 'number', 'description': 'Unique clicks divided by delivered, as a percentage from 0 to 100.'}, 'delivered': {'type': 'integer', 'description': 'Number of emails accepted for delivery by the receiving mail system.'}, 'bounceRate': {'type': 'number', 'description': 'Bounces divided by emails sent, as a percentage from 0 to 100.'}, 'campaignId': {'type': 'string', 'description': 'Stable identifier for a Mailchimp campaign. Use it to join rows across tools or drill into sm_get_campaign.'}, 'emailsSent': {'type': 'integer', 'description': 'Number of emails the campaign attempted to send to recipients.'}, 'totalOpens': {'type': 'integer', 'description': 'Total open events, counting repeat opens by the same member.'}, 'hardBounces': {'type': 'integer', 'description': 'Emails rejected for permanent reasons such as an invalid address. Not retried.'}, 'previewText': {'type': 'string', 'description': 'Preview text for the campaign.'}, 'softBounces': {'type': 'integer', 'description': 'Emails rejected for temporary reasons. Mailchimp may retry delivery.'}, 'subjectLine': {'type': 'string', 'description': 'The campaign subject line as sent.'}, 'totalClicks': {'type': 'integer', 'description': 'Total click events, counting repeat clicks.'}, 'uniqueOpens': {'type': 'integer', 'description': 'Number of distinct members who opened at least once.'}, 'abuseReports': {'type': 'integer', 'description': 'Number of recipients who reported the campaign as spam.'}, 'campaignType': {'type': 'string', 'description': 'Mailchimp campaign type.'}, 'deliveryRate': {'type': 'number', 'description': 'Delivered divided by emails sent, as a percentage from 0 to 100.'}, 'uniqueClicks': {'type': 'integer', 'description': 'Number of distinct members who clicked at least once.'}, 'unsubscribes': {'type': 'integer', 'description': 'Number of unsubscribe events for the campaign.'}, 'forwardsCount': {'type': 'integer', 'description': 'Number of forward events. Forwards are not a working metric and must never be used to rank, recommend, or brief.'}, 'clickToOpenRate': {'type': 'number', 'description': 'Unique clicks divided by unique opens, as a percentage from 0 to 100.'}}, 'description': 'Comprehensive details for a single campaign. May be null.', 'additionalProperties': True}, 'projectId': {'type': 'string', 'description': 'An opaque alphanumeric project identifier of 8 or more characters identifying a Space Monkey Project. Treat this value as entirely opaque; do not parse, sequentialize, or auto-generate it.'}, 'performance': {'type': 'object', 'properties': {'openRate': {'type': ['number', 'null'], 'description': 'Unique opens divided by delivered, as a percentage from 0 to 100.'}, 'sendTime': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'clickRate': {'type': ['number', 'null'], 'description': 'Unique clicks divided by delivered, as a percentage from 0 to 100.'}, 'bounceRate': {'type': ['number', 'null'], 'description': 'Bounces divided by emails sent, as a percentage from 0 to 100.'}, 'campaignId': {'type': 'string', 'description': 'Campaign identifier.'}, 'deliveries': {'type': 'integer', 'description': 'Number of emails accepted for delivery by the receiving mail system.'}, 'emailsSent': {'type': 'integer', 'description': 'Emails the campaign sent.'}, 'opensTotal': {'type': 'integer', 'description': 'Total open events, counting repeat opens by the same member.'}, 'clicksTotal': {'type': 'integer', 'description': 'Total click events, counting repeat clicks.'}, 'subjectLine': {'type': 'string', 'description': 'Campaign subject line.'}, 'uniqueOpens': {'type': 'integer', 'description': 'Number of distinct members who opened at least once.'}, 'deliveryRate': {'type': ['number', 'null'], 'description': 'Delivered divided by emails sent, as a percentage from 0 to 100.'}, 'totalBounces': {'type': 'integer', 'description': 'Hard plus soft bounces for the campaign.'}, 'uniqueClicks': {'type': 'integer', 'description': 'Number of distinct members who clicked at least once.'}, 'unsubscribed': {'type': 'integer', 'description': 'Unsubscribes for the campaign.'}, 'clickToOpenRate': {'type': ['number', 'null'], 'description': 'Unique clicks divided by unique opens, as a percentage from 0 to 100.'}, 'unsubscribeRate': {'type': ['number', 'null'], 'description': 'Unsubscribes divided by delivered, as a percentage from 0 to 100.'}}, 'description': 'Detailed performance for individual campaigns. May be null.', 'additionalProperties': True}, 'campaignMeta': {'type': 'object', 'properties': {'campaignType': {'type': ['string', 'null'], 'description': 'Mailchimp campaign type, or null when unknown.'}, 'variateSettings': {'type': ['string', 'null'], 'description': 'Raw JSON string passed verbatim'}}, 'description': 'Metadata for a campaign, including raw stringified JSON variate settings. May be null.', 'additionalProperties': True}}, 'description': 'Output for the sm_get_campaign tool. Failure payloads arrive in the same envelope as { error, code }.', 'additionalProperties': True}
sm_get_campaign_post_mortem
Get campaign post-mortem
Produce a full post-mortem of one sent campaign: summary metadata, delivery and performance rates, engagement velocity (time-to-first-open and hourly engagement), audience quality, and per-variant breakdown when the campaign is an A/B test. Combines the detail, velocity, audience-quality and variate views into one report. All metrics come from synced BigQuery tables, so they are only as current as the project last sync run.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['projectId', 'campaignId'], 'properties': {'botFilter': {'enum': ['all', 'suspected-bot', 'clean'], 'type': 'string', 'default': 'all', 'description': "Filter out members whose interactions appear to be automated bot activity. Select 'suspected-bot' for only bots, 'clean' to exclude bots, or 'all' (default) to ignore."}, 'projectId': {'type': 'string', 'minLength': 1, 'description': 'Required. The opaque alphanumeric project identifier of 8 or more characters to scope this request to. Call GET /_api/public/v1/enterprise/projects to list the project IDs available to your API key. Omitting it returns 400 VALIDATION_ERROR.'}, 'campaignId': {'type': 'string', 'pattern': '^[a-zA-Z0-9_-]+$', 'description': 'The opaque string identifier for the campaign as assigned by Mailchimp. List campaigns to obtain this ID. If the ID is invalid or does not exist in the project, the endpoint will return a 404 error.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'code': {'type': 'string', 'description': 'A machine-readable identifier for the error type. For the full code taxonomy, see the sm_get_schema tool or the Enterprise API OpenAPI ErrorResponse component.'}, 'error': {'type': 'string', 'description': 'A human-readable error message detailing what went wrong.'}, 'summary': {'type': 'object', 'properties': {'type': {'type': 'string', 'description': 'May be null.'}, 'sendTime': {'type': 'string', 'description': 'May be null.'}, 'isVariate': {'type': 'boolean', 'description': 'True when the campaign is an A/B (variate) test.'}, 'campaignId': {'type': 'string', 'description': 'May be null.'}, 'subjectLine': {'type': 'string', 'description': 'May be null.'}, 'audienceSize': {'type': 'integer', 'description': 'May be null.'}}, 'description': 'Short human-readable summary for the enclosing item.', 'additionalProperties': True}, 'variate': {'type': 'object', 'properties': {'funnelData': {'type': 'array', 'items': {'type': 'object', 'properties': {'recipients': {'type': 'integer', 'description': 'Number of recipients the variant or campaign targeted.'}, 'variantLabel': {'type': 'string', 'description': 'Variant label for the campaign, or null.'}, 'uniqueOpeners': {'type': 'integer', 'description': 'Number of distinct members who opened at least once.'}, 'uniqueClickers': {'type': 'integer', 'description': 'Number of distinct members who clicked at least once.'}}, 'description': 'Funnel metrics for a campaign or variant.', 'additionalProperties': True}, 'description': 'Per-variant funnel rows from recipients through unique clickers.'}, 'geoBreakdown': {'type': 'array', 'items': {'type': 'object', 'properties': {'stateRegion': {'type': 'string', 'description': 'State or region.'}, 'engagedCount': {'type': 'integer', 'description': 'Engaged members in the region.'}, 'variantLabel': {'type': 'string', 'description': 'Variant label for the campaign, or null.'}}, 'description': 'Geographic distribution of campaign engagement.', 'additionalProperties': True}, 'description': 'Per-variant geography rollup rows.'}, 'variantReports': {'type': 'array', 'items': {'type': 'object', 'properties': {'emailsSent': {'type': 'integer', 'description': 'Number of emails the campaign attempted to send to recipients.'}, 'opensTotal': {'type': 'integer', 'description': 'Total open events, counting repeat opens by the same member.'}, 'clicksTotal': {'type': 'integer', 'description': 'Total click events, counting repeat clicks.'}, 'hardBounces': {'type': 'integer', 'description': 'Emails rejected for permanent reasons such as an invalid address. Not retried.'}, 'softBounces': {'type': 'integer', 'description': 'Emails rejected for temporary reasons. Mailchimp may retry delivery.'}, 'subjectLine': {'type': 'string', 'description': 'The campaign subject line as sent.'}, 'uniqueOpens': {'type': 'integer', 'description': 'Number of distinct members who opened at least once.'}, 'uniqueClicks': {'type': 'integer', 'description': 'Number of distinct members who clicked at least once.'}, 'unsubscribed': {'type': 'integer', 'description': 'Recipients who unsubscribed, when the enclosing row is per-campaign.'}, 'variantLabel': {'type': 'string', 'description': 'A, B, C, or Campaign for non-variate'}}, 'description': 'Performance reports split by campaign variant.', 'additionalProperties': True}, 'description': 'Per-variant performance rows.'}, 'audienceQuality': {'type': 'array', 'items': {'type': 'object', 'properties': {'leaderCount': {'type': 'integer', 'description': 'Number of leaders in the enclosing bucket.'}, 'variantLabel': {'type': 'string', 'description': 'Variant label for the campaign, or null.'}, 'repeatOpeners': {'type': 'integer', 'description': 'Members who opened more than once.'}, 'repeatClickers': {'type': 'integer', 'description': 'Members who clicked more than once.'}, 'avgMemberRating': {'type': ['number', 'null'], 'description': 'Mean member rating in the enclosing bucket.'}, 'clickToOpenRate': {'type': 'number', 'description': 'Unique clicks divided by unique opens, as a percentage from 0 to 100.'}, 'avgOpensPerMember': {'type': 'number', 'description': 'Mean open events per engaged member.'}, 'avgClicksPerMember': {'type': 'number', 'description': 'Mean click events per engaged member.'}, 'avgEngagementScore': {'type': ['number', 'null'], 'description': 'Mean engagement score in the enclosing bucket.'}, 'totalEngagedMembers': {'type': 'integer', 'description': 'Members with any tracked engagement.'}}, 'description': 'Measures the quality of audience engaging with the campaign.', 'additionalProperties': True}, 'description': 'Per-variant audience-quality rows.'}, 'timeToFirstOpen': {'type': 'array', 'items': {'type': 'object', 'properties': {'openers': {'type': 'integer', 'description': 'Number of distinct members who opened.'}, 'avgMinutes': {'type': 'number', 'description': 'Mean minutes to the enclosing outcome.'}, 'maxMinutes': {'type': 'integer', 'description': 'Maximum minutes to the enclosing outcome.'}, 'minMinutes': {'type': 'integer', 'description': 'Minimum minutes to the enclosing outcome.'}, 'variantLabel': {'type': 'string', 'description': 'Variant label for the campaign, or null.'}, 'medianMinutes': {'type': 'integer', 'description': 'Median minutes to the enclosing outcome.'}}, 'description': 'Analysis of time until the first open occurs.', 'additionalProperties': True}, 'description': 'Per-variant time-to-first-open statistics.'}, 'engagementVelocity': {'type': 'array', 'items': {'type': 'object', 'properties': {'opens': {'type': 'integer', 'description': 'Open-events count observed over the enclosing window.'}, 'clicks': {'type': 'integer', 'description': 'Click-events count observed over the enclosing window.'}, 'variantLabel': {'type': 'string', 'description': 'Variant label for the campaign, or null.'}, 'hoursAfterSend': {'type': 'integer', 'description': '0-72'}}, 'description': 'Velocity of opens and clicks post-send.', 'additionalProperties': True}, 'description': 'Per-variant engagement velocity rows.'}}, 'description': 'May be null.', 'additionalProperties': True}, 'velocity': {'type': 'object', 'properties': {'timeToFirstOpen': {'type': 'array', 'items': {'type': 'object', 'properties': {'openers': {'type': 'integer', 'description': 'Number of distinct members who opened.'}, 'avgMinutes': {'type': 'number', 'description': 'Mean minutes to the enclosing outcome.'}, 'maxMinutes': {'type': 'integer', 'description': 'Maximum minutes to the enclosing outcome.'}, 'minMinutes': {'type': 'integer', 'description': 'Minimum minutes to the enclosing outcome.'}, 'variantLabel': {'type': 'string', 'description': 'Variant label for the campaign, or null.'}, 'medianMinutes': {'type': 'integer', 'description': 'Median minutes to the enclosing outcome.'}}, 'description': 'Analysis of time until the first open occurs.', 'additionalProperties': True}, 'description': 'Per-variant time-to-first-open statistics.'}, 'hourlyEngagement': {'type': 'array', 'items': {'type': 'object', 'properties': {'opens': {'type': 'integer', 'description': 'Open-events count observed over the enclosing window.'}, 'clicks': {'type': 'integer', 'description': 'Click-events count observed over the enclosing window.'}, 'variantLabel': {'type': 'string', 'description': 'Variant label for the campaign, or null.'}, 'hoursAfterSend': {'type': 'integer', 'description': '0-72'}}, 'description': 'Velocity of opens and clicks post-send.', 'additionalProperties': True}, 'description': 'Hourly open and click counts after send.'}}, 'description': 'May be null.', 'additionalProperties': True}, 'projectId': {'type': 'string', 'description': 'An opaque alphanumeric project identifier of 8 or more characters identifying a Space Monkey Project. Treat this value as entirely opaque; do not parse, sequentialize, or auto-generate it.'}, 'performance': {'type': 'object', 'properties': {'listName': {'type': 'string', 'description': 'The Mailchimp audience this campaign was sent to.'}, 'openRate': {'type': 'number', 'description': 'Unique opens divided by delivered, as a percentage from 0 to 100.'}, 'sendTime': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'clickRate': {'type': 'number', 'description': 'Unique clicks divided by delivered, as a percentage from 0 to 100.'}, 'delivered': {'type': 'integer', 'description': 'Number of emails accepted for delivery by the receiving mail system.'}, 'bounceRate': {'type': 'number', 'description': 'Bounces divided by emails sent, as a percentage from 0 to 100.'}, 'campaignId': {'type': 'string', 'description': 'Stable identifier for a Mailchimp campaign. Use it to join rows across tools or drill into sm_get_campaign.'}, 'emailsSent': {'type': 'integer', 'description': 'Number of emails the campaign attempted to send to recipients.'}, 'totalOpens': {'type': 'integer', 'description': 'Total open events, counting repeat opens by the same member.'}, 'hardBounces': {'type': 'integer', 'description': 'Emails rejected for permanent reasons such as an invalid address. Not retried.'}, 'previewText': {'type': 'string', 'description': 'The preview text shown next to the subject line in inbox clients.'}, 'softBounces': {'type': 'integer', 'description': 'Emails rejected for temporary reasons. Mailchimp may retry delivery.'}, 'subjectLine': {'type': 'string', 'description': 'The campaign subject line as sent.'}, 'totalClicks': {'type': 'integer', 'description': 'Total click events, counting repeat clicks.'}, 'uniqueOpens': {'type': 'integer', 'description': 'Number of distinct members who opened at least once.'}, 'abuseReports': {'type': 'integer', 'description': 'Number of recipients who reported the campaign as spam.'}, 'campaignType': {'type': 'string', 'description': 'The Mailchimp campaign type, for example regular, plaintext, variate, or automation.'}, 'deliveryRate': {'type': 'number', 'description': 'Delivered divided by emails sent, as a percentage from 0 to 100.'}, 'uniqueClicks': {'type': 'integer', 'description': 'Number of distinct members who clicked at least once.'}, 'unsubscribes': {'type': 'integer', 'description': 'Number of unsubscribe events for the campaign.'}, 'forwardsCount': {'type': 'integer', 'description': 'Number of forward events. Forwards are not a working metric and must never be used to rank, recommend, or brief.'}, 'clickToOpenRate': {'type': 'number', 'description': 'Unique clicks divided by unique opens, as a percentage from 0 to 100.'}}, 'description': 'Comprehensive details for a single campaign. May be null.', 'additionalProperties': True}, 'audienceQuality': {'type': 'array', 'items': {'type': 'object', 'properties': {'leaderCount': {'type': 'integer', 'description': 'Number of leaders in the enclosing bucket.'}, 'variantLabel': {'type': 'string', 'description': 'Variant label for the campaign, or null.'}, 'repeatOpeners': {'type': 'integer', 'description': 'Members who opened more than once.'}, 'repeatClickers': {'type': 'integer', 'description': 'Members who clicked more than once.'}, 'avgMemberRating': {'type': ['number', 'null'], 'description': 'Mean member rating in the enclosing bucket.'}, 'clickToOpenRate': {'type': 'number', 'description': 'Unique clicks divided by unique opens, as a percentage from 0 to 100.'}, 'avgOpensPerMember': {'type': 'number', 'description': 'Mean open events per engaged member.'}, 'avgClicksPerMember': {'type': 'number', 'description': 'Mean click events per engaged member.'}, 'avgEngagementScore': {'type': ['number', 'null'], 'description': 'Mean engagement score in the enclosing bucket.'}, 'totalEngagedMembers': {'type': 'integer', 'description': 'Members with any tracked engagement.'}}, 'description': 'Measures the quality of audience engaging with the campaign.', 'additionalProperties': True}, 'description': 'May be null.'}}, 'description': 'Output for the sm_get_campaign_post_mortem tool. Failure payloads arrive in the same envelope as { error, code }.', 'additionalProperties': True}
sm_get_insights_advanced
Get advanced insights
Get deeper audience analytics for a project: engagement distribution, tag and segment summaries, subscriber-growth baseline with churn decomposition, and campaign consistency. Use when basic insights cannot explain a change. Excludes the per-campaign performance table, single-campaign detail, list overview and the engagement and send-volume trends — use sm_get_insights_basic for those. Excludes campaign fatigue, subject-line keywords, send-time heatmap, monthly trend and audience health — use sm_get_insights_expert. All three insight tiers also return campaign averages, previous-period averages, audience summary and auto-generated insights.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['projectId'], 'properties': {'endDate': {'type': 'string', 'description': "Inclusive ISO-8601 calendar date (UTC) upper bound for the time range in YYYY-MM-DD format. Omit to leave the end of the time window unbounded or use the endpoint's default."}, 'projectId': {'type': 'string', 'minLength': 1, 'description': 'Required. The opaque alphanumeric project identifier of 8 or more characters to scope this request to. Call GET /_api/public/v1/enterprise/projects to list the project IDs available to your API key. Omitting it returns 400 VALIDATION_ERROR.'}, 'startDate': {'type': 'string', 'description': 'Inclusive ISO-8601 calendar date (UTC) lower bound for the time range in YYYY-MM-DD format. Omit to leave the start of the time window unbounded.'}, 'campaignId': {'type': 'string', 'pattern': '^[a-zA-Z0-9_-]+$', 'description': 'The opaque string identifier for the campaign as assigned by Mailchimp. List campaigns to obtain this ID. If the ID is invalid or does not exist in the project, the endpoint will return a 404 error.'}, 'maxSendVolume': {'type': 'integer', 'minimum': 0, 'description': 'Maximum number of emails sent to include a campaign in the insights aggregations. Omit to impose no upper bound.'}, 'minSendVolume': {'type': 'integer', 'minimum': 0, 'description': 'Minimum number of emails sent to include a campaign in the insights aggregations. Omit to use the system default threshold.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'code': {'type': 'string', 'description': 'A machine-readable identifier for the error type. For the full code taxonomy, see the sm_get_schema tool or the Enterprise API OpenAPI ErrorResponse component.'}, 'error': {'type': 'string', 'description': 'A human-readable error message detailing what went wrong.'}, 'insights': {'type': 'array', 'items': {'type': 'object', 'properties': {'title': {'type': 'string', 'description': 'Insight title.'}, 'sentiment': {'type': 'string', 'description': 'one of positive/negative/neutral'}, 'campaignId': {'type': ['string', 'null'], 'description': 'only emitted by the top-campaign insights'}, 'description': {'type': 'string', 'description': 'Insight explanation.'}}, 'description': 'Automatically generated contextual insights.', 'additionalProperties': True}, 'description': 'Auto-generated insight objects pairing a title with a descriptive sentence.'}, 'projectId': {'type': 'string', 'description': 'An opaque alphanumeric project identifier of 8 or more characters identifying a Space Monkey Project. Treat this value as entirely opaque; do not parse, sequentialize, or auto-generate it.'}, 'tagSummary': {'type': 'array', 'items': {'type': 'object', 'properties': {'name': {'type': 'string', 'description': 'Tag name.'}, 'tagId': {'type': 'string', 'description': 'Tag identifier.'}, 'syncedAt': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'memberCount': {'type': 'integer', 'description': 'Members carrying the tag.'}}, 'description': 'Summary metric for a tag.', 'additionalProperties': True}, 'description': 'Tag summary rows.'}, 'segmentSummary': {'type': 'array', 'items': {'type': 'object', 'properties': {'name': {'type': 'string', 'description': 'Segment name.'}, 'options': {'type': ['string', 'null'], 'description': 'Raw Mailchimp segment options JSON as an unparsed string that the client must parse itself'}, 'syncedAt': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'createdAt': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'segmentId': {'type': 'string', 'description': 'Segment identifier.'}, 'updatedAt': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'memberCount': {'type': 'integer', 'description': 'Members in the segment.'}, 'segmentType': {'type': ['string', 'null'], 'description': 'Segment type, or null.'}}, 'description': 'Summary metrics for segments.', 'additionalProperties': True}, 'description': 'Segment summary rows.'}, 'audienceSummary': {'type': 'array', 'items': {'type': 'object', 'properties': {'status': {'type': 'string', 'description': 'Subscription status.'}, 'memberCount': {'type': 'integer', 'description': 'Members in the status.'}}, 'description': 'Audience status summary counts.', 'additionalProperties': True}, 'description': 'Current audience status rollup: one row per member status with the member count.'}, 'campaignAverages': {'type': 'array', 'items': {'type': 'object', 'properties': {'totalOpens': {'type': ['integer', 'null'], 'description': 'Total open events, counting repeat opens by the same member.'}, 'avgOpenRate': {'type': ['number', 'null'], 'description': 'Mean open rate across the campaigns in the enclosing summary.'}, 'totalClicks': {'type': ['integer', 'null'], 'description': 'Total click events, counting repeat clicks.'}, 'avgClickRate': {'type': ['number', 'null'], 'description': 'Mean click rate across the campaigns in the enclosing summary.'}, 'totalBounces': {'type': ['integer', 'null'], 'description': 'Hard plus soft bounces.'}, 'avgBounceRate': {'type': ['number', 'null'], 'description': 'Mean bounce rate across the campaigns in the enclosing summary.'}, 'avgEmailsSent': {'type': ['number', 'null'], 'description': 'Mean emails sent per campaign in the enclosing summary.'}, 'totalForwards': {'type': ['integer', 'null'], 'description': 'Total forward events across the campaigns in the enclosing summary. Forwards are not a working metric and must never be used to rank, recommend, or brief.'}, 'totalCampaigns': {'type': 'integer', 'description': 'Total number of campaigns the enclosing summary covers.'}, 'avgDeliveryRate': {'type': ['number', 'null'], 'description': 'Mean delivery rate across the campaigns in the enclosing summary.'}, 'totalEmailsSent': {'type': ['integer', 'null'], 'description': 'Total emails sent across the campaigns in the enclosing summary.'}, 'totalHardBounces': {'type': ['integer', 'null'], 'description': 'Total permanent bounce events across the campaigns in the enclosing summary.'}, 'totalSoftBounces': {'type': ['integer', 'null'], 'description': 'Total temporary bounce events across the campaigns in the enclosing summary.'}, 'totalAbuseReports': {'type': ['integer', 'null'], 'description': 'Total abuse reports across the campaigns in the enclosing summary.'}, 'totalUnsubscribes': {'type': ['integer', 'null'], 'description': 'Total unsubscribe events across the campaigns in the enclosing summary.'}, 'avgClickToOpenRate': {'type': ['number', 'null'], 'description': 'Mean click-to-open rate across the campaigns in the enclosing summary.'}}, 'description': 'Aggregated averages and totals across campaigns.', 'additionalProperties': True}, 'description': 'Single summary row of aggregate campaign metrics for the current period.'}, 'subscriberGrowth': {'type': 'array', 'items': {'type': 'object', 'properties': {'status': {'type': 'string', 'description': 'Subscription status.'}, 'optDate': {'type': 'string', 'description': 'A BigQuery DATE, not a timestamp'}, 'memberCount': {'type': 'integer', 'description': 'Members in the status.'}}, 'description': 'Subscriber growth over time.', 'additionalProperties': True}, 'description': 'Audience growth rows over time, bucketed by member status.'}, 'campaignDateRange': {'type': 'object', 'properties': {'maxSendTime': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'minSendTime': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}}, 'description': 'Overall chronological range of campaigns. May be null.', 'additionalProperties': True}, 'computedThreshold': {'type': ['number', 'null'], 'description': 'Threshold computed for the analysis, or null when not applicable.'}, 'campaignConsistency': {'type': 'object', 'properties': {'maxOpenRate': {'type': ['number', 'null'], 'description': 'Highest open rate.'}, 'minOpenRate': {'type': ['number', 'null'], 'description': 'Lowest open rate.'}, 'maxClickRate': {'type': ['number', 'null'], 'description': 'Highest click rate.'}, 'minClickRate': {'type': ['number', 'null'], 'description': 'Lowest click rate.'}, 'medianOpenRate': {'type': ['number', 'null'], 'description': 'Median open rate.'}, 'openRateStddev': {'type': ['number', 'null'], 'description': 'Open-rate standard deviation.'}, 'clickRateStddev': {'type': ['number', 'null'], 'description': 'Click-rate standard deviation.'}, 'medianClickRate': {'type': ['number', 'null'], 'description': 'Median click rate.'}}, 'description': 'Statistical consistency metrics for campaign performance. May be null.', 'additionalProperties': True}, 'engagementDistribution': {'type': 'array', 'items': {'type': 'object', 'properties': {'syncedAt': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'memberCount': {'type': 'integer', 'description': 'Members in the bucket.'}, 'memberRating': {'type': ['integer', 'null'], 'description': 'Engagement rating bucket, or null.'}}, 'description': 'Breakdown of members by engagement rating.', 'additionalProperties': True}, 'description': 'Members bucketed by engagement rating.'}, 'previousPeriodAverages': {'type': 'array', 'items': {'type': 'object', 'properties': {'totalOpens': {'type': ['integer', 'null'], 'description': 'Total open events, counting repeat opens by the same member.'}, 'avgOpenRate': {'type': ['number', 'null'], 'description': 'Mean open rate across the campaigns in the enclosing summary.'}, 'totalClicks': {'type': ['integer', 'null'], 'description': 'Total click events, counting repeat clicks.'}, 'avgClickRate': {'type': ['number', 'null'], 'description': 'Mean click rate across the campaigns in the enclosing summary.'}, 'totalBounces': {'type': ['integer', 'null'], 'description': 'Hard plus soft bounces.'}, 'avgBounceRate': {'type': ['number', 'null'], 'description': 'Mean bounce rate across the campaigns in the enclosing summary.'}, 'avgEmailsSent': {'type': ['number', 'null'], 'description': 'Mean emails sent per campaign in the enclosing summary.'}, 'totalForwards': {'type': ['integer', 'null'], 'description': 'Total forward events across the campaigns in the enclosing summary. Forwards are not a working metric and must never be used to rank, recommend, or brief.'}, 'totalCampaigns': {'type': 'integer', 'description': 'Total number of campaigns the enclosing summary covers.'}, 'avgDeliveryRate': {'type': ['number', 'null'], 'description': 'Mean delivery rate across the campaigns in the enclosing summary.'}, 'totalEmailsSent': {'type': ['integer', 'null'], 'description': 'Total emails sent across the campaigns in the enclosing summary.'}, 'totalHardBounces': {'type': ['integer', 'null'], 'description': 'Total permanent bounce events across the campaigns in the enclosing summary.'}, 'totalSoftBounces': {'type': ['integer', 'null'], 'description': 'Total temporary bounce events across the campaigns in the enclosing summary.'}, 'totalAbuseReports': {'type': ['integer', 'null'], 'description': 'Total abuse reports across the campaigns in the enclosing summary.'}, 'totalUnsubscribes': {'type': ['integer', 'null'], 'description': 'Total unsubscribe events across the campaigns in the enclosing summary.'}, 'avgClickToOpenRate': {'type': ['number', 'null'], 'description': 'Mean click-to-open rate across the campaigns in the enclosing summary.'}}, 'description': 'Aggregated averages and totals across campaigns.', 'additionalProperties': True}, 'description': 'Single summary row of aggregate campaign metrics for the prior comparison period.'}, 'subscriberGrowthBaseline': {'type': 'number', 'description': 'Baseline subscriber number used for growth comparison.'}, 'subscriberGrowthBaselineChurn': {'type': 'number', 'description': 'Baseline churn number used for growth comparison.'}, 'subscriberGrowthBaselineSubscribed': {'type': 'number', 'description': 'Baseline subscribed count used for growth comparison.'}}, 'description': 'Output for the sm_get_insights_advanced tool. Failure payloads arrive in the same envelope as { error, code }.', 'additionalProperties': True}
sm_get_insights_basic
Get basic insights
Get headline campaign and audience performance for a project: per-campaign performance table, single-campaign detail, list overview, engagement and send-volume trends, subscriber-growth series, and period-over-period averages. Start here for "how are we doing". Excludes engagement distribution, tag and segment summaries, growth baseline/churn decomposition and campaign consistency — use sm_get_insights_advanced for those. Excludes campaign fatigue, subject-line keywords, send-time heatmap, monthly trend and audience health — use sm_get_insights_expert. For the member-composition view (status, rating, rep and language counts) use sm_get_member_overview, and for signup cohorts, churn and retention use sm_get_member_growth; the list overview and subscriber-growth series here are Mailchimp-list and audience-trend views, not member-level lifecycle. All three insight tiers also return campaign averages, previous-period averages, audience summary and auto-generated insights.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['projectId'], 'properties': {'search': {'type': 'string', 'maxLength': 200, 'description': 'Filter the campaigns table section by a case-insensitive partial match on text or subject line. Note: this does not narrow the aggregate stats.'}, 'endDate': {'type': 'string', 'description': "Inclusive ISO-8601 calendar date (UTC) upper bound for the time range in YYYY-MM-DD format. Omit to leave the end of the time window unbounded or use the endpoint's default."}, 'projectId': {'type': 'string', 'minLength': 1, 'description': 'Required. The opaque alphanumeric project identifier of 8 or more characters to scope this request to. Call GET /_api/public/v1/enterprise/projects to list the project IDs available to your API key. Omitting it returns 400 VALIDATION_ERROR.'}, 'startDate': {'type': 'string', 'description': 'Inclusive ISO-8601 calendar date (UTC) lower bound for the time range in YYYY-MM-DD format. Omit to leave the start of the time window unbounded.'}, 'campaignId': {'type': 'string', 'pattern': '^[a-zA-Z0-9_-]+$', 'description': 'The opaque string identifier for the campaign as assigned by Mailchimp. List campaigns to obtain this ID. If the ID is invalid or does not exist in the project, the endpoint will return a 404 error.'}, 'maxSendVolume': {'type': 'integer', 'minimum': 0, 'description': 'Maximum number of emails sent to include a campaign in the insights aggregations. Omit to impose no upper bound.'}, 'minSendVolume': {'type': 'integer', 'minimum': 0, 'description': 'Minimum number of emails sent to include a campaign in the insights aggregations. Omit to use the system default threshold.'}, 'campaignSortBy': {'enum': ['subject_line', 'send_time', 'emails_sent', 'open_rate', 'click_rate'], 'type': 'string', 'default': 'send_time', 'description': 'The field used to order the campaigns table within the insights payload. Defaults to sorting by send time.'}, 'campaignSortDirection': {'enum': ['asc', 'desc'], 'type': 'string', 'default': 'desc', 'description': 'The direction to sort the campaigns table within the insights payload. Can be \'asc\' for ascending or \'desc\' for descending. Defaults to "desc" when omitted.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'code': {'type': 'string', 'description': 'A machine-readable identifier for the error type. For the full code taxonomy, see the sm_get_schema tool or the Enterprise API OpenAPI ErrorResponse component.'}, 'error': {'type': 'string', 'description': 'A human-readable error message detailing what went wrong.'}, 'insights': {'type': 'array', 'items': {'type': 'object', 'properties': {'title': {'type': 'string', 'description': 'Insight title.'}, 'sentiment': {'type': 'string', 'description': 'one of positive/negative/neutral'}, 'campaignId': {'type': ['string', 'null'], 'description': 'only emitted by the top-campaign insights'}, 'description': {'type': 'string', 'description': 'Insight explanation.'}}, 'description': 'Automatically generated contextual insights.', 'additionalProperties': True}, 'description': 'Auto-generated insight objects pairing a title with a descriptive sentence.'}, 'projectId': {'type': 'string', 'description': 'An opaque alphanumeric project identifier of 8 or more characters identifying a Space Monkey Project. Treat this value as entirely opaque; do not parse, sequentialize, or auto-generate it.'}, 'listOverview': {'type': 'array', 'items': {'type': 'object', 'properties': {'name': {'type': 'string', 'description': 'Audience name.'}, 'openRate': {'type': ['number', 'null'], 'description': 'Unique opens divided by delivered, as a percentage from 0 to 100.'}, 'clickRate': {'type': ['number', 'null'], 'description': 'Unique clicks divided by delivered, as a percentage from 0 to 100.'}, 'memberCount': {'type': 'integer', 'description': 'Members in the audience.'}, 'cleanedCount': {'type': 'integer', 'description': 'Cleaned members in the audience.'}, 'unsubscribeCount': {'type': 'integer', 'description': 'Unsubscribed members in the audience.'}}, 'description': 'Top-level overview of an audience list.', 'additionalProperties': True}, 'description': 'Per-list overview: one row per Mailchimp audience with size and health metrics.'}, 'campaignTotal': {'type': 'integer', 'description': 'Total campaigns in the period.'}, 'campaignDetail': {'type': 'object', 'properties': {'listName': {'type': 'string', 'description': 'Audience name.'}, 'openRate': {'type': 'number', 'description': 'Open rate (0-100).'}, 'sendTime': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'clickRate': {'type': 'number', 'description': 'Click rate (0-100).'}, 'delivered': {'type': 'integer', 'description': 'Emails delivered.'}, 'bounceRate': {'type': 'number', 'description': 'Bounce rate (0-100).'}, 'campaignId': {'type': 'string', 'description': 'Campaign identifier.'}, 'emailsSent': {'type': 'integer', 'description': 'Emails sent.'}, 'totalOpens': {'type': 'integer', 'description': 'Total open events.'}, 'hardBounces': {'type': 'integer', 'description': 'Hard bounces.'}, 'previewText': {'type': 'string', 'description': 'Preview text.'}, 'softBounces': {'type': 'integer', 'description': 'Soft bounces.'}, 'subjectLine': {'type': 'string', 'description': 'Campaign subject line.'}, 'totalClicks': {'type': 'integer', 'description': 'Total click events.'}, 'uniqueOpens': {'type': 'integer', 'description': 'Distinct openers.'}, 'abuseReports': {'type': 'integer', 'description': 'Abuse reports.'}, 'campaignType': {'type': 'string', 'description': 'Mailchimp campaign type.'}, 'deliveryRate': {'type': 'number', 'description': 'Delivery rate (0-100).'}, 'uniqueClicks': {'type': 'integer', 'description': 'Distinct clickers.'}, 'unsubscribes': {'type': 'integer', 'description': 'Unsubscribes.'}, 'forwardsCount': {'type': 'integer', 'description': 'Number of forward events. Forwards are not a working metric and must never be used to rank, recommend, or brief.'}, 'clickToOpenRate': {'type': 'number', 'description': 'Click-to-open rate (0-100).'}}, 'description': 'Comprehensive details for a single campaign. May be null.', 'additionalProperties': True}, 'audienceSummary': {'type': 'array', 'items': {'type': 'object', 'properties': {'status': {'type': 'string', 'description': 'Subscription status.'}, 'memberCount': {'type': 'integer', 'description': 'Members in the status.'}}, 'description': 'Audience status summary counts.', 'additionalProperties': True}, 'description': 'Current audience status rollup: one row per member status with the member count.'}, 'engagementTrend': {'type': 'array', 'items': {'type': 'object', 'properties': {'month': {'type': 'string', 'description': 'YYYY-MM bucket, never reformat'}, 'avgOpenRate': {'type': ['number', 'null'], 'description': 'Mean open rate across the campaigns in the enclosing summary.'}, 'avgClickRate': {'type': ['number', 'null'], 'description': 'Mean click rate across the campaigns in the enclosing summary.'}, 'campaignCount': {'type': 'integer', 'description': 'Campaigns in the month.'}}, 'description': 'Monthly engagement trend data.', 'additionalProperties': True}, 'description': 'Month-over-month engagement trend rows.'}, 'sendVolumeTrend': {'type': 'array', 'items': {'type': 'object', 'properties': {'month': {'type': 'string', 'description': 'Year-month for the row.'}, 'campaignCount': {'type': 'integer', 'description': 'Campaigns sent in the month.'}, 'totalEmailsSent': {'type': 'integer', 'description': 'Emails sent in the month.'}}, 'description': 'Monthly send volume trend data.', 'additionalProperties': True}, 'description': 'Month-over-month send volume rows.'}, 'campaignAverages': {'type': 'array', 'items': {'type': 'object', 'properties': {'totalOpens': {'type': ['integer', 'null'], 'description': 'Total open events, counting repeat opens by the same member.'}, 'avgOpenRate': {'type': ['number', 'null'], 'description': 'Mean open rate across the campaigns in the enclosing summary.'}, 'totalClicks': {'type': ['integer', 'null'], 'description': 'Total click events, counting repeat clicks.'}, 'avgClickRate': {'type': ['number', 'null'], 'description': 'Mean click rate across the campaigns in the enclosing summary.'}, 'totalBounces': {'type': ['integer', 'null'], 'description': 'Hard plus soft bounces.'}, 'avgBounceRate': {'type': ['number', 'null'], 'description': 'Mean bounce rate across the campaigns in the enclosing summary.'}, 'avgEmailsSent': {'type': ['number', 'null'], 'description': 'Mean emails sent per campaign in the enclosing summary.'}, 'totalForwards': {'type': ['integer', 'null'], 'description': 'Total forward events across the campaigns in the enclosing summary. Forwards are not a working metric and must never be used to rank, recommend, or brief.'}, 'totalCampaigns': {'type': 'integer', 'description': 'Total number of campaigns the enclosing summary covers.'}, 'avgDeliveryRate': {'type': ['number', 'null'], 'description': 'Mean delivery rate across the campaigns in the enclosing summary.'}, 'totalEmailsSent': {'type': ['integer', 'null'], 'description': 'Total emails sent across the campaigns in the enclosing summary.'}, 'totalHardBounces': {'type': ['integer', 'null'], 'description': 'Total permanent bounce events across the campaigns in the enclosing summary.'}, 'totalSoftBounces': {'type': ['integer', 'null'], 'description': 'Total temporary bounce events across the campaigns in the enclosing summary.'}, 'totalAbuseReports': {'type': ['integer', 'null'], 'description': 'Total abuse reports across the campaigns in the enclosing summary.'}, 'totalUnsubscribes': {'type': ['integer', 'null'], 'description': 'Total unsubscribe events across the campaigns in the enclosing summary.'}, 'avgClickToOpenRate': {'type': ['number', 'null'], 'description': 'Mean click-to-open rate across the campaigns in the enclosing summary.'}}, 'description': 'Aggregated averages and totals across campaigns.', 'additionalProperties': True}, 'description': 'Single summary row of aggregate campaign metrics for the current period.'}, 'subscriberGrowth': {'type': 'array', 'items': {'type': 'object', 'properties': {'status': {'type': 'string', 'description': 'Subscription status.'}, 'optDate': {'type': 'string', 'description': 'A BigQuery DATE, not a timestamp'}, 'memberCount': {'type': 'integer', 'description': 'Members in the status.'}}, 'description': 'Subscriber growth over time.', 'additionalProperties': True}, 'description': 'Audience growth rows over time, bucketed by member status.'}, 'computedThreshold': {'type': ['number', 'null'], 'description': 'Threshold value computed for the current analysis, or null when not applicable.'}, 'campaignPerformance': {'type': 'array', 'items': {'type': 'object', 'properties': {'openRate': {'type': ['number', 'null'], 'description': 'Unique opens divided by delivered, as a percentage from 0 to 100.'}, 'sendTime': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'clickRate': {'type': ['number', 'null'], 'description': 'Unique clicks divided by delivered, as a percentage from 0 to 100.'}, 'bounceRate': {'type': ['number', 'null'], 'description': 'Bounces divided by emails sent, as a percentage from 0 to 100.'}, 'campaignId': {'type': 'string', 'description': 'Campaign identifier.'}, 'deliveries': {'type': 'integer', 'description': 'Number of emails accepted for delivery by the receiving mail system.'}, 'emailsSent': {'type': 'integer', 'description': 'Number of emails the campaign attempted to send to recipients.'}, 'opensTotal': {'type': 'integer', 'description': 'Total open events, counting repeat opens by the same member.'}, 'clicksTotal': {'type': 'integer', 'description': 'Total click events, counting repeat clicks.'}, 'subjectLine': {'type': 'string', 'description': 'Campaign subject line.'}, 'uniqueOpens': {'type': 'integer', 'description': 'Number of distinct members who opened at least once.'}, 'deliveryRate': {'type': ['number', 'null'], 'description': 'Delivered divided by emails sent, as a percentage from 0 to 100.'}, 'totalBounces': {'type': 'integer', 'description': 'Hard plus soft bounces.'}, 'uniqueClicks': {'type': 'integer', 'description': 'Number of distinct members who clicked at least once.'}, 'unsubscribed': {'type': 'integer', 'description': 'Recipients who unsubscribed, when the enclosing row is per-campaign.'}, 'clickToOpenRate': {'type': ['number', 'null'], 'description': 'Unique clicks divided by unique opens, as a percentage from 0 to 100.'}, 'unsubscribeRate': {'type': ['number', 'null'], 'description': 'Unsubscribes divided by delivered, as a percentage from 0 to 100.'}}, 'description': 'Detailed performance for individual campaigns.', 'additionalProperties': True}, 'description': 'Per-campaign performance rows for the period, with send, open, click, bounce and unsubscribe metrics.'}, 'previousPeriodAverages': {'type': 'array', 'items': {'type': 'object', 'properties': {'totalOpens': {'type': ['integer', 'null'], 'description': 'Total open events, counting repeat opens by the same member.'}, 'avgOpenRate': {'type': ['number', 'null'], 'description': 'Mean open rate across the campaigns in the enclosing summary.'}, 'totalClicks': {'type': ['integer', 'null'], 'description': 'Total click events, counting repeat clicks.'}, 'avgClickRate': {'type': ['number', 'null'], 'description': 'Mean click rate across the campaigns in the enclosing summary.'}, 'totalBounces': {'type': ['integer', 'null'], 'description': 'Hard plus soft bounces.'}, 'avgBounceRate': {'type': ['number', 'null'], 'description': 'Mean bounce rate across the campaigns in the enclosing summary.'}, 'avgEmailsSent': {'type': ['number', 'null'], 'description': 'Mean emails sent per campaign in the enclosing summary.'}, 'totalForwards': {'type': ['integer', 'null'], 'description': 'Total forward events across the campaigns in the enclosing summary. Forwards are not a working metric and must never be used to rank, recommend, or brief.'}, 'totalCampaigns': {'type': 'integer', 'description': 'Total number of campaigns the enclosing summary covers.'}, 'avgDeliveryRate': {'type': ['number', 'null'], 'description': 'Mean delivery rate across the campaigns in the enclosing summary.'}, 'totalEmailsSent': {'type': ['integer', 'null'], 'description': 'Total emails sent across the campaigns in the enclosing summary.'}, 'totalHardBounces': {'type': ['integer', 'null'], 'description': 'Total permanent bounce events across the campaigns in the enclosing summary.'}, 'totalSoftBounces': {'type': ['integer', 'null'], 'description': 'Total temporary bounce events across the campaigns in the enclosing summary.'}, 'totalAbuseReports': {'type': ['integer', 'null'], 'description': 'Total abuse reports across the campaigns in the enclosing summary.'}, 'totalUnsubscribes': {'type': ['integer', 'null'], 'description': 'Total unsubscribe events across the campaigns in the enclosing summary.'}, 'avgClickToOpenRate': {'type': ['number', 'null'], 'description': 'Mean click-to-open rate across the campaigns in the enclosing summary.'}}, 'description': 'Aggregated averages and totals across campaigns.', 'additionalProperties': True}, 'description': 'Single summary row of aggregate campaign metrics for the prior comparison period.'}}, 'description': 'Output for the sm_get_insights_basic tool. Failure payloads arrive in the same envelope as { error, code }.', 'additionalProperties': True}
sm_get_insights_expert
Get expert insights
Get expert diagnostics explaining why performance is moving: campaign fatigue, subject-line keywords, timezone-aware send-time heatmap, monthly trend and audience health, plus engagement distribution and campaign consistency (also available from sm_get_insights_advanced). Use only after basic or advanced have established what changed. Excludes the per-campaign performance table, single-campaign detail, list overview and the engagement and send-volume trends — use sm_get_insights_basic. Excludes tag and segment summaries and the subscriber-growth series and baselines — use sm_get_insights_advanced. All three insight tiers also return campaign averages, previous-period averages, audience summary and auto-generated insights.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['projectId'], 'properties': {'endDate': {'type': 'string', 'description': "Inclusive ISO-8601 calendar date (UTC) upper bound for the time range in YYYY-MM-DD format. Omit to leave the end of the time window unbounded or use the endpoint's default."}, 'projectId': {'type': 'string', 'minLength': 1, 'description': 'Required. The opaque alphanumeric project identifier of 8 or more characters to scope this request to. Call GET /_api/public/v1/enterprise/projects to list the project IDs available to your API key. Omitting it returns 400 VALIDATION_ERROR.'}, 'startDate': {'type': 'string', 'description': 'Inclusive ISO-8601 calendar date (UTC) lower bound for the time range in YYYY-MM-DD format. Omit to leave the start of the time window unbounded.'}, 'campaignId': {'type': 'string', 'pattern': '^[a-zA-Z0-9_-]+$', 'description': 'The opaque string identifier for the campaign as assigned by Mailchimp. List campaigns to obtain this ID. If the ID is invalid or does not exist in the project, the endpoint will return a 404 error.'}, 'maxSendVolume': {'type': 'integer', 'minimum': 0, 'description': 'Maximum number of emails sent to include a campaign in the insights aggregations. Omit to impose no upper bound.'}, 'minSendVolume': {'type': 'integer', 'minimum': 0, 'description': 'Minimum number of emails sent to include a campaign in the insights aggregations. Omit to use the system default threshold.'}, 'heatmapTimezone': {'type': 'string', 'description': "The valid IANA timezone string (e.g. 'America/New_York') used to align the send-time heatmap distribution. Omit to use UTC."}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'code': {'type': 'string', 'description': 'A machine-readable identifier for the error type. For the full code taxonomy, see the sm_get_schema tool or the Enterprise API OpenAPI ErrorResponse component.'}, 'error': {'type': 'string', 'description': 'A human-readable error message detailing what went wrong.'}, 'insights': {'type': 'array', 'items': {'type': 'object', 'properties': {'title': {'type': 'string', 'description': 'Insight title.'}, 'sentiment': {'type': 'string', 'description': 'one of positive/negative/neutral'}, 'campaignId': {'type': ['string', 'null'], 'description': 'only emitted by the top-campaign insights'}, 'description': {'type': 'string', 'description': 'Insight explanation.'}}, 'description': 'Automatically generated contextual insights.', 'additionalProperties': True}, 'description': 'Auto-generated insight objects pairing a title with a descriptive sentence.'}, 'projectId': {'type': 'string', 'description': 'An opaque alphanumeric project identifier of 8 or more characters identifying a Space Monkey Project. Treat this value as entirely opaque; do not parse, sequentialize, or auto-generate it.'}, 'monthlyTrend': {'type': 'array', 'items': {'type': 'object', 'properties': {'avgOpenRate': {'type': ['number', 'null'], 'description': 'Mean open rate in the period.'}, 'yearQuarter': {'type': 'string', 'description': 'Year-quarter for the row.'}, 'avgClickRate': {'type': ['number', 'null'], 'description': 'Mean click rate in the period.'}, 'avgBounceRate': {'type': ['number', 'null'], 'description': 'Mean bounce rate in the period, or null.'}, 'campaignCount': {'type': 'integer', 'description': 'Campaigns in the period.'}, 'avgDeliveryRate': {'type': ['number', 'null'], 'description': 'Mean delivery rate in the period, or null.'}, 'totalEmailsSent': {'type': ['integer', 'null'], 'description': 'Emails sent in the period, or null.'}, 'avgClickToOpenRate': {'type': ['number', 'null'], 'description': 'Mean click-to-open rate in the period.'}}, 'description': 'Quarterly trend data. Note this backs the response property named `monthlyTrend` even though the data is quarterly.', 'additionalProperties': True}, 'description': 'Per-quarter (or month) trend rows for the diagnostic period.'}, 'audienceHealth': {'type': 'array', 'items': {'type': 'object', 'properties': {'cleanedCount': {'type': 'integer', 'description': 'Cleaned members.'}, 'totalMembers': {'type': 'integer', 'description': 'Total members.'}, 'avgMemberRating': {'type': ['number', 'null'], 'description': 'Mean member rating.'}, 'subscribedCount': {'type': 'integer', 'description': 'Subscribed members.'}, 'unsubscribedCount': {'type': 'integer', 'description': 'Unsubscribed members.'}, 'lowEngagementCount': {'type': 'integer', 'description': 'Low-engagement members.'}, 'highEngagementCount': {'type': 'integer', 'description': 'High-engagement members.'}}, 'description': 'Key metrics denoting overall audience health.', 'additionalProperties': True}, 'description': 'Audience health rows with member counts by status and engagement band.'}, 'audienceSummary': {'type': 'array', 'items': {'type': 'object', 'properties': {'status': {'type': 'string', 'description': 'Subscription status.'}, 'memberCount': {'type': 'integer', 'description': 'Members in the status.'}}, 'description': 'Audience status summary counts.', 'additionalProperties': True}, 'description': 'Current audience status rollup: one row per member status with the member count.'}, 'campaignFatigue': {'type': 'array', 'items': {'type': 'object', 'properties': {'quarter': {'type': 'string', 'description': 'YYYY-QN format'}, 'avgOpenRate': {'type': ['number', 'null'], 'description': 'Mean open rate in the bucket.'}, 'avgClickRate': {'type': ['number', 'null'], 'description': 'Mean click rate in the bucket.'}, 'avgEmailsSent': {'type': ['number', 'null'], 'description': 'Mean emails sent in the bucket.'}, 'campaignCount': {'type': 'integer', 'description': 'Campaigns in the frequency bucket.'}, 'avgClickToOpenRate': {'type': ['number', 'null'], 'description': 'Mean click-to-open rate in the bucket.'}}, 'description': 'Analysis of engagement fatigue over quarters.', 'additionalProperties': True}, 'description': 'Per-frequency bucket showing how engagement moves as send frequency changes.'}, 'sendTimeHeatmap': {'type': 'array', 'items': {'type': 'object', 'properties': {'dayOfWeek': {'type': 'integer', 'description': '1-7 BigQuery DAYOFWEEK'}, 'hourOfDay': {'type': 'integer', 'description': '0-23'}, 'avgOpenRate': {'type': ['number', 'null'], 'description': 'Mean open rate in the bucket.'}, 'avgClickRate': {'type': ['number', 'null'], 'description': 'Mean click rate in the bucket.'}, 'campaignCount': {'type': 'integer', 'description': 'Campaigns in the bucket.'}}, 'description': 'Engagement heatmap mapping by day and hour.', 'additionalProperties': True}, 'description': 'Send-time heatmap rows bucketed by day of week and hour.'}, 'campaignAverages': {'type': 'array', 'items': {'type': 'object', 'properties': {'totalOpens': {'type': ['integer', 'null'], 'description': 'Total open events, counting repeat opens by the same member.'}, 'avgOpenRate': {'type': ['number', 'null'], 'description': 'Mean open rate across the campaigns in the enclosing summary.'}, 'totalClicks': {'type': ['integer', 'null'], 'description': 'Total click events, counting repeat clicks.'}, 'avgClickRate': {'type': ['number', 'null'], 'description': 'Mean click rate across the campaigns in the enclosing summary.'}, 'totalBounces': {'type': ['integer', 'null'], 'description': 'Hard plus soft bounces.'}, 'avgBounceRate': {'type': ['number', 'null'], 'description': 'Mean bounce rate across the campaigns in the enclosing summary.'}, 'avgEmailsSent': {'type': ['number', 'null'], 'description': 'Mean emails sent per campaign in the enclosing summary.'}, 'totalForwards': {'type': ['integer', 'null'], 'description': 'Total forward events across the campaigns in the enclosing summary. Forwards are not a working metric and must never be used to rank, recommend, or brief.'}, 'totalCampaigns': {'type': 'integer', 'description': 'Total number of campaigns the enclosing summary covers.'}, 'avgDeliveryRate': {'type': ['number', 'null'], 'description': 'Mean delivery rate across the campaigns in the enclosing summary.'}, 'totalEmailsSent': {'type': ['integer', 'null'], 'description': 'Total emails sent across the campaigns in the enclosing summary.'}, 'totalHardBounces': {'type': ['integer', 'null'], 'description': 'Total permanent bounce events across the campaigns in the enclosing summary.'}, 'totalSoftBounces': {'type': ['integer', 'null'], 'description': 'Total temporary bounce events across the campaigns in the enclosing summary.'}, 'totalAbuseReports': {'type': ['integer', 'null'], 'description': 'Total abuse reports across the campaigns in the enclosing summary.'}, 'totalUnsubscribes': {'type': ['integer', 'null'], 'description': 'Total unsubscribe events across the campaigns in the enclosing summary.'}, 'avgClickToOpenRate': {'type': ['number', 'null'], 'description': 'Mean click-to-open rate across the campaigns in the enclosing summary.'}}, 'description': 'Aggregated averages and totals across campaigns.', 'additionalProperties': True}, 'description': 'Single summary row of aggregate campaign metrics for the current period.'}, 'sendTimeInsights': {'type': 'array', 'items': {'type': 'object', 'properties': {'title': {'type': 'string', 'description': 'Send-time insight title.'}, 'sentiment': {'type': 'string', 'description': 'one of positive/negative/neutral'}, 'campaignId': {'type': ['string', 'null'], 'description': 'only emitted by the top-campaign insights'}, 'description': {'type': 'string', 'description': 'Send-time insight explanation.'}}, 'description': 'Automatically generated contextual insights.', 'additionalProperties': True}, 'description': 'Auto-generated send-time insight objects.'}, 'campaignConsistency': {'type': 'object', 'properties': {'maxOpenRate': {'type': ['number', 'null'], 'description': 'Highest open rate.'}, 'minOpenRate': {'type': ['number', 'null'], 'description': 'Lowest open rate.'}, 'maxClickRate': {'type': ['number', 'null'], 'description': 'Highest click rate.'}, 'minClickRate': {'type': ['number', 'null'], 'description': 'Lowest click rate.'}, 'medianOpenRate': {'type': ['number', 'null'], 'description': 'Median open rate.'}, 'openRateStddev': {'type': ['number', 'null'], 'description': 'Open-rate standard deviation.'}, 'clickRateStddev': {'type': ['number', 'null'], 'description': 'Click-rate standard deviation.'}, 'medianClickRate': {'type': ['number', 'null'], 'description': 'Median click rate.'}}, 'description': 'Statistical consistency metrics for campaign performance. May be null.', 'additionalProperties': True}, 'subjectLineKeywords': {'type': 'array', 'items': {'type': 'object', 'properties': {'keyword': {'type': 'string', 'description': 'Keyword analyzed in subject lines.'}, 'avgOpenRate': {'type': ['number', 'null'], 'description': 'Mean open rate for the keyword.'}, 'avgClickRate': {'type': ['number', 'null'], 'description': 'Mean click rate for the keyword.'}, 'campaignCount': {'type': 'integer', 'description': 'Campaigns containing the keyword.'}}, 'description': 'Performance metrics grouped by subject line keywords.', 'additionalProperties': True}, 'description': 'Subject-line keyword rows with impact on open and click rate.'}, 'engagementDistribution': {'type': 'array', 'items': {'type': 'object', 'properties': {'syncedAt': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'memberCount': {'type': 'integer', 'description': 'Members in the bucket.'}, 'memberRating': {'type': ['integer', 'null'], 'description': 'Engagement rating bucket, or null.'}}, 'description': 'Breakdown of members by engagement rating.', 'additionalProperties': True}, 'description': 'Members bucketed by engagement rating.'}, 'previousPeriodAverages': {'type': 'array', 'items': {'type': 'object', 'properties': {'totalOpens': {'type': ['integer', 'null'], 'description': 'Total open events, counting repeat opens by the same member.'}, 'avgOpenRate': {'type': ['number', 'null'], 'description': 'Mean open rate across the campaigns in the enclosing summary.'}, 'totalClicks': {'type': ['integer', 'null'], 'description': 'Total click events, counting repeat clicks.'}, 'avgClickRate': {'type': ['number', 'null'], 'description': 'Mean click rate across the campaigns in the enclosing summary.'}, 'totalBounces': {'type': ['integer', 'null'], 'description': 'Hard plus soft bounces.'}, 'avgBounceRate': {'type': ['number', 'null'], 'description': 'Mean bounce rate across the campaigns in the enclosing summary.'}, 'avgEmailsSent': {'type': ['number', 'null'], 'description': 'Mean emails sent per campaign in the enclosing summary.'}, 'totalForwards': {'type': ['integer', 'null'], 'description': 'Total forward events across the campaigns in the enclosing summary. Forwards are not a working metric and must never be used to rank, recommend, or brief.'}, 'totalCampaigns': {'type': 'integer', 'description': 'Total number of campaigns the enclosing summary covers.'}, 'avgDeliveryRate': {'type': ['number', 'null'], 'description': 'Mean delivery rate across the campaigns in the enclosing summary.'}, 'totalEmailsSent': {'type': ['integer', 'null'], 'description': 'Total emails sent across the campaigns in the enclosing summary.'}, 'totalHardBounces': {'type': ['integer', 'null'], 'description': 'Total permanent bounce events across the campaigns in the enclosing summary.'}, 'totalSoftBounces': {'type': ['integer', 'null'], 'description': 'Total temporary bounce events across the campaigns in the enclosing summary.'}, 'totalAbuseReports': {'type': ['integer', 'null'], 'description': 'Total abuse reports across the campaigns in the enclosing summary.'}, 'totalUnsubscribes': {'type': ['integer', 'null'], 'description': 'Total unsubscribe events across the campaigns in the enclosing summary.'}, 'avgClickToOpenRate': {'type': ['number', 'null'], 'description': 'Mean click-to-open rate across the campaigns in the enclosing summary.'}}, 'description': 'Aggregated averages and totals across campaigns.', 'additionalProperties': True}, 'description': 'Single summary row of aggregate campaign metrics for the prior comparison period.'}}, 'description': 'Output for the sm_get_insights_expert tool. Failure payloads arrive in the same envelope as { error, code }.', 'additionalProperties': True}
sm_get_knowledge
Get analyst knowledge
Returns Space Monkey's MCP knowledge documents (analyst preamble, metric guardrails, live OpenAPI schema URL) as tool output for clients that cannot read MCP resources — read this before interpreting any Space Monkey metrics.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': [], 'properties': {'topic': {'enum': ['analyst-preamble', 'metric-guardrails', 'openapi', 'faq'], 'type': 'string', 'description': 'Optional short topic selector to fetch a single knowledge document (one of: analyst-preamble, metric-guardrails, openapi, faq). Omit this parameter to receive a compact topic index.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'uri': {'type': 'string', 'description': 'MCP resource URI for the knowledge document or topic.'}, 'code': {'type': 'string', 'description': 'A machine-readable identifier for the error type. For the full code taxonomy, see the sm_get_schema tool or the Enterprise API OpenAPI ErrorResponse component.'}, 'text': {'type': 'string', 'description': 'Full rendered text of the enclosing document or prompt.'}, 'error': {'type': 'string', 'description': 'A human-readable error message detailing what went wrong.'}, 'title': {'type': 'string', 'description': 'Human-readable title for the enclosing item.'}, 'topic': {'type': ['string', 'null'], 'description': 'Topic key, or null when the request did not match a single topic.'}, 'topics': {'type': 'array', 'items': {'type': 'object', 'properties': {'uri': {'type': 'string', 'description': 'Resource URI for the topic.'}, 'name': {'type': 'string', 'description': 'Topic name.'}, 'title': {'type': 'string', 'description': 'Topic title.'}, 'topic': {'type': 'string', 'description': 'Topic key.'}, 'description': {'type': 'string', 'description': 'Topic description.'}}, 'additionalProperties': True}, 'description': 'Available knowledge topics.'}, 'version': {'type': 'string', 'description': 'Version string for the enclosing catalog or document.'}, 'description': {'type': 'string', 'description': 'Human-readable description of the enclosing item.'}, 'lastUpdated': {'type': 'string', 'description': 'ISO 8601 instant'}}, 'description': 'Knowledge document(s) with version and lastUpdated metadata. Failure payloads arrive in the same envelope as { error, code }.', 'additionalProperties': True}
sm_get_member
Get member profile
Load one member's full profile — title, company, tags, clicked URLs, engagement percentile, at-risk state and bot detection. Use for pre-call briefs and to enrich a shortlist.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['projectId', 'subscriberHash'], 'properties': {'projectId': {'type': 'string', 'minLength': 1, 'description': 'Required. The opaque alphanumeric project identifier of 8 or more characters to scope this request to. Call GET /_api/public/v1/enterprise/projects to list the project IDs available to your API key. Omitting it returns 400 VALIDATION_ERROR.'}, 'subscriberHash': {'type': 'string', 'pattern': '^[0-9a-f]{32}$', 'description': "The member's Mailchimp-style lowercase MD5 subscriber hash (canonical member key)."}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'code': {'type': 'string', 'description': 'A machine-readable identifier for the error type. For the full code taxonomy, see the sm_get_schema tool or the Enterprise API OpenAPI ErrorResponse component.'}, 'error': {'type': 'string', 'description': 'A human-readable error message detailing what went wrong.'}, 'projectId': {'type': 'string', 'description': 'An opaque alphanumeric project identifier of 8 or more characters identifying a Space Monkey Project. Treat this value as entirely opaque; do not parse, sequentialize, or auto-generate it.'}, 'clickedUrls': {'type': 'array', 'items': {'type': 'object', 'properties': {'url': {'type': 'string', 'description': 'The clicked or referenced URL, or null when absent.'}, 'clickCount': {'type': 'integer', 'description': 'Number of times the member clicked the enclosing URL.'}}, 'description': 'URLs clicked by this specific member.', 'additionalProperties': True}, 'description': 'URLs the member has clicked with click counts.'}, 'atRiskStatus': {'type': 'object', 'properties': {'isAtRisk': {'type': 'boolean', 'description': "True when the member's recent activity has collapsed relative to prior activity."}, 'activeActionsPrior': {'type': 'integer', 'description': 'Count of engagement actions in the prior comparison window.'}, 'activeActionsRecent': {'type': 'integer', 'description': 'Count of engagement actions in the recent comparison window.'}}, 'description': 'Evaluation of churn risk based on activity fall-off. May be null.', 'additionalProperties': True}, 'botDetection': {'type': 'object', 'properties': {'botGroupCount': {'type': 'integer', 'description': 'Number of suspected bot groups detected.'}, 'totalActivities': {'type': 'integer', 'description': 'Total tracked actions for the member.'}, 'botActivityCount': {'type': 'integer', 'description': 'Tracked actions attributed to suspected bots.'}}, 'description': 'Metrics for suspected automated bot activity. Note: this object is only present when bot activity was detected. May be null.', 'additionalProperties': True}, 'monthlyTrend': {'type': 'array', 'items': {'type': 'object', 'properties': {'month': {'type': 'string', 'description': 'YYYY-MM bucket.'}, 'opens': {'type': 'integer', 'description': 'Open-events count observed over the enclosing window.'}, 'total': {'type': 'integer', 'description': 'Combined open plus click events for the member in the month.'}, 'clicks': {'type': 'integer', 'description': 'Click-events count observed over the enclosing window.'}}, 'description': 'Member activity volume over time.', 'additionalProperties': True}, 'description': 'Per-quarter (or month) trend rows for the diagnostic period.'}, 'memberProfile': {'type': 'object', 'properties': {'vip': {'type': ['boolean', 'null'], 'description': 'True when the member is flagged VIP.'}, 'tags': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Tag rows with member counts.'}, 'state': {'type': ['string', 'null'], 'description': 'State or province string, or null when unknown.'}, 'stats': {'type': ['string', 'null'], 'description': 'Raw Mailchimp member-stats JSON as an unparsed string that the client must parse itself.'}, 'title': {'type': ['string', 'null'], 'description': "The member's job title, or null when unknown."}, 'region': {'type': ['string', 'null'], 'description': 'Region or state-level location string, or null when unknown.'}, 'status': {'type': 'string', 'description': 'Subscription status, for example subscribed, unsubscribed, cleaned, or pending.'}, 'repName': {'type': ['string', 'null'], 'description': 'Internal owner or rep assigned to the member, or null when unassigned.'}, 'language': {'type': ['string', 'null'], 'description': "The member's preferred language, or null when unknown."}, 'lastName': {'type': ['string', 'null'], 'description': "The member's last name, or null when unavailable."}, 'firstName': {'type': ['string', 'null'], 'description': "The member's first name, or null when unavailable."}, 'companyName': {'type': ['string', 'null'], 'description': 'The company associated with the member, or null when unknown.'}, 'countryCode': {'type': ['string', 'null'], 'description': 'Two-letter country code for the member, or null when unknown.'}, 'countryName': {'type': ['string', 'null'], 'description': 'Full country name for the member, or null when unknown.'}, 'lastChanged': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'businessType': {'type': ['string', 'null'], 'description': "The member's business type or category, or null when unset."}, 'dimensionOne': {'type': ['string', 'null'], 'description': 'First custom dimension value for the member, or null.'}, 'dimensionTwo': {'type': ['string', 'null'], 'description': 'Second custom dimension value for the member, or null.'}, 'emailAddress': {'type': 'string', 'description': "The member's email address."}, 'memberRating': {'type': ['integer', 'null'], 'description': 'Integer Mailchimp engagement rating for the member (1-5), or null when unrated.'}, 'timestampOpt': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'dimensionFour': {'type': ['string', 'null'], 'description': 'Fourth custom dimension value for the member, or null.'}, 'dimensionThree': {'type': ['string', 'null'], 'description': 'Third custom dimension value for the member, or null.'}, 'memberTimezone': {'type': ['string', 'null'], 'description': 'Timezone string as reported by Mailchimp for the member, or null. Passed through unvalidated and frequently wrong or missing — prefer companyName, state and email domain for locale inference.'}, 'timestampSignup': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}}, 'description': 'Core profile information for an individual member. May be null.', 'additionalProperties': True}, 'subscriberHash': {'type': 'string', 'description': "The 32-character lowercase hex MD5 hash of the member's downcased email address. This is the canonical unique identifier for members exposed across the Enterprise API, identical to Mailchimp's core behavior. The API will never expose internal synthetic BigQuery UUIDs."}, 'activityTimeline': {'type': 'array', 'items': {'type': 'object', 'properties': {'url': {'type': ['string', 'null'], 'description': 'The clicked or referenced URL, or null when absent.'}, 'timestamp': {'type': 'string', 'description': 'ISO 8601 UTC timestamp.'}, 'campaignId': {'type': ['string', 'null'], 'description': 'Stable identifier for a Mailchimp campaign. Use it to join rows across tools or drill into sm_get_campaign.'}, 'activityType': {'type': 'string', 'description': 'Kind of tracked action, for example open, click, or subscribe.'}, 'campaignTitle': {'type': ['string', 'null'], 'description': 'The human-readable title of the campaign. May be null when Mailchimp has no title set.'}}, 'description': 'Chronological list of all actions taken by a member.', 'additionalProperties': True}, 'description': "The member's raw activity events in time order."}, 'audienceAverages': {'type': 'object', 'properties': {'avgTotalOpens': {'type': 'number', 'description': 'Audience-wide mean total opens.'}, 'avgTotalClicks': {'type': 'number', 'description': 'Audience-wide mean total clicks.'}, 'avgMemberRating': {'type': 'number', 'description': 'Audience-wide mean member rating.'}, 'avgEngagementScore': {'type': 'number', 'description': 'Audience-wide mean engagement score.'}}, 'description': 'Comparative audience averages for context against an individual member. May be null.', 'additionalProperties': True}, 'engagementByHour': {'type': 'array', 'items': {'type': 'object', 'properties': {'dayOfWeek': {'type': 'integer', 'description': '1-7, BigQuery DAYOFWEEK.'}, 'hourOfDay': {'type': 'integer', 'description': '0-23.'}, 'activityCount': {'type': 'integer', 'description': 'Number of tracked actions in the enclosing bucket.'}}, 'description': 'Activity heatmap buckets for an individual member.', 'additionalProperties': True}, 'description': "Member's tracked actions bucketed by hour."}, 'campaignResponses': {'type': 'array', 'items': {'type': 'object', 'properties': {'didOpen': {'type': 'boolean', 'description': 'True when the member opened this campaign.'}, 'didClick': {'type': 'boolean', 'description': 'True when the member clicked in this campaign.'}, 'sendTime': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'campaignId': {'type': 'string', 'description': 'Stable identifier for a Mailchimp campaign. Use it to join rows across tools or drill into sm_get_campaign.'}, 'emailsSent': {'type': 'integer', 'description': 'Number of emails the campaign attempted to send to recipients.'}, 'subjectLine': {'type': ['string', 'null'], 'description': 'The campaign subject line as sent.'}, 'campaignOpenRate': {'type': ['number', 'null'], 'description': 'Open rate for the specific campaign in the enclosing row.'}, 'firstOpenMinutes': {'type': ['integer', 'null'], 'description': "Minutes between send and the member's first open, or null when never opened."}, 'campaignClickRate': {'type': ['number', 'null'], 'description': 'Click rate for the specific campaign in the enclosing row.'}}, 'description': 'Individual member response data to a specific campaign.', 'additionalProperties': True}, 'description': 'Per-campaign response rows for this member.'}, 'engagementProfile': {'type': 'object', 'properties': {'isLeader': {'type': 'boolean', 'description': 'True when the member qualifies as a leader by engagement.'}, 'totalOpens': {'type': 'integer', 'description': 'Total open events, counting repeat opens by the same member.'}, 'totalClicks': {'type': 'integer', 'description': 'Total click events, counting repeat clicks.'}, 'memberRating': {'type': ['integer', 'null'], 'description': 'Integer engagement rating for the member, or null.'}, 'engagementRank': {'type': ['integer', 'null'], 'description': 'Ordinal rank of the member by engagement, or null.'}, 'lastActivityAt': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'engagementScore': {'type': 'number', 'description': 'Composite engagement score for the member or cohort. Note: Leader rows use a 0-100 percentile, while at-risk rows use a raw time-decayed score that can be negative.'}, 'engagementPercentile': {'type': 'number', 'description': '0-1 scale.'}, 'leaderEngagementRank': {'type': ['integer', 'null'], 'description': 'Null for non-leaders via LEFT JOIN.'}}, 'description': 'Calculated overall engagement statistics for an individual member. May be null.', 'additionalProperties': True}, 'campaignConsistency': {'type': 'object', 'properties': {'totalCampaigns': {'type': 'integer', 'description': 'Total campaigns in the comparison window.'}, 'avgCampaignsEngaged': {'type': 'number', 'description': 'Average campaigns engaged with across the audience.'}, 'memberCampaignsEngaged': {'type': 'integer', 'description': 'Campaigns this member engaged with.'}}, 'description': 'How consistently this member engages compared to standard. May be null.', 'additionalProperties': True}}, 'description': 'Output for the sm_get_member tool. Failure payloads arrive in the same envelope as { error, code }.', 'additionalProperties': True}
sm_get_member_campaigns
Get member campaign responses
List the individual campaigns one member received, opened or clicked. This email-level drill-down is often empty even for highly engaged members, so always keep a fallback. For the inverse view — the members who responded to one campaign — use sm_list_campaign_responders.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['projectId', 'subscriberHash'], 'properties': {'cursor': {'type': 'string', 'description': 'Opaque keyset pagination cursor returned as `nextCursor` by the previous page. Must be replayed with identical query filters.'}, 'dateTo': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': "Inclusive ISO-8601 calendar date (UTC) upper bound for the time range in YYYY-MM-DD format. Omit to leave the end of the time window unbounded or use the endpoint's default."}, 'sortBy': {'enum': ['subject_line', 'send_time', 'did_open', 'did_click', 'first_open_minutes', 'first_click_minutes', 'campaign_open_rate', 'campaign_click_rate'], 'type': 'string', 'default': 'send_time', 'description': 'The field used to order the member campaigns list. Defaults to the send time of the campaign.'}, 'sortDir': {'enum': ['asc', 'desc'], 'type': 'string', 'default': 'desc', 'description': 'The direction to sort the campaign results. Can be \'asc\' for ascending or \'desc\' for descending. Defaults to "desc" when omitted.'}, 'dateFrom': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Inclusive ISO-8601 calendar date (UTC) lower bound for the time range in YYYY-MM-DD format. Omit to leave the start of the time window unbounded.'}, 'pageSize': {'type': 'number', 'default': 100, 'maximum': 100, 'minimum': 1, 'description': "Maximum number of rows to return per page. Omit to use the default page size of 100. MCP tool calls are capped at 100 rows per page to protect the model's context window."}, 'projectId': {'type': 'string', 'minLength': 1, 'description': 'Required. The opaque alphanumeric project identifier of 8 or more characters to scope this request to. Call GET /_api/public/v1/enterprise/projects to list the project IDs available to your API key. Omitting it returns 400 VALIDATION_ERROR.'}, 'openedFilter': {'enum': ['all', 'opened', 'not_opened'], 'type': 'string', 'default': 'all', 'description': 'Filter timeline events to only those where the campaign was opened, not opened, or \'all\' to ignore open status. Defaults to "all" when omitted.'}, 'clickedFilter': {'enum': ['all', 'clicked', 'not_clicked'], 'type': 'string', 'default': 'all', 'description': 'Filter timeline events to only those where the campaign was clicked, not clicked, or \'all\' to ignore click status. Defaults to "all" when omitted.'}, 'maxTimeToOpen': {'type': 'number', 'minimum': 0, 'description': "Maximum elapsed time from the campaign send until the member's first open, in minutes. Omit to impose no upper bound."}, 'minTimeToOpen': {'type': 'number', 'minimum': 0, 'description': "Minimum elapsed time from the campaign send until the member's first open, in minutes. Omit to impose no lower bound."}, 'subjectFilter': {'type': 'string', 'description': 'Filter the timeline by a case-insensitive partial match on the campaign subject line. Omit to include all subjects.'}, 'maxTimeToClick': {'type': 'number', 'minimum': 0, 'description': "Maximum elapsed time from the campaign send until the member's first click, in minutes. Omit to impose no upper bound."}, 'minTimeToClick': {'type': 'number', 'minimum': 0, 'description': "Minimum elapsed time from the campaign send until the member's first click, in minutes. Omit to impose no lower bound."}, 'subscriberHash': {'type': 'string', 'pattern': '^[0-9a-f]{32}$', 'description': "The member's Mailchimp-style lowercase MD5 subscriber hash (canonical member key)."}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'code': {'type': 'string', 'description': 'A machine-readable identifier for the error type. For the full code taxonomy, see the sm_get_schema tool or the Enterprise API OpenAPI ErrorResponse component.'}, 'data': {'type': 'array', 'items': {'type': 'object', 'properties': {'didOpen': {'type': 'boolean', 'description': 'True when the member opened.'}, 'didClick': {'type': 'boolean', 'description': 'True when the member clicked.'}, 'sendTime': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'campaignId': {'type': 'string', 'description': 'Campaign identifier.'}, 'emailsSent': {'type': 'integer', 'description': 'Emails the campaign sent.'}, 'subjectLine': {'type': ['string', 'null'], 'description': 'Campaign subject line, or null.'}, 'campaignOpenRate': {'type': ['number', 'null'], 'description': 'Campaign open rate, or null.'}, 'firstOpenMinutes': {'type': ['integer', 'null'], 'description': 'Minutes to first open, or null.'}, 'campaignClickRate': {'type': ['number', 'null'], 'description': 'Campaign click rate, or null.'}, 'firstClickMinutes': {'type': ['integer', 'null'], 'description': 'Minutes to first click, or null.'}}, 'description': "Paginated list of a member's campaign interactions.", 'additionalProperties': True}, 'description': 'Response rows for the enclosing tool.'}, 'error': {'type': 'string', 'description': 'A human-readable error message detailing what went wrong.'}, 'hasMore': {'type': 'boolean', 'description': 'True if additional results exist beyond this page.'}, 'pageSize': {'type': 'integer', 'description': 'The maximum number of items returned in this page.'}, 'projectId': {'type': 'string', 'description': 'An opaque alphanumeric project identifier of 8 or more characters identifying a Space Monkey Project. Treat this value as entirely opaque; do not parse, sequentialize, or auto-generate it.'}, 'nextCursor': {'type': ['string', 'null'], 'description': 'A keyset cursor marking the continuation point. Contract: this value is non-null if and only if `hasMore` is true. Clients MUST echo this token verbatim on the subsequent request and MUST NEVER attempt to parse or manually construct it.'}, 'subscriberHash': {'type': 'string', 'description': "The 32-character lowercase hex MD5 hash of the member's downcased email address. This is the canonical unique identifier for members exposed across the Enterprise API, identical to Mailchimp's core behavior. The API will never expose internal synthetic BigQuery UUIDs."}}, 'description': 'Output for the sm_get_member_campaigns tool. Failure payloads arrive in the same envelope as { error, code }.', 'additionalProperties': True}
sm_get_member_geo
Get audience geography
Get the country and region distribution of a project's members. Use for territory, event and travel-planning questions. Country is inferred from the member's region where possible (US states and Canadian provinces map to US and CA) before falling back to stored country data, with unresolvable values bucketed as Unknown; regions stays null unless countryCode is passed.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['projectId'], 'properties': {'projectId': {'type': 'string', 'minLength': 1, 'description': 'Required. The opaque alphanumeric project identifier of 8 or more characters to scope this request to. Call GET /_api/public/v1/enterprise/projects to list the project IDs available to your API key. Omitting it returns 400 VALIDATION_ERROR.'}, 'countryCode': {'type': 'string', 'description': "Two-letter ISO country code to drill into, matched case-insensitively (e.g. 'US', 'CA'). Omit it and `regions` comes back null while `countries` and `allRegions` still cover the whole audience; pass it and `regions` returns that country's region breakdown."}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'code': {'type': 'string', 'description': 'A machine-readable identifier for the error type. For the full code taxonomy, see the sm_get_schema tool or the Enterprise API OpenAPI ErrorResponse component.'}, 'error': {'type': 'string', 'description': 'A human-readable error message detailing what went wrong.'}, 'regions': {'type': ['array', 'null'], 'items': {'type': 'object', 'properties': {'total': {'type': 'integer', 'description': 'Total members in the region.'}, 'region': {'type': 'string', 'description': 'Region or state-level location string, or null when unknown.'}, 'subscribed': {'type': 'integer', 'description': 'Subscribed members in the region.'}}, 'description': 'Member counts grouped by broader regional assignment.', 'additionalProperties': True}, 'description': 'Region detail for the selected country, or null when no country was narrowed.'}, 'countries': {'type': 'array', 'items': {'type': 'object', 'properties': {'total': {'type': 'integer', 'description': 'Total members in the country.'}, 'subscribed': {'type': 'integer', 'description': 'Subscribed members in the country.'}, 'countryCode': {'type': 'string', 'description': 'Two-letter country code.'}}, 'description': 'Member counts grouped by country code.', 'additionalProperties': True}, 'description': 'Per-country membership rows.'}, 'projectId': {'type': 'string', 'description': 'An opaque alphanumeric project identifier of 8 or more characters identifying a Space Monkey Project. Treat this value as entirely opaque; do not parse, sequentialize, or auto-generate it.'}, 'allRegions': {'type': 'array', 'items': {'type': 'object', 'properties': {'total': {'type': 'integer', 'description': 'Total members in the region.'}, 'region': {'type': 'string', 'description': 'Region name within the country.'}, 'subscribed': {'type': 'integer', 'description': 'Subscribed members in the region.'}, 'countryCode': {'type': 'string', 'description': 'Two-letter country code.'}}, 'description': 'Granular region-to-country groupings.', 'additionalProperties': True}, 'description': 'Per-region membership rows across all countries.'}}, 'description': 'Output for the sm_get_member_geo tool. Failure payloads arrive in the same envelope as { error, code }.', 'additionalProperties': True}
sm_get_member_growth
Get audience growth
Get signup cohorts, churn timeline and cohort retention. Use for list-growth and attrition questions. A cohortRetention row is the current status breakdown of members who signed up in that month, not retention at month N after signup; signup month falls back to last-changed or sync time when Mailchimp has no opt-in timestamp. For the audience size trend over time — subscriber counts bucketed by status month over month — use the subscriber-growth series in sm_get_insights_basic; this returns signup cohorts, churn and retention rather than a status trend.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['projectId'], 'properties': {'projectId': {'type': 'string', 'minLength': 1, 'description': 'Required. The opaque alphanumeric project identifier of 8 or more characters to scope this request to. Call GET /_api/public/v1/enterprise/projects to list the project IDs available to your API key. Omitting it returns 400 VALIDATION_ERROR.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'code': {'type': 'string', 'description': 'A machine-readable identifier for the error type. For the full code taxonomy, see the sm_get_schema tool or the Enterprise API OpenAPI ErrorResponse component.'}, 'error': {'type': 'string', 'description': 'A human-readable error message detailing what went wrong.'}, 'projectId': {'type': 'string', 'description': 'An opaque alphanumeric project identifier of 8 or more characters identifying a Space Monkey Project. Treat this value as entirely opaque; do not parse, sequentialize, or auto-generate it.'}, 'churnTimeline': {'type': 'array', 'items': {'type': 'object', 'properties': {'count': {'type': 'integer', 'description': 'Members in the status for the month.'}, 'month': {'type': 'string', 'description': 'Year-month for the row.'}, 'status': {'type': 'string', 'description': 'Subscription status.'}}, 'description': 'Churn and unsubscribes bucketed by month.', 'additionalProperties': True}, 'description': 'Churn timeline rows bucketed by month and status.'}, 'signupCohorts': {'type': 'array', 'items': {'type': 'object', 'properties': {'month': {'type': 'string', 'description': 'A `YYYY-MM` bucket, NOT a timestamp — must never be reformatted.'}, 'newSignups': {'type': 'integer', 'description': 'New signups in the cohort month.'}}, 'description': 'Signup volume bucketed by month.', 'additionalProperties': True}, 'description': 'Signup cohort rows.'}, 'cohortRetention': {'type': 'array', 'items': {'type': 'object', 'properties': {'count': {'type': 'integer', 'description': 'Members from the cohort still in the status.'}, 'status': {'type': 'string', 'description': 'Subscription status.'}, 'signupMonth': {'type': 'string', 'description': 'Signup month for the cohort.'}}, 'description': 'Retention counts relative to user signup month cohorts.', 'additionalProperties': True}, 'description': 'Cohort retention rows bucketed by signup month and status.'}}, 'description': 'Output for the sm_get_member_growth tool. Failure payloads arrive in the same envelope as { error, code }.', 'additionalProperties': True}
sm_get_member_overview
Get audience overview
Get aggregate audience composition for a project — totals plus status, rating, rep and language breakdowns. Use for a quick shape-of-the-list answer. Not paginated: totals and the status and rating breakdowns cover every member, but the language list is truncated to the top 20 and the rep and custom-dimension lists to the top 25, and the rep block is absent unless the project maps an owner merge field. For Mailchimp-list health — per-audience sizes, unsubscribe and cleaned counts, open and click rates — use the list overview in sm_get_insights_basic; this tool is the member-composition view (status, rating, rep, language) instead.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['projectId'], 'properties': {'projectId': {'type': 'string', 'minLength': 1, 'description': 'Required. The opaque alphanumeric project identifier of 8 or more characters to scope this request to. Call GET /_api/public/v1/enterprise/projects to list the project IDs available to your API key. Omitting it returns 400 VALIDATION_ERROR.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'code': {'type': 'string', 'description': 'A machine-readable identifier for the error type. For the full code taxonomy, see the sm_get_schema tool or the Enterprise API OpenAPI ErrorResponse component.'}, 'error': {'type': 'string', 'description': 'A human-readable error message detailing what went wrong.'}, 'totals': {'type': 'object', 'properties': {'total': {'type': 'integer', 'description': 'Total members in the audience.'}, 'cleaned': {'type': 'integer', 'description': 'Members in cleaned status.'}, 'vipCount': {'type': 'integer', 'description': 'Members flagged VIP.'}, 'avgRating': {'type': 'number', 'description': 'Mean member rating across the audience.'}, 'subscribed': {'type': 'integer', 'description': 'Members in subscribed status.'}, 'unsubscribed': {'type': 'integer', 'description': 'Members in unsubscribed status.'}}, 'description': 'Top-level member aggregate statistics.', 'additionalProperties': True}, 'projectId': {'type': 'string', 'description': 'An opaque alphanumeric project identifier of 8 or more characters identifying a Space Monkey Project. Treat this value as entirely opaque; do not parse, sequentialize, or auto-generate it.'}, 'repDistribution': {'type': 'array', 'items': {'type': 'object', 'properties': {'count': {'type': 'integer', 'description': 'Members assigned to the rep.'}, 'repName': {'type': 'string', 'description': 'Rep name for the row.'}}, 'description': 'Count of members grouped by rep/owner. Only populated when an owner/rep merge field is mapped, otherwise the array is empty.', 'additionalProperties': True}, 'description': 'Members bucketed by assigned rep.'}, 'statusBreakdown': {'type': 'array', 'items': {'type': 'object', 'properties': {'count': {'type': 'integer', 'description': 'Members in the status.'}, 'status': {'type': 'string', 'description': 'Subscription status for the row.'}}, 'description': 'Count of members grouped by their subscription status.', 'additionalProperties': True}, 'description': 'Members bucketed by subscription status.'}, 'ratingDistribution': {'type': 'array', 'items': {'type': 'object', 'properties': {'count': {'type': 'integer', 'description': 'Members with the rating.'}, 'rating': {'type': 'integer', 'description': 'Rating bucket.'}}, 'description': 'Count of members grouped by their Mailchimp rating (1-5).', 'additionalProperties': True}, 'description': 'Members bucketed by rating.'}, 'languageDistribution': {'type': 'array', 'items': {'type': 'object', 'properties': {'count': {'type': 'integer', 'description': 'Members in the language.'}, 'language': {'type': 'string', 'description': 'Language for the row.'}}, 'description': 'Count of members grouped by reported language.', 'additionalProperties': True}, 'description': 'Members bucketed by language.'}, 'dimensionDistributions': {'type': 'array', 'items': {'type': 'object', 'properties': {'slot': {'type': 'string', 'description': 'Dimension slot name, for example dimensionOne.'}, 'label': {'type': 'string', 'description': 'Human-readable label for the dimension slot.'}, 'values': {'type': 'array', 'items': {'type': 'object', 'properties': {'count': {'type': 'integer', 'description': 'Members with the dimension value.'}, 'value': {'type': 'string', 'description': 'Dimension value.'}}, 'description': 'A single distinct dimension value and its member count.', 'additionalProperties': True}, 'description': 'Distinct dimension values with member counts.'}, 'unassignedLabel': {'type': 'string', 'description': 'Label shown for members with no value in the slot.'}}, 'description': 'A dimension slot mapping details. Note: the `values` property is an array of MembersDimensionValueRow composed at the OpenAPI schema level.', 'additionalProperties': True}, 'description': 'Per-dimension slot distribution rows.'}}, 'description': 'Output for the sm_get_member_overview tool. Failure payloads arrive in the same envelope as { error, code }.', 'additionalProperties': True}
sm_get_member_segments
Get tags and segments
Get tags and segments with their engagement and status breakdowns. Use to turn an event or interest tag into a working audience. Every tag and segment is returned in one unpaginated call, but untagged members are excluded from the tag list and surface only as a separate untaggedCount, and tag engagement rates exclude insiders while tag member counts do not.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['projectId'], 'properties': {'projectId': {'type': 'string', 'minLength': 1, 'description': 'Required. The opaque alphanumeric project identifier of 8 or more characters to scope this request to. Call GET /_api/public/v1/enterprise/projects to list the project IDs available to your API key. Omitting it returns 400 VALIDATION_ERROR.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'code': {'type': 'string', 'description': 'A machine-readable identifier for the error type. For the full code taxonomy, see the sm_get_schema tool or the Enterprise API OpenAPI ErrorResponse component.'}, 'tags': {'type': 'array', 'items': {'type': 'object', 'properties': {'name': {'type': 'string', 'description': 'Tag name.'}, 'tagId': {'type': 'string', 'description': 'Numeric string by contract.'}, 'memberCount': {'type': 'integer', 'description': 'Members carrying the tag.'}}, 'description': 'Directory of Mailchimp tags.', 'additionalProperties': True}, 'description': 'Tag rows with member counts.'}, 'error': {'type': 'string', 'description': 'A human-readable error message detailing what went wrong.'}, 'segments': {'type': 'array', 'items': {'type': 'object', 'properties': {'name': {'type': 'string', 'description': 'Segment name.'}, 'createdAt': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'segmentId': {'type': 'string', 'description': 'Numeric string by contract.'}, 'updatedAt': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'memberCount': {'type': 'integer', 'description': 'Members in the segment.'}, 'segmentType': {'type': 'string', 'description': 'The public surface deliberately renames the reserved word `type`; the shared core still returns `type`.'}}, 'description': 'Directory of Mailchimp segments.', 'additionalProperties': True}, 'description': 'Segment rows with member counts.'}, 'projectId': {'type': 'string', 'description': 'An opaque alphanumeric project identifier of 8 or more characters identifying a Space Monkey Project. Treat this value as entirely opaque; do not parse, sequentialize, or auto-generate it.'}, 'totalCount': {'type': 'integer', 'description': 'Total members in the audience.'}, 'tagEngagement': {'type': 'array', 'items': {'type': 'object', 'properties': {'name': {'type': 'string', 'description': 'Tag name.'}, 'leaderCount': {'type': 'integer', 'description': 'Leaders carrying the tag.'}, 'memberCount': {'type': 'integer', 'description': 'Members carrying the tag.'}, 'avgEngagementScore': {'type': 'number', 'description': 'Mean engagement score for the tag.'}}, 'description': 'Engagement metrics associated with a specific tag.', 'additionalProperties': True}, 'description': 'Per-tag engagement rollup rows.'}, 'untaggedCount': {'type': 'integer', 'description': 'Members with no tags.'}, 'subscribedCount': {'type': 'integer', 'description': 'Subscribed members in the audience.'}, 'tagStatusBreakdown': {'type': 'array', 'items': {'type': 'object', 'properties': {'status': {'type': 'string', 'description': 'Subscription status.'}, 'tagName': {'type': 'string', 'description': 'Tag name.'}, 'memberCount': {'type': 'integer', 'description': 'Members in the tag and status.'}}, 'description': 'Member statuses within a specific tag context.', 'additionalProperties': True}, 'description': 'Tag-by-status member count rows.'}, 'overallAvgEngagement': {'type': 'number', 'description': 'Audience-wide mean engagement score.'}}, 'description': 'Output for the sm_get_member_segments tool. Failure payloads arrive in the same envelope as { error, code }.', 'additionalProperties': True}
sm_get_member_timeline
Get member activity timeline
Replay one member's raw activity events in time order. Use to establish when someone last paid attention and what triggered it.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['projectId', 'subscriberHash'], 'properties': {'cursor': {'type': 'string', 'description': 'Opaque keyset pagination cursor returned as `nextCursor` by the previous page. Must be replayed with identical query filters.'}, 'dateTo': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': "Inclusive ISO-8601 calendar date (UTC) upper bound for the time range in YYYY-MM-DD format. Omit to leave the end of the time window unbounded or use the endpoint's default."}, 'sortBy': {'enum': ['timestamp', 'activity_type', 'campaign_title'], 'type': 'string', 'default': 'timestamp', 'description': 'The field used to order the timeline. Defaults to ordering by the most recent timestamp first.'}, 'sortDir': {'enum': ['asc', 'desc'], 'type': 'string', 'default': 'desc', 'description': 'The direction to sort the timeline results. Can be \'asc\' for ascending or \'desc\' for descending. Defaults to "desc" when omitted.'}, 'dateFrom': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Inclusive ISO-8601 calendar date (UTC) lower bound for the time range in YYYY-MM-DD format. Omit to leave the start of the time window unbounded.'}, 'pageSize': {'type': 'number', 'default': 100, 'maximum': 100, 'minimum': 1, 'description': "Maximum number of rows to return per page. Omit to use the default page size of 100. MCP tool calls are capped at 100 rows per page to protect the model's context window."}, 'projectId': {'type': 'string', 'minLength': 1, 'description': 'Required. The opaque alphanumeric project identifier of 8 or more characters to scope this request to. Call GET /_api/public/v1/enterprise/projects to list the project IDs available to your API key. Omitting it returns 400 VALIDATION_ERROR.'}, 'openedFilter': {'enum': ['all', 'opened', 'not_opened'], 'type': 'string', 'default': 'all', 'description': 'Filter timeline events to only those where the campaign was opened, not opened, or \'all\' to ignore open status. Defaults to "all" when omitted.'}, 'clickedFilter': {'enum': ['all', 'clicked', 'not_clicked'], 'type': 'string', 'default': 'all', 'description': 'Filter timeline events to only those where the campaign was clicked, not clicked, or \'all\' to ignore click status. Defaults to "all" when omitted.'}, 'maxTimeToOpen': {'type': 'number', 'minimum': 0, 'description': "Maximum elapsed time from the campaign send until the member's first open, in minutes. Omit to impose no upper bound."}, 'minTimeToOpen': {'type': 'number', 'minimum': 0, 'description': "Minimum elapsed time from the campaign send until the member's first open, in minutes. Omit to impose no lower bound."}, 'subjectFilter': {'type': 'string', 'description': 'Filter the timeline by a case-insensitive partial match on the campaign subject line. Omit to include all subjects.'}, 'maxTimeToClick': {'type': 'number', 'minimum': 0, 'description': "Maximum elapsed time from the campaign send until the member's first click, in minutes. Omit to impose no upper bound."}, 'minTimeToClick': {'type': 'number', 'minimum': 0, 'description': "Minimum elapsed time from the campaign send until the member's first click, in minutes. Omit to impose no lower bound."}, 'subscriberHash': {'type': 'string', 'pattern': '^[0-9a-f]{32}$', 'description': "The member's Mailchimp-style lowercase MD5 subscriber hash (canonical member key)."}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'code': {'type': 'string', 'description': 'A machine-readable identifier for the error type. For the full code taxonomy, see the sm_get_schema tool or the Enterprise API OpenAPI ErrorResponse component.'}, 'data': {'type': 'array', 'items': {'type': 'object', 'properties': {'url': {'type': ['string', 'null'], 'description': 'Clicked URL, or null when absent.'}, 'timestamp': {'type': 'string', 'description': 'ISO 8601 UTC timestamp.'}, 'campaignId': {'type': ['string', 'null'], 'description': 'Campaign identifier, or null for non-campaign actions.'}, 'activityType': {'type': 'string', 'description': 'Kind of tracked action.'}, 'campaignTitle': {'type': ['string', 'null'], 'description': 'Campaign title, or null for non-campaign actions.'}}, 'description': 'Chronological list of all actions taken by a member.', 'additionalProperties': True}, 'description': 'Response rows for the enclosing tool.'}, 'error': {'type': 'string', 'description': 'A human-readable error message detailing what went wrong.'}, 'hasMore': {'type': 'boolean', 'description': 'True if additional results exist beyond this page.'}, 'pageSize': {'type': 'integer', 'description': 'The maximum number of items returned in this page.'}, 'projectId': {'type': 'string', 'description': 'An opaque alphanumeric project identifier of 8 or more characters identifying a Space Monkey Project. Treat this value as entirely opaque; do not parse, sequentialize, or auto-generate it.'}, 'nextCursor': {'type': ['string', 'null'], 'description': 'A keyset cursor marking the continuation point. Contract: this value is non-null if and only if `hasMore` is true. Clients MUST echo this token verbatim on the subsequent request and MUST NEVER attempt to parse or manually construct it.'}, 'subscriberHash': {'type': 'string', 'description': "The 32-character lowercase hex MD5 hash of the member's downcased email address. This is the canonical unique identifier for members exposed across the Enterprise API, identical to Mailchimp's core behavior. The API will never expose internal synthetic BigQuery UUIDs."}}, 'description': 'Output for the sm_get_member_timeline tool. Failure payloads arrive in the same envelope as { error, code }.', 'additionalProperties': True}
sm_get_prompt
Render prompt workflow
Render one Space Monkey prompt workflow with concrete argument values, returning the complete instruction text ready to follow, plus the effective arguments that were bound (provided values plus defaults for omitted optionals). Prompt names and their arguments come from sm_list_prompts. If the rendered text still contains {{tokens}} such as {{projectId}} or {{company}}, a required argument was not provided; call again with it filled. The rendered text references sm_ tools by name; call them as instructed.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['name'], 'properties': {'name': {'type': 'string', 'minLength': 1, 'description': 'Prompt name from sm_list_prompts, e.g. sm_brief_before_call.'}, 'arguments': {'type': 'object', 'description': 'Argument values for the prompt, keyed by argument name (e.g. {"company": "Conversion Sciences", "email": "brian@example.com"}). Omit optional arguments to use their defaults. Multi-line values are supported.', 'additionalProperties': {'type': 'string'}}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'code': {'type': 'string', 'description': 'A machine-readable identifier for the error type. For the full code taxonomy, see the sm_get_schema tool or the Enterprise API OpenAPI ErrorResponse component.'}, 'name': {'type': 'string', 'description': 'Prompt name.'}, 'text': {'type': 'string', 'description': 'Rendered prompt body with values substituted.'}, 'error': {'type': 'string', 'description': 'A human-readable error message detailing what went wrong.'}, 'arguments': {'type': 'object', 'description': 'Argument values used for rendering.', 'additionalProperties': True}, 'description': {'type': 'string', 'description': 'Prompt description.'}}, 'description': 'A single rendered prompt workflow and its effective arguments. Failure payloads arrive in the same envelope as { error, code }.', 'additionalProperties': True}
sm_get_schema
Get API schema catalog
Get the Enterprise API's OpenAPI-derived schema catalog. Omitting `operation` returns a compact index of every Enterprise API operation; passing a tool name, full path, or path suffix returns that one operation's full parameters and resolved response schemas. Use before calling an unfamiliar tool to confirm its exact fields.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': [], 'properties': {'operation': {'type': 'string', 'description': "Optional selector for one Enterprise API operation. Omit this parameter to receive a compact index of every Enterprise API operation. Pass a tool name (e.g. sm_list_leaders), a full path (e.g. /_api/public/v1/enterprise/members/detail), or a path suffix (e.g. members/detail) to receive that operation's full parameters and resolved response schemas."}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'code': {'type': 'string', 'description': 'A machine-readable identifier for the error type. For the full code taxonomy, see the sm_get_schema tool or the Enterprise API OpenAPI ErrorResponse component.'}, 'path': {'type': 'string', 'description': 'URL path for the operation.'}, 'error': {'type': 'string', 'description': 'A human-readable error message detailing what went wrong.'}, 'method': {'type': 'string', 'description': 'HTTP method for the operation.'}, 'toolName': {'type': ['string', 'null'], 'description': 'MCP tool wrapping the operation, or null when none.'}, 'operation': {'type': 'object', 'description': 'Full OpenAPI operation object.', 'additionalProperties': True}, 'schemaUrl': {'type': 'string', 'description': 'URL of the live OpenAPI document.'}, 'components': {'type': 'object', 'description': 'OpenAPI components object referenced by operations.', 'additionalProperties': True}, 'operations': {'type': 'array', 'items': {'type': 'object', 'properties': {'path': {'type': 'string', 'description': 'URL path.'}, 'tags': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Operation tags.'}, 'method': {'type': 'string', 'description': 'HTTP method.'}, 'summary': {'type': 'string', 'description': 'Short operation summary.'}, 'toolName': {'type': ['string', 'null'], 'description': 'MCP tool wrapping the operation, or null.'}, 'description': {'type': 'string', 'description': 'Operation description.'}, 'optionalParams': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional parameters.'}, 'requiredParams': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Required parameters.'}}, 'additionalProperties': True}, 'description': 'Catalog entries for each Enterprise API operation.'}, 'operationCount': {'type': 'number', 'description': 'Number of operations catalogued.'}}, 'description': 'Either a compact index of operations or a detailed schema for one operation. Failure payloads arrive in the same envelope as { error, code }.', 'additionalProperties': True}
sm_get_sync_run
Get sync run detail
Load one sync run's full detail — per-stage results, progress, lookback window and pending batch count. Use after sm_list_sync_runs to explain why data is stale or a run failed. Failure detail lands in one of two places and rarely both: orchestration failures set run.errorMessage with no stage rows, while per-data-type failures leave it null and record the message on results[].errorMessage, so check both and treat status as the failure signal.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['projectId', 'runId'], 'properties': {'runId': {'type': 'string', 'description': 'The opaque 8-character hash ID correlating to the sync run.'}, 'projectId': {'type': 'string', 'minLength': 1, 'description': 'Required. The opaque alphanumeric project identifier of 8 or more characters to scope this request to. Call GET /_api/public/v1/enterprise/projects to list the project IDs available to your API key. Omitting it returns 400 VALIDATION_ERROR.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'run': {'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Identifier for the sync run.'}, 'status': {'enum': ['queued', 'pending', 'running', 'paused', 'success', 'partial', 'failed', 'cancelled'], 'type': 'string', 'description': 'Run status, for example queued, running, completed, or failed.'}, 'endedAt': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'createdAt': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'projectId': {'type': 'string', 'description': 'Project the run belongs to.'}, 'startedAt': {'type': 'string', 'description': 'ISO 8601 UTC timestamp.'}, 'triggerType': {'enum': ['manual', 'scheduled'], 'type': 'string', 'description': 'What initiated the run.'}, 'errorMessage': {'type': ['string', 'null'], 'description': 'Failure detail, or null on success.'}}, 'description': 'Details for a specific sync run. Omits projectName, retryCount, resultsCount, and totalTables carried by the list row.', 'additionalProperties': True}, 'code': {'type': 'string', 'description': 'A machine-readable identifier for the error type. For the full code taxonomy, see the sm_get_schema tool or the Enterprise API OpenAPI ErrorResponse component.'}, 'error': {'type': 'string', 'description': 'A human-readable error message detailing what went wrong.'}, 'results': {'type': 'array', 'items': {'type': 'object', 'properties': {'dataType': {'type': 'string', 'description': 'Free-form varchar (not an enum). Observed values: automations, campaign_reports, campaigns, email_activities, lists, member_activities, members, reports, segments, tags.'}, 'errorMessage': {'type': ['string', 'null'], 'description': 'Stage failure detail, or null.'}, 'totalRecords': {'type': ['integer', 'null'], 'description': 'Records in the stage, or null.'}, 'recordsSkipped': {'type': ['integer', 'null'], 'description': 'Records skipped in the stage, or null.'}, 'recordsWritten': {'type': ['integer', 'null'], 'description': 'Records written in the stage, or null.'}, 'durationSeconds': {'type': ['integer', 'null'], 'description': 'Stage duration, or null.'}, 'finalTableRowCount': {'type': ['integer', 'null'], 'description': 'Final table row count, or null.'}}, 'description': "Result row for a specific data type in a sync run. The row's `id` is deliberately dropped by the endpoint, making `dataType` the distinguishing key.", 'additionalProperties': True}, 'description': 'Per-stage results for the sync run.'}, 'progress': {'type': 'array', 'items': {'type': 'object', 'properties': {'dataType': {'type': 'string', 'description': 'Data type for the progress row.'}, 'startedAt': {'type': 'string', 'description': 'ISO 8601 UTC timestamp.'}, 'updatedAt': {'type': 'string', 'description': 'ISO 8601 UTC timestamp.'}, 'totalLists': {'type': ['integer', 'null'], 'description': 'Total lists in scope, or null.'}, 'currentPage': {'type': 'integer', 'description': 'Current pagination offset.'}, 'currentPhase': {'type': ['string', 'null'], 'description': 'Free text phase description, not an enum.'}, 'totalRecords': {'type': ['integer', 'null'], 'description': 'Total records, or null.'}, 'listsCompleted': {'type': 'integer', 'description': 'Lists fully processed.'}, 'recordsSkipped': {'type': 'integer', 'description': 'Records skipped.'}, 'recordsWritten': {'type': 'integer', 'description': 'Records written.'}, 'recordsProcessed': {'type': 'integer', 'description': 'Records processed.'}}, 'description': 'In-flight progress for a sync run. Rows exist only during an active sync.', 'additionalProperties': True}, 'description': 'Per-data-type progress rows for the sync run.'}, 'projectId': {'type': 'string', 'description': 'An opaque alphanumeric project identifier of 8 or more characters identifying a Space Monkey Project. Treat this value as entirely opaque; do not parse, sequentialize, or auto-generate it.'}, 'pendingBatchCount': {'type': 'integer', 'description': 'Number of batches still queued for processing.'}, 'lookbackWindowDays': {'type': 'integer', 'description': 'Number of days of history the sync covers.'}}, 'description': 'Output for the sm_get_sync_run tool. Failure payloads arrive in the same envelope as { error, code }.', 'additionalProperties': True}
sm_get_variate
Analyze variate campaign
Analyse a variate (A/B) campaign — per-variant reports, statistical significance, engagement velocity, audience quality and geo split. Only meaningful for multivariate campaigns. All metrics come from synced BigQuery tables rather than a live Mailchimp read, so they are only as current as the project's last sync run, whose cadence is per-project: manual, daily or weekly.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['projectId', 'campaignId'], 'properties': {'projectId': {'type': 'string', 'minLength': 1, 'description': 'Required. The opaque alphanumeric project identifier of 8 or more characters to scope this request to. Call GET /_api/public/v1/enterprise/projects to list the project IDs available to your API key. Omitting it returns 400 VALIDATION_ERROR.'}, 'campaignId': {'type': 'string', 'pattern': '^[a-zA-Z0-9_-]+$', 'description': 'The opaque string identifier for the campaign as assigned by Mailchimp. List campaigns to obtain this ID. If the ID is invalid or does not exist in the project, the endpoint will return a 404 error.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'code': {'type': 'string', 'description': 'A machine-readable identifier for the error type. For the full code taxonomy, see the sm_get_schema tool or the Enterprise API OpenAPI ErrorResponse component.'}, 'error': {'type': 'string', 'description': 'A human-readable error message detailing what went wrong.'}, 'projectId': {'type': 'string', 'description': 'An opaque alphanumeric project identifier of 8 or more characters identifying a Space Monkey Project. Treat this value as entirely opaque; do not parse, sequentialize, or auto-generate it.'}, 'funnelData': {'type': 'array', 'items': {'type': 'object', 'properties': {'recipients': {'type': 'integer', 'description': 'Recipients for the variant.'}, 'variantLabel': {'type': 'string', 'description': 'Variant label.'}, 'uniqueOpeners': {'type': 'integer', 'description': 'Distinct openers.'}, 'uniqueClickers': {'type': 'integer', 'description': 'Distinct clickers.'}}, 'description': 'Funnel metrics for a campaign or variant.', 'additionalProperties': True}, 'description': 'Per-variant funnel rows from recipients through unique clickers.'}, 'geoBreakdown': {'type': 'array', 'items': {'type': 'object', 'properties': {'stateRegion': {'type': 'string', 'description': 'State or region.'}, 'engagedCount': {'type': 'integer', 'description': 'Engaged members in the region.'}, 'variantLabel': {'type': 'string', 'description': 'Variant label.'}}, 'description': 'Geographic distribution of campaign engagement.', 'additionalProperties': True}, 'description': 'Per-variant geography rollup rows.'}, 'variantReports': {'type': 'array', 'items': {'type': 'object', 'properties': {'emailsSent': {'type': 'integer', 'description': 'Emails the variant sent.'}, 'opensTotal': {'type': 'integer', 'description': 'Total open events for the variant.'}, 'clicksTotal': {'type': 'integer', 'description': 'Total click events for the variant.'}, 'hardBounces': {'type': 'integer', 'description': 'Hard bounces for the variant.'}, 'softBounces': {'type': 'integer', 'description': 'Soft bounces for the variant.'}, 'subjectLine': {'type': 'string', 'description': 'Variant subject line.'}, 'uniqueOpens': {'type': 'integer', 'description': 'Distinct openers for the variant.'}, 'uniqueClicks': {'type': 'integer', 'description': 'Distinct clickers for the variant.'}, 'unsubscribed': {'type': 'integer', 'description': 'Unsubscribes for the variant.'}, 'variantLabel': {'type': 'string', 'description': 'A, B, C, or Campaign for non-variate'}}, 'description': 'Performance reports split by campaign variant.', 'additionalProperties': True}, 'description': 'Per-variant performance rows.'}, 'audienceQuality': {'type': 'array', 'items': {'type': 'object', 'properties': {'leaderCount': {'type': 'integer', 'description': 'Leaders in the variant.'}, 'variantLabel': {'type': 'string', 'description': 'Variant label.'}, 'repeatOpeners': {'type': 'integer', 'description': 'Members who opened more than once.'}, 'repeatClickers': {'type': 'integer', 'description': 'Members who clicked more than once.'}, 'avgMemberRating': {'type': ['number', 'null'], 'description': 'Mean member rating in the variant, or null.'}, 'clickToOpenRate': {'type': 'number', 'description': 'Click-to-open rate for the variant.'}, 'avgOpensPerMember': {'type': 'number', 'description': 'Mean opens per member.'}, 'avgClicksPerMember': {'type': 'number', 'description': 'Mean clicks per member.'}, 'avgEngagementScore': {'type': ['number', 'null'], 'description': 'Mean engagement score in the variant, or null.'}, 'totalEngagedMembers': {'type': 'integer', 'description': 'Engaged members in the variant.'}}, 'description': 'Measures the quality of audience engaging with the campaign.', 'additionalProperties': True}, 'description': 'Per-variant audience-quality rows.'}, 'timeToFirstOpen': {'type': 'array', 'items': {'type': 'object', 'properties': {'openers': {'type': 'integer', 'description': 'Distinct openers in the variant.'}, 'avgMinutes': {'type': 'number', 'description': 'Mean minutes to first open.'}, 'maxMinutes': {'type': 'integer', 'description': 'Maximum minutes to first open.'}, 'minMinutes': {'type': 'integer', 'description': 'Minimum minutes to first open.'}, 'variantLabel': {'type': 'string', 'description': 'Variant label.'}, 'medianMinutes': {'type': 'integer', 'description': 'Median minutes to first open.'}}, 'description': 'Analysis of time until the first open occurs.', 'additionalProperties': True}, 'description': 'Per-variant time-to-first-open statistics.'}, 'engagementVelocity': {'type': 'array', 'items': {'type': 'object', 'properties': {'opens': {'type': 'integer', 'description': 'Open events for the variant in the window.'}, 'clicks': {'type': 'integer', 'description': 'Click events for the variant in the window.'}, 'variantLabel': {'type': 'string', 'description': 'Variant label, for example A or B.'}, 'hoursAfterSend': {'type': 'integer', 'description': '0-72'}}, 'description': 'Velocity of opens and clicks post-send.', 'additionalProperties': True}, 'description': 'Per-variant engagement velocity rows.'}}, 'description': 'Output for the sm_get_variate tool. Failure payloads arrive in the same envelope as { error, code }.', 'additionalProperties': True}
sm_list_at_risk
Find at-risk members
Find previously engaged members whose recent activity has collapsed, for building save lists. Note its engagementScore is a raw decayed score that can be negative, unlike the leaders percentile.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['projectId'], 'properties': {'rep': {'type': 'string', 'description': "Filter by an exact match on the assigned sales representative's name. Omit to include members assigned to any rep."}, 'cursor': {'type': 'string', 'description': 'Opaque keyset pagination cursor returned as `nextCursor` by the previous page. Must be replayed with identical query filters.'}, 'search': {'type': 'string', 'description': 'Filter subscribers by a case-insensitive partial match on their email address, first name, or last name. Omit to skip text filtering.'}, 'sortBy': {'enum': ['active_actions_recent', 'active_actions_prior', 'email_address', 'member_rating'], 'type': 'string', 'default': 'active_actions_recent', 'description': 'The field used to order the at-risk subscribers list. Defaults to the number of recent active actions.'}, 'sortDir': {'enum': ['asc', 'desc'], 'type': 'string', 'default': 'asc', 'description': 'The direction to sort the at-risk results. Can be \'asc\' for ascending or \'desc\' for descending. Defaults to "asc" when omitted.'}, 'maxPrior': {'type': 'number', 'minimum': 0, 'description': 'Maximum count of engagement actions prior to the recent drop-off. Omit to impose no upper bound.'}, 'minPrior': {'type': 'number', 'minimum': 0, 'description': 'Minimum count of engagement actions prior to the recent drop-off. Omit to impose no lower bound.'}, 'pageSize': {'type': 'number', 'default': 100, 'maximum': 100, 'minimum': 1, 'description': "Maximum number of rows to return per page. Omit to use the default page size of 100. MCP tool calls are capped at 100 rows per page to protect the model's context window."}, 'botFilter': {'enum': ['all', 'suspected-bot', 'clean'], 'type': 'string', 'default': 'all', 'description': 'Filter out members whose interactions appear to be automated bot activity. Select \'suspected-bot\' for only bots, \'clean\' to exclude bots, or \'all\' to ignore. Defaults to "all" when omitted.'}, 'maxRating': {'type': 'integer', 'maximum': 5, 'minimum': 1, 'description': 'Maximum Mailchimp member star rating to include, from 1 to 5. Omit to include every rating.'}, 'minRating': {'type': 'integer', 'maximum': 5, 'minimum': 1, 'description': 'Minimum Mailchimp member star rating to include, from 1 to 5. Omit to include every rating.'}, 'projectId': {'type': 'string', 'minLength': 1, 'description': 'Required. The opaque alphanumeric project identifier of 8 or more characters to scope this request to. Call GET /_api/public/v1/enterprise/projects to list the project IDs available to your API key. Omitting it returns 400 VALIDATION_ERROR.'}, 'insiderFilter': {'enum': ['all', 'exclude', 'only'], 'type': 'string', 'default': 'all', 'description': 'Filter out members with internal company email domains or recognized insider addresses. Select \'exclude\' to hide them, \'only\' to show only them, or \'all\' to ignore. Defaults to "all" when omitted.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'code': {'type': 'string', 'description': 'A machine-readable identifier for the error type. For the full code taxonomy, see the sm_get_schema tool or the Enterprise API OpenAPI ErrorResponse component.'}, 'error': {'type': 'string', 'description': 'A human-readable error message detailing what went wrong.'}, 'hasMore': {'type': 'boolean', 'description': 'True if additional results exist beyond this page.'}, 'pageSize': {'type': 'integer', 'description': 'The maximum number of items returned in this page.'}, 'projectId': {'type': 'string', 'description': 'An opaque alphanumeric project identifier of 8 or more characters identifying a Space Monkey Project. Treat this value as entirely opaque; do not parse, sequentialize, or auto-generate it.'}, 'nextCursor': {'type': ['string', 'null'], 'description': 'A keyset cursor marking the continuation point. Contract: this value is non-null if and only if `hasMore` is true. Clients MUST echo this token verbatim on the subsequent request and MUST NEVER attempt to parse or manually construct it.'}, 'subscribers': {'type': 'array', 'items': {'type': 'object', 'properties': {'status': {'type': 'string', 'description': 'Subscription status of the member.'}, 'repName': {'type': ['string', 'null'], 'description': 'Internal owner or rep assigned to the member, or null when unassigned.'}, 'isLeader': {'type': ['boolean', 'null'], 'description': 'True when the member qualifies as a leader by engagement.'}, 'lastName': {'type': ['string', 'null'], 'description': "The member's last name, or null when unavailable."}, 'firstName': {'type': ['string', 'null'], 'description': "The member's first name, or null when unavailable."}, 'totalOpens': {'type': ['integer', 'null'], 'description': 'Total open events, counting repeat opens by the same member.'}, 'totalClicks': {'type': ['integer', 'null'], 'description': 'Total click events, counting repeat clicks.'}, 'emailAddress': {'type': 'string', 'description': "The member's email address."}, 'memberRating': {'type': ['integer', 'null'], 'description': 'Integer Mailchimp engagement rating for the member (1-5), or null when unrated.'}, 'lastActivityAt': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'subscriberHash': {'type': 'string', 'description': 'Opaque 32-hex-character per-member identifier (MD5 of the lowercased/trimmed email address). It is deterministic and stable across calls, making it safe as a global join key when correlating a member across tools, though it will change if the member changes email address.'}, 'engagementScore': {'type': ['number', 'null'], 'description': 'Composite engagement score for the at-risk member. Note: This is the raw unbounded time-decayed score that can be negative.'}, 'activeActionsPrior': {'type': 'integer', 'description': 'Count of engagement actions in the prior comparison window.'}, 'activeActionsRecent': {'type': 'integer', 'description': 'Count of engagement actions in the recent comparison window.'}}, 'description': 'Represents an individual at-risk member. Semantic conflict note: engagementScore here is the RAW unbounded decayed score, can be negative.', 'additionalProperties': True}, 'description': 'At-risk member rows.'}, 'distribution': {'type': 'array', 'items': {'type': 'object', 'properties': {'memberRating': {'type': 'integer', 'description': 'Rating bucket.'}, 'avgPriorActions': {'type': 'number', 'description': 'Mean prior-window action count in the bucket.'}, 'maxPriorActions': {'type': 'integer', 'description': 'Highest prior-window action count in the bucket.'}, 'subscriberCount': {'type': 'integer', 'description': 'Members in the rating bucket.'}}, 'description': 'Distribution of at-risk subscribers grouped by member rating.', 'additionalProperties': True}, 'description': 'Rating-bucket distribution of the at-risk population.'}, 'quadrantData': {'type': 'array', 'items': {'type': 'object', 'properties': {'repName': {'type': ['string', 'null'], 'description': 'Internal owner or rep assigned to the member, or null when unassigned.'}, 'lastName': {'type': ['string', 'null'], 'description': "The member's last name, or null when unavailable."}, 'firstName': {'type': ['string', 'null'], 'description': "The member's first name, or null when unavailable."}, 'totalOpens': {'type': 'integer', 'description': 'Total open events, counting repeat opens by the same member.'}, 'totalClicks': {'type': 'integer', 'description': 'Total click events, counting repeat clicks.'}, 'emailAddress': {'type': 'string', 'description': "The member's email address."}, 'memberRating': {'type': 'integer', 'description': 'Integer Mailchimp engagement rating for the member (1-5), or null when unrated.'}, 'engagementScore': {'type': 'number', 'description': 'Composite engagement score for the member or cohort. Note: This is the raw unbounded time-decayed score that can be negative.'}, 'activeActionsPrior': {'type': 'integer', 'description': 'Count of engagement actions in the prior comparison window.'}, 'daysSinceLastActivity': {'type': 'integer', 'description': "Days since the member's last tracked action."}}, 'description': 'Detailed scatter-quadrant plotting data for at-risk members.', 'additionalProperties': True}, 'description': 'Per-member rows for the prior-vs-recent activity quadrant.'}, 'repBreakdown': {'type': 'array', 'items': {'type': 'object', 'properties': {'repName': {'type': 'string', 'description': 'Rep name for the row.'}, 'atRiskCount': {'type': 'integer', 'description': 'At-risk members assigned to the rep.'}, 'avgPriorActions': {'type': 'number', 'description': "Mean prior actions for the rep's at-risk members."}, 'avgEngagementScore': {'type': 'number', 'description': "Mean engagement score for the rep's at-risk members."}}, 'description': 'Breakdown of at-risk counts grouped by sales rep/owner.', 'additionalProperties': True}, 'description': 'Per-rep rollup of the at-risk population.'}}, 'description': 'Output for the sm_list_at_risk tool. Failure payloads arrive in the same envelope as { error, code }.', 'additionalProperties': True}
sm_list_campaign_responders
List Campaign Responders
List the members who registered a tracked response to one campaign — opened, clicked, bounced or unsubscribed — never the full send list; emailsSent is echoed so the unenumerated majority stays visible as a denominator. Narrow with action (clicked-only is usually a fraction of responders), engagementType, variant, rating or score filters; subscriberHash is the MD5 of the downcased email and joins to member-centric tools. For the campaign's own report use sm_get_campaign, for member-to-campaign history use sm_get_member_campaigns (the inverse view), and for the whole directory use sm_list_members. Results are paginated with an opaque keyset cursor valid for 24 hours and pageSize capped at 100 rows.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['projectId', 'campaignId'], 'properties': {'action': {'enum': ['all', 'opened', 'clicked', 'bounced', 'unsubscribed'], 'type': 'string', 'default': 'all', 'description': 'Narrow rows to one tracked response: all (default), opened, clicked, bounced or unsubscribed. action=clicked asks whether a member ever clicked, regardless of anything else they did. Clicked-only is usually a fraction of the responder set, so use it before paging through everything.'}, 'cursor': {'type': 'string', 'description': 'Opaque keyset pagination cursor returned as `nextCursor` by the previous page. Valid for 24 hours from issuance and bound to the exact query parameters used to generate it — it is not signed, just scoped; changing any filter, sort field, or sort direction while paginating causes the request to fail with a CURSOR_QUERY_MISMATCH error rather than silently re-scoping the results.'}, 'leader': {'enum': ['all', 'true', 'false'], 'type': 'string', 'default': 'all', 'description': "Filter responders to include only recognized leaders ('true'), exclude leaders ('false'), or ignore leader status ('all', default)."}, 'region': {'type': 'string', 'description': 'Filter responders by their exact region or state name as recognized by Mailchimp geography data. Omit to include all regions.'}, 'search': {'type': 'string', 'description': 'Filter responders by a case-insensitive partial match on email address, first name, or last name. Omit to skip text filtering.'}, 'sortBy': {'enum': ['email_address', 'last_name', 'open_count', 'click_count', 'engagement_score', 'member_rating', 'variant_label', 'engagement_type'], 'type': 'string', 'default': 'engagement_type', 'description': 'The field used to order the responder results. Each value is the snake_case spelling of the matching response field: email_address, last_name, open_count, click_count, engagement_score, member_rating, variant_label, or engagement_type. Defaults to sorting by engagement_type.'}, 'country': {'type': 'string', 'description': "Filter responders by their exact two-letter ISO country code (e.g. 'US', 'GB'). Omit to include all countries."}, 'sortDir': {'enum': ['asc', 'desc'], 'type': 'string', 'default': 'desc', 'description': 'The direction to sort the responder results. Can be \'asc\' for ascending or \'desc\' for descending. Defaults to "desc" when omitted.'}, 'variant': {'type': 'string', 'description': "Filter responders by an exact match on the campaign variant label (e.g. 'A', 'B', or 'Campaign' for non-variate campaigns). Omit to include responders across all variants."}, 'maxOpens': {'type': 'integer', 'minimum': 0, 'description': 'Maximum number of opens (open_count) allowed to include the responder in results. Omit for no maximum.'}, 'maxScore': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': "Inclusive upper bound (0-100) on the member's overall engagement percentile score (engagementScore). Identical in meaning to the leaderboard's leaderMaxScore. Omit for no maximum."}, 'minOpens': {'type': 'integer', 'minimum': 0, 'description': 'Minimum number of opens (open_count) required to include the responder in results. Omit for no minimum.'}, 'minScore': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': "Inclusive lower bound (0-100) on the member's overall engagement percentile score (engagementScore). Identical in meaning to the leaderboard's leaderMinScore. Omit for no minimum."}, 'pageSize': {'type': 'integer', 'default': 100, 'maximum': 100, 'minimum': 1, 'description': "Maximum number of rows to return per page. Omit to use the default page size of 100. MCP tool calls are capped at 100 rows per page to protect the model's context window."}, 'botFilter': {'enum': ['all', 'suspected-bot', 'clean'], 'type': 'string', 'default': 'all', 'description': "Filter out responders whose interactions appear to be automated bot activity. Select 'suspected-bot' for only bots, 'clean' to exclude bots, or 'all' (default) to ignore."}, 'maxClicks': {'type': 'integer', 'minimum': 0, 'description': 'Maximum number of clicks (click_count) allowed to include the responder in results. Omit for no maximum.'}, 'maxRating': {'type': 'number', 'maximum': 5, 'minimum': 1, 'description': 'Maximum Mailchimp member star rating to include, from 1 to 5. Omit to include every rating.'}, 'minClicks': {'type': 'integer', 'minimum': 0, 'description': 'Minimum number of clicks (click_count) required to include the responder in results. Omit for no minimum.'}, 'minRating': {'type': 'number', 'maximum': 5, 'minimum': 1, 'description': 'Minimum Mailchimp member star rating to include, from 1 to 5. Omit to include every rating.'}, 'projectId': {'type': 'string', 'minLength': 1, 'description': 'Required. The opaque alphanumeric project identifier of 8 or more characters to scope this request to. Call GET /_api/public/v1/enterprise/projects to list the project IDs available to your API key. Omitting it returns 400 VALIDATION_ERROR.'}, 'campaignId': {'type': 'string', 'minLength': 1, 'description': 'The opaque string identifier for the campaign as assigned by Mailchimp. List campaigns to obtain this ID. If the ID is invalid or does not exist in the project, the endpoint will return a 404 error.'}, 'insiderFilter': {'enum': ['all', 'exclude', 'only'], 'type': 'string', 'default': 'all', 'description': "Filter out responders with internal company email domains or recognized insider addresses. Select 'exclude' to hide them, 'only' to show only them. Defaults to 'all', which applies no insider filtering."}, 'engagementType': {'enum': ['all', 'open', 'click'], 'type': 'string', 'default': 'all', 'description': 'Grade each responder by their highest engagement: click if clickCount is above zero, otherwise open; all (default) applies no grading. Where action=clicked asks whether a member ever clicked, engagementType=open asks whether clicking was their highest form of engagement — the two filters answer different questions.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'code': {'type': 'string', 'description': 'A machine-readable identifier for the error type. For the full code taxonomy, see the sm_get_schema tool or the Enterprise API OpenAPI ErrorResponse component.'}, 'error': {'type': 'string', 'description': 'A human-readable error message detailing what went wrong.'}, 'hasMore': {'type': 'boolean', 'description': 'True when additional pages remain past the current cursor.'}, 'pageSize': {'type': 'integer', 'description': 'Number of rows per page in the current request.'}, 'projectId': {'type': 'string', 'description': 'An opaque alphanumeric project identifier of 8 or more characters identifying the Space Monkey Project the returned data is scoped to.'}, 'campaignId': {'type': 'string', 'description': 'Campaign identifier.'}, 'emailsSent': {'type': 'integer', 'description': 'Campaign-level send total; this is the denominator that is deliberately NOT enumerated by this tool.'}, 'nextCursor': {'type': ['string', 'null'], 'description': 'Opaque cursor to request the next page, or null when no more results.'}, 'responders': {'type': 'array', 'items': {'type': 'object', 'properties': {'region': {'type': ['string', 'null'], 'description': 'Region or state-level location string, or null when unknown.'}, 'bounced': {'type': 'boolean', 'description': 'True if the member registered a bounced response to this campaign.'}, 'isLeader': {'type': 'boolean', 'description': 'True when the member qualifies as a leader by engagement.'}, 'lastName': {'type': ['string', 'null'], 'description': "The member's last name, or null when unavailable."}, 'firstName': {'type': ['string', 'null'], 'description': "The member's first name, or null when unavailable."}, 'openCount': {'type': 'integer', 'description': 'Number of times the member opened this campaign.'}, 'clickCount': {'type': 'integer', 'description': 'Number of times the member clicked in this campaign.'}, 'countryCode': {'type': ['string', 'null'], 'description': 'Two-letter country code for the member, or null when unknown.'}, 'emailAddress': {'type': 'string', 'description': "The member's email address."}, 'mailchimpVip': {'type': 'boolean', 'description': 'True when the member is flagged VIP.'}, 'memberRating': {'type': ['number', 'null'], 'description': 'Integer Mailchimp engagement rating for the member (1-5), or null when unrated.'}, 'unsubscribed': {'type': 'boolean', 'description': 'True if the member registered an unsubscribed response to this campaign.'}, 'variantLabel': {'type': ['string', 'null'], 'description': 'Variant label for the campaign, or null.'}, 'engagementType': {'type': ['string', 'null'], 'description': "The member's highest engagement for this campaign."}, 'subscriberHash': {'type': 'string', 'description': 'MD5 of the downcased email and is the canonical member key for joining to the member tools.'}, 'engagementScore': {'type': ['number', 'null'], 'description': "The member's overall engagement percentile across all campaigns on a 0-100 scale, not a campaign-specific figure."}}, 'description': 'one row per member who registered a tracked response to the campaign.', 'additionalProperties': True}, 'description': 'Members who registered a tracked response to the campaign.'}}, 'description': 'Output for the sm_list_campaign_responders tool. Failure payloads arrive in the same envelope as { error, code }.', 'additionalProperties': True}
sm_list_campaigns
List campaigns
List a project's campaigns with performance metrics. Use to map a member's lastActivityAt onto a real send, or to find the latest house send by send_time.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['projectId'], 'properties': {'cursor': {'type': 'string', 'description': 'Opaque keyset pagination cursor returned as `nextCursor` by the previous page. Must be replayed with identical query filters.'}, 'search': {'type': 'string', 'description': 'Filter campaigns by a case-insensitive partial match on the subject line or specific internal campaign IDs. Omit to skip text filtering.'}, 'sortBy': {'enum': ['subject_line', 'send_time', 'emails_sent', 'open_rate', 'click_rate', 'campaign_id'], 'type': 'string', 'default': 'send_time', 'description': 'The field used to order the campaigns list. Defaults to sorting by the most recent send time first.'}, 'endDate': {'type': 'string', 'description': "Inclusive ISO-8601 calendar date (UTC) upper bound for the time range in YYYY-MM-DD format. Omit to leave the end of the time window unbounded or use the endpoint's default."}, 'sortDir': {'enum': ['asc', 'desc'], 'type': 'string', 'default': 'desc', 'description': 'The direction to sort the campaign results. Can be \'asc\' for ascending or \'desc\' for descending. Defaults to "desc" when omitted.'}, 'pageSize': {'type': 'integer', 'default': 100, 'maximum': 100, 'minimum': 1, 'description': "Maximum number of rows to return per page. Omit to use the default page size of 100. MCP tool calls are capped at 100 rows per page to protect the model's context window."}, 'projectId': {'type': 'string', 'minLength': 1, 'description': 'Required. The opaque alphanumeric project identifier of 8 or more characters to scope this request to. Call GET /_api/public/v1/enterprise/projects to list the project IDs available to your API key. Omitting it returns 400 VALIDATION_ERROR.'}, 'startDate': {'type': 'string', 'description': 'Inclusive ISO-8601 calendar date (UTC) lower bound for the time range in YYYY-MM-DD format. Omit to leave the start of the time window unbounded.'}, 'maxSendVolume': {'type': 'integer', 'minimum': 0, 'description': 'Maximum number of emails sent to include the campaign in the results. Omit to impose no upper bound.'}, 'minSendVolume': {'type': 'integer', 'minimum': 0, 'description': 'Minimum number of emails sent to include the campaign in the results. Omit to use the system default threshold.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'code': {'type': 'string', 'description': 'A machine-readable identifier for the error type. For the full code taxonomy, see the sm_get_schema tool or the Enterprise API OpenAPI ErrorResponse component.'}, 'error': {'type': 'string', 'description': 'A human-readable error message detailing what went wrong.'}, 'hasMore': {'type': 'boolean', 'description': 'True if additional results exist beyond this page.'}, 'pageSize': {'type': 'integer', 'description': 'The maximum number of items returned in this page.'}, 'campaigns': {'type': 'array', 'items': {'type': 'object', 'properties': {'openRate': {'type': 'number', 'description': 'Unique opens divided by delivered, as a percentage from 0 to 100.'}, 'sendTime': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'clickRate': {'type': 'number', 'description': 'Unique clicks divided by delivered, as a percentage from 0 to 100.'}, 'campaignId': {'type': 'string', 'description': 'Stable identifier for a Mailchimp campaign. Use it to join rows across tools or drill into sm_get_campaign.'}, 'emailsSent': {'type': 'integer', 'description': 'Number of emails the campaign attempted to send to recipients.'}, 'subjectLine': {'type': 'string', 'description': 'The campaign subject line as sent.'}}, 'description': 'General campaign list view row.', 'additionalProperties': True}, 'description': 'Campaign rows with performance metrics.'}, 'projectId': {'type': 'string', 'description': 'An opaque alphanumeric project identifier of 8 or more characters identifying a Space Monkey Project. Treat this value as entirely opaque; do not parse, sequentialize, or auto-generate it.'}, 'nextCursor': {'type': ['string', 'null'], 'description': 'A keyset cursor marking the continuation point. Contract: this value is non-null if and only if `hasMore` is true. Clients MUST echo this token verbatim on the subsequent request and MUST NEVER attempt to parse or manually construct it.'}}, 'description': 'Output for the sm_list_campaigns tool. Failure payloads arrive in the same envelope as { error, code }.', 'additionalProperties': True}
sm_list_leaders
Rank engaged leaders
Rank the most engaged members of a project by engagement percentile. Use when you need who is paying attention right now, filtered by rep, tag, rating, status or bot/insider rules. engagementScore is a 0-100 percentile here (at-risk tools use a raw score that can go negative), memberRating is Mailchimp's 1-5 rating, and subscriberHash is the MD5 of the member's downcased email, the join key for member-centric tools. Results are paginated with pageSize capped at 100 rows.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['projectId'], 'properties': {'rep': {'type': 'string', 'description': "Filter by an exact match on the assigned sales representative's name. Omit to include members assigned to any rep."}, 'tag': {'type': 'string', 'description': 'Filter by an exact match on a Mailchimp tag or segment name. Omit to include members with any tags.'}, 'cursor': {'type': 'string', 'description': 'Opaque keyset pagination cursor returned as `nextCursor` by the previous page. Must be replayed with identical query filters.'}, 'search': {'type': 'string', 'description': 'Filter leaders by a case-insensitive partial match on their email address, first name, or last name. Omit to skip text filtering.'}, 'sortBy': {'enum': ['engagement_score', 'total_opens', 'total_clicks', 'last_activity_at', 'is_leader', 'member_rating', 'rep_name', 'email_address'], 'type': 'string', 'default': 'engagement_score', 'description': 'The field used to order the leaderboard results. Defaults to sorting by the highest engagement score first.'}, 'status': {'enum': ['all', 'vip', 'non-vip', 'leader'], 'type': 'string', 'default': 'all', 'description': 'Filter members by their specific leader status (e.g. VIP or standard leader). Select \'all\' to include every status. Defaults to "all" when omitted.'}, 'sortDir': {'enum': ['asc', 'desc'], 'type': 'string', 'default': 'desc', 'description': 'The direction to sort the leaderboard results. Can be \'asc\' for ascending or \'desc\' for descending. Defaults to "desc" when omitted.'}, 'maxScore': {'type': 'number', 'minimum': 0, 'description': 'Maximum engagement score percentile to include. The score ranges from 0 to 100. Omit to impose no maximum bound.'}, 'minScore': {'type': 'number', 'minimum': 0, 'description': 'Minimum engagement score percentile to include. The score ranges from 0 to 100. Omit to impose no minimum bound.'}, 'pageSize': {'type': 'number', 'default': 100, 'maximum': 100, 'minimum': 1, 'description': "Maximum number of rows to return per page. Omit to use the default page size of 100. MCP tool calls are capped at 100 rows per page to protect the model's context window."}, 'botFilter': {'enum': ['all', 'suspected-bot', 'clean'], 'type': 'string', 'default': 'all', 'description': 'Filter out members whose interactions appear to be automated bot activity. Select \'suspected-bot\' for only bots, \'clean\' to exclude bots, or \'all\' to ignore. Defaults to "all" when omitted.'}, 'maxRating': {'type': 'integer', 'maximum': 5, 'minimum': 1, 'description': 'Maximum Mailchimp member star rating to include, from 1 to 5. Omit to include every rating.'}, 'minRating': {'type': 'integer', 'maximum': 5, 'minimum': 1, 'description': 'Minimum Mailchimp member star rating to include, from 1 to 5. Omit to include every rating.'}, 'projectId': {'type': 'string', 'minLength': 1, 'description': 'Required. The opaque alphanumeric project identifier of 8 or more characters to scope this request to. Call GET /_api/public/v1/enterprise/projects to list the project IDs available to your API key. Omitting it returns 400 VALIDATION_ERROR.'}, 'leaderOnly': {'type': 'boolean', 'default': True, 'description': 'Restrict the leaderboard strictly to members recognized as highly engaged leaders. Set to false to include the broader audience in the engagement rank. Defaults to true when omitted.'}, 'insiderFilter': {'enum': ['all', 'exclude', 'only'], 'type': 'string', 'default': 'all', 'description': 'Filter out members with internal company email domains or recognized insider addresses. Select \'exclude\' to hide them, \'only\' to show only them, or \'all\' to ignore. Defaults to "all" when omitted.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'code': {'type': 'string', 'description': 'A machine-readable identifier for the error type. For the full code taxonomy, see the sm_get_schema tool or the Enterprise API OpenAPI ErrorResponse component.'}, 'error': {'type': 'string', 'description': 'A human-readable error message detailing what went wrong.'}, 'hasMore': {'type': 'boolean', 'description': 'True if additional results exist beyond this page.'}, 'leaders': {'type': 'array', 'items': {'type': 'object', 'properties': {'vip': {'type': ['boolean', 'null'], 'description': 'True when the member is flagged VIP.'}, 'status': {'type': ['string', 'null'], 'description': 'Subscription status of the leader, or null.'}, 'repName': {'type': ['string', 'null'], 'description': 'Null when owner merge field unmapped'}, 'isLeader': {'type': 'boolean', 'description': 'True when the member qualifies as a leader by engagement.'}, 'lastName': {'type': ['string', 'null'], 'description': "The member's last name, or null when unavailable."}, 'firstName': {'type': ['string', 'null'], 'description': "The member's first name, or null when unavailable."}, 'totalOpens': {'type': 'integer', 'description': 'Total open events, counting repeat opens by the same member.'}, 'totalClicks': {'type': 'integer', 'description': 'Total click events, counting repeat clicks.'}, 'emailAddress': {'type': 'string', 'description': "The member's email address."}, 'memberRating': {'type': ['integer', 'null'], 'description': 'Integer Mailchimp engagement rating for the member (1-5), or null when unrated.'}, 'lastActivityAt': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'subscriberHash': {'type': 'string', 'description': 'Opaque 32-hex-character per-member identifier (MD5 of the lowercased/trimmed email address). It is deterministic and stable across calls, making it safe as a global join key when correlating a member across tools, though it will change if the member changes email address.'}, 'engagementScore': {'type': 'number', 'description': 'Composite engagement score for the leader. Note: This is a 0-100 percentile.'}}, 'description': 'Represents an individual top-tier engaged member. Semantic conflict note: engagementScore here is a 0-100 percentile.', 'additionalProperties': True}, 'description': 'Leader member rows ranked by engagement.'}, 'pageSize': {'type': 'integer', 'description': 'The maximum number of items returned in this page.'}, 'projectId': {'type': 'string', 'description': 'An opaque alphanumeric project identifier of 8 or more characters identifying a Space Monkey Project. Treat this value as entirely opaque; do not parse, sequentialize, or auto-generate it.'}, 'nextCursor': {'type': ['string', 'null'], 'description': 'A keyset cursor marking the continuation point. Contract: this value is non-null if and only if `hasMore` is true. Clients MUST echo this token verbatim on the subsequent request and MUST NEVER attempt to parse or manually construct it.'}, 'repOptions': {'type': 'array', 'items': {'type': 'object', 'properties': {'name': {'type': 'string', 'description': 'Rep name.'}, 'count': {'type': 'integer', 'description': 'Leaders assigned to the rep.'}}, 'description': 'Generic named-count tuple used for Rep and Tag options.', 'additionalProperties': True}, 'description': 'Distinct rep values available for filtering.'}, 'tagOptions': {'type': 'array', 'items': {'type': 'object', 'properties': {'name': {'type': 'string', 'description': 'Tag name.'}, 'count': {'type': 'integer', 'description': 'Leaders carrying the tag.'}}, 'description': 'Generic named-count tuple used for Rep and Tag options.', 'additionalProperties': True}, 'description': 'Distinct tag values available for filtering.'}, 'summaryStats': {'type': 'object', 'properties': {'avgScore': {'type': 'number', 'description': 'Mean member rating among leaders. Note: This is average member rating, not a mean engagement score.'}, 'atRiskCount': {'type': 'integer', 'description': 'Leaders also flagged at risk.'}, 'totalActive': {'type': 'integer', 'description': 'Leaders with recent activity.'}, 'totalLeaders': {'type': 'integer', 'description': 'Total leaders in the audience.'}, 'avgLeaderRating': {'type': 'number', 'description': 'Mean rating among leaders.'}, 'activeLeaderCount': {'type': 'integer', 'description': 'Leaders currently active.'}, 'atRiskLeaderCount': {'type': 'integer', 'description': 'Leaders flagged at risk.'}}, 'description': 'Overall summary stats for leaders. Note: avgScore is actually the average member RATING, preserved for now.', 'additionalProperties': True}, 'leaderboardDistribution': {'type': 'array', 'items': {'type': 'object', 'properties': {'tier': {'type': 'string', 'description': 'Tier label, for example top, core, or watch.'}, 'tierOrder': {'type': 'integer', 'description': 'Ordinal position of the tier for stable sorting.'}, 'leaderCount': {'type': 'integer', 'description': 'Leaders in the tier.'}, 'avgMemberRating': {'type': 'number', 'description': 'Mean member rating in the enclosing bucket.'}, 'subscriberCount': {'type': 'integer', 'description': 'Members in the tier.'}, 'avgEngagementScore': {'type': 'number', 'description': 'Mean engagement score in the tier.'}}, 'description': 'Distribution buckets for leaders across scoring tiers.', 'additionalProperties': True}, 'description': 'Leaderboard tier buckets from highest to lowest engagement.'}}, 'description': 'Output for the sm_list_leaders tool. Failure payloads arrive in the same envelope as { error, code }.', 'additionalProperties': True}
sm_list_members
Browse member directory
Browse or search a project's full member directory. Use when you need people by rating, tag, status or free-text search rather than by engagement rank.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['projectId'], 'properties': {'rep': {'type': 'string', 'description': "Filter by an exact match on the assigned sales representative's name. Omit to include members assigned to any rep."}, 'tag': {'type': 'string', 'description': 'Filter by an exact match on a Mailchimp tag or segment name. Omit to include members with any tags.'}, 'cursor': {'type': 'string', 'description': 'Opaque keyset pagination cursor returned as `nextCursor` by the previous page. Must be replayed with identical query filters.'}, 'leader': {'enum': ['all', 'true', 'false'], 'type': 'string', 'default': 'all', 'description': 'Filter the directory to include only recognized leaders (\'true\'), exclude leaders (\'false\'), or ignore leader status (\'all\'). Defaults to "all" when omitted.'}, 'region': {'type': 'string', 'description': 'Filter members by their exact region or state name as recognized by Mailchimp geography data. Omit to include all regions.'}, 'search': {'type': 'string', 'description': 'Filter the directory by a case-insensitive partial match on email address, first name, or last name. Omit to skip text filtering.'}, 'sortBy': {'enum': ['email', 'name', 'status', 'rating', 'leader', 'company', 'rep', 'tags', 'signup', 'lastChanged', 'lastActivity', 'dimension_one', 'dimension_two', 'dimension_three', 'dimension_four', 'email_address', 'member_rating', 'is_leader', 'company_name', 'rep_name', 'timestamp_opt', 'last_changed', 'last_activity'], 'type': 'string', 'default': 'email', 'description': "The field used to order the directory results. Defaults to sorting alphabetically by email address. The snake_case spellings matching response field names (email_address, member_rating, is_leader, company_name, rep_name, timestamp_opt, last_changed, last_activity, status, tags, dimension_one, dimension_two, dimension_three, dimension_four) are canonical. 'email', 'rating', 'leader', 'company', 'rep', 'signup', 'lastChanged', and 'lastActivity' are accepted deprecated aliases kept for backward compatibility and sort identically to their canonical equivalents. Sorting by company/company_name, rep/rep_name, or dimension_one..dimension_four falls back to ordering by email address when the corresponding merge field is unmapped. 'tags' sorts the raw underlying JSON string, not the string array returned in the response. 'name' is a composite sort across last name, first name, and company name and has no single corresponding response field."}, 'status': {'enum': ['all', 'subscribed', 'unsubscribed', 'cleaned'], 'type': 'string', 'default': 'all', 'description': 'Filter members by their current Mailchimp subscription status. Use \'subscribed\', \'unsubscribed\', \'cleaned\', or \'all\' to include everyone. Defaults to "all" when omitted.'}, 'country': {'type': 'string', 'description': "Filter members by their exact two-letter ISO country code (e.g. 'US', 'GB'). Omit to include all countries."}, 'sortDir': {'enum': ['asc', 'desc'], 'type': 'string', 'default': 'asc', 'description': 'The direction to sort the directory results. Can be \'asc\' for ascending or \'desc\' for descending. Defaults to "asc" when omitted.'}, 'pageSize': {'type': 'number', 'default': 100, 'maximum': 100, 'minimum': 1, 'description': "Maximum number of rows to return per page. Omit to use the default page size of 100. MCP tool calls are capped at 100 rows per page to protect the model's context window."}, 'botFilter': {'enum': ['all', 'suspected-bot', 'clean'], 'type': 'string', 'default': 'all', 'description': 'Filter out members whose interactions appear to be automated bot activity. Select \'suspected-bot\' for only bots, \'clean\' to exclude bots, or \'all\' to ignore. Defaults to "all" when omitted.'}, 'maxRating': {'type': 'integer', 'maximum': 5, 'minimum': 1, 'description': 'Maximum Mailchimp member star rating to include, from 1 to 5. Omit to include every rating.'}, 'minRating': {'type': 'integer', 'maximum': 5, 'minimum': 1, 'description': 'Minimum Mailchimp member star rating to include, from 1 to 5. Omit to include every rating.'}, 'projectId': {'type': 'string', 'minLength': 1, 'description': 'Required. The opaque alphanumeric project identifier of 8 or more characters to scope this request to. Call GET /_api/public/v1/enterprise/projects to list the project IDs available to your API key. Omitting it returns 400 VALIDATION_ERROR.'}, 'dimensionOne': {'type': 'string', 'description': 'Filter members by an exact match on custom dimension one. Dimension values are derived from mapped Mailchimp merge fields. Omit to skip.'}, 'dimensionTwo': {'type': 'string', 'description': 'Filter members by an exact match on custom dimension two. Dimension values are derived from mapped Mailchimp merge fields. Omit to skip.'}, 'dimensionFour': {'type': 'string', 'description': 'Filter members by an exact match on custom dimension four. Dimension values are derived from mapped Mailchimp merge fields. Omit to skip.'}, 'insiderFilter': {'enum': ['all', 'exclude', 'only'], 'type': 'string', 'default': 'all', 'description': 'Filter out members with internal company email domains or recognized insider addresses. Select \'exclude\' to hide them, \'only\' to show only them, or \'all\' to ignore. Defaults to "all" when omitted.'}, 'dimensionThree': {'type': 'string', 'description': 'Filter members by an exact match on custom dimension three. Dimension values are derived from mapped Mailchimp merge fields. Omit to skip.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'code': {'type': 'string', 'description': 'A machine-readable identifier for the error type. For the full code taxonomy, see the sm_get_schema tool or the Enterprise API OpenAPI ErrorResponse component.'}, 'error': {'type': 'string', 'description': 'A human-readable error message detailing what went wrong.'}, 'hasMore': {'type': 'boolean', 'description': 'True if additional results exist beyond this page.'}, 'members': {'type': 'array', 'items': {'type': 'object', 'properties': {'vip': {'type': 'boolean', 'description': 'True when the member is flagged VIP.'}, 'tags': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Tag identifiers attached to the member.'}, 'region': {'type': ['string', 'null'], 'description': 'Region or state-level location string, or null when unknown.'}, 'status': {'type': 'string', 'description': 'Subscription status of the member.'}, 'repName': {'type': ['string', 'null'], 'description': 'Internal owner or rep assigned to the member, or null when unassigned.'}, 'isLeader': {'type': 'boolean', 'description': 'True when the member qualifies as a leader by engagement.'}, 'lastName': {'type': ['string', 'null'], 'description': "The member's last name, or null when unavailable."}, 'firstName': {'type': ['string', 'null'], 'description': "The member's first name, or null when unavailable."}, 'companyName': {'type': ['string', 'null'], 'description': 'The company associated with the member, or null when unknown.'}, 'countryCode': {'type': ['string', 'null'], 'description': 'Two-letter country code for the member, or null when unknown.'}, 'lastChanged': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'dimensionOne': {'type': ['string', 'null'], 'description': 'First custom dimension value for the member, or null.'}, 'dimensionTwo': {'type': ['string', 'null'], 'description': 'Second custom dimension value for the member, or null.'}, 'emailAddress': {'type': 'string', 'description': "The member's email address."}, 'lastActivity': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'memberRating': {'type': ['integer', 'null'], 'description': 'Integer Mailchimp engagement rating for the member (1-5), or null when unrated.'}, 'timestampOpt': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'dimensionFour': {'type': ['string', 'null'], 'description': 'Fourth custom dimension value for the member, or null.'}, 'dimensionThree': {'type': ['string', 'null'], 'description': 'Third custom dimension value for the member, or null.'}, 'subscriberHash': {'type': 'string', 'description': 'Opaque 32-hex-character per-member identifier (MD5 of the lowercased/trimmed email address). It is deterministic and stable across calls, making it safe as a global join key when correlating a member across tools, though it will change if the member changes email address.'}}, 'description': 'Represents a single member in the paginated directory.', 'additionalProperties': True}, 'description': 'Member directory rows.'}, 'pageSize': {'type': 'integer', 'description': 'The maximum number of items returned in this page.'}, 'projectId': {'type': 'string', 'description': 'An opaque alphanumeric project identifier of 8 or more characters identifying a Space Monkey Project. Treat this value as entirely opaque; do not parse, sequentialize, or auto-generate it.'}, 'nextCursor': {'type': ['string', 'null'], 'description': 'A keyset cursor marking the continuation point. Contract: this value is non-null if and only if `hasMore` is true. Clients MUST echo this token verbatim on the subsequent request and MUST NEVER attempt to parse or manually construct it.'}}, 'description': 'Output for the sm_list_members tool. Failure payloads arrive in the same envelope as { error, code }.', 'additionalProperties': True}
sm_list_projects
List projects
Resolve which Space Monkey projects this API key can read. Call this first when the user names a company rather than a project ID, and match on companyName — never silently mix projects.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': [], 'properties': {}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'code': {'type': 'string', 'description': 'A machine-readable identifier for the error type. For the full code taxonomy, see the sm_get_schema tool or the Enterprise API OpenAPI ErrorResponse component.'}, 'count': {'type': 'integer', 'description': 'Number of projects returned.'}, 'error': {'type': 'string', 'description': 'A human-readable error message detailing what went wrong.'}, 'projects': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string', 'description': '8-char Hashid of the internal integer id.'}, 'name': {'type': 'string', 'description': 'Display name of the project.'}, 'companyName': {'type': ['string', 'null'], 'description': 'Company associated with the project, or null when unset.'}}, 'description': 'Basic project information.', 'additionalProperties': True}, 'description': 'Project rows this key can read.'}}, 'description': 'Output for the sm_list_projects tool. Failure payloads arrive in the same envelope as { error, code }.', 'additionalProperties': True}
sm_list_prompts
List prompt workflows
List the Space Monkey prompt workflows: user-invocable recipes that chain sm_ tools into this week's sales actions (build call sheets, strike after a send, save cooling leaders, harvest an event, brief before a call). Each entry lists its arguments and its category. Use sm_get_prompt to render one with concrete argument values, then follow the rendered instructions to run the workflow.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': [], 'properties': {}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'code': {'type': 'string', 'description': 'A machine-readable identifier for the error type. For the full code taxonomy, see the sm_get_schema tool or the Enterprise API OpenAPI ErrorResponse component.'}, 'error': {'type': 'string', 'description': 'A human-readable error message detailing what went wrong.'}, 'prompts': {'type': 'array', 'items': {'type': 'object', 'properties': {'name': {'type': 'string', 'description': 'Prompt name.'}, 'title': {'type': 'string', 'description': 'Prompt title.'}, 'category': {'type': 'string', 'description': 'Sales-stage category.'}, 'arguments': {'type': 'array', 'items': {'type': 'object', 'properties': {'ui': {'type': 'string', 'description': 'Suggested input control.'}, 'name': {'type': 'string', 'description': 'Argument name.'}, 'required': {'type': 'boolean', 'description': 'True when the argument is required.'}, 'description': {'type': 'string', 'description': 'Argument description.'}}, 'additionalProperties': True}, 'description': 'Prompt arguments with metadata.'}, 'description': {'type': 'string', 'description': 'Prompt description.'}}, 'additionalProperties': True}, 'description': 'Prompt workflow rows.'}, 'version': {'type': 'string', 'description': 'Version string for the enclosing catalog or document.'}, 'lastUpdated': {'type': 'string', 'description': 'ISO 8601 instant the underlying data was last refreshed.'}, 'promptCount': {'type': 'number', 'description': 'Number of prompts in the catalog.'}, 'catalogSource': {'type': 'string', 'description': 'Source descriptor for the enclosing catalog.'}}, 'description': 'Flattened catalog of available prompt workflows. Failure payloads arrive in the same envelope as { error, code }.', 'additionalProperties': True}
sm_list_sync_runs
List sync runs
List recent data-pipeline sync runs with status and results. Operational tool for checking data freshness before trusting an analysis. Results are paginated with pageSize capped at 100 rows.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['projectId'], 'properties': {'cursor': {'type': 'string', 'description': 'Opaque keyset pagination cursor returned as `nextCursor` by the previous page. Must be replayed with identical query filters.'}, 'pageSize': {'type': 'number', 'default': 100, 'maximum': 100, 'minimum': 1, 'description': "Maximum number of rows to return per page. Omit to use the default page size of 100. MCP tool calls are capped at 100 rows per page to protect the model's context window."}, 'projectId': {'type': 'string', 'minLength': 1, 'description': 'Required. The opaque alphanumeric project identifier of 8 or more characters to scope this request to. Call GET /_api/public/v1/enterprise/projects to list the project IDs available to your API key. Omitting it returns 400 VALIDATION_ERROR.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'code': {'type': 'string', 'description': 'A machine-readable identifier for the error type. For the full code taxonomy, see the sm_get_schema tool or the Enterprise API OpenAPI ErrorResponse component.'}, 'runs': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Identifier for the sync run.'}, 'status': {'enum': ['queued', 'pending', 'running', 'paused', 'success', 'partial', 'failed', 'cancelled'], 'type': 'string', 'description': 'Run status, for example queued, running, completed, or failed.'}, 'endedAt': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'createdAt': {'type': ['string', 'null'], 'description': 'ISO 8601 UTC timestamp.'}, 'projectId': {'type': 'string', 'description': 'Project the run belongs to.'}, 'startedAt': {'type': 'string', 'description': 'ISO 8601 UTC timestamp.'}, 'retryCount': {'type': ['integer', 'null'], 'description': 'Retries applied, or null.'}, 'projectName': {'type': 'string', 'description': 'Project name.'}, 'totalTables': {'type': 'integer', 'description': 'Target tables covered.'}, 'triggerType': {'enum': ['manual', 'scheduled'], 'type': 'string', 'description': 'What initiated the run.'}, 'errorMessage': {'type': ['string', 'null'], 'description': 'Failure detail, or null on success.'}, 'resultsCount': {'type': 'integer', 'description': 'Per-stage results recorded.'}}, 'description': 'Represents a single sync run in the paginated list.', 'additionalProperties': True}, 'description': 'Sync run rows.'}, 'error': {'type': 'string', 'description': 'A human-readable error message detailing what went wrong.'}, 'hasMore': {'type': 'boolean', 'description': 'True if additional results exist beyond this page.'}, 'pageSize': {'type': 'integer', 'description': 'The maximum number of items returned in this page.'}, 'projectId': {'type': 'string', 'description': 'An opaque alphanumeric project identifier of 8 or more characters identifying a Space Monkey Project. Treat this value as entirely opaque; do not parse, sequentialize, or auto-generate it.'}, 'nextCursor': {'type': ['string', 'null'], 'description': 'A keyset cursor marking the continuation point. Contract: this value is non-null if and only if `hasMore` is true. Clients MUST echo this token verbatim on the subsequent request and MUST NEVER attempt to parse or manually construct it.'}}, 'description': 'Output for the sm_list_sync_runs tool. Failure payloads arrive in the same envelope as { error, code }.', 'additionalProperties': True}
已更改
sm_get_knowledge
2026年10月1日 02:53
已更改
sm_get_campaign_post_mortem
2026年10月1日 02:53
已添加
sm_get_campaign_post_mortem
2026年9月29日 03:02
已更改
sm_get_knowledge
2026年9月23日 02:53
已更改
sm_get_insights_basic
2026年9月21日 03:00
已添加
sm_get_prompt
2026年9月17日 12:35
已添加
sm_list_prompts
2026年9月17日 12:35
已添加
sm_get_schema
2026年9月17日 12:35
已添加
sm_get_knowledge
2026年9月17日 12:35
已添加
sm_get_sync_run
2026年9月17日 12:35
已添加
sm_list_sync_runs
2026年9月17日 12:35
已添加
sm_get_member_geo
2026年9月17日 12:35
已添加
sm_get_member_segments
2026年9月17日 12:35
已添加
sm_get_member_growth
2026年9月17日 12:35
已添加
sm_get_member_overview
2026年9月17日 12:35
已添加
sm_get_insights_expert
2026年9月17日 12:35
已添加
sm_get_insights_advanced
2026年9月17日 12:35
已添加
sm_get_insights_basic
2026年9月17日 12:35
已添加
sm_list_campaign_responders
2026年9月17日 12:35
已添加
sm_get_variate
2026年9月17日 12:35
已添加
sm_get_campaign
2026年9月17日 12:35
已添加
sm_list_campaigns
2026年9月17日 12:35
已添加
sm_get_member_timeline
2026年9月17日 12:35
已添加
sm_get_member_campaigns
2026年9月17日 12:35
已添加
sm_get_member
2026年9月17日 12:35
已添加
sm_list_members
2026年9月17日 12:35
已添加
sm_list_at_risk
2026年9月17日 12:35
已添加
sm_list_leaders
2026年9月17日 12:35
已添加
sm_get_account
2026年9月17日 12:35
已添加
sm_list_projects
2026年9月17日 12:35