Skip to main content
Glama

Space Monkey Mailchimp Dashboard

Rank engaged leaders

sm_list_leaders
Read-onlyIdempotent

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.

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.
tagNoFilter by an exact match on a Mailchimp tag or segment name. Omit to include members with any tags.
cursorNoOpaque keyset pagination cursor returned as `nextCursor` by the previous page. Must be replayed with identical query filters.
searchNoFilter leaders 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 leaderboard results. Defaults to sorting by the highest engagement score first.engagement_score
statusNoFilter members by their specific leader status (e.g. VIP or standard leader). Select 'all' to include every status. Defaults to "all" when omitted.all
sortDirNoThe direction to sort the leaderboard results. Can be 'asc' for ascending or 'desc' for descending. Defaults to "desc" when omitted.desc
maxScoreNoMaximum engagement score percentile to include. The score ranges from 0 to 100. Omit to impose no maximum bound.
minScoreNoMinimum engagement score percentile to include. The score ranges from 0 to 100. Omit to impose no minimum 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.
leaderOnlyNoRestrict 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.
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.
leadersNoLeader member rows ranked by engagement.
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.
repOptionsNoDistinct rep values available for filtering.
tagOptionsNoDistinct tag values available for filtering.
summaryStatsNoOverall summary stats for leaders. Note: avgScore is actually the average member RATING, preserved for now.
leaderboardDistributionNoLeaderboard tier buckets from highest to lowest engagement.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed33 schema fields changed
    • changedOutput schema / description
      Previous value: -"Output for the sm_list_leaders tool. Failure payloads arrive in the same envelope as { error, message, code }."New value: +"Output for the sm_list_leaders tool. Failure payloads arrive in the same envelope as { error, code }."
    • addedOutput schema / properties / leaderboardDistribution / description
      Added value: +"Leaderboard tier buckets from highest to lowest engagement."
    • addedOutput schema / properties / leaderboardDistribution / items / properties / avgEngagementScore / description
      Added value: +"Mean engagement score in the tier."
    • addedOutput schema / properties / leaderboardDistribution / items / properties / avgMemberRating / description
      Added value: +"Mean member rating in the enclosing bucket."
    • addedOutput schema / properties / leaderboardDistribution / items / properties / leaderCount / description
      Added value: +"Leaders in the tier."
    • addedOutput schema / properties / leaderboardDistribution / items / properties / subscriberCount / description
      Added value: +"Members in the tier."
    • addedOutput schema / properties / leaderboardDistribution / items / properties / tier / description
      Added value: +"Tier label, for example top, core, or watch."
    • addedOutput schema / properties / leaderboardDistribution / items / properties / tierOrder / description
      Added value: +"Ordinal position of the tier for stable sorting."
    • addedOutput schema / properties / leaders / description
      Added value: +"Leader member rows ranked by engagement."
    • addedOutput schema / properties / leaders / items / properties / emailAddress / description
      Added value: +"The member's email address."
    • addedOutput schema / properties / leaders / items / properties / engagementScore / description
      Added value: +"Composite engagement score for the leader. Note: This is a 0-100 percentile."
    • addedOutput schema / properties / leaders / items / properties / firstName / description
      Added value: +"The member's first name, or null when unavailable."
    • addedOutput schema / properties / leaders / items / properties / isLeader / description
      Added value: +"True when the member qualifies as a leader by engagement."
    • addedOutput schema / properties / leaders / items / properties / lastName / description
      Added value: +"The member's last name, or null when unavailable."
    • addedOutput schema / properties / leaders / items / properties / memberRating / description
      Added value: +"Integer Mailchimp engagement rating for the member (1-5), or null when unrated."
    • addedOutput schema / properties / leaders / items / properties / status / description
      Added value: +"Subscription status of the leader, or null."
    • addedOutput schema / properties / leaders / 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 / leaders / items / properties / totalClicks / description
      Added value: +"Total click events, counting repeat clicks."
    • addedOutput schema / properties / leaders / items / properties / totalOpens / description
      Added value: +"Total open events, counting repeat opens by the same member."
    • addedOutput schema / properties / leaders / items / properties / vip / description
      Added value: +"True when the member is flagged VIP."
    • addedOutput schema / properties / repOptions / description
      Added value: +"Distinct rep values available for filtering."
    • addedOutput schema / properties / repOptions / items / properties / count / description
      Added value: +"Leaders assigned to the rep."
    • addedOutput schema / properties / repOptions / items / properties / name / description
      Added value: +"Rep name."
    • addedOutput schema / properties / summaryStats / properties / activeLeaderCount / description
      Added value: +"Leaders currently active."
    • addedOutput schema / properties / summaryStats / properties / atRiskCount / description
      Added value: +"Leaders also flagged at risk."
    • addedOutput schema / properties / summaryStats / properties / atRiskLeaderCount / description
      Added value: +"Leaders flagged at risk."
    • addedOutput schema / properties / summaryStats / properties / avgLeaderRating / description
      Added value: +"Mean rating among leaders."
    • addedOutput schema / properties / summaryStats / properties / avgScore / description
      Added value: +"Mean member rating among leaders. Note: This is average member rating, not a mean engagement score."
    • addedOutput schema / properties / summaryStats / properties / totalActive / description
      Added value: +"Leaders with recent activity."
    • addedOutput schema / properties / summaryStats / properties / totalLeaders / description
      Added value: +"Total leaders in the audience."
    • addedOutput schema / properties / tagOptions / description
      Added value: +"Distinct tag values available for filtering."
    • addedOutput schema / properties / tagOptions / items / properties / count / description
      Added value: +"Leaders carrying the tag."
    • addedOutput schema / properties / tagOptions / items / properties / name / description
      Added value: +"Tag name."
  2. Changed17 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 / leaderOnly / description
      Added value: +"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."
    • 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 / maxScore / description
      Added value: +"Maximum engagement score percentile to include. The score ranges from 0 to 100. Omit to impose no maximum 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 / minScore / description
      Added value: +"Minimum engagement score percentile to include. The score ranges from 0 to 100. Omit to impose no minimum bound."
    • 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 leaders 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 leaderboard results. Defaults to sorting by the highest engagement score first."
    • addedInput schema / properties / sortDir / description
      Added value: +"The direction to sort the leaderboard results. Can be 'asc' for ascending or 'desc' for descending. Defaults to \"desc\" when omitted."
    • addedInput schema / properties / status / description
      Added value: +"Filter members by their specific leader status (e.g. VIP or standard leader). Select 'all' to include every status. Defaults to \"all\" when omitted."
    • addedInput schema / properties / tag / description
      Added value: +"Filter by an exact match on a Mailchimp tag or segment name. Omit to include members with any tags."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "description": "Output for the sm_list_leaders 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"
      +    },
      +    "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": {
      +      "items": {
      +        "additionalProperties": true,
      +        "description": "Distribution buckets for leaders across scoring tiers.",
      +        "properties": {
      +          "avgEngagementScore": {
      +            "type": "number"
      +          },
      +          "avgMemberRating": {
      +            "type": "number"
      +          },
      +          "leaderCount": {
      +            "type": "integer"
      +          },
      +          "subscriberCount": {
      +            "type": "integer"
      +          },
      +          "tier": {
      +            "type": "string"
      +          },
      +          "tierOrder": {
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "leaders": {
      +      "items": {
      +        "additionalProperties": true,
      +        "description": "Represents an individual top-tier engaged member. Semantic conflict note: engagementScore here is a 0-100 percentile.",
      +        "properties": {
      +          "emailAddress": {
      +            "type": "string"
      +          },
      +          "engagementScore": {
      +            "type": "number"
      +          },
      +          "firstName": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "isLeader": {
      +            "type": "boolean"
      +          },
      +          "lastActivityAt": {
      +            "description": "ISO 8601 UTC timestamp.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "lastName": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "memberRating": {
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "repName": {
      +            "description": "Null when owner merge field unmapped",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "status": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "subscriberHash": {
      +            "type": "string"
      +          },
      +          "totalClicks": {
      +            "type": "integer"
      +          },
      +          "totalOpens": {
      +            "type": "integer"
      +          },
      +          "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": {
      +      "items": {
      +        "additionalProperties": true,
      +        "description": "Generic named-count tuple used for Rep and Tag options.",
      +        "properties": {
      +          "count": {
      +            "type": "integer"
      +          },
      +          "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": {
      +          "type": "integer"
      +        },
      +        "atRiskCount": {
      +          "type": "integer"
      +        },
      +        "atRiskLeaderCount": {
      +          "type": "integer"
      +        },
      +        "avgLeaderRating": {
      +          "type": "number"
      +        },
      +        "avgScore": {
      +          "type": "number"
      +        },
      +        "totalActive": {
      +          "type": "integer"
      +        },
      +        "totalLeaders": {
      +          "type": "integer"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "tagOptions": {
      +      "items": {
      +        "additionalProperties": true,
      +        "description": "Generic named-count tuple used for Rep and Tag options.",
      +        "properties": {
      +          "count": {
      +            "type": "integer"
      +          },
      +          "name": {
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
  3. First observed

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so the safety profile needs no restatement. The description earns credit for disclosing real behavioral quirks: engagementScore is a 0-100 percentile here whereas at-risk tools use a raw score that can go negative, memberRating is Mailchimp's 1-5 scale, and subscriberHash is the MD5 of the downcased email used as the join key. It also states pagination is capped at 100 rows. It doesn't cover rate limits or result ordering nuances beyond the default.

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

Conciseness4/5

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

The paragraph is tightly structured and front-loads the core ranking purpose before usage context and the engagementScore/memberRating/subscriberHash semantics. It is a single well-organized block with no filler, though it could be split for faster scanning by an agent.

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?

Given 16 parameters, five enums, and a rich schema plus an output schema, the description covers the essentials an agent needs: what it ranks, primary filters, score semantics, and the pagination cap. It omits how sorting interacts with percentile scores and does not mention the default leaderOnly=true behavior, which is a notable gap for a tool whose default changes the result set.

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%, so the schema already documents all 16 parameters, including enums, defaults, and bounds. The description adds semantic color rather than parameter documentation: it explains the percentile vs raw-score distinction and the subscriberHash join key, which helps interpretation but is not tied to specific parameters. Baseline 3 applies when the schema does the heavy lifting.

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

Purpose4/5

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

The description opens with a specific verb and resource: 'Rank the most engaged members of a project by engagement percentile.' This clearly distinguishes it from sibling list tools like sm_list_members and sm_list_at_risk by naming the ranking behavior and the engagement-percentile basis. It stops short of naming a sibling alternative explicitly, so it lands just shy of a 5.

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?

The second sentence gives a use context ('when you need who is paying attention right now') and enumerates the applicable filters (rep, tag, rating, status, bot/insider rules). It does not explicitly route the agent to sm_list_at_risk or explain when to choose this list over the general member list, which keeps it out of the 5 band.

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