Skip to main content
Glama

Space Monkey Mailchimp Dashboard

List campaigns

sm_list_campaigns
Read-onlyIdempotent

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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
cursorNoOpaque keyset pagination cursor returned as `nextCursor` by the previous page. Must be replayed with identical query filters.
searchNoFilter campaigns by a case-insensitive partial match on the subject line or specific internal campaign IDs. Omit to skip text filtering.
sortByNoThe field used to order the campaigns list. Defaults to sorting by the most recent send time first.send_time
endDateNoInclusive 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.
sortDirNoThe direction to sort the campaign results. Can be 'asc' for ascending or 'desc' for descending. Defaults to "desc" when omitted.desc
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.
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.
startDateNoInclusive 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.
maxSendVolumeNoMaximum number of emails sent to include the campaign in the results. Omit to impose no upper bound.
minSendVolumeNoMinimum number of emails sent to include the campaign in the results. Omit to use the system default threshold.

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.
campaignsNoCampaign rows with performance metrics.
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.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changed
    • changedOutput schema / description
      Previous value: -"Output for the sm_list_campaigns tool. Failure payloads arrive in the same envelope as { error, message, code }."New value: +"Output for the sm_list_campaigns tool. Failure payloads arrive in the same envelope as { error, code }."
    • addedOutput schema / properties / campaigns / description
      Added value: +"Campaign rows with performance metrics."
    • addedOutput schema / properties / campaigns / items / properties / campaignId / description
      Added value: +"Stable identifier for a Mailchimp campaign. Use it to join rows across tools or drill into sm_get_campaign."
    • addedOutput schema / properties / campaigns / items / properties / clickRate / description
      Added value: +"Unique clicks divided by delivered, as a percentage from 0 to 100."
    • addedOutput schema / properties / campaigns / items / properties / emailsSent / description
      Added value: +"Number of emails the campaign attempted to send to recipients."
    • addedOutput schema / properties / campaigns / items / properties / openRate / description
      Added value: +"Unique opens divided by delivered, as a percentage from 0 to 100."
    • addedOutput schema / properties / campaigns / items / properties / subjectLine / description
      Added value: +"The campaign subject line as sent."
  2. Changed11 schema fields changed
    • 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 / endDate / description
      Added value: +"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."
    • addedInput schema / properties / maxSendVolume / description
      Added value: +"Maximum number of emails sent to include the campaign in the results. Omit to impose no upper bound."
    • addedInput schema / properties / minSendVolume / description
      Added value: +"Minimum number of emails sent to include the campaign in the results. Omit to use the system default threshold."
    • 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 / search / description
      Added value: +"Filter campaigns by a case-insensitive partial match on the subject line or specific internal campaign IDs. Omit to skip text filtering."
    • addedInput schema / properties / sortBy / description
      Added value: +"The field used to order the campaigns list. Defaults to sorting by the most recent send time first."
    • addedInput schema / properties / sortDir / description
      Added value: +"The direction to sort the campaign results. Can be 'asc' for ascending or 'desc' for descending. Defaults to \"desc\" when omitted."
    • addedInput schema / properties / startDate / description
      Added value: +"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."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "description": "Output for the sm_list_campaigns tool. Failure payloads arrive in the same envelope as { error, message, code }.",
      +  "properties": {
      +    "campaigns": {
      +      "items": {
      +        "additionalProperties": true,
      +        "description": "General campaign list view row.",
      +        "properties": {
      +          "campaignId": {
      +            "type": "string"
      +          },
      +          "clickRate": {
      +            "type": "number"
      +          },
      +          "emailsSent": {
      +            "type": "integer"
      +          },
      +          "openRate": {
      +            "type": "number"
      +          },
      +          "sendTime": {
      +            "description": "ISO 8601 UTC timestamp.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "subjectLine": {
      +            "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"
      +}
  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 declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds behavioral context by noting the tool returns performance metrics and by framing the two use cases. It does not describe pagination behavior or default sorting, but the schema covers those details, so the description adds reasonable value beyond annotations.

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 zero waste. The first sentence states the core function, and the second gives concrete use cases. Every word earns its place.

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?

The tool has a rich schema (10 params, all documented) and an output schema, so the description doesn't need to explain return values. The use cases add practical context for an agent. It could mention pagination or default sorting, but those are already in the schema, so the description is complete enough for a list tool.

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 10 parameters thoroughly. The description adds no parameter-specific meaning beyond what the schema provides, so the 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?

The description states a specific verb ('List'), a resource ('a project's campaigns'), and the key output ('with performance metrics'). It also names two concrete use cases (mapping lastActivityAt onto a real send, finding the latest house send by send_time), which distinguishes it from sibling tools like sm_get_campaign or sm_get_member_campaigns.

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 description gives clear context for when to use the tool ('Use to map a member's lastActivityAt onto a real send, or to find the latest house send by send_time'). It does not explicitly name alternatives or exclusions, but the use cases imply when this list tool is appropriate versus a get tool.

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