Skip to main content
Glama
GrowSurf MCP Server

GrowSurf MCP Server

Official

Update Participant

growsurf_update_participant
DestructiveIdempotent

Update a participant’s profile, email, language, referral status, or affiliate status by ID or email; only supplied fields change and read-only fields are rejected.

Instructions

Update a participant by GrowSurf participant ID or email. Only the fields you send are changed; read-only fields such as counters, isAffiliate, origin, and fraud state are rejected with a 400. In affiliate programs, affiliateStatus accepts APPROVED, SUSPENDED, or BANNED; APPROVED enrolls the participant, while SUSPENDED and BANNED require an existing affiliate. Affiliate enrollment cannot be removed through REST. notes is freeform internal notes (never shown to participants). Targets campaignId if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

Input Schema

NameRequiredDescriptionDefault
emailNoChange the participant's email address.
notesNoFreeform internal notes (internal only, never exposed to participants).
languageNoThe language of the participant's portal and program emails. Must be one of the program's languages (`languages` in `growsurf_get_campaign_options`); any other code returns a `400`. Send `null` or the program's base language to clear it, so the participant follows the base language. Supported codes: `en`, `es`, `fr`, `de`, `it`, `pt-BR`, `nl`, `pl`, `sv`, `tr`, `ja`, `ko`, `zh-CN`, `id`, `da`, `nb`, `nn`, `fi`, `is`, `cs`, `sk`, `hu`, `ro`, `hr`, `sl`, `et`, `lv`, `lt`, `el`, `bg`, `uk`, `ru`, `pt-PT`, `ca`, `vi`, `ms`, `fil`, `af`, `sw`, `zh-TW`, `es-419`.
lastNameNo
metadataNo
firstNameNo
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.
referredByNo
vanityKeysNo
unsubscribedNo
participantIdNo
referralStatusNo
affiliateStatusNoAffiliate programs only. Sets the affiliate status. `APPROVED` also enrolls a participant who is not yet an affiliate. `SUSPENDED` and `BANNED` are rejected for non-affiliates.
participantEmailNo

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.19.28
    • changedInput schema / properties / language / description
      Previous value: -"The language of the participant's portal and program emails. Must be one of the program's languages (`languages` in `growsurf_get_campaign_options`); any other code returns a `400`. Send `null` or the program's base language to clear it, so the participant follows the base language. Supported codes: `en`, `es`, `fr`, `de`, `it`, `pt-BR`, `nl`, `pl`, `sv`, `tr`, `ja`, `ko`, `zh-CN`, `id`, `da`, `nb`, `nn`, `fi`, `is`, `cs`, `sk`, `hu`, `ro`, `hr`, `sl`, `et`, `lv`, `lt`, `el`, `bg`, `uk`, `ru`, `pt-PT`, `ca`, `vi`, `ms`, `fil`, `af`, `sw`."New value: +"The language of the participant's portal and program emails. Must be one of the program's languages (`languages` in `growsurf_get_campaign_options`); any other code returns a `400`. Send `null` or the program's base language to clear it, so the participant follows the base language. Supported codes: `en`, `es`, `fr`, `de`, `it`, `pt-BR`, `nl`, `pl`, `sv`, `tr`, `ja`, `ko`, `zh-CN`, `id`, `da`, `nb`, `nn`, `fi`, `is`, `cs`, `sk`, `hu`, `ro`, `hr`, `sl`, `et`, `lv`, `lt`, `el`, `bg`, `uk`, `ru`, `pt-PT`, `ca`, `vi`, `ms`, `fil`, `af`, `sw`, `zh-TW`, `es-419`."
  2. Changed3 schema fields changedv0.19.27
    • addedInput schema / properties / firstName / maxLength
      Added value: +255
    • addedInput schema / properties / lastName / maxLength
      Added value: +255
    • addedInput schema / properties / referredBy / maxLength
      Added value: +100
  3. Changed3 schema fields changedv0.19.15
    • addedInput schema / properties / campaignId / minLength
      Added value: +1
    • addedInput schema / properties / language
      Added value: +{
      +  "description": "The language of the participant's portal and program emails. Must be one of the program's languages (`languages` in `growsurf_get_campaign_options`); any other code returns a `400`. Send `null` or the program's base language to clear it, so the participant follows the base language. Supported codes: `en`, `es`, `fr`, `de`, `it`, `pt-BR`, `nl`, `pl`, `sv`, `tr`, `ja`, `ko`, `zh-CN`, `id`, `da`, `nb`, `nn`, `fi`, `is`, `cs`, `sk`, `hu`, `ro`, `hr`, `sl`, `et`, `lv`, `lt`, `el`, `bg`, `uk`, `ru`, `pt-PT`, `ca`, `vi`, `ms`, `fil`, `af`, `sw`.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedInput schema / required
      Added value: +[
      +  "campaignId"
      +]
  4. 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."
  5. First observedv0.12.2

TDQS

A3.9/5.0
Behavior5/5

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

The annotations already declare destructiveHint=true and idempotentHint=true, and the description adds substantial context on top: read-only fields (counters, isAffiliate, origin, fraud state) are rejected with 400, affiliateStatus transitions have preconditions, affiliate enrollment cannot be undone via REST, and notes are never shown to participants. These are exactly the mutation-specific risks an agent needs before calling.

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 lead sentence establishes the operation and partial-update rule, then caveats follow in a sensible order. A few clauses restate schema content (the notes sentence nearly duplicates the schema property description), but overall there is little wasted text.

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, so return values need no explanation, and the description covers the main failure modes (400 on read-only fields, affiliate preconditions, language validation delegated to schema). It could still say what happens when the participant is not found or what permissions are required, but for a tool of this complexity it is close to complete.

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 only 36% across 14 parameters, so the description does real work by explaining affiliateStatus, notes, and the campaignId fallback, and it clarifies that the identifier may be an ID or an email. However, roughly half the parameters (firstName, lastName, metadata, referredBy, vanityKeys, unsubscribed, referralStatus, participantId, participantEmail) carry no meaning in either the schema or the description, leaving a real gap.

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 first sentence gives a specific verb and resource plus the two lookup keys ('by GrowSurf participant ID or email'), and 'Only the fields you send are changed' nails down partial-update semantics. It does not explicitly contrast with siblings like growsurf_add_participant or growsurf_bulk_delete_participants, but the operation is unambiguous from the name and text.

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?

Usage context is implied rather than stated: it tells you to use participantId or participantEmail and that campaignId falls back to GROWSURF_CAMPAIGN_ID, and 'Affiliate enrollment cannot be removed through REST' functions as a when-not. There is no explicit routing guidance such as 'to create a participant use growsurf_add_participant' or 'to change many participants use bulk tools'.

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