Skip to main content
Glama

Space Monkey Mailchimp Dashboard

Find at-risk members

sm_list_at_risk
Read-onlyIdempotent

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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
repNoFilter by an exact match on the assigned sales representative's name. Omit to include members assigned to any rep.
cursorNoOpaque keyset pagination cursor returned as `nextCursor` by the previous page. Must be replayed with identical query filters.
searchNoFilter subscribers by a case-insensitive partial match on their email address, first name, or last name. Omit to skip text filtering.
sortByNoThe field used to order the at-risk subscribers list. Defaults to the number of recent active actions.active_actions_recent
sortDirNoThe direction to sort the at-risk results. Can be 'asc' for ascending or 'desc' for descending. Defaults to "asc" when omitted.asc
maxPriorNoMaximum count of engagement actions prior to the recent drop-off. Omit to impose no upper bound.
minPriorNoMinimum count of engagement actions prior to the recent drop-off. Omit to impose no lower bound.
pageSizeNoMaximum 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.
botFilterNoFilter 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.all
maxRatingNoMaximum Mailchimp member star rating to include, from 1 to 5. Omit to include every rating.
minRatingNoMinimum Mailchimp member star rating to include, from 1 to 5. Omit to include every rating.
projectIdYesRequired. 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.
insiderFilterNoFilter 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.all

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
codeNoA 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.
errorNoA human-readable error message detailing what went wrong.
hasMoreNoTrue if additional results exist beyond this page.
pageSizeNoThe maximum number of items returned in this page.
projectIdNoAn 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.
nextCursorNoA 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.
subscribersNoAt-risk member rows.
distributionNoRating-bucket distribution of the at-risk population.
quadrantDataNoPer-member rows for the prior-vs-recent activity quadrant.
repBreakdownNoPer-rep rollup of the at-risk population.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed36 schema fields changed
    • changedOutput schema / description
      Previous value: -"Output for the sm_list_at_risk tool. Failure payloads arrive in the same envelope as { error, message, code }."New value: +"Output for the sm_list_at_risk tool. Failure payloads arrive in the same envelope as { error, code }."
    • addedOutput schema / properties / distribution / description
      Added value: +"Rating-bucket distribution of the at-risk population."
    • addedOutput schema / properties / distribution / items / properties / avgPriorActions / description
      Added value: +"Mean prior-window action count in the bucket."
    • addedOutput schema / properties / distribution / items / properties / maxPriorActions / description
      Added value: +"Highest prior-window action count in the bucket."
    • addedOutput schema / properties / distribution / items / properties / memberRating / description
      Added value: +"Rating bucket."
    • addedOutput schema / properties / distribution / items / properties / subscriberCount / description
      Added value: +"Members in the rating bucket."
    • addedOutput schema / properties / quadrantData / description
      Added value: +"Per-member rows for the prior-vs-recent activity quadrant."
    • addedOutput schema / properties / quadrantData / items / properties / activeActionsPrior / description
      Added value: +"Count of engagement actions in the prior comparison window."
    • addedOutput schema / properties / quadrantData / items / properties / daysSinceLastActivity / description
      Added value: +"Days since the member's last tracked action."
    • addedOutput schema / properties / quadrantData / items / properties / emailAddress / description
      Added value: +"The member's email address."
    • addedOutput schema / properties / quadrantData / items / properties / engagementScore / description
      Added value: +"Composite engagement score for the member or cohort. Note: This is the raw unbounded time-decayed score that can be negative."
    • addedOutput schema / properties / quadrantData / items / properties / firstName / description
      Added value: +"The member's first name, or null when unavailable."
    • addedOutput schema / properties / quadrantData / items / properties / lastName / description
      Added value: +"The member's last name, or null when unavailable."
    • addedOutput schema / properties / quadrantData / items / properties / memberRating / description
      Added value: +"Integer Mailchimp engagement rating for the member (1-5), or null when unrated."
    • addedOutput schema / properties / quadrantData / items / properties / repName / description
      Added value: +"Internal owner or rep assigned to the member, or null when unassigned."
    • addedOutput schema / properties / quadrantData / items / properties / totalClicks / description
      Added value: +"Total click events, counting repeat clicks."
    • addedOutput schema / properties / quadrantData / items / properties / totalOpens / description
      Added value: +"Total open events, counting repeat opens by the same member."
    • addedOutput schema / properties / repBreakdown / description
      Added value: +"Per-rep rollup of the at-risk population."
    • addedOutput schema / properties / repBreakdown / items / properties / atRiskCount / description
      Added value: +"At-risk members assigned to the rep."
    • addedOutput schema / properties / repBreakdown / items / properties / avgEngagementScore / description
      Added value: +"Mean engagement score for the rep's at-risk members."
    • addedOutput schema / properties / repBreakdown / items / properties / avgPriorActions / description
      Added value: +"Mean prior actions for the rep's at-risk members."
    • addedOutput schema / properties / repBreakdown / items / properties / repName / description
      Added value: +"Rep name for the row."
    • addedOutput schema / properties / subscribers / description
      Added value: +"At-risk member rows."
    • addedOutput schema / properties / subscribers / items / properties / activeActionsPrior / description
      Added value: +"Count of engagement actions in the prior comparison window."
    • addedOutput schema / properties / subscribers / items / properties / activeActionsRecent / description
      Added value: +"Count of engagement actions in the recent comparison window."
    • addedOutput schema / properties / subscribers / items / properties / emailAddress / description
      Added value: +"The member's email address."
    • addedOutput schema / properties / subscribers / items / properties / engagementScore / description
      Added value: +"Composite engagement score for the at-risk member. Note: This is the raw unbounded time-decayed score that can be negative."
    • addedOutput schema / properties / subscribers / items / properties / firstName / description
      Added value: +"The member's first name, or null when unavailable."
    • addedOutput schema / properties / subscribers / items / properties / isLeader / description
      Added value: +"True when the member qualifies as a leader by engagement."
    • addedOutput schema / properties / subscribers / items / properties / lastName / description
      Added value: +"The member's last name, or null when unavailable."
    • addedOutput schema / properties / subscribers / items / properties / memberRating / description
      Added value: +"Integer Mailchimp engagement rating for the member (1-5), or null when unrated."
    • addedOutput schema / properties / subscribers / items / properties / repName / description
      Added value: +"Internal owner or rep assigned to the member, or null when unassigned."
    • addedOutput schema / properties / subscribers / items / properties / status / description
      Added value: +"Subscription status of the member."
    • addedOutput schema / properties / subscribers / items / properties / subscriberHash / description
      Added value: +"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."
    • addedOutput schema / properties / subscribers / items / properties / totalClicks / description
      Added value: +"Total click events, counting repeat clicks."
    • addedOutput schema / properties / subscribers / items / properties / totalOpens / description
      Added value: +"Total open events, counting repeat opens by the same member."
  2. Changed14 schema fields changed
    • addedInput schema / properties / botFilter / description
      Added value: +"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."
    • addedInput schema / properties / cursor / description
      Added value: +"Opaque keyset pagination cursor returned as `nextCursor` by the previous page. Must be replayed with identical query filters."
    • addedInput schema / properties / insiderFilter / description
      Added value: +"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."
    • addedInput schema / properties / maxPrior / description
      Added value: +"Maximum count of engagement actions prior to the recent drop-off. Omit to impose no upper bound."
    • addedInput schema / properties / maxRating / description
      Added value: +"Maximum Mailchimp member star rating to include, from 1 to 5. Omit to include every rating."
    • addedInput schema / properties / minPrior / description
      Added value: +"Minimum count of engagement actions prior to the recent drop-off. Omit to impose no lower bound."
    • addedInput schema / properties / minRating / description
      Added value: +"Minimum Mailchimp member star rating to include, from 1 to 5. Omit to include every rating."
    • addedInput schema / properties / pageSize / description
      Added value: +"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."
    • addedInput schema / properties / projectId / description
      Added value: +"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."
    • addedInput schema / properties / rep / description
      Added value: +"Filter by an exact match on the assigned sales representative's name. Omit to include members assigned to any rep."
    • addedInput schema / properties / search / description
      Added value: +"Filter subscribers by a case-insensitive partial match on their email address, first name, or last name. Omit to skip text filtering."
    • addedInput schema / properties / sortBy / description
      Added value: +"The field used to order the at-risk subscribers list. Defaults to the number of recent active actions."
    • addedInput schema / properties / sortDir / description
      Added value: +"The direction to sort the at-risk results. Can be 'asc' for ascending or 'desc' for descending. Defaults to \"asc\" when omitted."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "description": "Output for the sm_list_at_risk tool. Failure payloads arrive in the same envelope as { error, message, 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": {
      +      "items": {
      +        "additionalProperties": true,
      +        "description": "Distribution of at-risk subscribers grouped by member rating.",
      +        "properties": {
      +          "avgPriorActions": {
      +            "type": "number"
      +          },
      +          "maxPriorActions": {
      +            "type": "integer"
      +          },
      +          "memberRating": {
      +            "type": "integer"
      +          },
      +          "subscriberCount": {
      +            "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": {
      +      "items": {
      +        "additionalProperties": true,
      +        "description": "Detailed scatter-quadrant plotting data for at-risk members.",
      +        "properties": {
      +          "activeActionsPrior": {
      +            "type": "integer"
      +          },
      +          "daysSinceLastActivity": {
      +            "type": "integer"
      +          },
      +          "emailAddress": {
      +            "type": "string"
      +          },
      +          "engagementScore": {
      +            "type": "number"
      +          },
      +          "firstName": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "lastName": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "memberRating": {
      +            "type": "integer"
      +          },
      +          "repName": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "totalClicks": {
      +            "type": "integer"
      +          },
      +          "totalOpens": {
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "repBreakdown": {
      +      "items": {
      +        "additionalProperties": true,
      +        "description": "Breakdown of at-risk counts grouped by sales rep/owner.",
      +        "properties": {
      +          "atRiskCount": {
      +            "type": "integer"
      +          },
      +          "avgEngagementScore": {
      +            "type": "number"
      +          },
      +          "avgPriorActions": {
      +            "type": "number"
      +          },
      +          "repName": {
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "subscribers": {
      +      "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": {
      +            "type": "integer"
      +          },
      +          "activeActionsRecent": {
      +            "type": "integer"
      +          },
      +          "emailAddress": {
      +            "type": "string"
      +          },
      +          "engagementScore": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "firstName": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "isLeader": {
      +            "type": [
      +              "boolean",
      +              "null"
      +            ]
      +          },
      +          "lastActivityAt": {
      +            "description": "ISO 8601 UTC timestamp.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "lastName": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "memberRating": {
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "repName": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "status": {
      +            "type": "string"
      +          },
      +          "subscriberHash": {
      +            "type": "string"
      +          },
      +          "totalClicks": {
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "totalOpens": {
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
  3. First observed

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive behavior. The description adds a non-obvious interpretive fact: engagementScore is raw and decayed and can be negative, unlike a percentile, which prevents an agent from misreading values. This is useful context beyond the annotations and does not contradict them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler; the first front-loads the verb, resource, and purpose, and the second adds the critical score caveat. It avoids repeating anything already present in the title or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter list tool with a full output schema, the description gives the core at-risk definition and the one caveat most likely to trip up an agent. It could say a bit more about which sibling to choose in ambiguous cases, but nothing essential to calling it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with every parameter already documented including defaults, enums, and required projectId. The description's score caveat applies to a returned or output field rather than to input parameters, so it adds no essential parameter-level meaning. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action, 'Find previously engaged members whose recent activity has collapsed', and a concrete purpose, 'for building save lists'. This expands the title and clearly separates it from sibling list tools like sm_list_members and sm_list_leaders.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear use case (building save lists) and a hint about when to prefer it over the leaders tool via the 'unlike the leaders percentile' note. It does not enumerate exclusions or explicitly name the alternative tool, so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources