Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

GrowSurf

NPM · @GROWSURFTEAM/GROWSURF-MCP · 2 COMPONENTS · SCANNED SEP 20

Build and manage GrowSurf referral and affiliate programs through AI assistants.

+4 this week 90 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 31 of 97 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to growsurf/growsurf-mcp). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 2 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability70
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 15055 tokens (~235/item across 64 items; 63 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management87
  • Stability observed for 26 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage82
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 37% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety97
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 7 of 8 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "growsurf_agent_program_creation_eval" implies "eval" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Partial
  • An AI judge read all 65 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the GrowSurf MCP server?

GrowSurf runs locally as an npm package, launched with npx -y @growsurfteam/growsurf-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · @growsurfteam/growsurf-mcp

# add to Claude Code
claude mcp add com-growsurf-growsurf -- npx -y @growsurfteam/growsurf-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "com-growsurf-growsurf": {
      "command": "npx",
      "args": [
        "-y",
        "@growsurfteam/growsurf-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "com-growsurf-growsurf": {
      "command": "npx",
      "args": [
        "-y",
        "@growsurfteam/growsurf-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add com-growsurf-growsurf -- npx -y @growsurfteam/growsurf-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-growsurf-growsurf": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@growsurfteam/growsurf-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add com-growsurf-growsurf --command npx --arg -y --arg @growsurfteam/growsurf-mcp
# ~/.hermes/config.yaml
mcp_servers:
  com-growsurf-growsurf:
    command: "npx"
    args: ["-y", "@growsurfteam/growsurf-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "com-growsurf-growsurf": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "@growsurfteam/growsurf-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add com-growsurf-growsurf -t stdio -c npx -a -y @growsurfteam/growsurf-mcp
// mcp.json
{
  "mcpServers": {
    "com-growsurf-growsurf": {
      "command": "npx",
      "args": [
        "-y",
        "@growsurfteam/growsurf-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 20 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

  • 17 Sept 26 +1
    • Tool safety: pass → unverified security
    • Stability: 0.73 → unverified security
    • Capabilities: pass → unverified functional
    • Tool coverage: 100 → unverified functional
    • Schema quality: 100 → unverified functional
    • Package version: 0.15.1 → 0.16.0 functional
  • 15 Sept 26 +16
    • Malware scan: unverified → pass security
  • 14 Sept 26 −14
    • Malware scan: pass → unverified security
    • Known CVEs: pass → unverified security
    • Tool safety: pass → unverified security
    • Stability: 0.63 → unverified security
    • Schema quality: 182 → 233 functional
    • Schema quality: 100 → unverified functional
    • Capabilities: pass → unverified functional
    • Dependency health: 0.84 → unverified functional
    • Tool coverage: 100 → unverified functional
    • Tool coverage: 26% → 37% functional
    • Package version: 0.12.2 → 0.15.1 functional
    • Package version: 0.12.2 → 0.15.0 functional
  • 12 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.

  • 10 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.

  • 8 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.

  • 6 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed npm/@growsurfteam/growsurf-mcp@0.16.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo growsurf/growsurf-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/growsurf/growsurf-mcp/.github/workflows/publish.yml@refs/heads/main
Rekor log index 2879038350
Predicate type https://slsa.dev/provenance/v1
Subject digest sha512:86ff035edaff67263b9a2bcfd63894e1ca58fe1cabdfefd683d6ccc4d376c60e53416b88f79bf5cc0477783f1bd187aada2539292cc58c9a9ceb01781

Background: How many MCP packages publish verified provenance →

Dependencies 97 packages
Packages resolved 97
Stale 31
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 63 exposed · ~14,397 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
growsurf_list_participants ~255

List participants in your GrowSurf program, newest page first. `limit` is 1-100 (default 10). Pass response `nextId` into the next call to continue paging. Pass `metadata` to return only participants whose stored metadata matches every given key and value exactly, for example `{ "customerId": "12345" }` to look someone up by your own customer ID; filtered results are ordered by participant ID. Use this when you need a participant ID before calling participant-scoped tools. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

NameTypeReqDescription
campaignIdstringTarget 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, witho…
limitinteger
metadataobjectExact-match filter on participant metadata, up to 3 keys, for example `{ "customerId": "12345" }`. Values compare as strings.
nextIdstringParticipant ID returned as `nextId` from the previous page.
NameTypeReqDescription
limitintegerMaximum number of participants requested for this page.
nextIdstring|nullParticipant id to pass as `nextId` for the next page, or `null` when there are no more results.
participantsarrayParticipants returned for this page.
rewardEvidenceobjectWhat this response establishes about rewards. Combine with other reads; unknown here does not override evidence elsewhere.

No examples provided.

growsurf_list_program_resources ~107

List the participant resources configured for your GrowSurf program, including drafts. Results stay in display order. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

NameTypeReqDescription
campaignIdstringTarget 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, witho…
NameTypeReqDescription
resourcesarrayThe program's resources in participant display order, including drafts.

No examples provided.

growsurf_mobile_sdk_guide ~105

Generate native iOS/Android SDK 0.4.0 guidance, including attribution, shareUrl sharing, trackShare, and the native GrowSurf Window.

NameTypeReqDescription
attributionProviderstring
campaignIdstring
includeInstallSnippetsboolean
mobilePublicKeystring
participantStatestring
platformstring
serverVerifiedQualifyingActionboolean
NameTypeReqDescription
markdownstringThe generated guidance as a markdown document.

No examples provided.

growsurf_participant_auth_hash ~68

Compute the server-side SHA-256 HMAC for GrowSurf Participant Auto Authentication. Set affiliateJoin only when this signed-in user may join the affiliate program directly.

NameTypeReqDescription
affiliateJoinboolean
emailstringyes
participantAuthSecretstring
NameTypeReqDescription
hashstringThe computed hash. Pass it to the GrowSurf client as the participant's `hash` value.

No examples provided.

growsurf_prepare_program_resource_file ~335

Prepare a local file for a `FILE` Program Resource. Pass the safe file name, matching supported MIME type, and padded base64 bytes (10 MB maximum). GrowSurf requests a one-time ticket and uploads only to the secure HTTPS destination selected by GrowSurf. The result contains only `uploadTicket` and `uploadResult`; pass both unchanged to `growsurf_create_program_resource` or `growsurf_update_program_resource`. The tool does not accept upload URLs or credentials and never retries an ambiguous upload. This tool is the only source of `uploadTicket` and `uploadResult`, and it needs `GROWSURF_UPLOAD_ALLOWED_ORIGINS` set on the server; without it, `FILE` resources are unavailable and only `LINK` and `TEXT` resources can be created. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

NameTypeReqDescription
campaignIdstringTarget 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, witho…
fileBase64stringyesCanonical padded base64 file bytes only. Do not include a data-URL prefix or whitespace.
fileNamestringyesA safe base name with an allowed extension: jpg/jpeg/png/gif/webp/pdf/csv/zip/doc/docx/xls/xlsx/ppt/pptx.
mimeTypestringyesThe supported MIME type matching fileName's extension.
NameTypeReqDescription
uploadResultobjectThe minimal signed upload confirmation. Pass it unchanged to create/update.
uploadTicketstringThe one-time GrowSurf ticket. Pass it unchanged to create/update.

No examples provided.

growsurf_program_design_advisor ~695

Use for program designs, benchmarks, typical rewards, and metric definitions, including participant-to-referral and lead-to-referral ratios. Read-only; call with known context before asking questions. Returns a short draft, complete `benchmarkFacts` to quote, exact `configurationPlan` tool calls, and unresolved `decisions`. Preserve the calls and leave unresolved incentives open. Use the default summary for first designs and configuration drafts; use `detail: full` when the user requests detailed benchmark tables or a specific figure absent from the summary. Hosted figures describe GrowSurf's high-performing programs; without a bundle, guidance is documentation-based. Use `programType: AFFILIATE` for affiliates and `industry: other` for local services, pets, hospitality, or agencies. All inputs are optional.

NameTypeReqDescription
audiencestringWho refers whom.
businessModelstringOne line on what the business sells and how. Also set `salesMotion` when the buying process is known.
companyNamestringUsed in the heading and proposed program name; omit it when unknown.
currencyISOstringISO 4217 code. Non-USD advice omits the dollar reward bands. No exchange rate or equivalent-currency benchmark is available.
detailstringUse summary for a first design or configuration draft, including a reward structure recommendation. Use full only for requested detailed benchmark tables or specific figures absent from the summary,…
goalstringWhat a successful referral means for the business. `paid_conversions` and `leads` imply a qualifying action; `signups`, `subscribers`, and `waitlist` count the signup unless a separate `qualifyingAct…
includeRulesbooleanAppend guidance on applying the recommendations. Off by default.
industrystringClosest industry segment: `financial_services_fintech` (banking, lending, investing, insurance, payments, crypto), `saas_ai` (software sold to businesses, developer tools, AI products), `media_newsle…
programTypestring
qualifyingActionstringThe action a referred friend must complete, in the customer's words.
rewardBudgetPerReferralnumberThe customer's spending limit per successful referral, in major currency units. A budget does not select an incentive amount or commission rate. Budget comparisons omit the mixed-currency reward amou…
salesMotionstringUse `sales_led` for demos, sales calls, negotiated pricing, or signed contracts; use `self_service` when customers buy directly. This selects the reward structure. Omit when unknown.
NameTypeReqDescription
benchmarkFactsarrayComplete benchmark statements with metric units, median, Q1, Q3, sample, and source. Quote each statement intact. Empty when no suitable figures are available.
configurationPlanarrayProposed calls using the listed tools' argument shapes. Preserve each tool and arguments object when presenting the plan; replace <new-program-id> with the creation response's id before execution.
decisionsobjectUse one qualifying action throughout the draft. Unresolved choices require a customer decision before configuration.
markdownstringThe requested summary or full advice, including the same configuration calls and their conditions.

No examples provided.

growsurf_record_sale ~459

Record a sale/transaction for an affiliate program. Use webhooks to know when commissions are added. Requires at least one transaction identifier (externalId, transactionId, orderId, paymentId, invoiceId, paymentIntentId, or chargeId) so repeated calls are de-duplicated instead of double-paying the referrer; reuse the same one when refunding. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

NameTypeReqDescription
amountCashNetinteger
amountPaidinteger
campaignIdstringTarget 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, witho…
chargeIdstring
currencystringyes
customerIdstring
descriptionstring
externalIdstring
grossAmountintegeryes
invoiceIdstring
invoiceSubtotalExcludingTaxinteger
invoiceTotalinteger
invoiceTotalExcludingTaxinteger
netAmountinteger
orderIdstring
paidAtinteger
participantEmailstring
participantIdstring
paymentIdstring
paymentIntentIdstring
paymentProviderstringConnected provider for this payment. Requires `transactionId` and `testMode`. Supply matching `grossAmount` and `currency`; other payment IDs and tax or net-amount overrides are not accepted. GrowSur…
subscriptionIdstring
taxAmountinteger
testModebooleanRequired with `paymentProvider`: `true` for test or `false` for live. Otherwise omit.
totalTaxAmountinteger
totalTaxAmountsarray
totalTaxesarray
transactionIdstring
NameTypeReqDescription
commissionsCreatedintegerCommissions created by this duplicate request.
duplicateboolean`true` when the sale matched an existing transaction.
duplicateFieldsarrayIdentifier fields that matched an existing transaction.
firstSalebooleanWhether this was the referred customer's first recorded sale.
matchingCommissionIdsarrayCommission ids that matched the submitted identifiers.
messagestringHuman-readable result message.
successboolean`true` when the sale was recorded; `false` when it matched an existing transaction.

No examples provided.

growsurf_refund_transaction ~581

Record an amendment (refund, partial refund, or chargeback) against a previously recorded affiliate transaction; reverses or adjusts the referrer's commission. The inverse of growsurf_record_sale. Identify the original transaction with the same identifier you sent when recording it (omit amountRefunded for a full refund). Already-paid commissions are not clawed back (recorded for tax only). Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

NameTypeReqDescription
amendmentTypestring
amountinteger
amountRefundedinteger
campaignIdstringTarget 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, witho…
chargeIdstring
currencystring
descriptionstring
externalIdstring
invoiceIdstring
orderIdstring
participantEmailstring
participantIdstring
paymentIdstring
paymentIntentIdstring
paymentProviderstringConnected provider for the original payment. Requires its `transactionId` and `testMode`. This amends GrowSurf records without sending a refund through the provider.
refundAmountintegerPositive amount for this individual refund, no greater than the sale amount, in the sale currency's minor unit. Send it with `refundId` on each original refund to support cancellations and out-of-ord…
refundHistoryCompletebooleanSet true only after reconciling and recording every original refundId and refundAmount, including refunds later canceled. This confirmation resolves previously incomplete history. Omit during ordinar…
refundIdstringStable per-refund identifier. Required when canceling a refund or changing the refunded total after a cancellation. Reuse the original refund's identifier for its cancellation. An amendment without e…
refundStatusstring
testModebooleanOriginal payment mode: `true` for test or `false` for live. Requires `paymentProvider`.
transactionIdstring
NameTypeReqDescription
adjustedintegerCommissions partially adjusted.
amendmentTypestringAmendment type that was processed.
deletedintegerPending commissions deleted by the amendment.
matchedintegerCommissions found for the provided identifiers.
matchingCommissionIdsarrayCommission ids that matched the submitted identifiers.
messagestringHuman-readable result message.
notFoundbooleanPresent and `true` when no commission matched the provided identifiers.
reversedintegerCommissions reversed (set to zero amount).
successboolean`true` when the amendment was processed; `false` when no matching transaction was found.

No examples provided.

growsurf_request_participant_payout_destination_confirmation ~196

Ask a participant to confirm their payout destination for a provider (by GrowSurf participant ID or email). Sends them a one-time confirmation link for the chosen `provider`; only the participant can open the link and confirm — this just triggers the message, and the provider must be enabled for the program. Returns { status, provider, providerDisplayName, expiresAt }. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

NameTypeReqDescription
campaignIdstringTarget 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, witho…
participantEmailstring
participantIdstring
providerstringyesThe payout provider the participant should confirm a destination for.
NameTypeReqDescription
expiresAtinteger|nullWhen the confirmation link expires, as a Unix timestamp in milliseconds.
providerstringThe payout provider identifier the participant was asked to confirm. Values are open-ended; current examples include `PAYPAL` and `WISECOM`.
providerDisplayNamestringThe customer-facing provider name (e.g. "PayPal", "Wise").
statusstringConfirms the message was requested (`CONFIRMATION_REQUESTED`).

No examples provided.

growsurf_request_team_verification ~84

Ask GrowSurf to verify the team bound to the API key or OAuth connection. Verification is required before a program can email participants. Calling this again while a request is pending does not create a duplicate. Returns the team with its updated `verificationStatus`. Requires `GROWSURF_API_KEY`; does not require `GROWSURF_CAMPAIGN_ID`.

Input schema present but exposes no named parameters.

NameTypeReqDescription
namestringThe team's display name.
verificationRequestedAtinteger|nullWhen verification was last requested, as a Unix timestamp in milliseconds.
verificationStatusstringTeam verification state. `VERIFIED` is required before a program can send participant emails.

No examples provided.

growsurf_resend_team_owner_verification_email ~99

Resend the email-verification message to the bound team's owner. The response never reveals the owner's email address. A `200` with `status: SENT` is returned only when an email was sent. Returns `400` if the email is already verified and `429` if one was sent too recently. Requires `GROWSURF_API_KEY`; does not require `GROWSURF_CAMPAIGN_ID`.

Input schema present but exposes no named parameters.

NameTypeReqDescription
statusstringStatus of the verification email request.
successbooleanWhether the verification email request was accepted.

No examples provided.

growsurf_test_campaign_webhook ~171

Send a live test event to a webhook on your GrowSurf program using its stored URL and secret. Optionally pass `event` to choose which event type to simulate; when omitted, the webhook's first enabled event is used (returns 400 if the webhook has no enabled events). Returns the mock payload and the receiving endpoint's response. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

NameTypeReqDescription
campaignIdstringTarget 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, witho…
eventstring
webhookIdstringyes
NameTypeReqDescription
payloadobjectThe mock event payload that was sent.
responseobjectResponse returned by the webhook endpoint during the test.
successbooleanWhether the test webhook request completed.

No examples provided.

growsurf_trigger_referral ~163

Trigger referral credit for a referred participant (use when your trigger is Sign up + Qualifying Action). Optionally pass delayInDays (1-90) to hold the credit for N days before awarding it (e.g. to cover a refund window). Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

NameTypeReqDescription
campaignIdstringTarget 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, witho…
delayInDaysinteger
participantEmailstring
participantIdstring
NameTypeReqDescription
messagestringHuman-readable result message. Present when credit was not awarded immediately.
successbooleanWhether referral credit was awarded, scheduled, or cancelled.

No examples provided.

growsurf_troubleshoot_referral_tracking ~347

Call first for a program problem, even without a program or participant ID. It returns initial checks; ask for IDs before reading records. Covers referrals not credited, participant emails not sending, rewards not issued, participants not added, Universal Code not detected, an integration or CRM (HubSpot, Mailchimp, and others) not syncing, Zapier errors, fraud flags, analytics numbers that look wrong, and more. Returns the checks to run in order (with the read tool and field for each), the likely causes most common first, fixes, and doc links. Pass a `symptom` key; unknown keys return the available symptoms; a `description` is matched only when it contains a symptom's label or alias verbatim, otherwise the symptom list is returned.

NameTypeReqDescription
campaignIdstringTarget 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, witho…
descriptionstringThe problem in the customer's words, when `symptom` is unknown.
participantEmailstringAffected participant email, when the id is unknown.
participantIdstringAffected participant id, echoed into participant-level checks.
symptomstringThe symptom to diagnose. Known keys: `participant_emails_not_sending`, `reward_not_issued`, `referral_not_credited`, `participants_not_added`, `universal_code_not_detected`, `platform_specific_instal…
NameTypeReqDescription
markdownstringThe generated guidance as a markdown document.

No examples provided.

growsurf_update_campaign ~258

Update your GrowSurf program's (campaign's) identity and lifecycle: name, companyName, companyLogoImageUrl, and status (set IN_PROGRESS to publish/resume the program, COMPLETE to end it). Only the fields you send are changed. `type`, `urlId`, and `currencyISO` are immutable (currency is chosen once at program creation), so this tool does not accept them. Editor-tab config (design, emails, options, installation) is edited with the dedicated config sub-resource tools, not here. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

NameTypeReqDescription
campaignIdstringTarget 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, witho…
companyLogoImageUrlstring
companyNamestring
namestring
statusstringLifecycle transition. IN_PROGRESS publishes/resumes the program; COMPLETE ends it. These are the only accepted targets — DRAFT/PENDING/CANCELLED are rejected by the API.

Structured output declared, but exposes no named fields.

No examples provided.

growsurf_update_campaign_design ~220

Update the design configuration for your GrowSurf program, including participant avatars under `participantAvatarStyle`, referred-visitor content such as the Claim Offer Popup, participant sign-in copy under `login`, and payout-destination confirmation page copy under `payoutDestinationConfirmation`. `participantAvatarStyle` accepts `CHARACTERS`, `INITIALS`, `ANIMALS`, or `GRADIENT`. Only the fields you send are changed; anything you leave out is untouched (arrays replace wholesale). Fetch the configuration first, preserve starter content unless the user asked to change it, then pass just the fields you want to change under `fields`. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

NameTypeReqDescription
campaignIdstringTarget 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, witho…
fieldsobjectyes

Structured output declared, but exposes no named fields.

No examples provided.

growsurf_update_campaign_emails ~165

Update the Emails tab configuration for your GrowSurf program. Only the fields you send are changed; anything you leave out is untouched (arrays replace wholesale). Pass just the fields you want to change under `fields`. To see the full object with every field and its current value, fetch the tab first, then send back only what you want to change. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

NameTypeReqDescription
campaignIdstringTarget 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, witho…
fieldsobjectyes

Structured output declared, but exposes no named fields.

No examples provided.

growsurf_update_campaign_installation ~337

Update the Installation tab configuration for your GrowSurf program. Only the fields you send are changed; anything you leave out is untouched (arrays replace wholesale). To let GrowSurf run on another origin, such as `http://localhost:3000`, add that origin to `allowedUrls` and preserve the rest of the array; a browser origin missing from both `shareUrl` and `allowedUrls` can return `403`. Leave `shareUrl` out of the patch unless the customer asked for a different landing page: every referral link already shared points at the current one. A patch that would replace a Share URL that is already set is refused until you confirm it with the customer and resend with `replaceExistingShareUrl: true`. Fetch the tab first, then pass just the fields you want to change under `fields`. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

NameTypeReqDescription
campaignIdstringTarget 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, witho…
fieldsobjectyesInstallation fields to patch. Common keys include `shareUrl`, `allowedUrls`, `signupEvent`, `referralTrigger`, and `signup`. Arrays replace wholesale.
replaceExistingShareUrlbooleanSet this to `true` only after the customer confirms they want a different landing page. Without it, a patch that would replace a Share URL that is already set is refused.

Structured output declared, but exposes no named fields.

No examples provided.

growsurf_update_campaign_options ~164

Update the Options tab configuration for your GrowSurf program. Only the fields you send are changed; anything you leave out is untouched (arrays replace wholesale). Pass just the fields you want to change under `fields`. To see the full object with every field and its current value, fetch the tab first, then send back only what you want to change. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

NameTypeReqDescription
campaignIdstringTarget 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, witho…
fieldsobjectyes

Structured output declared, but exposes no named fields.

No examples provided.

growsurf_update_campaign_reward ~547

Update an existing campaign reward (reward config) on your GrowSurf program. `campaignRewardId` is the reward key (e.g. crew_...). The reward `type` is immutable. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

NameTypeReqDescription
campaignIdstringTarget 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, witho…
campaignRewardIdstringyes
commissionStructureobjectAffiliate commission structure (AFFILIATE rewards only). Provide a positive `amount` (+ optional `amountISO`) for a FIXED commission, or `percent` for a PERCENT commission. CLICK and LEAD commissions…
conversionsRequiredinteger
couponCodestring
descriptionstring
eventstringThe referral event that earns this Campaign Reward. Use `LEAD` for a referred signup or `CONVERSION` for a qualifying action. A `LEAD` reward requires a later custom conversion trigger. Referral rewa…
imageUrlstring
isUnlimitedboolean
isVisibleboolean
limitinteger
limitDurationstring
metadataobject
nextMilestonePrefixstring
nextMilestoneSuffixstring
numberOfWinnersinteger
orderinteger
referralCouponCodestring
referralDescriptionstring
referredRewardUpfrontboolean
referredValueobjectTax valuation for the referred friend's side of a double-sided reward. `taxCharacter` is the reason the recipient earns the reward. For configurable non-commission rewards, `null` inherits the progra…
titlestring
valueobjectTax valuation for the reward (the referrer's side of a double-sided reward). `fairMarketValueUSD` is the manual fair-market value in USD (major units). `taxCharacter` is the reason the recipient earn…

Structured output declared, but exposes no named fields.

No examples provided.

growsurf_update_campaign_webhook ~172

Update a webhook on your GrowSurf program by id (`webhookId` is `primary` for the program's primary webhook). Only the fields you send are changed. `secret` is write-only and never returned. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

NameTypeReqDescription
campaignIdstringTarget 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, witho…
eventsarray
isEnabledboolean
payloadUrlstring
secretstringWrite-only.
webhookIdstringyes

Structured output declared, but exposes no named fields.

No examples provided.

growsurf_update_participant ~360

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`.

NameTypeReqDescription
affiliateStatusstringAffiliate 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.
campaignIdstringTarget 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, witho…
emailstringChange the participant's email address.
firstNamestring
lastNamestring
metadataobject
notesstringFreeform internal notes (internal only, never exposed to participants).
participantEmailstring
participantIdstring
referralStatusstring
referredBystring
unsubscribedboolean
vanityKeysarray

Structured output declared, but exposes no named fields.

No examples provided.

growsurf_update_program_resource ~257

Update at least one participant resource field, or move it to a zero-based `position`. Only sent fields change. To replace a `FILE`, call `growsurf_prepare_program_resource_file` first and pass its `uploadTicket` and `uploadResult` unchanged. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

NameTypeReqDescription
campaignIdstringTarget 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, witho…
categorystring|null
descriptionstring|null
isPublishedboolean
positioninteger
resourceIdstringyes
textstringUsed with `TEXT`.
titlestring
typestring
uploadResultobjectThe unmodified result returned by the secure upload flow for a replacement `FILE`.
uploadTicketstringThe one-time upload ticket for a replacement `FILE`.
urlstringUsed with `LINK`.

Structured output declared, but exposes no named fields.

No examples provided.

growsurf_update_team ~72

Update the display name of the team bound to the API key or OAuth connection. Personal profiles, billing, and team ownership are not editable here. Requires `GROWSURF_API_KEY`; does not require `GROWSURF_CAMPAIGN_ID`.

NameTypeReqDescription
namestringyesThe team's display name.
NameTypeReqDescription
namestringThe team's display name.
verificationRequestedAtinteger|nullWhen verification was last requested, as a Unix timestamp in milliseconds.
verificationStatusstringTeam verification state. `VERIFIED` is required before a program can send participant emails.

No examples provided.

growsurf_webhook_normalize ~39

Validate/normalize a GrowSurf webhook payload and generate a best-effort idempotency key for dedupe.

NameTypeReqDescription
payloadyes
NameTypeReqDescription
envelopeobjectThe normalized webhook envelope. Present only when `ok` is `true`.
errorstringWhy the payload failed validation. Present only when `ok` is `false`.
idempotencyKeystringA deterministic key for ignoring duplicate deliveries. Present only when `ok` is `true`.
okbooleanWhether the payload is a valid GrowSurf webhook envelope.

No examples provided.

Common questions

What is the GrowSurf MCP server?

GrowSurf is an MCP server listed in the public MCP registry as com.growsurf/growsurf. Build and manage GrowSurf referral and affiliate programs through AI assistants. This page covers its npm package (@growsurfteam/growsurf-mcp).

Is the GrowSurf MCP server safe to use?

GrowSurf scores 90 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the GrowSurf MCP server expose?

GrowSurf exposes 63 tools: growsurf_integration_guide, growsurf_agent_program_creation_eval, growsurf_program_design_advisor, growsurf_troubleshoot_referral_tracking, growsurf_mobile_sdk_guide, and 58 more. Their descriptions and schemas cost roughly 14,397 tokens of context every time the server is loaded.

Is the GrowSurf MCP server still maintained?

GrowSurf is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the GrowSurf MCP server under?

GrowSurf declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.