Skip to main content
Glama
GrowSurf MCP Server

GrowSurf MCP Server

Official

Get Program Emails

growsurf_get_campaign_emails
Read-onlyIdempotent

Fetches a GrowSurf campaign's Emails tab configuration, including participant and admin email templates, settings, and read-only sender fields.

Instructions

Fetch the Emails tab configuration for your GrowSurf program, including participant and admin email templates, settings, and read-only fields. settings.sender.fromEmail is read-only and can be changed in the dashboard after domain verification. When updating, omit unchanged sender fields; fromName and replyToEmail cannot be cleared with null. Targets campaignId if supplied, otherwise GROWSURF_CAMPAIGN_ID.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "campaignId": "<campaignId>"
    },
    "name": "growsurf_get_campaign_emails"
  }
}

Input Schema

NameRequiredDescriptionDefault
campaignIdYesTarget program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Program IDs also identify newly created programs without restarting the server.

Output Schema

NameRequiredDescriptionDefault
inviteNoThe invitation email a participant sends to friends. `useCompanyReplyTo` sets who receives replies.
settingsNoSender (`sender`), physical contact address (`contact`), and shared design (`design`) settings. The design object includes `unsubscribeAffiliateInvite` for direct affiliate invitation emails. Its read-only `layoutMode` is `INLINE` for new programs: bodies require `{{emailFooter}}` and may include `{{emailHeader}}`. Older programs omit `layoutMode` and keep their existing layout.
loginLinkNoOne-time sign-in link for returning participants. Transactional; its toggle cannot be changed.
goalAchievedNoSent when a participant unlocks a reward. Referral programs only.
offerClaimedNoSent when a referred visitor saves an offer through the Claim Offer Popup. Referral and affiliate programs. Promotional; its toggle can be changed.
payoutPendingNoSent when a payout is on the way. Affiliate programs only.
referredSignupNoSent to a referrer each time someone signs up using their link. Referral and affiliate programs.
taxInfoMissingNoAsks a participant to submit required tax information. Transactional; its toggle cannot be changed.
inviteAffiliateNoInvites a prospective affiliate to join the program. Its body must keep `{{affiliateInviteLink}}`. Affiliate programs only. Promotional; its toggle can be changed.
taxInfoApprovedNoTells a participant their tax form is complete and approved. Transactional; its toggle cannot be changed.
taxInfoReceivedNoConfirms submitted tax information was received. Transactional; its toggle cannot be changed.
taxInfoRejectedNoTells a participant their tax information needs to be resubmitted. Transactional; its toggle cannot be changed.
welcomeReferredNoWelcome email for someone who signs up through a referral link. Referral programs only.
followUpReminderNoOptional reminder to the referrer about directly invited contacts who have not signed up after `delayDays` (integer 2–30, default 3). Existing reminder dates stay unchanged. Disabled by default. Only new invitations created while this email is enabled qualify automatically. A later offer claim preserves invitation eligibility; popup-only claims never qualify. Each contact is included once. Referral and affiliate programs.
referralLinkUsedNoSent to a referrer when they earn referral credit. Referral programs only.
payoutSentSuccessNoSent when a payout completes. Affiliate programs only.
commissionAdjustedNoSent when a commission is adjusted after a refund or chargeback. Affiliate programs only.
welcomeNonReferredNoWelcome email for a participant who joins without being referred. Referral and affiliate programs.
commissionGeneratedNoSent to an affiliate when they earn a new commission. Affiliate programs only.
campaignEndedWinnersNoSent to reward winners when the program ends. Referral programs only.
progressUpdateMonthlyNoMonth-end progress recap for participants. Referral and affiliate programs.
campaignEndedNonWinnersNoSent to non-winners when the program ends. Referral programs only.
payoutDestinationChangedNoTells a participant their payout destination changed. Its body must keep `{{payoutDestinationMaskedEmail}}`. Referral and affiliate programs. Transactional; its toggle cannot be changed.
affiliateApplicationDeniedNoTells an applicant their affiliate application was not approved. Affiliate programs only. Transactional; its toggle cannot be changed.
referralLinkViewedFirstTimeNoSent the first time a participant's referral link is viewed. Referral and affiliate programs.
affiliateApplicationApprovedNoTells an applicant their affiliate application was approved. Affiliate programs only. Transactional; its toggle cannot be changed.
affiliateApplicationReceivedNoConfirms an affiliate application was received and is under review. Affiliate programs only. Transactional; its toggle cannot be changed.
payoutDestinationConfirmationNoAsks a participant to confirm the payout destination where they will receive payouts, such as a PayPal or Wise email address. Its body may use `{{payoutProvider}}` and must keep `{{payoutDestinationConfirmationLink}}`. Referral and affiliate programs. Transactional; its toggle cannot be changed.
affiliateApplicationStatusLinkNoSends an applicant a secure link to view their application status. Its body must keep `{{applicationStatusLink}}`. Affiliate programs only. Transactional; its toggle cannot be changed.
affiliateEmailChangeVerificationNoAsks an affiliate to confirm a new account email address. Its body must contain `{{identityVerificationLink}}`. Affiliate programs only. Transactional; its toggle cannot be changed.
affiliateApplicationEmailCorrectionNoAsks an applicant to confirm a corrected email address. Its body must contain `{{identityVerificationLink}}`. Affiliate programs only. Transactional; its toggle cannot be changed.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed14 schema fields changedv0.19.27
    • addedOutput schema / properties / settings / properties / contact
      Added value: +{
      +  "description": "The physical mailing address shown in your email footers (required by anti-spam laws such as the US CAN-SPAM Act).",
      +  "properties": {
      +    "addressLine1": {
      +      "description": "First address line. Required.",
      +      "maxLength": 255,
      +      "type": "string"
      +    },
      +    "addressLine2": {
      +      "description": "Second address line shown in email footers.",
      +      "maxLength": 255,
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "city": {
      +      "description": "City. Required.",
      +      "maxLength": 255,
      +      "type": "string"
      +    },
      +    "companyName": {
      +      "description": "Company name. Required.",
      +      "maxLength": 255,
      +      "type": "string"
      +    },
      +    "country": {
      +      "description": "Free-text country (not validated as an ISO code).",
      +      "maxLength": 100,
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "postalCode": {
      +      "description": "Postal or ZIP code shown in email footers.",
      +      "maxLength": 100,
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "state": {
      +      "description": "State, province, or region shown in email footers.",
      +      "maxLength": 255,
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": "object"
      +}
    • addedOutput schema / properties / settings / properties / design / properties / footer
      Added value: +{
      +  "description": "Email footer HTML.",
      +  "maxLength": 150000,
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / settings / properties / design / properties / header
      Added value: +{
      +  "description": "Email header HTML.",
      +  "maxLength": 150000,
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / settings / properties / design / properties / unsubscribeAffiliateInvite
      Added value: +{
      +  "description": "Unsubscribe footer for direct affiliate invitation emails. Must contain the tokens `{{unsubscribeLink}}`, `{{companyName}}`, and `{{address}}`.",
      +  "maxLength": 150000,
      +  "type": "string"
      +}
    • addedOutput schema / properties / settings / properties / design / properties / unsubscribeInvite
      Added value: +{
      +  "description": "Unsubscribe footer for invite emails. Must contain the tokens `{{unsubscribeLink}}`, `{{companyName}}`, and `{{address}}`.",
      +  "maxLength": 150000,
      +  "type": "string"
      +}
    • addedOutput schema / properties / settings / properties / design / properties / unsubscribePromotional
      Added value: +{
      +  "description": "Unsubscribe footer for promotional emails. Must contain the tokens `{{unsubscribeLink}}`, `{{companyName}}`, and `{{address}}`.",
      +  "maxLength": 150000,
      +  "type": "string"
      +}
    • addedOutput schema / properties / settings / properties / design / properties / unsubscribeTransactional
      Added value: +{
      +  "description": "Footer for transactional emails. Must contain the tokens `{{companyName}}` and `{{address}}`.",
      +  "maxLength": 150000,
      +  "type": "string"
      +}
    • changedOutput schema / properties / settings / properties / sender / properties / fromEmail / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • changedOutput schema / properties / settings / properties / sender / properties / fromName / description
      Previous value: -"Sender name, or `null` before one is configured. When updating, omit to keep the current value or supply a non-empty name that is not an email address. `null` is not accepted on update."New value: +"Sender name. When updating, omit to keep the current value or supply a non-empty name that is not an email address. `null` is not accepted on update."
    • addedOutput schema / properties / settings / properties / sender / properties / fromName / maxLength
      Added value: +100
    • changedOutput schema / properties / settings / properties / sender / properties / fromName / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • changedOutput schema / properties / settings / properties / sender / properties / replyToEmail / description
      Previous value: -"Email address that receives replies, or `null` before one is configured. When updating, omit to keep the current value or supply a valid email address. `null` is not accepted on update."New value: +"Email address that receives replies. When updating, omit to keep the current value or supply a valid email address. `null` is not accepted on update."
    • addedOutput schema / properties / settings / properties / sender / properties / replyToEmail / maxLength
      Added value: +100
    • changedOutput schema / properties / settings / properties / sender / properties / replyToEmail / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
  2. Changed7 schema fields changedv0.19.15
    • addedInput schema / properties / campaignId / minLength
      Added value: +1
    • addedInput schema / required
      Added value: +[
      +  "campaignId"
      +]
    • addedOutput schema / properties / followUpReminder
      Added value: +{
      +  "description": "Optional reminder to the referrer about directly invited contacts who have not signed up after `delayDays` (integer 2–30, default 3). Existing reminder dates stay unchanged. Disabled by default. Only new invitations created while this email is enabled qualify automatically. A later offer claim preserves invitation eligibility; popup-only claims never qualify. Each contact is included once. Referral and affiliate programs.",
      +  "type": "object"
      +}
    • changedOutput schema / properties / settings / description
      Previous value: -"Sender (`sender`), physical contact address (`contact`), and shared design (`design`) settings. The design object includes `unsubscribeAffiliateInvite` for direct affiliate invitation emails."New value: +"Sender (`sender`), physical contact address (`contact`), and shared design (`design`) settings. The design object includes `unsubscribeAffiliateInvite` for direct affiliate invitation emails. Its read-only `layoutMode` is `INLINE` for new programs: bodies require `{{emailFooter}}` and may include `{{emailHeader}}`. Older programs omit `layoutMode` and keep their existing layout."
    • addedOutput schema / properties / settings / properties / design
      Added value: +{
      +  "properties": {
      +    "layoutMode": {
      +      "description": "Read-only email layout. `INLINE` requires `{{emailFooter}}` in each body; `{{emailHeader}}` is optional.",
      +      "enum": [
      +        "INLINE"
      +      ],
      +      "readOnly": true,
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • changedOutput schema / properties / settings / properties / sender / properties / fromName / description
      Previous value: -"Sender name, or null before one is configured. A new value must not be an email address."New value: +"Sender name, or `null` before one is configured. When updating, omit to keep the current value or supply a non-empty name that is not an email address. `null` is not accepted on update."
    • changedOutput schema / properties / settings / properties / sender / properties / replyToEmail / description
      Previous value: -"Email address that receives replies, or null before one is configured."New value: +"Email address that receives replies, or `null` before one is configured. When updating, omit to keep the current value or supply a valid email address. `null` is not accepted on update."
  3. Changed1 schema field changedv0.19.9
    • changedInput schema / properties / campaignId / description
      Previous value: -"Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, without restarting the server."New value: +"Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Program IDs also identify newly created programs without restarting the server."
  4. Changed2 schema fields changedv0.19.8
    • changedOutput schema / description
      Previous value: -"A program's email configuration. Each template property is an object with `subject`, `preheader`, `body` (HTML), and `isEnabled` (plus `useCompanyReplyTo` on the invite email). The templates available depend on the program type. `GET` returns the full object; `PATCH` back only the fields you want to change."New value: +"A program's email configuration. Each template property is an object with `subject`, `preheader`, `body` (HTML), and `isEnabled` (plus `useCompanyReplyTo` on the invite email). The templates available depend on the program type. `GET` includes read-only fields; `PATCH` only the writable fields you want to change. The `invite` and transactional email `isEnabled` toggles cannot be changed here."
    • addedOutput schema / properties / settings / properties
      Added value: +{
      +  "sender": {
      +    "properties": {
      +      "fromEmail": {
      +        "description": "Read-only sender email address. Change it in the dashboard after domain verification; omit it from an email configuration update.",
      +        "readOnly": true,
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "fromName": {
      +        "description": "Sender name, or null before one is configured. A new value must not be an email address.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "replyToEmail": {
      +        "description": "Email address that receives replies, or null before one is configured.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "type": "object"
      +  }
      +}
  5. Changed1 schema field changedv0.14.0
    • addedOutput schema / properties / offerClaimed
      Added value: +{
      +  "description": "Sent when a referred visitor saves an offer through the Claim Offer Popup. Referral and affiliate programs. Promotional; its toggle can be changed.",
      +  "type": "object"
      +}
  6. First observedv0.12.2

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 safety is covered. The description adds real context beyond that: `settings.sender.fromEmail` is read-only unless the domain is verified in the dashboard, and `fromName`/`replyToEmail` cannot be cleared with `null`. Those are write-path constraints belonging to the sibling update tool, so they are valuable but slightly off-target for a read call.

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?

Four dense sentences, front-loaded with what is returned and followed by the constraint notes and the target-resolution rule. Nothing is padded, though the two sentences about updating the sender fields could arguably live on growsurf_update_campaign_emails instead of here.

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?

An output schema exists, so return values need no explanation, and the description still enumerates the returned sections plus the read-only caveat. Target resolution, the read-only field, and the mutation pitfalls an agent will hit next are all covered for a low-complexity single-parameter read 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 coverage is 100% for a single parameter, and the description's targeting sentence largely repeats the schema's own 'Defaults to GROWSURF_CAMPAIGN_ID when omitted' note. Baseline 3 applies: the schema does the heavy lifting and the description adds no new syntax or format detail for `campaignId`.

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 verb ('Fetch') and a precisely scoped resource (the Emails tab configuration for a GrowSurf program), and enumerates the contents: participant and admin email templates, settings, and read-only fields. An agent can immediately distinguish this read operation from the sibling write tool growsurf_update_campaign_emails.

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 an explicit targeting rule: use `campaignId` when supplied, otherwise fall back to `GROWSURF_CAMPAIGN_ID`. It also makes the read-then-write relationship implicit by describing what changing requires ('can be changed in the dashboard after domain verification'), but it never explicitly says to call this before growsurf_update_campaign_emails or that this tool is only for inspection.

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

Deploy Server

Other Tools