Skip to main content
Glama

Space Monkey Mailchimp Dashboard

Get audience growth

sm_get_member_growth
Read-onlyIdempotent

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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
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.

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.
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.
churnTimelineNoChurn timeline rows bucketed by month and status.
signupCohortsNoSignup cohort rows.
cohortRetentionNoCohort retention rows bucketed by signup month and status.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed11 schema fields changed
    • changedOutput schema / description
      Previous value: -"Output for the sm_get_member_growth tool. Failure payloads arrive in the same envelope as { error, message, code }."New value: +"Output for the sm_get_member_growth tool. Failure payloads arrive in the same envelope as { error, code }."
    • addedOutput schema / properties / churnTimeline / description
      Added value: +"Churn timeline rows bucketed by month and status."
    • addedOutput schema / properties / churnTimeline / items / properties / count / description
      Added value: +"Members in the status for the month."
    • addedOutput schema / properties / churnTimeline / items / properties / month / description
      Added value: +"Year-month for the row."
    • addedOutput schema / properties / churnTimeline / items / properties / status / description
      Added value: +"Subscription status."
    • addedOutput schema / properties / cohortRetention / description
      Added value: +"Cohort retention rows bucketed by signup month and status."
    • addedOutput schema / properties / cohortRetention / items / properties / count / description
      Added value: +"Members from the cohort still in the status."
    • addedOutput schema / properties / cohortRetention / items / properties / signupMonth / description
      Added value: +"Signup month for the cohort."
    • addedOutput schema / properties / cohortRetention / items / properties / status / description
      Added value: +"Subscription status."
    • addedOutput schema / properties / signupCohorts / description
      Added value: +"Signup cohort rows."
    • addedOutput schema / properties / signupCohorts / items / properties / newSignups / description
      Added value: +"New signups in the cohort month."
  2. Changed2 schema fields changed
    • 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."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "description": "Output for the sm_get_member_growth tool. Failure payloads arrive in the same envelope as { error, message, code }.",
      +  "properties": {
      +    "churnTimeline": {
      +      "items": {
      +        "additionalProperties": true,
      +        "description": "Churn and unsubscribes bucketed by month.",
      +        "properties": {
      +          "count": {
      +            "type": "integer"
      +          },
      +          "month": {
      +            "type": "string"
      +          },
      +          "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": {
      +      "items": {
      +        "additionalProperties": true,
      +        "description": "Retention counts relative to user signup month cohorts.",
      +        "properties": {
      +          "count": {
      +            "type": "integer"
      +          },
      +          "signupMonth": {
      +            "type": "string"
      +          },
      +          "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": {
      +      "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": {
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
  3. First observed

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds important data interpretation context: a cohortRetention row is a current status breakdown for the signup month, not retention at month N, and signup month may fall back to last-changed or sync time when Mailchimp lacks an opt-in timestamp.

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?

The description is front-loaded with purpose, then usage, then a critical caveat, then an explicit alternative. Each sentence serves a distinct function, and the dense but necessary routing sentence prevents the most likely misuse.

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

Completeness5/5

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

Given rich annotations, a complete output schema, and 100% schema description coverage, the description supplies everything the agent needs beyond structured fields: purpose, usage context, key interpretation caveat, and alternative routing. No meaningful gap remains for correct tool selection or invocation.

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 description coverage is 100% and the single projectId parameter is already fully documented in the schema, including the required behavior and error case. The description adds no parameter-level semantics beyond what the schema already provides, so the baseline of 3 applies.

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?

The description names the exact returned artifacts — signup cohorts, churn timeline, and cohort retention — and explicitly distinguishes this tool from the subscriber-growth series in sm_get_insights_basic. An agent can identify both the tool's scope and its closest alternative without opening any schema.

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

Usage Guidelines5/5

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

It states the intended question types ('list-growth and attrition') and explicitly routes audience-size-over-time questions to sm_get_insights_basic instead. This provides clear when-to-use and when-not-to-use guidance with a named alternative.

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