Server definition
- Hash
- sha256:b022fb6565d26265c11fb0eb5a795966ba5d876e2e5e9b5a0f74f92712ce5e87
- What it is
- What a remote MCP server returned when asked what it offers: 26 tools
The blob, as servednamed by its sha256
{
"instructions": "Space Monkey turns Mailchimp campaign and audience engagement data into queryable intelligence on top of a BigQuery pipeline. Resolve the project first with sm_list_projects whenever the user names a company rather than a project ID, then use the leaders/members/campaigns/insights tools to answer engagement questions — every tool call is synchronous, there is no async job or polling to manage. Tool families do not overlap: the sm_get_member_* tools answer member-level composition and lifecycle questions (status, rating, rep, language, signup cohorts, churn, retention), while the sm_get_insights_* tiers answer Mailchimp-list and campaign-level aggregates (per-audience sizes, unsubscribe and cleaned counts, open and click rates, the subscriber-growth series) — when a question could be served by either, pick by whose subject it is and call one, not both. All tools are strictly read-only: nothing here sends email or mutates Mailchimp data, but each tools/call still debits both the MCP and Enterprise API quotas, so avoid redundant calls. Read space-monkey://analyst-preamble (or call sm_get_knowledge if your client cannot read MCP resources) before interpreting any metric. tools/call requires an OAuth 2.1 access token; your client can discover the authorization server automatically, or you may still send a legacy Enterprise API key as Authorization: Bearer sm_... HTTP header.",
"tools": [
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {},
"required": [],
"type": "object"
},
"name": "sm_get_account",
"outputSchema": {
"additionalProperties": true,
"description": "Output for the sm_get_account tool. Failure payloads arrive in the same envelope as { error, code }.",
"properties": {
"account": {
"additionalProperties": true,
"description": "Basic enterprise account details.",
"properties": {
"displayName": {
"description": "Human-readable account name.",
"type": "string"
}
},
"type": "object"
},
"code": {
"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.",
"type": "string"
},
"entitlements": {
"description": "Per-service entitlement rows defining allowed access.",
"items": {
"additionalProperties": true,
"properties": {
"isEnabled": {
"description": "True if the current subscription tier permits access.",
"type": "boolean"
},
"rateLimitHour": {
"description": "The hourly quota boundary for this service.",
"type": "integer"
},
"rateLimitMonth": {
"description": "The monthly quota boundary for this service.",
"type": "integer"
},
"service": {
"description": "The name of the service this entitlement governs.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"error": {
"description": "A human-readable error message detailing what went wrong.",
"type": "string"
},
"projectCount": {
"description": "Number of projects this key can read.",
"type": "integer"
},
"tier": {
"additionalProperties": true,
"description": "Tier information for the enterprise account.",
"properties": {
"displayName": {
"description": "Human-readable tier name.",
"type": "string"
},
"id": {
"description": "A varchar tier identifier, typically free/starter/pro/enterprise.",
"type": "string"
}
},
"type": "object"
},
"usage": {
"additionalProperties": true,
"description": "Current-hour and current-month quota usage.",
"properties": {
"limitHour": {
"description": "Maximum requests allowed per hour.",
"type": "integer"
},
"limitMonth": {
"description": "Maximum requests allowed per month.",
"type": "integer"
},
"resetHour": {
"description": "UTC Unix epoch seconds when the hourly limit resets.",
"type": "integer"
},
"resetMonth": {
"description": "UTC Unix epoch seconds when the monthly limit resets.",
"type": "integer"
},
"usedHour": {
"description": "Requests utilized in the current hour window.",
"type": "integer"
},
"usedMonth": {
"description": "Requests utilized in the current month window.",
"type": "integer"
}
},
"type": "object"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"campaignId": {
"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.",
"minLength": 1,
"type": "string"
},
"projectId": {
"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.",
"minLength": 1,
"type": "string"
}
},
"required": [
"projectId",
"campaignId"
],
"type": "object"
},
"name": "sm_get_campaign",
"outputSchema": {
"additionalProperties": true,
"description": "Output for the sm_get_campaign tool. Failure payloads arrive in the same envelope as { error, code }.",
"properties": {
"campaignMeta": {
"additionalProperties": true,
"description": "Metadata for a campaign, including raw stringified JSON variate settings. May be null.",
"properties": {
"campaignType": {
"description": "Mailchimp campaign type, or null when unknown.",
"type": [
"string",
"null"
]
},
"variateSettings": {
"description": "Raw JSON string passed verbatim",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"code": {
"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.",
"type": "string"
},
"error": {
"description": "A human-readable error message detailing what went wrong.",
"type": "string"
},
"performance": {
"additionalProperties": true,
"description": "Detailed performance for individual campaigns. May be null.",
"properties": {
"bounceRate": {
"description": "Bounces divided by emails sent, as a percentage from 0 to 100.",
"type": [
"number",
"null"
]
},
"campaignId": {
"description": "Campaign identifier.",
"type": "string"
},
"clickRate": {
"description": "Unique clicks divided by delivered, as a percentage from 0 to 100.",
"type": [
"number",
"null"
]
},
"clickToOpenRate": {
"description": "Unique clicks divided by unique opens, as a percentage from 0 to 100.",
"type": [
"number",
"null"
]
},
"clicksTotal": {
"description": "Total click events, counting repeat clicks.",
"type": "integer"
},
"deliveries": {
"description": "Number of emails accepted for delivery by the receiving mail system.",
"type": "integer"
},
"deliveryRate": {
"description": "Delivered divided by emails sent, as a percentage from 0 to 100.",
"type": [
"number",
"null"
]
},
"emailsSent": {
"description": "Emails the campaign sent.",
"type": "integer"
},
"openRate": {
"description": "Unique opens divided by delivered, as a percentage from 0 to 100.",
"type": [
"number",
"null"
]
},
"opensTotal": {
"description": "Total open events, counting repeat opens by the same member.",
"type": "integer"
},
"sendTime": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
},
"subjectLine": {
"description": "Campaign subject line.",
"type": "string"
},
"totalBounces": {
"description": "Hard plus soft bounces for the campaign.",
"type": "integer"
},
"uniqueClicks": {
"description": "Number of distinct members who clicked at least once.",
"type": "integer"
},
"uniqueOpens": {
"description": "Number of distinct members who opened at least once.",
"type": "integer"
},
"unsubscribeRate": {
"description": "Unsubscribes divided by delivered, as a percentage from 0 to 100.",
"type": [
"number",
"null"
]
},
"unsubscribed": {
"description": "Unsubscribes for the campaign.",
"type": "integer"
}
},
"type": "object"
},
"projectId": {
"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.",
"type": "string"
},
"report": {
"additionalProperties": true,
"description": "Comprehensive details for a single campaign. May be null.",
"properties": {
"abuseReports": {
"description": "Number of recipients who reported the campaign as spam.",
"type": "integer"
},
"bounceRate": {
"description": "Bounces divided by emails sent, as a percentage from 0 to 100.",
"type": "number"
},
"campaignId": {
"description": "Stable identifier for a Mailchimp campaign. Use it to join rows across tools or drill into sm_get_campaign.",
"type": "string"
},
"campaignType": {
"description": "Mailchimp campaign type.",
"type": "string"
},
"clickRate": {
"description": "Unique clicks divided by delivered, as a percentage from 0 to 100.",
"type": "number"
},
"clickToOpenRate": {
"description": "Unique clicks divided by unique opens, as a percentage from 0 to 100.",
"type": "number"
},
"delivered": {
"description": "Number of emails accepted for delivery by the receiving mail system.",
"type": "integer"
},
"deliveryRate": {
"description": "Delivered divided by emails sent, as a percentage from 0 to 100.",
"type": "number"
},
"emailsSent": {
"description": "Number of emails the campaign attempted to send to recipients.",
"type": "integer"
},
"forwardsCount": {
"description": "Number of forward events. Forwards are not a working metric and must never be used to rank, recommend, or brief.",
"type": "integer"
},
"hardBounces": {
"description": "Emails rejected for permanent reasons such as an invalid address. Not retried.",
"type": "integer"
},
"listName": {
"description": "Audience the campaign was sent to.",
"type": "string"
},
"openRate": {
"description": "Unique opens divided by delivered, as a percentage from 0 to 100.",
"type": "number"
},
"previewText": {
"description": "Preview text for the campaign.",
"type": "string"
},
"sendTime": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
},
"softBounces": {
"description": "Emails rejected for temporary reasons. Mailchimp may retry delivery.",
"type": "integer"
},
"subjectLine": {
"description": "The campaign subject line as sent.",
"type": "string"
},
"totalClicks": {
"description": "Total click events, counting repeat clicks.",
"type": "integer"
},
"totalOpens": {
"description": "Total open events, counting repeat opens by the same member.",
"type": "integer"
},
"uniqueClicks": {
"description": "Number of distinct members who clicked at least once.",
"type": "integer"
},
"uniqueOpens": {
"description": "Number of distinct members who opened at least once.",
"type": "integer"
},
"unsubscribes": {
"description": "Number of unsubscribe events for the campaign.",
"type": "integer"
}
},
"type": "object"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"botFilter": {
"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.",
"enum": [
"all",
"suspected-bot",
"clean"
],
"type": "string"
},
"campaignId": {
"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.",
"pattern": "^[a-zA-Z0-9_-]+$",
"type": "string"
},
"projectId": {
"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.",
"minLength": 1,
"type": "string"
}
},
"required": [
"projectId",
"campaignId"
],
"type": "object"
},
"name": "sm_get_campaign_post_mortem",
"outputSchema": {
"additionalProperties": true,
"description": "Output for the sm_get_campaign_post_mortem tool. Failure payloads arrive in the same envelope as { error, code }.",
"properties": {
"audienceQuality": {
"description": "May be null.",
"items": {
"additionalProperties": true,
"description": "Measures the quality of audience engaging with the campaign.",
"properties": {
"avgClicksPerMember": {
"description": "Mean click events per engaged member.",
"type": "number"
},
"avgEngagementScore": {
"description": "Mean engagement score in the enclosing bucket.",
"type": [
"number",
"null"
]
},
"avgMemberRating": {
"description": "Mean member rating in the enclosing bucket.",
"type": [
"number",
"null"
]
},
"avgOpensPerMember": {
"description": "Mean open events per engaged member.",
"type": "number"
},
"clickToOpenRate": {
"description": "Unique clicks divided by unique opens, as a percentage from 0 to 100.",
"type": "number"
},
"leaderCount": {
"description": "Number of leaders in the enclosing bucket.",
"type": "integer"
},
"repeatClickers": {
"description": "Members who clicked more than once.",
"type": "integer"
},
"repeatOpeners": {
"description": "Members who opened more than once.",
"type": "integer"
},
"totalEngagedMembers": {
"description": "Members with any tracked engagement.",
"type": "integer"
},
"variantLabel": {
"description": "Variant label for the campaign, or null.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"code": {
"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.",
"type": "string"
},
"error": {
"description": "A human-readable error message detailing what went wrong.",
"type": "string"
},
"performance": {
"additionalProperties": true,
"description": "Comprehensive details for a single campaign. May be null.",
"properties": {
"abuseReports": {
"description": "Number of recipients who reported the campaign as spam.",
"type": "integer"
},
"bounceRate": {
"description": "Bounces divided by emails sent, as a percentage from 0 to 100.",
"type": "number"
},
"campaignId": {
"description": "Stable identifier for a Mailchimp campaign. Use it to join rows across tools or drill into sm_get_campaign.",
"type": "string"
},
"campaignType": {
"description": "The Mailchimp campaign type, for example regular, plaintext, variate, or automation.",
"type": "string"
},
"clickRate": {
"description": "Unique clicks divided by delivered, as a percentage from 0 to 100.",
"type": "number"
},
"clickToOpenRate": {
"description": "Unique clicks divided by unique opens, as a percentage from 0 to 100.",
"type": "number"
},
"delivered": {
"description": "Number of emails accepted for delivery by the receiving mail system.",
"type": "integer"
},
"deliveryRate": {
"description": "Delivered divided by emails sent, as a percentage from 0 to 100.",
"type": "number"
},
"emailsSent": {
"description": "Number of emails the campaign attempted to send to recipients.",
"type": "integer"
},
"forwardsCount": {
"description": "Number of forward events. Forwards are not a working metric and must never be used to rank, recommend, or brief.",
"type": "integer"
},
"hardBounces": {
"description": "Emails rejected for permanent reasons such as an invalid address. Not retried.",
"type": "integer"
},
"listName": {
"description": "The Mailchimp audience this campaign was sent to.",
"type": "string"
},
"openRate": {
"description": "Unique opens divided by delivered, as a percentage from 0 to 100.",
"type": "number"
},
"previewText": {
"description": "The preview text shown next to the subject line in inbox clients.",
"type": "string"
},
"sendTime": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
},
"softBounces": {
"description": "Emails rejected for temporary reasons. Mailchimp may retry delivery.",
"type": "integer"
},
"subjectLine": {
"description": "The campaign subject line as sent.",
"type": "string"
},
"totalClicks": {
"description": "Total click events, counting repeat clicks.",
"type": "integer"
},
"totalOpens": {
"description": "Total open events, counting repeat opens by the same member.",
"type": "integer"
},
"uniqueClicks": {
"description": "Number of distinct members who clicked at least once.",
"type": "integer"
},
"uniqueOpens": {
"description": "Number of distinct members who opened at least once.",
"type": "integer"
},
"unsubscribes": {
"description": "Number of unsubscribe events for the campaign.",
"type": "integer"
}
},
"type": "object"
},
"projectId": {
"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.",
"type": "string"
},
"summary": {
"additionalProperties": true,
"description": "Short human-readable summary for the enclosing item.",
"properties": {
"audienceSize": {
"description": "May be null.",
"type": "integer"
},
"campaignId": {
"description": "May be null.",
"type": "string"
},
"isVariate": {
"description": "True when the campaign is an A/B (variate) test.",
"type": "boolean"
},
"sendTime": {
"description": "May be null.",
"type": "string"
},
"subjectLine": {
"description": "May be null.",
"type": "string"
},
"type": {
"description": "May be null.",
"type": "string"
}
},
"type": "object"
},
"variate": {
"additionalProperties": true,
"description": "May be null.",
"properties": {
"audienceQuality": {
"description": "Per-variant audience-quality rows.",
"items": {
"additionalProperties": true,
"description": "Measures the quality of audience engaging with the campaign.",
"properties": {
"avgClicksPerMember": {
"description": "Mean click events per engaged member.",
"type": "number"
},
"avgEngagementScore": {
"description": "Mean engagement score in the enclosing bucket.",
"type": [
"number",
"null"
]
},
"avgMemberRating": {
"description": "Mean member rating in the enclosing bucket.",
"type": [
"number",
"null"
]
},
"avgOpensPerMember": {
"description": "Mean open events per engaged member.",
"type": "number"
},
"clickToOpenRate": {
"description": "Unique clicks divided by unique opens, as a percentage from 0 to 100.",
"type": "number"
},
"leaderCount": {
"description": "Number of leaders in the enclosing bucket.",
"type": "integer"
},
"repeatClickers": {
"description": "Members who clicked more than once.",
"type": "integer"
},
"repeatOpeners": {
"description": "Members who opened more than once.",
"type": "integer"
},
"totalEngagedMembers": {
"description": "Members with any tracked engagement.",
"type": "integer"
},
"variantLabel": {
"description": "Variant label for the campaign, or null.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"engagementVelocity": {
"description": "Per-variant engagement velocity rows.",
"items": {
"additionalProperties": true,
"description": "Velocity of opens and clicks post-send.",
"properties": {
"clicks": {
"description": "Click-events count observed over the enclosing window.",
"type": "integer"
},
"hoursAfterSend": {
"description": "0-72",
"type": "integer"
},
"opens": {
"description": "Open-events count observed over the enclosing window.",
"type": "integer"
},
"variantLabel": {
"description": "Variant label for the campaign, or null.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"funnelData": {
"description": "Per-variant funnel rows from recipients through unique clickers.",
"items": {
"additionalProperties": true,
"description": "Funnel metrics for a campaign or variant.",
"properties": {
"recipients": {
"description": "Number of recipients the variant or campaign targeted.",
"type": "integer"
},
"uniqueClickers": {
"description": "Number of distinct members who clicked at least once.",
"type": "integer"
},
"uniqueOpeners": {
"description": "Number of distinct members who opened at least once.",
"type": "integer"
},
"variantLabel": {
"description": "Variant label for the campaign, or null.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"geoBreakdown": {
"description": "Per-variant geography rollup rows.",
"items": {
"additionalProperties": true,
"description": "Geographic distribution of campaign engagement.",
"properties": {
"engagedCount": {
"description": "Engaged members in the region.",
"type": "integer"
},
"stateRegion": {
"description": "State or region.",
"type": "string"
},
"variantLabel": {
"description": "Variant label for the campaign, or null.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"timeToFirstOpen": {
"description": "Per-variant time-to-first-open statistics.",
"items": {
"additionalProperties": true,
"description": "Analysis of time until the first open occurs.",
"properties": {
"avgMinutes": {
"description": "Mean minutes to the enclosing outcome.",
"type": "number"
},
"maxMinutes": {
"description": "Maximum minutes to the enclosing outcome.",
"type": "integer"
},
"medianMinutes": {
"description": "Median minutes to the enclosing outcome.",
"type": "integer"
},
"minMinutes": {
"description": "Minimum minutes to the enclosing outcome.",
"type": "integer"
},
"openers": {
"description": "Number of distinct members who opened.",
"type": "integer"
},
"variantLabel": {
"description": "Variant label for the campaign, or null.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"variantReports": {
"description": "Per-variant performance rows.",
"items": {
"additionalProperties": true,
"description": "Performance reports split by campaign variant.",
"properties": {
"clicksTotal": {
"description": "Total click events, counting repeat clicks.",
"type": "integer"
},
"emailsSent": {
"description": "Number of emails the campaign attempted to send to recipients.",
"type": "integer"
},
"hardBounces": {
"description": "Emails rejected for permanent reasons such as an invalid address. Not retried.",
"type": "integer"
},
"opensTotal": {
"description": "Total open events, counting repeat opens by the same member.",
"type": "integer"
},
"softBounces": {
"description": "Emails rejected for temporary reasons. Mailchimp may retry delivery.",
"type": "integer"
},
"subjectLine": {
"description": "The campaign subject line as sent.",
"type": "string"
},
"uniqueClicks": {
"description": "Number of distinct members who clicked at least once.",
"type": "integer"
},
"uniqueOpens": {
"description": "Number of distinct members who opened at least once.",
"type": "integer"
},
"unsubscribed": {
"description": "Recipients who unsubscribed, when the enclosing row is per-campaign.",
"type": "integer"
},
"variantLabel": {
"description": "A, B, C, or Campaign for non-variate",
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
},
"velocity": {
"additionalProperties": true,
"description": "May be null.",
"properties": {
"hourlyEngagement": {
"description": "Hourly open and click counts after send.",
"items": {
"additionalProperties": true,
"description": "Velocity of opens and clicks post-send.",
"properties": {
"clicks": {
"description": "Click-events count observed over the enclosing window.",
"type": "integer"
},
"hoursAfterSend": {
"description": "0-72",
"type": "integer"
},
"opens": {
"description": "Open-events count observed over the enclosing window.",
"type": "integer"
},
"variantLabel": {
"description": "Variant label for the campaign, or null.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"timeToFirstOpen": {
"description": "Per-variant time-to-first-open statistics.",
"items": {
"additionalProperties": true,
"description": "Analysis of time until the first open occurs.",
"properties": {
"avgMinutes": {
"description": "Mean minutes to the enclosing outcome.",
"type": "number"
},
"maxMinutes": {
"description": "Maximum minutes to the enclosing outcome.",
"type": "integer"
},
"medianMinutes": {
"description": "Median minutes to the enclosing outcome.",
"type": "integer"
},
"minMinutes": {
"description": "Minimum minutes to the enclosing outcome.",
"type": "integer"
},
"openers": {
"description": "Number of distinct members who opened.",
"type": "integer"
},
"variantLabel": {
"description": "Variant label for the campaign, or null.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"campaignId": {
"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.",
"pattern": "^[a-zA-Z0-9_-]+$",
"type": "string"
},
"endDate": {
"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.",
"type": "string"
},
"maxSendVolume": {
"description": "Maximum number of emails sent to include a campaign in the insights aggregations. Omit to impose no upper bound.",
"minimum": 0,
"type": "integer"
},
"minSendVolume": {
"description": "Minimum number of emails sent to include a campaign in the insights aggregations. Omit to use the system default threshold.",
"minimum": 0,
"type": "integer"
},
"projectId": {
"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.",
"minLength": 1,
"type": "string"
},
"startDate": {
"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.",
"type": "string"
}
},
"required": [
"projectId"
],
"type": "object"
},
"name": "sm_get_insights_advanced",
"outputSchema": {
"additionalProperties": true,
"description": "Output for the sm_get_insights_advanced tool. Failure payloads arrive in the same envelope as { error, code }.",
"properties": {
"audienceSummary": {
"description": "Current audience status rollup: one row per member status with the member count.",
"items": {
"additionalProperties": true,
"description": "Audience status summary counts.",
"properties": {
"memberCount": {
"description": "Members in the status.",
"type": "integer"
},
"status": {
"description": "Subscription status.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"campaignAverages": {
"description": "Single summary row of aggregate campaign metrics for the current period.",
"items": {
"additionalProperties": true,
"description": "Aggregated averages and totals across campaigns.",
"properties": {
"avgBounceRate": {
"description": "Mean bounce rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgClickRate": {
"description": "Mean click rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgClickToOpenRate": {
"description": "Mean click-to-open rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgDeliveryRate": {
"description": "Mean delivery rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgEmailsSent": {
"description": "Mean emails sent per campaign in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgOpenRate": {
"description": "Mean open rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"totalAbuseReports": {
"description": "Total abuse reports across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
},
"totalBounces": {
"description": "Hard plus soft bounces.",
"type": [
"integer",
"null"
]
},
"totalCampaigns": {
"description": "Total number of campaigns the enclosing summary covers.",
"type": "integer"
},
"totalClicks": {
"description": "Total click events, counting repeat clicks.",
"type": [
"integer",
"null"
]
},
"totalEmailsSent": {
"description": "Total emails sent across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
},
"totalForwards": {
"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.",
"type": [
"integer",
"null"
]
},
"totalHardBounces": {
"description": "Total permanent bounce events across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
},
"totalOpens": {
"description": "Total open events, counting repeat opens by the same member.",
"type": [
"integer",
"null"
]
},
"totalSoftBounces": {
"description": "Total temporary bounce events across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
},
"totalUnsubscribes": {
"description": "Total unsubscribe events across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"campaignConsistency": {
"additionalProperties": true,
"description": "Statistical consistency metrics for campaign performance. May be null.",
"properties": {
"clickRateStddev": {
"description": "Click-rate standard deviation.",
"type": [
"number",
"null"
]
},
"maxClickRate": {
"description": "Highest click rate.",
"type": [
"number",
"null"
]
},
"maxOpenRate": {
"description": "Highest open rate.",
"type": [
"number",
"null"
]
},
"medianClickRate": {
"description": "Median click rate.",
"type": [
"number",
"null"
]
},
"medianOpenRate": {
"description": "Median open rate.",
"type": [
"number",
"null"
]
},
"minClickRate": {
"description": "Lowest click rate.",
"type": [
"number",
"null"
]
},
"minOpenRate": {
"description": "Lowest open rate.",
"type": [
"number",
"null"
]
},
"openRateStddev": {
"description": "Open-rate standard deviation.",
"type": [
"number",
"null"
]
}
},
"type": "object"
},
"campaignDateRange": {
"additionalProperties": true,
"description": "Overall chronological range of campaigns. May be null.",
"properties": {
"maxSendTime": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
},
"minSendTime": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"code": {
"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.",
"type": "string"
},
"computedThreshold": {
"description": "Threshold computed for the analysis, or null when not applicable.",
"type": [
"number",
"null"
]
},
"engagementDistribution": {
"description": "Members bucketed by engagement rating.",
"items": {
"additionalProperties": true,
"description": "Breakdown of members by engagement rating.",
"properties": {
"memberCount": {
"description": "Members in the bucket.",
"type": "integer"
},
"memberRating": {
"description": "Engagement rating bucket, or null.",
"type": [
"integer",
"null"
]
},
"syncedAt": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"error": {
"description": "A human-readable error message detailing what went wrong.",
"type": "string"
},
"insights": {
"description": "Auto-generated insight objects pairing a title with a descriptive sentence.",
"items": {
"additionalProperties": true,
"description": "Automatically generated contextual insights.",
"properties": {
"campaignId": {
"description": "only emitted by the top-campaign insights",
"type": [
"string",
"null"
]
},
"description": {
"description": "Insight explanation.",
"type": "string"
},
"sentiment": {
"description": "one of positive/negative/neutral",
"type": "string"
},
"title": {
"description": "Insight title.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"previousPeriodAverages": {
"description": "Single summary row of aggregate campaign metrics for the prior comparison period.",
"items": {
"additionalProperties": true,
"description": "Aggregated averages and totals across campaigns.",
"properties": {
"avgBounceRate": {
"description": "Mean bounce rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgClickRate": {
"description": "Mean click rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgClickToOpenRate": {
"description": "Mean click-to-open rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgDeliveryRate": {
"description": "Mean delivery rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgEmailsSent": {
"description": "Mean emails sent per campaign in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgOpenRate": {
"description": "Mean open rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"totalAbuseReports": {
"description": "Total abuse reports across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
},
"totalBounces": {
"description": "Hard plus soft bounces.",
"type": [
"integer",
"null"
]
},
"totalCampaigns": {
"description": "Total number of campaigns the enclosing summary covers.",
"type": "integer"
},
"totalClicks": {
"description": "Total click events, counting repeat clicks.",
"type": [
"integer",
"null"
]
},
"totalEmailsSent": {
"description": "Total emails sent across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
},
"totalForwards": {
"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.",
"type": [
"integer",
"null"
]
},
"totalHardBounces": {
"description": "Total permanent bounce events across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
},
"totalOpens": {
"description": "Total open events, counting repeat opens by the same member.",
"type": [
"integer",
"null"
]
},
"totalSoftBounces": {
"description": "Total temporary bounce events across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
},
"totalUnsubscribes": {
"description": "Total unsubscribe events across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"projectId": {
"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.",
"type": "string"
},
"segmentSummary": {
"description": "Segment summary rows.",
"items": {
"additionalProperties": true,
"description": "Summary metrics for segments.",
"properties": {
"createdAt": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
},
"memberCount": {
"description": "Members in the segment.",
"type": "integer"
},
"name": {
"description": "Segment name.",
"type": "string"
},
"options": {
"description": "Raw Mailchimp segment options JSON as an unparsed string that the client must parse itself",
"type": [
"string",
"null"
]
},
"segmentId": {
"description": "Segment identifier.",
"type": "string"
},
"segmentType": {
"description": "Segment type, or null.",
"type": [
"string",
"null"
]
},
"syncedAt": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
},
"updatedAt": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"subscriberGrowth": {
"description": "Audience growth rows over time, bucketed by member status.",
"items": {
"additionalProperties": true,
"description": "Subscriber growth over time.",
"properties": {
"memberCount": {
"description": "Members in the status.",
"type": "integer"
},
"optDate": {
"description": "A BigQuery DATE, not a timestamp",
"type": "string"
},
"status": {
"description": "Subscription status.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"subscriberGrowthBaseline": {
"description": "Baseline subscriber number used for growth comparison.",
"type": "number"
},
"subscriberGrowthBaselineChurn": {
"description": "Baseline churn number used for growth comparison.",
"type": "number"
},
"subscriberGrowthBaselineSubscribed": {
"description": "Baseline subscribed count used for growth comparison.",
"type": "number"
},
"tagSummary": {
"description": "Tag summary rows.",
"items": {
"additionalProperties": true,
"description": "Summary metric for a tag.",
"properties": {
"memberCount": {
"description": "Members carrying the tag.",
"type": "integer"
},
"name": {
"description": "Tag name.",
"type": "string"
},
"syncedAt": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
},
"tagId": {
"description": "Tag identifier.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"campaignId": {
"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.",
"pattern": "^[a-zA-Z0-9_-]+$",
"type": "string"
},
"campaignSortBy": {
"default": "send_time",
"description": "The field used to order the campaigns table within the insights payload. Defaults to sorting by send time.",
"enum": [
"subject_line",
"send_time",
"emails_sent",
"open_rate",
"click_rate"
],
"type": "string"
},
"campaignSortDirection": {
"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.",
"enum": [
"asc",
"desc"
],
"type": "string"
},
"endDate": {
"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.",
"type": "string"
},
"maxSendVolume": {
"description": "Maximum number of emails sent to include a campaign in the insights aggregations. Omit to impose no upper bound.",
"minimum": 0,
"type": "integer"
},
"minSendVolume": {
"description": "Minimum number of emails sent to include a campaign in the insights aggregations. Omit to use the system default threshold.",
"minimum": 0,
"type": "integer"
},
"projectId": {
"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.",
"minLength": 1,
"type": "string"
},
"search": {
"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.",
"maxLength": 200,
"type": "string"
},
"startDate": {
"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.",
"type": "string"
}
},
"required": [
"projectId"
],
"type": "object"
},
"name": "sm_get_insights_basic",
"outputSchema": {
"additionalProperties": true,
"description": "Output for the sm_get_insights_basic tool. Failure payloads arrive in the same envelope as { error, code }.",
"properties": {
"audienceSummary": {
"description": "Current audience status rollup: one row per member status with the member count.",
"items": {
"additionalProperties": true,
"description": "Audience status summary counts.",
"properties": {
"memberCount": {
"description": "Members in the status.",
"type": "integer"
},
"status": {
"description": "Subscription status.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"campaignAverages": {
"description": "Single summary row of aggregate campaign metrics for the current period.",
"items": {
"additionalProperties": true,
"description": "Aggregated averages and totals across campaigns.",
"properties": {
"avgBounceRate": {
"description": "Mean bounce rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgClickRate": {
"description": "Mean click rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgClickToOpenRate": {
"description": "Mean click-to-open rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgDeliveryRate": {
"description": "Mean delivery rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgEmailsSent": {
"description": "Mean emails sent per campaign in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgOpenRate": {
"description": "Mean open rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"totalAbuseReports": {
"description": "Total abuse reports across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
},
"totalBounces": {
"description": "Hard plus soft bounces.",
"type": [
"integer",
"null"
]
},
"totalCampaigns": {
"description": "Total number of campaigns the enclosing summary covers.",
"type": "integer"
},
"totalClicks": {
"description": "Total click events, counting repeat clicks.",
"type": [
"integer",
"null"
]
},
"totalEmailsSent": {
"description": "Total emails sent across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
},
"totalForwards": {
"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.",
"type": [
"integer",
"null"
]
},
"totalHardBounces": {
"description": "Total permanent bounce events across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
},
"totalOpens": {
"description": "Total open events, counting repeat opens by the same member.",
"type": [
"integer",
"null"
]
},
"totalSoftBounces": {
"description": "Total temporary bounce events across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
},
"totalUnsubscribes": {
"description": "Total unsubscribe events across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"campaignDetail": {
"additionalProperties": true,
"description": "Comprehensive details for a single campaign. May be null.",
"properties": {
"abuseReports": {
"description": "Abuse reports.",
"type": "integer"
},
"bounceRate": {
"description": "Bounce rate (0-100).",
"type": "number"
},
"campaignId": {
"description": "Campaign identifier.",
"type": "string"
},
"campaignType": {
"description": "Mailchimp campaign type.",
"type": "string"
},
"clickRate": {
"description": "Click rate (0-100).",
"type": "number"
},
"clickToOpenRate": {
"description": "Click-to-open rate (0-100).",
"type": "number"
},
"delivered": {
"description": "Emails delivered.",
"type": "integer"
},
"deliveryRate": {
"description": "Delivery rate (0-100).",
"type": "number"
},
"emailsSent": {
"description": "Emails sent.",
"type": "integer"
},
"forwardsCount": {
"description": "Number of forward events. Forwards are not a working metric and must never be used to rank, recommend, or brief.",
"type": "integer"
},
"hardBounces": {
"description": "Hard bounces.",
"type": "integer"
},
"listName": {
"description": "Audience name.",
"type": "string"
},
"openRate": {
"description": "Open rate (0-100).",
"type": "number"
},
"previewText": {
"description": "Preview text.",
"type": "string"
},
"sendTime": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
},
"softBounces": {
"description": "Soft bounces.",
"type": "integer"
},
"subjectLine": {
"description": "Campaign subject line.",
"type": "string"
},
"totalClicks": {
"description": "Total click events.",
"type": "integer"
},
"totalOpens": {
"description": "Total open events.",
"type": "integer"
},
"uniqueClicks": {
"description": "Distinct clickers.",
"type": "integer"
},
"uniqueOpens": {
"description": "Distinct openers.",
"type": "integer"
},
"unsubscribes": {
"description": "Unsubscribes.",
"type": "integer"
}
},
"type": "object"
},
"campaignPerformance": {
"description": "Per-campaign performance rows for the period, with send, open, click, bounce and unsubscribe metrics.",
"items": {
"additionalProperties": true,
"description": "Detailed performance for individual campaigns.",
"properties": {
"bounceRate": {
"description": "Bounces divided by emails sent, as a percentage from 0 to 100.",
"type": [
"number",
"null"
]
},
"campaignId": {
"description": "Campaign identifier.",
"type": "string"
},
"clickRate": {
"description": "Unique clicks divided by delivered, as a percentage from 0 to 100.",
"type": [
"number",
"null"
]
},
"clickToOpenRate": {
"description": "Unique clicks divided by unique opens, as a percentage from 0 to 100.",
"type": [
"number",
"null"
]
},
"clicksTotal": {
"description": "Total click events, counting repeat clicks.",
"type": "integer"
},
"deliveries": {
"description": "Number of emails accepted for delivery by the receiving mail system.",
"type": "integer"
},
"deliveryRate": {
"description": "Delivered divided by emails sent, as a percentage from 0 to 100.",
"type": [
"number",
"null"
]
},
"emailsSent": {
"description": "Number of emails the campaign attempted to send to recipients.",
"type": "integer"
},
"openRate": {
"description": "Unique opens divided by delivered, as a percentage from 0 to 100.",
"type": [
"number",
"null"
]
},
"opensTotal": {
"description": "Total open events, counting repeat opens by the same member.",
"type": "integer"
},
"sendTime": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
},
"subjectLine": {
"description": "Campaign subject line.",
"type": "string"
},
"totalBounces": {
"description": "Hard plus soft bounces.",
"type": "integer"
},
"uniqueClicks": {
"description": "Number of distinct members who clicked at least once.",
"type": "integer"
},
"uniqueOpens": {
"description": "Number of distinct members who opened at least once.",
"type": "integer"
},
"unsubscribeRate": {
"description": "Unsubscribes divided by delivered, as a percentage from 0 to 100.",
"type": [
"number",
"null"
]
},
"unsubscribed": {
"description": "Recipients who unsubscribed, when the enclosing row is per-campaign.",
"type": "integer"
}
},
"type": "object"
},
"type": "array"
},
"campaignTotal": {
"description": "Total campaigns in the period.",
"type": "integer"
},
"code": {
"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.",
"type": "string"
},
"computedThreshold": {
"description": "Threshold value computed for the current analysis, or null when not applicable.",
"type": [
"number",
"null"
]
},
"engagementTrend": {
"description": "Month-over-month engagement trend rows.",
"items": {
"additionalProperties": true,
"description": "Monthly engagement trend data.",
"properties": {
"avgClickRate": {
"description": "Mean click rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgOpenRate": {
"description": "Mean open rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"campaignCount": {
"description": "Campaigns in the month.",
"type": "integer"
},
"month": {
"description": "YYYY-MM bucket, never reformat",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"error": {
"description": "A human-readable error message detailing what went wrong.",
"type": "string"
},
"insights": {
"description": "Auto-generated insight objects pairing a title with a descriptive sentence.",
"items": {
"additionalProperties": true,
"description": "Automatically generated contextual insights.",
"properties": {
"campaignId": {
"description": "only emitted by the top-campaign insights",
"type": [
"string",
"null"
]
},
"description": {
"description": "Insight explanation.",
"type": "string"
},
"sentiment": {
"description": "one of positive/negative/neutral",
"type": "string"
},
"title": {
"description": "Insight title.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"listOverview": {
"description": "Per-list overview: one row per Mailchimp audience with size and health metrics.",
"items": {
"additionalProperties": true,
"description": "Top-level overview of an audience list.",
"properties": {
"cleanedCount": {
"description": "Cleaned members in the audience.",
"type": "integer"
},
"clickRate": {
"description": "Unique clicks divided by delivered, as a percentage from 0 to 100.",
"type": [
"number",
"null"
]
},
"memberCount": {
"description": "Members in the audience.",
"type": "integer"
},
"name": {
"description": "Audience name.",
"type": "string"
},
"openRate": {
"description": "Unique opens divided by delivered, as a percentage from 0 to 100.",
"type": [
"number",
"null"
]
},
"unsubscribeCount": {
"description": "Unsubscribed members in the audience.",
"type": "integer"
}
},
"type": "object"
},
"type": "array"
},
"previousPeriodAverages": {
"description": "Single summary row of aggregate campaign metrics for the prior comparison period.",
"items": {
"additionalProperties": true,
"description": "Aggregated averages and totals across campaigns.",
"properties": {
"avgBounceRate": {
"description": "Mean bounce rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgClickRate": {
"description": "Mean click rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgClickToOpenRate": {
"description": "Mean click-to-open rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgDeliveryRate": {
"description": "Mean delivery rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgEmailsSent": {
"description": "Mean emails sent per campaign in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgOpenRate": {
"description": "Mean open rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"totalAbuseReports": {
"description": "Total abuse reports across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
},
"totalBounces": {
"description": "Hard plus soft bounces.",
"type": [
"integer",
"null"
]
},
"totalCampaigns": {
"description": "Total number of campaigns the enclosing summary covers.",
"type": "integer"
},
"totalClicks": {
"description": "Total click events, counting repeat clicks.",
"type": [
"integer",
"null"
]
},
"totalEmailsSent": {
"description": "Total emails sent across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
},
"totalForwards": {
"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.",
"type": [
"integer",
"null"
]
},
"totalHardBounces": {
"description": "Total permanent bounce events across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
},
"totalOpens": {
"description": "Total open events, counting repeat opens by the same member.",
"type": [
"integer",
"null"
]
},
"totalSoftBounces": {
"description": "Total temporary bounce events across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
},
"totalUnsubscribes": {
"description": "Total unsubscribe events across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"projectId": {
"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.",
"type": "string"
},
"sendVolumeTrend": {
"description": "Month-over-month send volume rows.",
"items": {
"additionalProperties": true,
"description": "Monthly send volume trend data.",
"properties": {
"campaignCount": {
"description": "Campaigns sent in the month.",
"type": "integer"
},
"month": {
"description": "Year-month for the row.",
"type": "string"
},
"totalEmailsSent": {
"description": "Emails sent in the month.",
"type": "integer"
}
},
"type": "object"
},
"type": "array"
},
"subscriberGrowth": {
"description": "Audience growth rows over time, bucketed by member status.",
"items": {
"additionalProperties": true,
"description": "Subscriber growth over time.",
"properties": {
"memberCount": {
"description": "Members in the status.",
"type": "integer"
},
"optDate": {
"description": "A BigQuery DATE, not a timestamp",
"type": "string"
},
"status": {
"description": "Subscription status.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"campaignId": {
"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.",
"pattern": "^[a-zA-Z0-9_-]+$",
"type": "string"
},
"endDate": {
"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.",
"type": "string"
},
"heatmapTimezone": {
"description": "The valid IANA timezone string (e.g. 'America/New_York') used to align the send-time heatmap distribution. Omit to use UTC.",
"type": "string"
},
"maxSendVolume": {
"description": "Maximum number of emails sent to include a campaign in the insights aggregations. Omit to impose no upper bound.",
"minimum": 0,
"type": "integer"
},
"minSendVolume": {
"description": "Minimum number of emails sent to include a campaign in the insights aggregations. Omit to use the system default threshold.",
"minimum": 0,
"type": "integer"
},
"projectId": {
"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.",
"minLength": 1,
"type": "string"
},
"startDate": {
"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.",
"type": "string"
}
},
"required": [
"projectId"
],
"type": "object"
},
"name": "sm_get_insights_expert",
"outputSchema": {
"additionalProperties": true,
"description": "Output for the sm_get_insights_expert tool. Failure payloads arrive in the same envelope as { error, code }.",
"properties": {
"audienceHealth": {
"description": "Audience health rows with member counts by status and engagement band.",
"items": {
"additionalProperties": true,
"description": "Key metrics denoting overall audience health.",
"properties": {
"avgMemberRating": {
"description": "Mean member rating.",
"type": [
"number",
"null"
]
},
"cleanedCount": {
"description": "Cleaned members.",
"type": "integer"
},
"highEngagementCount": {
"description": "High-engagement members.",
"type": "integer"
},
"lowEngagementCount": {
"description": "Low-engagement members.",
"type": "integer"
},
"subscribedCount": {
"description": "Subscribed members.",
"type": "integer"
},
"totalMembers": {
"description": "Total members.",
"type": "integer"
},
"unsubscribedCount": {
"description": "Unsubscribed members.",
"type": "integer"
}
},
"type": "object"
},
"type": "array"
},
"audienceSummary": {
"description": "Current audience status rollup: one row per member status with the member count.",
"items": {
"additionalProperties": true,
"description": "Audience status summary counts.",
"properties": {
"memberCount": {
"description": "Members in the status.",
"type": "integer"
},
"status": {
"description": "Subscription status.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"campaignAverages": {
"description": "Single summary row of aggregate campaign metrics for the current period.",
"items": {
"additionalProperties": true,
"description": "Aggregated averages and totals across campaigns.",
"properties": {
"avgBounceRate": {
"description": "Mean bounce rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgClickRate": {
"description": "Mean click rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgClickToOpenRate": {
"description": "Mean click-to-open rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgDeliveryRate": {
"description": "Mean delivery rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgEmailsSent": {
"description": "Mean emails sent per campaign in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgOpenRate": {
"description": "Mean open rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"totalAbuseReports": {
"description": "Total abuse reports across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
},
"totalBounces": {
"description": "Hard plus soft bounces.",
"type": [
"integer",
"null"
]
},
"totalCampaigns": {
"description": "Total number of campaigns the enclosing summary covers.",
"type": "integer"
},
"totalClicks": {
"description": "Total click events, counting repeat clicks.",
"type": [
"integer",
"null"
]
},
"totalEmailsSent": {
"description": "Total emails sent across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
},
"totalForwards": {
"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.",
"type": [
"integer",
"null"
]
},
"totalHardBounces": {
"description": "Total permanent bounce events across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
},
"totalOpens": {
"description": "Total open events, counting repeat opens by the same member.",
"type": [
"integer",
"null"
]
},
"totalSoftBounces": {
"description": "Total temporary bounce events across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
},
"totalUnsubscribes": {
"description": "Total unsubscribe events across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"campaignConsistency": {
"additionalProperties": true,
"description": "Statistical consistency metrics for campaign performance. May be null.",
"properties": {
"clickRateStddev": {
"description": "Click-rate standard deviation.",
"type": [
"number",
"null"
]
},
"maxClickRate": {
"description": "Highest click rate.",
"type": [
"number",
"null"
]
},
"maxOpenRate": {
"description": "Highest open rate.",
"type": [
"number",
"null"
]
},
"medianClickRate": {
"description": "Median click rate.",
"type": [
"number",
"null"
]
},
"medianOpenRate": {
"description": "Median open rate.",
"type": [
"number",
"null"
]
},
"minClickRate": {
"description": "Lowest click rate.",
"type": [
"number",
"null"
]
},
"minOpenRate": {
"description": "Lowest open rate.",
"type": [
"number",
"null"
]
},
"openRateStddev": {
"description": "Open-rate standard deviation.",
"type": [
"number",
"null"
]
}
},
"type": "object"
},
"campaignFatigue": {
"description": "Per-frequency bucket showing how engagement moves as send frequency changes.",
"items": {
"additionalProperties": true,
"description": "Analysis of engagement fatigue over quarters.",
"properties": {
"avgClickRate": {
"description": "Mean click rate in the bucket.",
"type": [
"number",
"null"
]
},
"avgClickToOpenRate": {
"description": "Mean click-to-open rate in the bucket.",
"type": [
"number",
"null"
]
},
"avgEmailsSent": {
"description": "Mean emails sent in the bucket.",
"type": [
"number",
"null"
]
},
"avgOpenRate": {
"description": "Mean open rate in the bucket.",
"type": [
"number",
"null"
]
},
"campaignCount": {
"description": "Campaigns in the frequency bucket.",
"type": "integer"
},
"quarter": {
"description": "YYYY-QN format",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"code": {
"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.",
"type": "string"
},
"engagementDistribution": {
"description": "Members bucketed by engagement rating.",
"items": {
"additionalProperties": true,
"description": "Breakdown of members by engagement rating.",
"properties": {
"memberCount": {
"description": "Members in the bucket.",
"type": "integer"
},
"memberRating": {
"description": "Engagement rating bucket, or null.",
"type": [
"integer",
"null"
]
},
"syncedAt": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"error": {
"description": "A human-readable error message detailing what went wrong.",
"type": "string"
},
"insights": {
"description": "Auto-generated insight objects pairing a title with a descriptive sentence.",
"items": {
"additionalProperties": true,
"description": "Automatically generated contextual insights.",
"properties": {
"campaignId": {
"description": "only emitted by the top-campaign insights",
"type": [
"string",
"null"
]
},
"description": {
"description": "Insight explanation.",
"type": "string"
},
"sentiment": {
"description": "one of positive/negative/neutral",
"type": "string"
},
"title": {
"description": "Insight title.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"monthlyTrend": {
"description": "Per-quarter (or month) trend rows for the diagnostic period.",
"items": {
"additionalProperties": true,
"description": "Quarterly trend data. Note this backs the response property named `monthlyTrend` even though the data is quarterly.",
"properties": {
"avgBounceRate": {
"description": "Mean bounce rate in the period, or null.",
"type": [
"number",
"null"
]
},
"avgClickRate": {
"description": "Mean click rate in the period.",
"type": [
"number",
"null"
]
},
"avgClickToOpenRate": {
"description": "Mean click-to-open rate in the period.",
"type": [
"number",
"null"
]
},
"avgDeliveryRate": {
"description": "Mean delivery rate in the period, or null.",
"type": [
"number",
"null"
]
},
"avgOpenRate": {
"description": "Mean open rate in the period.",
"type": [
"number",
"null"
]
},
"campaignCount": {
"description": "Campaigns in the period.",
"type": "integer"
},
"totalEmailsSent": {
"description": "Emails sent in the period, or null.",
"type": [
"integer",
"null"
]
},
"yearQuarter": {
"description": "Year-quarter for the row.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"previousPeriodAverages": {
"description": "Single summary row of aggregate campaign metrics for the prior comparison period.",
"items": {
"additionalProperties": true,
"description": "Aggregated averages and totals across campaigns.",
"properties": {
"avgBounceRate": {
"description": "Mean bounce rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgClickRate": {
"description": "Mean click rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgClickToOpenRate": {
"description": "Mean click-to-open rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgDeliveryRate": {
"description": "Mean delivery rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgEmailsSent": {
"description": "Mean emails sent per campaign in the enclosing summary.",
"type": [
"number",
"null"
]
},
"avgOpenRate": {
"description": "Mean open rate across the campaigns in the enclosing summary.",
"type": [
"number",
"null"
]
},
"totalAbuseReports": {
"description": "Total abuse reports across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
},
"totalBounces": {
"description": "Hard plus soft bounces.",
"type": [
"integer",
"null"
]
},
"totalCampaigns": {
"description": "Total number of campaigns the enclosing summary covers.",
"type": "integer"
},
"totalClicks": {
"description": "Total click events, counting repeat clicks.",
"type": [
"integer",
"null"
]
},
"totalEmailsSent": {
"description": "Total emails sent across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
},
"totalForwards": {
"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.",
"type": [
"integer",
"null"
]
},
"totalHardBounces": {
"description": "Total permanent bounce events across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
},
"totalOpens": {
"description": "Total open events, counting repeat opens by the same member.",
"type": [
"integer",
"null"
]
},
"totalSoftBounces": {
"description": "Total temporary bounce events across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
},
"totalUnsubscribes": {
"description": "Total unsubscribe events across the campaigns in the enclosing summary.",
"type": [
"integer",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"projectId": {
"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.",
"type": "string"
},
"sendTimeHeatmap": {
"description": "Send-time heatmap rows bucketed by day of week and hour.",
"items": {
"additionalProperties": true,
"description": "Engagement heatmap mapping by day and hour.",
"properties": {
"avgClickRate": {
"description": "Mean click rate in the bucket.",
"type": [
"number",
"null"
]
},
"avgOpenRate": {
"description": "Mean open rate in the bucket.",
"type": [
"number",
"null"
]
},
"campaignCount": {
"description": "Campaigns in the bucket.",
"type": "integer"
},
"dayOfWeek": {
"description": "1-7 BigQuery DAYOFWEEK",
"type": "integer"
},
"hourOfDay": {
"description": "0-23",
"type": "integer"
}
},
"type": "object"
},
"type": "array"
},
"sendTimeInsights": {
"description": "Auto-generated send-time insight objects.",
"items": {
"additionalProperties": true,
"description": "Automatically generated contextual insights.",
"properties": {
"campaignId": {
"description": "only emitted by the top-campaign insights",
"type": [
"string",
"null"
]
},
"description": {
"description": "Send-time insight explanation.",
"type": "string"
},
"sentiment": {
"description": "one of positive/negative/neutral",
"type": "string"
},
"title": {
"description": "Send-time insight title.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"subjectLineKeywords": {
"description": "Subject-line keyword rows with impact on open and click rate.",
"items": {
"additionalProperties": true,
"description": "Performance metrics grouped by subject line keywords.",
"properties": {
"avgClickRate": {
"description": "Mean click rate for the keyword.",
"type": [
"number",
"null"
]
},
"avgOpenRate": {
"description": "Mean open rate for the keyword.",
"type": [
"number",
"null"
]
},
"campaignCount": {
"description": "Campaigns containing the keyword.",
"type": "integer"
},
"keyword": {
"description": "Keyword analyzed in subject lines.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"topic": {
"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.",
"enum": [
"analyst-preamble",
"metric-guardrails",
"openapi",
"faq"
],
"type": "string"
}
},
"required": [],
"type": "object"
},
"name": "sm_get_knowledge",
"outputSchema": {
"additionalProperties": true,
"description": "Knowledge document(s) with version and lastUpdated metadata. Failure payloads arrive in the same envelope as { error, code }.",
"properties": {
"code": {
"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.",
"type": "string"
},
"description": {
"description": "Human-readable description of the enclosing item.",
"type": "string"
},
"error": {
"description": "A human-readable error message detailing what went wrong.",
"type": "string"
},
"lastUpdated": {
"description": "ISO 8601 instant",
"type": "string"
},
"text": {
"description": "Full rendered text of the enclosing document or prompt.",
"type": "string"
},
"title": {
"description": "Human-readable title for the enclosing item.",
"type": "string"
},
"topic": {
"description": "Topic key, or null when the request did not match a single topic.",
"type": [
"string",
"null"
]
},
"topics": {
"description": "Available knowledge topics.",
"items": {
"additionalProperties": true,
"properties": {
"description": {
"description": "Topic description.",
"type": "string"
},
"name": {
"description": "Topic name.",
"type": "string"
},
"title": {
"description": "Topic title.",
"type": "string"
},
"topic": {
"description": "Topic key.",
"type": "string"
},
"uri": {
"description": "Resource URI for the topic.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"uri": {
"description": "MCP resource URI for the knowledge document or topic.",
"type": "string"
},
"version": {
"description": "Version string for the enclosing catalog or document.",
"type": "string"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"projectId": {
"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.",
"minLength": 1,
"type": "string"
},
"subscriberHash": {
"description": "The member's Mailchimp-style lowercase MD5 subscriber hash (canonical member key).",
"pattern": "^[0-9a-f]{32}$",
"type": "string"
}
},
"required": [
"projectId",
"subscriberHash"
],
"type": "object"
},
"name": "sm_get_member",
"outputSchema": {
"additionalProperties": true,
"description": "Output for the sm_get_member tool. Failure payloads arrive in the same envelope as { error, code }.",
"properties": {
"activityTimeline": {
"description": "The member's raw activity events in time order.",
"items": {
"additionalProperties": true,
"description": "Chronological list of all actions taken by a member.",
"properties": {
"activityType": {
"description": "Kind of tracked action, for example open, click, or subscribe.",
"type": "string"
},
"campaignId": {
"description": "Stable identifier for a Mailchimp campaign. Use it to join rows across tools or drill into sm_get_campaign.",
"type": [
"string",
"null"
]
},
"campaignTitle": {
"description": "The human-readable title of the campaign. May be null when Mailchimp has no title set.",
"type": [
"string",
"null"
]
},
"timestamp": {
"description": "ISO 8601 UTC timestamp.",
"type": "string"
},
"url": {
"description": "The clicked or referenced URL, or null when absent.",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"atRiskStatus": {
"additionalProperties": true,
"description": "Evaluation of churn risk based on activity fall-off. May be null.",
"properties": {
"activeActionsPrior": {
"description": "Count of engagement actions in the prior comparison window.",
"type": "integer"
},
"activeActionsRecent": {
"description": "Count of engagement actions in the recent comparison window.",
"type": "integer"
},
"isAtRisk": {
"description": "True when the member's recent activity has collapsed relative to prior activity.",
"type": "boolean"
}
},
"type": "object"
},
"audienceAverages": {
"additionalProperties": true,
"description": "Comparative audience averages for context against an individual member. May be null.",
"properties": {
"avgEngagementScore": {
"description": "Audience-wide mean engagement score.",
"type": "number"
},
"avgMemberRating": {
"description": "Audience-wide mean member rating.",
"type": "number"
},
"avgTotalClicks": {
"description": "Audience-wide mean total clicks.",
"type": "number"
},
"avgTotalOpens": {
"description": "Audience-wide mean total opens.",
"type": "number"
}
},
"type": "object"
},
"botDetection": {
"additionalProperties": true,
"description": "Metrics for suspected automated bot activity. Note: this object is only present when bot activity was detected. May be null.",
"properties": {
"botActivityCount": {
"description": "Tracked actions attributed to suspected bots.",
"type": "integer"
},
"botGroupCount": {
"description": "Number of suspected bot groups detected.",
"type": "integer"
},
"totalActivities": {
"description": "Total tracked actions for the member.",
"type": "integer"
}
},
"type": "object"
},
"campaignConsistency": {
"additionalProperties": true,
"description": "How consistently this member engages compared to standard. May be null.",
"properties": {
"avgCampaignsEngaged": {
"description": "Average campaigns engaged with across the audience.",
"type": "number"
},
"memberCampaignsEngaged": {
"description": "Campaigns this member engaged with.",
"type": "integer"
},
"totalCampaigns": {
"description": "Total campaigns in the comparison window.",
"type": "integer"
}
},
"type": "object"
},
"campaignResponses": {
"description": "Per-campaign response rows for this member.",
"items": {
"additionalProperties": true,
"description": "Individual member response data to a specific campaign.",
"properties": {
"campaignClickRate": {
"description": "Click rate for the specific campaign in the enclosing row.",
"type": [
"number",
"null"
]
},
"campaignId": {
"description": "Stable identifier for a Mailchimp campaign. Use it to join rows across tools or drill into sm_get_campaign.",
"type": "string"
},
"campaignOpenRate": {
"description": "Open rate for the specific campaign in the enclosing row.",
"type": [
"number",
"null"
]
},
"didClick": {
"description": "True when the member clicked in this campaign.",
"type": "boolean"
},
"didOpen": {
"description": "True when the member opened this campaign.",
"type": "boolean"
},
"emailsSent": {
"description": "Number of emails the campaign attempted to send to recipients.",
"type": "integer"
},
"firstOpenMinutes": {
"description": "Minutes between send and the member's first open, or null when never opened.",
"type": [
"integer",
"null"
]
},
"sendTime": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
},
"subjectLine": {
"description": "The campaign subject line as sent.",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"clickedUrls": {
"description": "URLs the member has clicked with click counts.",
"items": {
"additionalProperties": true,
"description": "URLs clicked by this specific member.",
"properties": {
"clickCount": {
"description": "Number of times the member clicked the enclosing URL.",
"type": "integer"
},
"url": {
"description": "The clicked or referenced URL, or null when absent.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"code": {
"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.",
"type": "string"
},
"engagementByHour": {
"description": "Member's tracked actions bucketed by hour.",
"items": {
"additionalProperties": true,
"description": "Activity heatmap buckets for an individual member.",
"properties": {
"activityCount": {
"description": "Number of tracked actions in the enclosing bucket.",
"type": "integer"
},
"dayOfWeek": {
"description": "1-7, BigQuery DAYOFWEEK.",
"type": "integer"
},
"hourOfDay": {
"description": "0-23.",
"type": "integer"
}
},
"type": "object"
},
"type": "array"
},
"engagementProfile": {
"additionalProperties": true,
"description": "Calculated overall engagement statistics for an individual member. May be null.",
"properties": {
"engagementPercentile": {
"description": "0-1 scale.",
"type": "number"
},
"engagementRank": {
"description": "Ordinal rank of the member by engagement, or null.",
"type": [
"integer",
"null"
]
},
"engagementScore": {
"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.",
"type": "number"
},
"isLeader": {
"description": "True when the member qualifies as a leader by engagement.",
"type": "boolean"
},
"lastActivityAt": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
},
"leaderEngagementRank": {
"description": "Null for non-leaders via LEFT JOIN.",
"type": [
"integer",
"null"
]
},
"memberRating": {
"description": "Integer engagement rating for the member, or null.",
"type": [
"integer",
"null"
]
},
"totalClicks": {
"description": "Total click events, counting repeat clicks.",
"type": "integer"
},
"totalOpens": {
"description": "Total open events, counting repeat opens by the same member.",
"type": "integer"
}
},
"type": "object"
},
"error": {
"description": "A human-readable error message detailing what went wrong.",
"type": "string"
},
"memberProfile": {
"additionalProperties": true,
"description": "Core profile information for an individual member. May be null.",
"properties": {
"businessType": {
"description": "The member's business type or category, or null when unset.",
"type": [
"string",
"null"
]
},
"companyName": {
"description": "The company associated with the member, or null when unknown.",
"type": [
"string",
"null"
]
},
"countryCode": {
"description": "Two-letter country code for the member, or null when unknown.",
"type": [
"string",
"null"
]
},
"countryName": {
"description": "Full country name for the member, or null when unknown.",
"type": [
"string",
"null"
]
},
"dimensionFour": {
"description": "Fourth custom dimension value for the member, or null.",
"type": [
"string",
"null"
]
},
"dimensionOne": {
"description": "First custom dimension value for the member, or null.",
"type": [
"string",
"null"
]
},
"dimensionThree": {
"description": "Third custom dimension value for the member, or null.",
"type": [
"string",
"null"
]
},
"dimensionTwo": {
"description": "Second custom dimension value for the member, or null.",
"type": [
"string",
"null"
]
},
"emailAddress": {
"description": "The member's email address.",
"type": "string"
},
"firstName": {
"description": "The member's first name, or null when unavailable.",
"type": [
"string",
"null"
]
},
"language": {
"description": "The member's preferred language, or null when unknown.",
"type": [
"string",
"null"
]
},
"lastChanged": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
},
"lastName": {
"description": "The member's last name, or null when unavailable.",
"type": [
"string",
"null"
]
},
"memberRating": {
"description": "Integer Mailchimp engagement rating for the member (1-5), or null when unrated.",
"type": [
"integer",
"null"
]
},
"memberTimezone": {
"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.",
"type": [
"string",
"null"
]
},
"region": {
"description": "Region or state-level location string, or null when unknown.",
"type": [
"string",
"null"
]
},
"repName": {
"description": "Internal owner or rep assigned to the member, or null when unassigned.",
"type": [
"string",
"null"
]
},
"state": {
"description": "State or province string, or null when unknown.",
"type": [
"string",
"null"
]
},
"stats": {
"description": "Raw Mailchimp member-stats JSON as an unparsed string that the client must parse itself.",
"type": [
"string",
"null"
]
},
"status": {
"description": "Subscription status, for example subscribed, unsubscribed, cleaned, or pending.",
"type": "string"
},
"tags": {
"description": "Tag rows with member counts.",
"items": {
"type": "string"
},
"type": "array"
},
"timestampOpt": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
},
"timestampSignup": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
},
"title": {
"description": "The member's job title, or null when unknown.",
"type": [
"string",
"null"
]
},
"vip": {
"description": "True when the member is flagged VIP.",
"type": [
"boolean",
"null"
]
}
},
"type": "object"
},
"monthlyTrend": {
"description": "Per-quarter (or month) trend rows for the diagnostic period.",
"items": {
"additionalProperties": true,
"description": "Member activity volume over time.",
"properties": {
"clicks": {
"description": "Click-events count observed over the enclosing window.",
"type": "integer"
},
"month": {
"description": "YYYY-MM bucket.",
"type": "string"
},
"opens": {
"description": "Open-events count observed over the enclosing window.",
"type": "integer"
},
"total": {
"description": "Combined open plus click events for the member in the month.",
"type": "integer"
}
},
"type": "object"
},
"type": "array"
},
"projectId": {
"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.",
"type": "string"
},
"subscriberHash": {
"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.",
"type": "string"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"clickedFilter": {
"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.",
"enum": [
"all",
"clicked",
"not_clicked"
],
"type": "string"
},
"cursor": {
"description": "Opaque keyset pagination cursor returned as `nextCursor` by the previous page. Must be replayed with identical query filters.",
"type": "string"
},
"dateFrom": {
"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.",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"dateTo": {
"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.",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"maxTimeToClick": {
"description": "Maximum elapsed time from the campaign send until the member's first click, in minutes. Omit to impose no upper bound.",
"minimum": 0,
"type": "number"
},
"maxTimeToOpen": {
"description": "Maximum elapsed time from the campaign send until the member's first open, in minutes. Omit to impose no upper bound.",
"minimum": 0,
"type": "number"
},
"minTimeToClick": {
"description": "Minimum elapsed time from the campaign send until the member's first click, in minutes. Omit to impose no lower bound.",
"minimum": 0,
"type": "number"
},
"minTimeToOpen": {
"description": "Minimum elapsed time from the campaign send until the member's first open, in minutes. Omit to impose no lower bound.",
"minimum": 0,
"type": "number"
},
"openedFilter": {
"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.",
"enum": [
"all",
"opened",
"not_opened"
],
"type": "string"
},
"pageSize": {
"default": 100,
"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.",
"maximum": 100,
"minimum": 1,
"type": "number"
},
"projectId": {
"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.",
"minLength": 1,
"type": "string"
},
"sortBy": {
"default": "send_time",
"description": "The field used to order the member campaigns list. Defaults to the send time of the campaign.",
"enum": [
"subject_line",
"send_time",
"did_open",
"did_click",
"first_open_minutes",
"first_click_minutes",
"campaign_open_rate",
"campaign_click_rate"
],
"type": "string"
},
"sortDir": {
"default": "desc",
"description": "The direction to sort the campaign results. Can be 'asc' for ascending or 'desc' for descending. Defaults to \"desc\" when omitted.",
"enum": [
"asc",
"desc"
],
"type": "string"
},
"subjectFilter": {
"description": "Filter the timeline by a case-insensitive partial match on the campaign subject line. Omit to include all subjects.",
"type": "string"
},
"subscriberHash": {
"description": "The member's Mailchimp-style lowercase MD5 subscriber hash (canonical member key).",
"pattern": "^[0-9a-f]{32}$",
"type": "string"
}
},
"required": [
"projectId",
"subscriberHash"
],
"type": "object"
},
"name": "sm_get_member_campaigns",
"outputSchema": {
"additionalProperties": true,
"description": "Output for the sm_get_member_campaigns tool. Failure payloads arrive in the same envelope as { error, code }.",
"properties": {
"code": {
"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.",
"type": "string"
},
"data": {
"description": "Response rows for the enclosing tool.",
"items": {
"additionalProperties": true,
"description": "Paginated list of a member's campaign interactions.",
"properties": {
"campaignClickRate": {
"description": "Campaign click rate, or null.",
"type": [
"number",
"null"
]
},
"campaignId": {
"description": "Campaign identifier.",
"type": "string"
},
"campaignOpenRate": {
"description": "Campaign open rate, or null.",
"type": [
"number",
"null"
]
},
"didClick": {
"description": "True when the member clicked.",
"type": "boolean"
},
"didOpen": {
"description": "True when the member opened.",
"type": "boolean"
},
"emailsSent": {
"description": "Emails the campaign sent.",
"type": "integer"
},
"firstClickMinutes": {
"description": "Minutes to first click, or null.",
"type": [
"integer",
"null"
]
},
"firstOpenMinutes": {
"description": "Minutes to first open, or null.",
"type": [
"integer",
"null"
]
},
"sendTime": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
},
"subjectLine": {
"description": "Campaign subject line, or null.",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"error": {
"description": "A human-readable error message detailing what went wrong.",
"type": "string"
},
"hasMore": {
"description": "True if additional results exist beyond this page.",
"type": "boolean"
},
"nextCursor": {
"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.",
"type": [
"string",
"null"
]
},
"pageSize": {
"description": "The maximum number of items returned in this page.",
"type": "integer"
},
"projectId": {
"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.",
"type": "string"
},
"subscriberHash": {
"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.",
"type": "string"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"countryCode": {
"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.",
"type": "string"
},
"projectId": {
"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.",
"minLength": 1,
"type": "string"
}
},
"required": [
"projectId"
],
"type": "object"
},
"name": "sm_get_member_geo",
"outputSchema": {
"additionalProperties": true,
"description": "Output for the sm_get_member_geo tool. Failure payloads arrive in the same envelope as { error, code }.",
"properties": {
"allRegions": {
"description": "Per-region membership rows across all countries.",
"items": {
"additionalProperties": true,
"description": "Granular region-to-country groupings.",
"properties": {
"countryCode": {
"description": "Two-letter country code.",
"type": "string"
},
"region": {
"description": "Region name within the country.",
"type": "string"
},
"subscribed": {
"description": "Subscribed members in the region.",
"type": "integer"
},
"total": {
"description": "Total members in the region.",
"type": "integer"
}
},
"type": "object"
},
"type": "array"
},
"code": {
"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.",
"type": "string"
},
"countries": {
"description": "Per-country membership rows.",
"items": {
"additionalProperties": true,
"description": "Member counts grouped by country code.",
"properties": {
"countryCode": {
"description": "Two-letter country code.",
"type": "string"
},
"subscribed": {
"description": "Subscribed members in the country.",
"type": "integer"
},
"total": {
"description": "Total members in the country.",
"type": "integer"
}
},
"type": "object"
},
"type": "array"
},
"error": {
"description": "A human-readable error message detailing what went wrong.",
"type": "string"
},
"projectId": {
"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.",
"type": "string"
},
"regions": {
"description": "Region detail for the selected country, or null when no country was narrowed.",
"items": {
"additionalProperties": true,
"description": "Member counts grouped by broader regional assignment.",
"properties": {
"region": {
"description": "Region or state-level location string, or null when unknown.",
"type": "string"
},
"subscribed": {
"description": "Subscribed members in the region.",
"type": "integer"
},
"total": {
"description": "Total members in the region.",
"type": "integer"
}
},
"type": "object"
},
"type": [
"array",
"null"
]
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"projectId": {
"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.",
"minLength": 1,
"type": "string"
}
},
"required": [
"projectId"
],
"type": "object"
},
"name": "sm_get_member_growth",
"outputSchema": {
"additionalProperties": true,
"description": "Output for the sm_get_member_growth tool. Failure payloads arrive in the same envelope as { error, code }.",
"properties": {
"churnTimeline": {
"description": "Churn timeline rows bucketed by month and status.",
"items": {
"additionalProperties": true,
"description": "Churn and unsubscribes bucketed by month.",
"properties": {
"count": {
"description": "Members in the status for the month.",
"type": "integer"
},
"month": {
"description": "Year-month for the row.",
"type": "string"
},
"status": {
"description": "Subscription status.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"code": {
"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.",
"type": "string"
},
"cohortRetention": {
"description": "Cohort retention rows bucketed by signup month and status.",
"items": {
"additionalProperties": true,
"description": "Retention counts relative to user signup month cohorts.",
"properties": {
"count": {
"description": "Members from the cohort still in the status.",
"type": "integer"
},
"signupMonth": {
"description": "Signup month for the cohort.",
"type": "string"
},
"status": {
"description": "Subscription status.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"error": {
"description": "A human-readable error message detailing what went wrong.",
"type": "string"
},
"projectId": {
"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.",
"type": "string"
},
"signupCohorts": {
"description": "Signup cohort rows.",
"items": {
"additionalProperties": true,
"description": "Signup volume bucketed by month.",
"properties": {
"month": {
"description": "A `YYYY-MM` bucket, NOT a timestamp — must never be reformatted.",
"type": "string"
},
"newSignups": {
"description": "New signups in the cohort month.",
"type": "integer"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"projectId": {
"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.",
"minLength": 1,
"type": "string"
}
},
"required": [
"projectId"
],
"type": "object"
},
"name": "sm_get_member_overview",
"outputSchema": {
"additionalProperties": true,
"description": "Output for the sm_get_member_overview tool. Failure payloads arrive in the same envelope as { error, code }.",
"properties": {
"code": {
"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.",
"type": "string"
},
"dimensionDistributions": {
"description": "Per-dimension slot distribution rows.",
"items": {
"additionalProperties": true,
"description": "A dimension slot mapping details. Note: the `values` property is an array of MembersDimensionValueRow composed at the OpenAPI schema level.",
"properties": {
"label": {
"description": "Human-readable label for the dimension slot.",
"type": "string"
},
"slot": {
"description": "Dimension slot name, for example dimensionOne.",
"type": "string"
},
"unassignedLabel": {
"description": "Label shown for members with no value in the slot.",
"type": "string"
},
"values": {
"description": "Distinct dimension values with member counts.",
"items": {
"additionalProperties": true,
"description": "A single distinct dimension value and its member count.",
"properties": {
"count": {
"description": "Members with the dimension value.",
"type": "integer"
},
"value": {
"description": "Dimension value.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
},
"type": "array"
},
"error": {
"description": "A human-readable error message detailing what went wrong.",
"type": "string"
},
"languageDistribution": {
"description": "Members bucketed by language.",
"items": {
"additionalProperties": true,
"description": "Count of members grouped by reported language.",
"properties": {
"count": {
"description": "Members in the language.",
"type": "integer"
},
"language": {
"description": "Language for the row.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"projectId": {
"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.",
"type": "string"
},
"ratingDistribution": {
"description": "Members bucketed by rating.",
"items": {
"additionalProperties": true,
"description": "Count of members grouped by their Mailchimp rating (1-5).",
"properties": {
"count": {
"description": "Members with the rating.",
"type": "integer"
},
"rating": {
"description": "Rating bucket.",
"type": "integer"
}
},
"type": "object"
},
"type": "array"
},
"repDistribution": {
"description": "Members bucketed by assigned rep.",
"items": {
"additionalProperties": true,
"description": "Count of members grouped by rep/owner. Only populated when an owner/rep merge field is mapped, otherwise the array is empty.",
"properties": {
"count": {
"description": "Members assigned to the rep.",
"type": "integer"
},
"repName": {
"description": "Rep name for the row.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"statusBreakdown": {
"description": "Members bucketed by subscription status.",
"items": {
"additionalProperties": true,
"description": "Count of members grouped by their subscription status.",
"properties": {
"count": {
"description": "Members in the status.",
"type": "integer"
},
"status": {
"description": "Subscription status for the row.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"totals": {
"additionalProperties": true,
"description": "Top-level member aggregate statistics.",
"properties": {
"avgRating": {
"description": "Mean member rating across the audience.",
"type": "number"
},
"cleaned": {
"description": "Members in cleaned status.",
"type": "integer"
},
"subscribed": {
"description": "Members in subscribed status.",
"type": "integer"
},
"total": {
"description": "Total members in the audience.",
"type": "integer"
},
"unsubscribed": {
"description": "Members in unsubscribed status.",
"type": "integer"
},
"vipCount": {
"description": "Members flagged VIP.",
"type": "integer"
}
},
"type": "object"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"projectId": {
"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.",
"minLength": 1,
"type": "string"
}
},
"required": [
"projectId"
],
"type": "object"
},
"name": "sm_get_member_segments",
"outputSchema": {
"additionalProperties": true,
"description": "Output for the sm_get_member_segments tool. Failure payloads arrive in the same envelope as { error, code }.",
"properties": {
"code": {
"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.",
"type": "string"
},
"error": {
"description": "A human-readable error message detailing what went wrong.",
"type": "string"
},
"overallAvgEngagement": {
"description": "Audience-wide mean engagement score.",
"type": "number"
},
"projectId": {
"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.",
"type": "string"
},
"segments": {
"description": "Segment rows with member counts.",
"items": {
"additionalProperties": true,
"description": "Directory of Mailchimp segments.",
"properties": {
"createdAt": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
},
"memberCount": {
"description": "Members in the segment.",
"type": "integer"
},
"name": {
"description": "Segment name.",
"type": "string"
},
"segmentId": {
"description": "Numeric string by contract.",
"type": "string"
},
"segmentType": {
"description": "The public surface deliberately renames the reserved word `type`; the shared core still returns `type`.",
"type": "string"
},
"updatedAt": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"subscribedCount": {
"description": "Subscribed members in the audience.",
"type": "integer"
},
"tagEngagement": {
"description": "Per-tag engagement rollup rows.",
"items": {
"additionalProperties": true,
"description": "Engagement metrics associated with a specific tag.",
"properties": {
"avgEngagementScore": {
"description": "Mean engagement score for the tag.",
"type": "number"
},
"leaderCount": {
"description": "Leaders carrying the tag.",
"type": "integer"
},
"memberCount": {
"description": "Members carrying the tag.",
"type": "integer"
},
"name": {
"description": "Tag name.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"tagStatusBreakdown": {
"description": "Tag-by-status member count rows.",
"items": {
"additionalProperties": true,
"description": "Member statuses within a specific tag context.",
"properties": {
"memberCount": {
"description": "Members in the tag and status.",
"type": "integer"
},
"status": {
"description": "Subscription status.",
"type": "string"
},
"tagName": {
"description": "Tag name.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"tags": {
"description": "Tag rows with member counts.",
"items": {
"additionalProperties": true,
"description": "Directory of Mailchimp tags.",
"properties": {
"memberCount": {
"description": "Members carrying the tag.",
"type": "integer"
},
"name": {
"description": "Tag name.",
"type": "string"
},
"tagId": {
"description": "Numeric string by contract.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"totalCount": {
"description": "Total members in the audience.",
"type": "integer"
},
"untaggedCount": {
"description": "Members with no tags.",
"type": "integer"
}
},
"type": "object"
}
},
{
"description": "Replay one member's raw activity events in time order. Use to establish when someone last paid attention and what triggered it.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"clickedFilter": {
"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.",
"enum": [
"all",
"clicked",
"not_clicked"
],
"type": "string"
},
"cursor": {
"description": "Opaque keyset pagination cursor returned as `nextCursor` by the previous page. Must be replayed with identical query filters.",
"type": "string"
},
"dateFrom": {
"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.",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"dateTo": {
"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.",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"maxTimeToClick": {
"description": "Maximum elapsed time from the campaign send until the member's first click, in minutes. Omit to impose no upper bound.",
"minimum": 0,
"type": "number"
},
"maxTimeToOpen": {
"description": "Maximum elapsed time from the campaign send until the member's first open, in minutes. Omit to impose no upper bound.",
"minimum": 0,
"type": "number"
},
"minTimeToClick": {
"description": "Minimum elapsed time from the campaign send until the member's first click, in minutes. Omit to impose no lower bound.",
"minimum": 0,
"type": "number"
},
"minTimeToOpen": {
"description": "Minimum elapsed time from the campaign send until the member's first open, in minutes. Omit to impose no lower bound.",
"minimum": 0,
"type": "number"
},
"openedFilter": {
"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.",
"enum": [
"all",
"opened",
"not_opened"
],
"type": "string"
},
"pageSize": {
"default": 100,
"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.",
"maximum": 100,
"minimum": 1,
"type": "number"
},
"projectId": {
"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.",
"minLength": 1,
"type": "string"
},
"sortBy": {
"default": "timestamp",
"description": "The field used to order the timeline. Defaults to ordering by the most recent timestamp first.",
"enum": [
"timestamp",
"activity_type",
"campaign_title"
],
"type": "string"
},
"sortDir": {
"default": "desc",
"description": "The direction to sort the timeline results. Can be 'asc' for ascending or 'desc' for descending. Defaults to \"desc\" when omitted.",
"enum": [
"asc",
"desc"
],
"type": "string"
},
"subjectFilter": {
"description": "Filter the timeline by a case-insensitive partial match on the campaign subject line. Omit to include all subjects.",
"type": "string"
},
"subscriberHash": {
"description": "The member's Mailchimp-style lowercase MD5 subscriber hash (canonical member key).",
"pattern": "^[0-9a-f]{32}$",
"type": "string"
}
},
"required": [
"projectId",
"subscriberHash"
],
"type": "object"
},
"name": "sm_get_member_timeline",
"outputSchema": {
"additionalProperties": true,
"description": "Output for the sm_get_member_timeline tool. Failure payloads arrive in the same envelope as { error, code }.",
"properties": {
"code": {
"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.",
"type": "string"
},
"data": {
"description": "Response rows for the enclosing tool.",
"items": {
"additionalProperties": true,
"description": "Chronological list of all actions taken by a member.",
"properties": {
"activityType": {
"description": "Kind of tracked action.",
"type": "string"
},
"campaignId": {
"description": "Campaign identifier, or null for non-campaign actions.",
"type": [
"string",
"null"
]
},
"campaignTitle": {
"description": "Campaign title, or null for non-campaign actions.",
"type": [
"string",
"null"
]
},
"timestamp": {
"description": "ISO 8601 UTC timestamp.",
"type": "string"
},
"url": {
"description": "Clicked URL, or null when absent.",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"error": {
"description": "A human-readable error message detailing what went wrong.",
"type": "string"
},
"hasMore": {
"description": "True if additional results exist beyond this page.",
"type": "boolean"
},
"nextCursor": {
"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.",
"type": [
"string",
"null"
]
},
"pageSize": {
"description": "The maximum number of items returned in this page.",
"type": "integer"
},
"projectId": {
"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.",
"type": "string"
},
"subscriberHash": {
"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.",
"type": "string"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"arguments": {
"additionalProperties": {
"type": "string"
},
"description": "Argument values for the prompt, keyed by argument name (e.g. {\"company\": \"Conversion Sciences\", \"email\": \"[email protected]\"}). Omit optional arguments to use their defaults. Multi-line values are supported.",
"type": "object"
},
"name": {
"description": "Prompt name from sm_list_prompts, e.g. sm_brief_before_call.",
"minLength": 1,
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "sm_get_prompt",
"outputSchema": {
"additionalProperties": true,
"description": "A single rendered prompt workflow and its effective arguments. Failure payloads arrive in the same envelope as { error, code }.",
"properties": {
"arguments": {
"additionalProperties": true,
"description": "Argument values used for rendering.",
"type": "object"
},
"code": {
"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.",
"type": "string"
},
"description": {
"description": "Prompt description.",
"type": "string"
},
"error": {
"description": "A human-readable error message detailing what went wrong.",
"type": "string"
},
"name": {
"description": "Prompt name.",
"type": "string"
},
"text": {
"description": "Rendered prompt body with values substituted.",
"type": "string"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"operation": {
"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.",
"type": "string"
}
},
"required": [],
"type": "object"
},
"name": "sm_get_schema",
"outputSchema": {
"additionalProperties": true,
"description": "Either a compact index of operations or a detailed schema for one operation. Failure payloads arrive in the same envelope as { error, code }.",
"properties": {
"code": {
"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.",
"type": "string"
},
"components": {
"additionalProperties": true,
"description": "OpenAPI components object referenced by operations.",
"type": "object"
},
"error": {
"description": "A human-readable error message detailing what went wrong.",
"type": "string"
},
"method": {
"description": "HTTP method for the operation.",
"type": "string"
},
"operation": {
"additionalProperties": true,
"description": "Full OpenAPI operation object.",
"type": "object"
},
"operationCount": {
"description": "Number of operations catalogued.",
"type": "number"
},
"operations": {
"description": "Catalog entries for each Enterprise API operation.",
"items": {
"additionalProperties": true,
"properties": {
"description": {
"description": "Operation description.",
"type": "string"
},
"method": {
"description": "HTTP method.",
"type": "string"
},
"optionalParams": {
"description": "Optional parameters.",
"items": {
"type": "string"
},
"type": "array"
},
"path": {
"description": "URL path.",
"type": "string"
},
"requiredParams": {
"description": "Required parameters.",
"items": {
"type": "string"
},
"type": "array"
},
"summary": {
"description": "Short operation summary.",
"type": "string"
},
"tags": {
"description": "Operation tags.",
"items": {
"type": "string"
},
"type": "array"
},
"toolName": {
"description": "MCP tool wrapping the operation, or null.",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"path": {
"description": "URL path for the operation.",
"type": "string"
},
"schemaUrl": {
"description": "URL of the live OpenAPI document.",
"type": "string"
},
"toolName": {
"description": "MCP tool wrapping the operation, or null when none.",
"type": [
"string",
"null"
]
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"projectId": {
"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.",
"minLength": 1,
"type": "string"
},
"runId": {
"description": "The opaque 8-character hash ID correlating to the sync run.",
"type": "string"
}
},
"required": [
"projectId",
"runId"
],
"type": "object"
},
"name": "sm_get_sync_run",
"outputSchema": {
"additionalProperties": true,
"description": "Output for the sm_get_sync_run tool. Failure payloads arrive in the same envelope as { error, code }.",
"properties": {
"code": {
"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.",
"type": "string"
},
"error": {
"description": "A human-readable error message detailing what went wrong.",
"type": "string"
},
"lookbackWindowDays": {
"description": "Number of days of history the sync covers.",
"type": "integer"
},
"pendingBatchCount": {
"description": "Number of batches still queued for processing.",
"type": "integer"
},
"progress": {
"description": "Per-data-type progress rows for the sync run.",
"items": {
"additionalProperties": true,
"description": "In-flight progress for a sync run. Rows exist only during an active sync.",
"properties": {
"currentPage": {
"description": "Current pagination offset.",
"type": "integer"
},
"currentPhase": {
"description": "Free text phase description, not an enum.",
"type": [
"string",
"null"
]
},
"dataType": {
"description": "Data type for the progress row.",
"type": "string"
},
"listsCompleted": {
"description": "Lists fully processed.",
"type": "integer"
},
"recordsProcessed": {
"description": "Records processed.",
"type": "integer"
},
"recordsSkipped": {
"description": "Records skipped.",
"type": "integer"
},
"recordsWritten": {
"description": "Records written.",
"type": "integer"
},
"startedAt": {
"description": "ISO 8601 UTC timestamp.",
"type": "string"
},
"totalLists": {
"description": "Total lists in scope, or null.",
"type": [
"integer",
"null"
]
},
"totalRecords": {
"description": "Total records, or null.",
"type": [
"integer",
"null"
]
},
"updatedAt": {
"description": "ISO 8601 UTC timestamp.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"projectId": {
"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.",
"type": "string"
},
"results": {
"description": "Per-stage results for the sync run.",
"items": {
"additionalProperties": true,
"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.",
"properties": {
"dataType": {
"description": "Free-form varchar (not an enum). Observed values: automations, campaign_reports, campaigns, email_activities, lists, member_activities, members, reports, segments, tags.",
"type": "string"
},
"durationSeconds": {
"description": "Stage duration, or null.",
"type": [
"integer",
"null"
]
},
"errorMessage": {
"description": "Stage failure detail, or null.",
"type": [
"string",
"null"
]
},
"finalTableRowCount": {
"description": "Final table row count, or null.",
"type": [
"integer",
"null"
]
},
"recordsSkipped": {
"description": "Records skipped in the stage, or null.",
"type": [
"integer",
"null"
]
},
"recordsWritten": {
"description": "Records written in the stage, or null.",
"type": [
"integer",
"null"
]
},
"totalRecords": {
"description": "Records in the stage, or null.",
"type": [
"integer",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"run": {
"additionalProperties": true,
"description": "Details for a specific sync run. Omits projectName, retryCount, resultsCount, and totalTables carried by the list row.",
"properties": {
"createdAt": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
},
"endedAt": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
},
"errorMessage": {
"description": "Failure detail, or null on success.",
"type": [
"string",
"null"
]
},
"id": {
"description": "Identifier for the sync run.",
"type": "string"
},
"projectId": {
"description": "Project the run belongs to.",
"type": "string"
},
"startedAt": {
"description": "ISO 8601 UTC timestamp.",
"type": "string"
},
"status": {
"description": "Run status, for example queued, running, completed, or failed.",
"enum": [
"queued",
"pending",
"running",
"paused",
"success",
"partial",
"failed",
"cancelled"
],
"type": "string"
},
"triggerType": {
"description": "What initiated the run.",
"enum": [
"manual",
"scheduled"
],
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"campaignId": {
"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.",
"pattern": "^[a-zA-Z0-9_-]+$",
"type": "string"
},
"projectId": {
"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.",
"minLength": 1,
"type": "string"
}
},
"required": [
"projectId",
"campaignId"
],
"type": "object"
},
"name": "sm_get_variate",
"outputSchema": {
"additionalProperties": true,
"description": "Output for the sm_get_variate tool. Failure payloads arrive in the same envelope as { error, code }.",
"properties": {
"audienceQuality": {
"description": "Per-variant audience-quality rows.",
"items": {
"additionalProperties": true,
"description": "Measures the quality of audience engaging with the campaign.",
"properties": {
"avgClicksPerMember": {
"description": "Mean clicks per member.",
"type": "number"
},
"avgEngagementScore": {
"description": "Mean engagement score in the variant, or null.",
"type": [
"number",
"null"
]
},
"avgMemberRating": {
"description": "Mean member rating in the variant, or null.",
"type": [
"number",
"null"
]
},
"avgOpensPerMember": {
"description": "Mean opens per member.",
"type": "number"
},
"clickToOpenRate": {
"description": "Click-to-open rate for the variant.",
"type": "number"
},
"leaderCount": {
"description": "Leaders in the variant.",
"type": "integer"
},
"repeatClickers": {
"description": "Members who clicked more than once.",
"type": "integer"
},
"repeatOpeners": {
"description": "Members who opened more than once.",
"type": "integer"
},
"totalEngagedMembers": {
"description": "Engaged members in the variant.",
"type": "integer"
},
"variantLabel": {
"description": "Variant label.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"code": {
"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.",
"type": "string"
},
"engagementVelocity": {
"description": "Per-variant engagement velocity rows.",
"items": {
"additionalProperties": true,
"description": "Velocity of opens and clicks post-send.",
"properties": {
"clicks": {
"description": "Click events for the variant in the window.",
"type": "integer"
},
"hoursAfterSend": {
"description": "0-72",
"type": "integer"
},
"opens": {
"description": "Open events for the variant in the window.",
"type": "integer"
},
"variantLabel": {
"description": "Variant label, for example A or B.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"error": {
"description": "A human-readable error message detailing what went wrong.",
"type": "string"
},
"funnelData": {
"description": "Per-variant funnel rows from recipients through unique clickers.",
"items": {
"additionalProperties": true,
"description": "Funnel metrics for a campaign or variant.",
"properties": {
"recipients": {
"description": "Recipients for the variant.",
"type": "integer"
},
"uniqueClickers": {
"description": "Distinct clickers.",
"type": "integer"
},
"uniqueOpeners": {
"description": "Distinct openers.",
"type": "integer"
},
"variantLabel": {
"description": "Variant label.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"geoBreakdown": {
"description": "Per-variant geography rollup rows.",
"items": {
"additionalProperties": true,
"description": "Geographic distribution of campaign engagement.",
"properties": {
"engagedCount": {
"description": "Engaged members in the region.",
"type": "integer"
},
"stateRegion": {
"description": "State or region.",
"type": "string"
},
"variantLabel": {
"description": "Variant label.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"projectId": {
"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.",
"type": "string"
},
"timeToFirstOpen": {
"description": "Per-variant time-to-first-open statistics.",
"items": {
"additionalProperties": true,
"description": "Analysis of time until the first open occurs.",
"properties": {
"avgMinutes": {
"description": "Mean minutes to first open.",
"type": "number"
},
"maxMinutes": {
"description": "Maximum minutes to first open.",
"type": "integer"
},
"medianMinutes": {
"description": "Median minutes to first open.",
"type": "integer"
},
"minMinutes": {
"description": "Minimum minutes to first open.",
"type": "integer"
},
"openers": {
"description": "Distinct openers in the variant.",
"type": "integer"
},
"variantLabel": {
"description": "Variant label.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"variantReports": {
"description": "Per-variant performance rows.",
"items": {
"additionalProperties": true,
"description": "Performance reports split by campaign variant.",
"properties": {
"clicksTotal": {
"description": "Total click events for the variant.",
"type": "integer"
},
"emailsSent": {
"description": "Emails the variant sent.",
"type": "integer"
},
"hardBounces": {
"description": "Hard bounces for the variant.",
"type": "integer"
},
"opensTotal": {
"description": "Total open events for the variant.",
"type": "integer"
},
"softBounces": {
"description": "Soft bounces for the variant.",
"type": "integer"
},
"subjectLine": {
"description": "Variant subject line.",
"type": "string"
},
"uniqueClicks": {
"description": "Distinct clickers for the variant.",
"type": "integer"
},
"uniqueOpens": {
"description": "Distinct openers for the variant.",
"type": "integer"
},
"unsubscribed": {
"description": "Unsubscribes for the variant.",
"type": "integer"
},
"variantLabel": {
"description": "A, B, C, or Campaign for non-variate",
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"botFilter": {
"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.",
"enum": [
"all",
"suspected-bot",
"clean"
],
"type": "string"
},
"cursor": {
"description": "Opaque keyset pagination cursor returned as `nextCursor` by the previous page. Must be replayed with identical query filters.",
"type": "string"
},
"insiderFilter": {
"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.",
"enum": [
"all",
"exclude",
"only"
],
"type": "string"
},
"maxPrior": {
"description": "Maximum count of engagement actions prior to the recent drop-off. Omit to impose no upper bound.",
"minimum": 0,
"type": "number"
},
"maxRating": {
"description": "Maximum Mailchimp member star rating to include, from 1 to 5. Omit to include every rating.",
"maximum": 5,
"minimum": 1,
"type": "integer"
},
"minPrior": {
"description": "Minimum count of engagement actions prior to the recent drop-off. Omit to impose no lower bound.",
"minimum": 0,
"type": "number"
},
"minRating": {
"description": "Minimum Mailchimp member star rating to include, from 1 to 5. Omit to include every rating.",
"maximum": 5,
"minimum": 1,
"type": "integer"
},
"pageSize": {
"default": 100,
"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.",
"maximum": 100,
"minimum": 1,
"type": "number"
},
"projectId": {
"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.",
"minLength": 1,
"type": "string"
},
"rep": {
"description": "Filter by an exact match on the assigned sales representative's name. Omit to include members assigned to any rep.",
"type": "string"
},
"search": {
"description": "Filter subscribers by a case-insensitive partial match on their email address, first name, or last name. Omit to skip text filtering.",
"type": "string"
},
"sortBy": {
"default": "active_actions_recent",
"description": "The field used to order the at-risk subscribers list. Defaults to the number of recent active actions.",
"enum": [
"active_actions_recent",
"active_actions_prior",
"email_address",
"member_rating"
],
"type": "string"
},
"sortDir": {
"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.",
"enum": [
"asc",
"desc"
],
"type": "string"
}
},
"required": [
"projectId"
],
"type": "object"
},
"name": "sm_list_at_risk",
"outputSchema": {
"additionalProperties": true,
"description": "Output for the sm_list_at_risk tool. Failure payloads arrive in the same envelope as { error, code }.",
"properties": {
"code": {
"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.",
"type": "string"
},
"distribution": {
"description": "Rating-bucket distribution of the at-risk population.",
"items": {
"additionalProperties": true,
"description": "Distribution of at-risk subscribers grouped by member rating.",
"properties": {
"avgPriorActions": {
"description": "Mean prior-window action count in the bucket.",
"type": "number"
},
"maxPriorActions": {
"description": "Highest prior-window action count in the bucket.",
"type": "integer"
},
"memberRating": {
"description": "Rating bucket.",
"type": "integer"
},
"subscriberCount": {
"description": "Members in the rating bucket.",
"type": "integer"
}
},
"type": "object"
},
"type": "array"
},
"error": {
"description": "A human-readable error message detailing what went wrong.",
"type": "string"
},
"hasMore": {
"description": "True if additional results exist beyond this page.",
"type": "boolean"
},
"nextCursor": {
"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.",
"type": [
"string",
"null"
]
},
"pageSize": {
"description": "The maximum number of items returned in this page.",
"type": "integer"
},
"projectId": {
"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.",
"type": "string"
},
"quadrantData": {
"description": "Per-member rows for the prior-vs-recent activity quadrant.",
"items": {
"additionalProperties": true,
"description": "Detailed scatter-quadrant plotting data for at-risk members.",
"properties": {
"activeActionsPrior": {
"description": "Count of engagement actions in the prior comparison window.",
"type": "integer"
},
"daysSinceLastActivity": {
"description": "Days since the member's last tracked action.",
"type": "integer"
},
"emailAddress": {
"description": "The member's email address.",
"type": "string"
},
"engagementScore": {
"description": "Composite engagement score for the member or cohort. Note: This is the raw unbounded time-decayed score that can be negative.",
"type": "number"
},
"firstName": {
"description": "The member's first name, or null when unavailable.",
"type": [
"string",
"null"
]
},
"lastName": {
"description": "The member's last name, or null when unavailable.",
"type": [
"string",
"null"
]
},
"memberRating": {
"description": "Integer Mailchimp engagement rating for the member (1-5), or null when unrated.",
"type": "integer"
},
"repName": {
"description": "Internal owner or rep assigned to the member, or null when unassigned.",
"type": [
"string",
"null"
]
},
"totalClicks": {
"description": "Total click events, counting repeat clicks.",
"type": "integer"
},
"totalOpens": {
"description": "Total open events, counting repeat opens by the same member.",
"type": "integer"
}
},
"type": "object"
},
"type": "array"
},
"repBreakdown": {
"description": "Per-rep rollup of the at-risk population.",
"items": {
"additionalProperties": true,
"description": "Breakdown of at-risk counts grouped by sales rep/owner.",
"properties": {
"atRiskCount": {
"description": "At-risk members assigned to the rep.",
"type": "integer"
},
"avgEngagementScore": {
"description": "Mean engagement score for the rep's at-risk members.",
"type": "number"
},
"avgPriorActions": {
"description": "Mean prior actions for the rep's at-risk members.",
"type": "number"
},
"repName": {
"description": "Rep name for the row.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"subscribers": {
"description": "At-risk member rows.",
"items": {
"additionalProperties": true,
"description": "Represents an individual at-risk member. Semantic conflict note: engagementScore here is the RAW unbounded decayed score, can be negative.",
"properties": {
"activeActionsPrior": {
"description": "Count of engagement actions in the prior comparison window.",
"type": "integer"
},
"activeActionsRecent": {
"description": "Count of engagement actions in the recent comparison window.",
"type": "integer"
},
"emailAddress": {
"description": "The member's email address.",
"type": "string"
},
"engagementScore": {
"description": "Composite engagement score for the at-risk member. Note: This is the raw unbounded time-decayed score that can be negative.",
"type": [
"number",
"null"
]
},
"firstName": {
"description": "The member's first name, or null when unavailable.",
"type": [
"string",
"null"
]
},
"isLeader": {
"description": "True when the member qualifies as a leader by engagement.",
"type": [
"boolean",
"null"
]
},
"lastActivityAt": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
},
"lastName": {
"description": "The member's last name, or null when unavailable.",
"type": [
"string",
"null"
]
},
"memberRating": {
"description": "Integer Mailchimp engagement rating for the member (1-5), or null when unrated.",
"type": [
"integer",
"null"
]
},
"repName": {
"description": "Internal owner or rep assigned to the member, or null when unassigned.",
"type": [
"string",
"null"
]
},
"status": {
"description": "Subscription status of the member.",
"type": "string"
},
"subscriberHash": {
"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.",
"type": "string"
},
"totalClicks": {
"description": "Total click events, counting repeat clicks.",
"type": [
"integer",
"null"
]
},
"totalOpens": {
"description": "Total open events, counting repeat opens by the same member.",
"type": [
"integer",
"null"
]
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"action": {
"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.",
"enum": [
"all",
"opened",
"clicked",
"bounced",
"unsubscribed"
],
"type": "string"
},
"botFilter": {
"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.",
"enum": [
"all",
"suspected-bot",
"clean"
],
"type": "string"
},
"campaignId": {
"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.",
"minLength": 1,
"type": "string"
},
"country": {
"description": "Filter responders by their exact two-letter ISO country code (e.g. 'US', 'GB'). Omit to include all countries.",
"type": "string"
},
"cursor": {
"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.",
"type": "string"
},
"engagementType": {
"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.",
"enum": [
"all",
"open",
"click"
],
"type": "string"
},
"insiderFilter": {
"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.",
"enum": [
"all",
"exclude",
"only"
],
"type": "string"
},
"leader": {
"default": "all",
"description": "Filter responders to include only recognized leaders ('true'), exclude leaders ('false'), or ignore leader status ('all', default).",
"enum": [
"all",
"true",
"false"
],
"type": "string"
},
"maxClicks": {
"description": "Maximum number of clicks (click_count) allowed to include the responder in results. Omit for no maximum.",
"minimum": 0,
"type": "integer"
},
"maxOpens": {
"description": "Maximum number of opens (open_count) allowed to include the responder in results. Omit for no maximum.",
"minimum": 0,
"type": "integer"
},
"maxRating": {
"description": "Maximum Mailchimp member star rating to include, from 1 to 5. Omit to include every rating.",
"maximum": 5,
"minimum": 1,
"type": "number"
},
"maxScore": {
"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.",
"maximum": 100,
"minimum": 0,
"type": "number"
},
"minClicks": {
"description": "Minimum number of clicks (click_count) required to include the responder in results. Omit for no minimum.",
"minimum": 0,
"type": "integer"
},
"minOpens": {
"description": "Minimum number of opens (open_count) required to include the responder in results. Omit for no minimum.",
"minimum": 0,
"type": "integer"
},
"minRating": {
"description": "Minimum Mailchimp member star rating to include, from 1 to 5. Omit to include every rating.",
"maximum": 5,
"minimum": 1,
"type": "number"
},
"minScore": {
"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.",
"maximum": 100,
"minimum": 0,
"type": "number"
},
"pageSize": {
"default": 100,
"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.",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"projectId": {
"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.",
"minLength": 1,
"type": "string"
},
"region": {
"description": "Filter responders by their exact region or state name as recognized by Mailchimp geography data. Omit to include all regions.",
"type": "string"
},
"search": {
"description": "Filter responders by a case-insensitive partial match on email address, first name, or last name. Omit to skip text filtering.",
"type": "string"
},
"sortBy": {
"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.",
"enum": [
"email_address",
"last_name",
"open_count",
"click_count",
"engagement_score",
"member_rating",
"variant_label",
"engagement_type"
],
"type": "string"
},
"sortDir": {
"default": "desc",
"description": "The direction to sort the responder results. Can be 'asc' for ascending or 'desc' for descending. Defaults to \"desc\" when omitted.",
"enum": [
"asc",
"desc"
],
"type": "string"
},
"variant": {
"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.",
"type": "string"
}
},
"required": [
"projectId",
"campaignId"
],
"type": "object"
},
"name": "sm_list_campaign_responders",
"outputSchema": {
"additionalProperties": true,
"description": "Output for the sm_list_campaign_responders tool. Failure payloads arrive in the same envelope as { error, code }.",
"properties": {
"campaignId": {
"description": "Campaign identifier.",
"type": "string"
},
"code": {
"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.",
"type": "string"
},
"emailsSent": {
"description": "Campaign-level send total; this is the denominator that is deliberately NOT enumerated by this tool.",
"type": "integer"
},
"error": {
"description": "A human-readable error message detailing what went wrong.",
"type": "string"
},
"hasMore": {
"description": "True when additional pages remain past the current cursor.",
"type": "boolean"
},
"nextCursor": {
"description": "Opaque cursor to request the next page, or null when no more results.",
"type": [
"string",
"null"
]
},
"pageSize": {
"description": "Number of rows per page in the current request.",
"type": "integer"
},
"projectId": {
"description": "An opaque alphanumeric project identifier of 8 or more characters identifying the Space Monkey Project the returned data is scoped to.",
"type": "string"
},
"responders": {
"description": "Members who registered a tracked response to the campaign.",
"items": {
"additionalProperties": true,
"description": "one row per member who registered a tracked response to the campaign.",
"properties": {
"bounced": {
"description": "True if the member registered a bounced response to this campaign.",
"type": "boolean"
},
"clickCount": {
"description": "Number of times the member clicked in this campaign.",
"type": "integer"
},
"countryCode": {
"description": "Two-letter country code for the member, or null when unknown.",
"type": [
"string",
"null"
]
},
"emailAddress": {
"description": "The member's email address.",
"type": "string"
},
"engagementScore": {
"description": "The member's overall engagement percentile across all campaigns on a 0-100 scale, not a campaign-specific figure.",
"type": [
"number",
"null"
]
},
"engagementType": {
"description": "The member's highest engagement for this campaign.",
"type": [
"string",
"null"
]
},
"firstName": {
"description": "The member's first name, or null when unavailable.",
"type": [
"string",
"null"
]
},
"isLeader": {
"description": "True when the member qualifies as a leader by engagement.",
"type": "boolean"
},
"lastName": {
"description": "The member's last name, or null when unavailable.",
"type": [
"string",
"null"
]
},
"mailchimpVip": {
"description": "True when the member is flagged VIP.",
"type": "boolean"
},
"memberRating": {
"description": "Integer Mailchimp engagement rating for the member (1-5), or null when unrated.",
"type": [
"number",
"null"
]
},
"openCount": {
"description": "Number of times the member opened this campaign.",
"type": "integer"
},
"region": {
"description": "Region or state-level location string, or null when unknown.",
"type": [
"string",
"null"
]
},
"subscriberHash": {
"description": "MD5 of the downcased email and is the canonical member key for joining to the member tools.",
"type": "string"
},
"unsubscribed": {
"description": "True if the member registered an unsubscribed response to this campaign.",
"type": "boolean"
},
"variantLabel": {
"description": "Variant label for the campaign, or null.",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Opaque keyset pagination cursor returned as `nextCursor` by the previous page. Must be replayed with identical query filters.",
"type": "string"
},
"endDate": {
"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.",
"type": "string"
},
"maxSendVolume": {
"description": "Maximum number of emails sent to include the campaign in the results. Omit to impose no upper bound.",
"minimum": 0,
"type": "integer"
},
"minSendVolume": {
"description": "Minimum number of emails sent to include the campaign in the results. Omit to use the system default threshold.",
"minimum": 0,
"type": "integer"
},
"pageSize": {
"default": 100,
"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.",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"projectId": {
"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.",
"minLength": 1,
"type": "string"
},
"search": {
"description": "Filter campaigns by a case-insensitive partial match on the subject line or specific internal campaign IDs. Omit to skip text filtering.",
"type": "string"
},
"sortBy": {
"default": "send_time",
"description": "The field used to order the campaigns list. Defaults to sorting by the most recent send time first.",
"enum": [
"subject_line",
"send_time",
"emails_sent",
"open_rate",
"click_rate",
"campaign_id"
],
"type": "string"
},
"sortDir": {
"default": "desc",
"description": "The direction to sort the campaign results. Can be 'asc' for ascending or 'desc' for descending. Defaults to \"desc\" when omitted.",
"enum": [
"asc",
"desc"
],
"type": "string"
},
"startDate": {
"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.",
"type": "string"
}
},
"required": [
"projectId"
],
"type": "object"
},
"name": "sm_list_campaigns",
"outputSchema": {
"additionalProperties": true,
"description": "Output for the sm_list_campaigns tool. Failure payloads arrive in the same envelope as { error, code }.",
"properties": {
"campaigns": {
"description": "Campaign rows with performance metrics.",
"items": {
"additionalProperties": true,
"description": "General campaign list view row.",
"properties": {
"campaignId": {
"description": "Stable identifier for a Mailchimp campaign. Use it to join rows across tools or drill into sm_get_campaign.",
"type": "string"
},
"clickRate": {
"description": "Unique clicks divided by delivered, as a percentage from 0 to 100.",
"type": "number"
},
"emailsSent": {
"description": "Number of emails the campaign attempted to send to recipients.",
"type": "integer"
},
"openRate": {
"description": "Unique opens divided by delivered, as a percentage from 0 to 100.",
"type": "number"
},
"sendTime": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
},
"subjectLine": {
"description": "The campaign subject line as sent.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"code": {
"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.",
"type": "string"
},
"error": {
"description": "A human-readable error message detailing what went wrong.",
"type": "string"
},
"hasMore": {
"description": "True if additional results exist beyond this page.",
"type": "boolean"
},
"nextCursor": {
"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.",
"type": [
"string",
"null"
]
},
"pageSize": {
"description": "The maximum number of items returned in this page.",
"type": "integer"
},
"projectId": {
"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.",
"type": "string"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"botFilter": {
"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.",
"enum": [
"all",
"suspected-bot",
"clean"
],
"type": "string"
},
"cursor": {
"description": "Opaque keyset pagination cursor returned as `nextCursor` by the previous page. Must be replayed with identical query filters.",
"type": "string"
},
"insiderFilter": {
"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.",
"enum": [
"all",
"exclude",
"only"
],
"type": "string"
},
"leaderOnly": {
"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.",
"type": "boolean"
},
"maxRating": {
"description": "Maximum Mailchimp member star rating to include, from 1 to 5. Omit to include every rating.",
"maximum": 5,
"minimum": 1,
"type": "integer"
},
"maxScore": {
"description": "Maximum engagement score percentile to include. The score ranges from 0 to 100. Omit to impose no maximum bound.",
"minimum": 0,
"type": "number"
},
"minRating": {
"description": "Minimum Mailchimp member star rating to include, from 1 to 5. Omit to include every rating.",
"maximum": 5,
"minimum": 1,
"type": "integer"
},
"minScore": {
"description": "Minimum engagement score percentile to include. The score ranges from 0 to 100. Omit to impose no minimum bound.",
"minimum": 0,
"type": "number"
},
"pageSize": {
"default": 100,
"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.",
"maximum": 100,
"minimum": 1,
"type": "number"
},
"projectId": {
"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.",
"minLength": 1,
"type": "string"
},
"rep": {
"description": "Filter by an exact match on the assigned sales representative's name. Omit to include members assigned to any rep.",
"type": "string"
},
"search": {
"description": "Filter leaders by a case-insensitive partial match on their email address, first name, or last name. Omit to skip text filtering.",
"type": "string"
},
"sortBy": {
"default": "engagement_score",
"description": "The field used to order the leaderboard results. Defaults to sorting by the highest engagement score first.",
"enum": [
"engagement_score",
"total_opens",
"total_clicks",
"last_activity_at",
"is_leader",
"member_rating",
"rep_name",
"email_address"
],
"type": "string"
},
"sortDir": {
"default": "desc",
"description": "The direction to sort the leaderboard results. Can be 'asc' for ascending or 'desc' for descending. Defaults to \"desc\" when omitted.",
"enum": [
"asc",
"desc"
],
"type": "string"
},
"status": {
"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.",
"enum": [
"all",
"vip",
"non-vip",
"leader"
],
"type": "string"
},
"tag": {
"description": "Filter by an exact match on a Mailchimp tag or segment name. Omit to include members with any tags.",
"type": "string"
}
},
"required": [
"projectId"
],
"type": "object"
},
"name": "sm_list_leaders",
"outputSchema": {
"additionalProperties": true,
"description": "Output for the sm_list_leaders tool. Failure payloads arrive in the same envelope as { error, code }.",
"properties": {
"code": {
"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.",
"type": "string"
},
"error": {
"description": "A human-readable error message detailing what went wrong.",
"type": "string"
},
"hasMore": {
"description": "True if additional results exist beyond this page.",
"type": "boolean"
},
"leaderboardDistribution": {
"description": "Leaderboard tier buckets from highest to lowest engagement.",
"items": {
"additionalProperties": true,
"description": "Distribution buckets for leaders across scoring tiers.",
"properties": {
"avgEngagementScore": {
"description": "Mean engagement score in the tier.",
"type": "number"
},
"avgMemberRating": {
"description": "Mean member rating in the enclosing bucket.",
"type": "number"
},
"leaderCount": {
"description": "Leaders in the tier.",
"type": "integer"
},
"subscriberCount": {
"description": "Members in the tier.",
"type": "integer"
},
"tier": {
"description": "Tier label, for example top, core, or watch.",
"type": "string"
},
"tierOrder": {
"description": "Ordinal position of the tier for stable sorting.",
"type": "integer"
}
},
"type": "object"
},
"type": "array"
},
"leaders": {
"description": "Leader member rows ranked by engagement.",
"items": {
"additionalProperties": true,
"description": "Represents an individual top-tier engaged member. Semantic conflict note: engagementScore here is a 0-100 percentile.",
"properties": {
"emailAddress": {
"description": "The member's email address.",
"type": "string"
},
"engagementScore": {
"description": "Composite engagement score for the leader. Note: This is a 0-100 percentile.",
"type": "number"
},
"firstName": {
"description": "The member's first name, or null when unavailable.",
"type": [
"string",
"null"
]
},
"isLeader": {
"description": "True when the member qualifies as a leader by engagement.",
"type": "boolean"
},
"lastActivityAt": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
},
"lastName": {
"description": "The member's last name, or null when unavailable.",
"type": [
"string",
"null"
]
},
"memberRating": {
"description": "Integer Mailchimp engagement rating for the member (1-5), or null when unrated.",
"type": [
"integer",
"null"
]
},
"repName": {
"description": "Null when owner merge field unmapped",
"type": [
"string",
"null"
]
},
"status": {
"description": "Subscription status of the leader, or null.",
"type": [
"string",
"null"
]
},
"subscriberHash": {
"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.",
"type": "string"
},
"totalClicks": {
"description": "Total click events, counting repeat clicks.",
"type": "integer"
},
"totalOpens": {
"description": "Total open events, counting repeat opens by the same member.",
"type": "integer"
},
"vip": {
"description": "True when the member is flagged VIP.",
"type": [
"boolean",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"nextCursor": {
"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.",
"type": [
"string",
"null"
]
},
"pageSize": {
"description": "The maximum number of items returned in this page.",
"type": "integer"
},
"projectId": {
"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.",
"type": "string"
},
"repOptions": {
"description": "Distinct rep values available for filtering.",
"items": {
"additionalProperties": true,
"description": "Generic named-count tuple used for Rep and Tag options.",
"properties": {
"count": {
"description": "Leaders assigned to the rep.",
"type": "integer"
},
"name": {
"description": "Rep name.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"summaryStats": {
"additionalProperties": true,
"description": "Overall summary stats for leaders. Note: avgScore is actually the average member RATING, preserved for now.",
"properties": {
"activeLeaderCount": {
"description": "Leaders currently active.",
"type": "integer"
},
"atRiskCount": {
"description": "Leaders also flagged at risk.",
"type": "integer"
},
"atRiskLeaderCount": {
"description": "Leaders flagged at risk.",
"type": "integer"
},
"avgLeaderRating": {
"description": "Mean rating among leaders.",
"type": "number"
},
"avgScore": {
"description": "Mean member rating among leaders. Note: This is average member rating, not a mean engagement score.",
"type": "number"
},
"totalActive": {
"description": "Leaders with recent activity.",
"type": "integer"
},
"totalLeaders": {
"description": "Total leaders in the audience.",
"type": "integer"
}
},
"type": "object"
},
"tagOptions": {
"description": "Distinct tag values available for filtering.",
"items": {
"additionalProperties": true,
"description": "Generic named-count tuple used for Rep and Tag options.",
"properties": {
"count": {
"description": "Leaders carrying the tag.",
"type": "integer"
},
"name": {
"description": "Tag name.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"botFilter": {
"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.",
"enum": [
"all",
"suspected-bot",
"clean"
],
"type": "string"
},
"country": {
"description": "Filter members by their exact two-letter ISO country code (e.g. 'US', 'GB'). Omit to include all countries.",
"type": "string"
},
"cursor": {
"description": "Opaque keyset pagination cursor returned as `nextCursor` by the previous page. Must be replayed with identical query filters.",
"type": "string"
},
"dimensionFour": {
"description": "Filter members by an exact match on custom dimension four. Dimension values are derived from mapped Mailchimp merge fields. Omit to skip.",
"type": "string"
},
"dimensionOne": {
"description": "Filter members by an exact match on custom dimension one. Dimension values are derived from mapped Mailchimp merge fields. Omit to skip.",
"type": "string"
},
"dimensionThree": {
"description": "Filter members by an exact match on custom dimension three. Dimension values are derived from mapped Mailchimp merge fields. Omit to skip.",
"type": "string"
},
"dimensionTwo": {
"description": "Filter members by an exact match on custom dimension two. Dimension values are derived from mapped Mailchimp merge fields. Omit to skip.",
"type": "string"
},
"insiderFilter": {
"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.",
"enum": [
"all",
"exclude",
"only"
],
"type": "string"
},
"leader": {
"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.",
"enum": [
"all",
"true",
"false"
],
"type": "string"
},
"maxRating": {
"description": "Maximum Mailchimp member star rating to include, from 1 to 5. Omit to include every rating.",
"maximum": 5,
"minimum": 1,
"type": "integer"
},
"minRating": {
"description": "Minimum Mailchimp member star rating to include, from 1 to 5. Omit to include every rating.",
"maximum": 5,
"minimum": 1,
"type": "integer"
},
"pageSize": {
"default": 100,
"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.",
"maximum": 100,
"minimum": 1,
"type": "number"
},
"projectId": {
"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.",
"minLength": 1,
"type": "string"
},
"region": {
"description": "Filter members by their exact region or state name as recognized by Mailchimp geography data. Omit to include all regions.",
"type": "string"
},
"rep": {
"description": "Filter by an exact match on the assigned sales representative's name. Omit to include members assigned to any rep.",
"type": "string"
},
"search": {
"description": "Filter the directory by a case-insensitive partial match on email address, first name, or last name. Omit to skip text filtering.",
"type": "string"
},
"sortBy": {
"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.",
"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"
},
"sortDir": {
"default": "asc",
"description": "The direction to sort the directory results. Can be 'asc' for ascending or 'desc' for descending. Defaults to \"asc\" when omitted.",
"enum": [
"asc",
"desc"
],
"type": "string"
},
"status": {
"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.",
"enum": [
"all",
"subscribed",
"unsubscribed",
"cleaned"
],
"type": "string"
},
"tag": {
"description": "Filter by an exact match on a Mailchimp tag or segment name. Omit to include members with any tags.",
"type": "string"
}
},
"required": [
"projectId"
],
"type": "object"
},
"name": "sm_list_members",
"outputSchema": {
"additionalProperties": true,
"description": "Output for the sm_list_members tool. Failure payloads arrive in the same envelope as { error, code }.",
"properties": {
"code": {
"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.",
"type": "string"
},
"error": {
"description": "A human-readable error message detailing what went wrong.",
"type": "string"
},
"hasMore": {
"description": "True if additional results exist beyond this page.",
"type": "boolean"
},
"members": {
"description": "Member directory rows.",
"items": {
"additionalProperties": true,
"description": "Represents a single member in the paginated directory.",
"properties": {
"companyName": {
"description": "The company associated with the member, or null when unknown.",
"type": [
"string",
"null"
]
},
"countryCode": {
"description": "Two-letter country code for the member, or null when unknown.",
"type": [
"string",
"null"
]
},
"dimensionFour": {
"description": "Fourth custom dimension value for the member, or null.",
"type": [
"string",
"null"
]
},
"dimensionOne": {
"description": "First custom dimension value for the member, or null.",
"type": [
"string",
"null"
]
},
"dimensionThree": {
"description": "Third custom dimension value for the member, or null.",
"type": [
"string",
"null"
]
},
"dimensionTwo": {
"description": "Second custom dimension value for the member, or null.",
"type": [
"string",
"null"
]
},
"emailAddress": {
"description": "The member's email address.",
"type": "string"
},
"firstName": {
"description": "The member's first name, or null when unavailable.",
"type": [
"string",
"null"
]
},
"isLeader": {
"description": "True when the member qualifies as a leader by engagement.",
"type": "boolean"
},
"lastActivity": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
},
"lastChanged": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
},
"lastName": {
"description": "The member's last name, or null when unavailable.",
"type": [
"string",
"null"
]
},
"memberRating": {
"description": "Integer Mailchimp engagement rating for the member (1-5), or null when unrated.",
"type": [
"integer",
"null"
]
},
"region": {
"description": "Region or state-level location string, or null when unknown.",
"type": [
"string",
"null"
]
},
"repName": {
"description": "Internal owner or rep assigned to the member, or null when unassigned.",
"type": [
"string",
"null"
]
},
"status": {
"description": "Subscription status of the member.",
"type": "string"
},
"subscriberHash": {
"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.",
"type": "string"
},
"tags": {
"description": "Tag identifiers attached to the member.",
"items": {
"type": "string"
},
"type": "array"
},
"timestampOpt": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
},
"vip": {
"description": "True when the member is flagged VIP.",
"type": "boolean"
}
},
"type": "object"
},
"type": "array"
},
"nextCursor": {
"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.",
"type": [
"string",
"null"
]
},
"pageSize": {
"description": "The maximum number of items returned in this page.",
"type": "integer"
},
"projectId": {
"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.",
"type": "string"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {},
"required": [],
"type": "object"
},
"name": "sm_list_projects",
"outputSchema": {
"additionalProperties": true,
"description": "Output for the sm_list_projects tool. Failure payloads arrive in the same envelope as { error, code }.",
"properties": {
"code": {
"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.",
"type": "string"
},
"count": {
"description": "Number of projects returned.",
"type": "integer"
},
"error": {
"description": "A human-readable error message detailing what went wrong.",
"type": "string"
},
"projects": {
"description": "Project rows this key can read.",
"items": {
"additionalProperties": true,
"description": "Basic project information.",
"properties": {
"companyName": {
"description": "Company associated with the project, or null when unset.",
"type": [
"string",
"null"
]
},
"id": {
"description": "8-char Hashid of the internal integer id.",
"type": "string"
},
"name": {
"description": "Display name of the project.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {},
"required": [],
"type": "object"
},
"name": "sm_list_prompts",
"outputSchema": {
"additionalProperties": true,
"description": "Flattened catalog of available prompt workflows. Failure payloads arrive in the same envelope as { error, code }.",
"properties": {
"catalogSource": {
"description": "Source descriptor for the enclosing catalog.",
"type": "string"
},
"code": {
"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.",
"type": "string"
},
"error": {
"description": "A human-readable error message detailing what went wrong.",
"type": "string"
},
"lastUpdated": {
"description": "ISO 8601 instant the underlying data was last refreshed.",
"type": "string"
},
"promptCount": {
"description": "Number of prompts in the catalog.",
"type": "number"
},
"prompts": {
"description": "Prompt workflow rows.",
"items": {
"additionalProperties": true,
"properties": {
"arguments": {
"description": "Prompt arguments with metadata.",
"items": {
"additionalProperties": true,
"properties": {
"description": {
"description": "Argument description.",
"type": "string"
},
"name": {
"description": "Argument name.",
"type": "string"
},
"required": {
"description": "True when the argument is required.",
"type": "boolean"
},
"ui": {
"description": "Suggested input control.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"category": {
"description": "Sales-stage category.",
"type": "string"
},
"description": {
"description": "Prompt description.",
"type": "string"
},
"name": {
"description": "Prompt name.",
"type": "string"
},
"title": {
"description": "Prompt title.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"version": {
"description": "Version string for the enclosing catalog or document.",
"type": "string"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Opaque keyset pagination cursor returned as `nextCursor` by the previous page. Must be replayed with identical query filters.",
"type": "string"
},
"pageSize": {
"default": 100,
"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.",
"maximum": 100,
"minimum": 1,
"type": "number"
},
"projectId": {
"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.",
"minLength": 1,
"type": "string"
}
},
"required": [
"projectId"
],
"type": "object"
},
"name": "sm_list_sync_runs",
"outputSchema": {
"additionalProperties": true,
"description": "Output for the sm_list_sync_runs tool. Failure payloads arrive in the same envelope as { error, code }.",
"properties": {
"code": {
"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.",
"type": "string"
},
"error": {
"description": "A human-readable error message detailing what went wrong.",
"type": "string"
},
"hasMore": {
"description": "True if additional results exist beyond this page.",
"type": "boolean"
},
"nextCursor": {
"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.",
"type": [
"string",
"null"
]
},
"pageSize": {
"description": "The maximum number of items returned in this page.",
"type": "integer"
},
"projectId": {
"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.",
"type": "string"
},
"runs": {
"description": "Sync run rows.",
"items": {
"additionalProperties": true,
"description": "Represents a single sync run in the paginated list.",
"properties": {
"createdAt": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
},
"endedAt": {
"description": "ISO 8601 UTC timestamp.",
"type": [
"string",
"null"
]
},
"errorMessage": {
"description": "Failure detail, or null on success.",
"type": [
"string",
"null"
]
},
"id": {
"description": "Identifier for the sync run.",
"type": "string"
},
"projectId": {
"description": "Project the run belongs to.",
"type": "string"
},
"projectName": {
"description": "Project name.",
"type": "string"
},
"resultsCount": {
"description": "Per-stage results recorded.",
"type": "integer"
},
"retryCount": {
"description": "Retries applied, or null.",
"type": [
"integer",
"null"
]
},
"startedAt": {
"description": "ISO 8601 UTC timestamp.",
"type": "string"
},
"status": {
"description": "Run status, for example queued, running, completed, or failed.",
"enum": [
"queued",
"pending",
"running",
"paused",
"success",
"partial",
"failed",
"cancelled"
],
"type": "string"
},
"totalTables": {
"description": "Target tables covered.",
"type": "integer"
},
"triggerType": {
"description": "What initiated the run.",
"enum": [
"manual",
"scheduled"
],
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:b022fb6565d26265c11fb0eb5a795966ba5d876e2e5e9b5a0f74f92712ce5e87 | sha256sum