Skip to main content
Glama
growsurf

GrowSurf MCP Server

Official

Get Program Emails

growsurf_get_campaign_emails
Read-onlyIdempotent

Fetch the Emails tab configuration for a GrowSurf campaign, including participant and admin email templates, sender settings, and read-only 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. Sender fields can be null before configuration. When updating, omit unchanged sender fields; fromName and replyToEmail cannot be cleared with null. Targets campaignId if supplied, otherwise GROWSURF_CAMPAIGN_ID.

Input Schema

TableJSON 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

TableJSON 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. 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."
  2. 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."
  3. 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"
      +  }
      +}
  4. 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"
      +}
  5. First observedv0.12.2

TDQS

A3.7/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 genuinely useful behavioral context beyond that: sender.fromEmail is read-only and only changeable in the dashboard after domain verification, sender fields may be null before configuration, and fromName/replyToEmail cannot be nulled out. Some of this is oriented toward the update flow rather than describing this read call's own behavior.

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?

Front-loaded with the core purpose in the first clause, followed by compact technical details. Four sentences mostly earn their place, though the update-oriented caveats sit oddly in a getter's description and slightly dilute the focus.

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?

An output schema exists and annotations cover the read-only/idempotent profile, so return-value and safety disclosure are not needed here. The description supplies the extra semantics an agent needs (null handling, read-only fields, target defaulting), leaving only minor gaps around when to prefer this tool over its siblings.

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?

With a single parameter at 100% schema description coverage, the schema already documents campaignId, its minLength, and the GROWSURF_CAMPAIGN_ID default. The description restates the same targeting/default behavior without adding format or edge-case detail, so the baseline of 3 applies.

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?

States a specific verb and resource ("Fetch the Emails tab configuration for your GrowSurf program") and enumerates what is included (participant/admin templates, settings, read-only fields), which distinguishes it from siblings like growsurf_get_campaign_design or growsurf_get_campaign_options. It never explicitly names the update sibling, so the get-vs-update boundary is only implied.

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

Usage Guidelines3/5

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

The description spends its guidance on update semantics ("When updating, omit unchanged sender fields") rather than stating when an agent should call this read tool versus alternatives. The campaignId fallback to GROWSURF_CAMPAIGN_ID is stated, but there is no explicit trigger condition or exclusion relative to growsurf_get_campaign.

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