GrowSurf
NPM · @GROWSURFTEAM/GROWSURF-MCP · 2 COMPONENTS · SCANNED SEP 20
Build and manage GrowSurf referral and affiliate programs through AI assistants.
Available components
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
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
claude mcp add com-growsurf-growsurf -- npx -y @growsurfteam/growsurf-mcp
{
"mcpServers": {
"com-growsurf-growsurf": {
"command": "npx",
"args": [
"-y",
"@growsurfteam/growsurf-mcp"
]
}
}
} {
"servers": {
"com-growsurf-growsurf": {
"command": "npx",
"args": [
"-y",
"@growsurfteam/growsurf-mcp"
]
}
}
} codex mcp add com-growsurf-growsurf -- npx -y @growsurfteam/growsurf-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"com-growsurf-growsurf": {
"type": "local",
"command": [
"npx",
"-y",
"@growsurfteam/growsurf-mcp"
],
"enabled": true
}
}
} openclaw mcp add com-growsurf-growsurf --command npx --arg -y --arg @growsurfteam/growsurf-mcp
mcp_servers:
com-growsurf-growsurf:
command: "npx"
args: ["-y", "@growsurfteam/growsurf-mcp"] {
"McpServers": {
"com-growsurf-growsurf": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"@growsurfteam/growsurf-mcp"
]
}
}
} assistant mcp add com-growsurf-growsurf -t stdio -c npx -a -y @growsurfteam/growsurf-mcp
{
"mcpServers": {
"com-growsurf-growsurf": {
"command": "npx",
"args": [
"-y",
"@growsurfteam/growsurf-mcp"
]
}
}
} 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.
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 →
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 →
growsurf_list_participants 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.
| Name | Type | Req | Description |
|---|---|---|---|
| campaignId | string | – | 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, witho… |
| limit | integer | – | – |
| metadata | object | – | Exact-match filter on participant metadata, up to 3 keys, for example `{ "customerId": "12345" }`. Values compare as strings. |
| nextId | string | – | Participant ID returned as `nextId` from the previous page. |
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum number of participants requested for this page. |
| nextId | string|null | – | Participant id to pass as `nextId` for the next page, or `null` when there are no more results. |
| participants | array | – | Participants returned for this page. |
| rewardEvidence | object | – | What this response establishes about rewards. Combine with other reads; unknown here does not override evidence elsewhere. |
No examples provided.
growsurf_list_program_resources 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.
| Name | Type | Req | Description |
|---|---|---|---|
| campaignId | string | – | 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, witho… |
| Name | Type | Req | Description |
|---|---|---|---|
| resources | array | – | The program's resources in participant display order, including drafts. |
No examples provided.
growsurf_mobile_sdk_guide Mobile SDK Guide ~105
Generate native iOS/Android SDK 0.4.0 guidance, including attribution, shareUrl sharing, trackShare, and the native GrowSurf Window.
| Name | Type | Req | Description |
|---|---|---|---|
| attributionProvider | string | – | – |
| campaignId | string | – | – |
| includeInstallSnippets | boolean | – | – |
| mobilePublicKey | string | – | – |
| participantState | string | – | – |
| platform | string | – | – |
| serverVerifiedQualifyingAction | boolean | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| markdown | string | – | The generated guidance as a markdown document. |
No examples provided.
growsurf_participant_auth_hash Compute 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.
| Name | Type | Req | Description |
|---|---|---|---|
| affiliateJoin | boolean | – | – |
| string | yes | – | |
| participantAuthSecret | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| hash | string | – | The computed hash. Pass it to the GrowSurf client as the participant's `hash` value. |
No examples provided.
growsurf_prepare_program_resource_file 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.
| Name | Type | Req | Description |
|---|---|---|---|
| campaignId | string | – | 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, witho… |
| fileBase64 | string | yes | Canonical padded base64 file bytes only. Do not include a data-URL prefix or whitespace. |
| fileName | string | yes | A safe base name with an allowed extension: jpg/jpeg/png/gif/webp/pdf/csv/zip/doc/docx/xls/xlsx/ppt/pptx. |
| mimeType | string | yes | The supported MIME type matching fileName's extension. |
| Name | Type | Req | Description |
|---|---|---|---|
| uploadResult | object | – | The minimal signed upload confirmation. Pass it unchanged to create/update. |
| uploadTicket | string | – | The one-time GrowSurf ticket. Pass it unchanged to create/update. |
No examples provided.
growsurf_program_design_advisor 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.
| Name | Type | Req | Description |
|---|---|---|---|
| audience | string | – | Who refers whom. |
| businessModel | string | – | One line on what the business sells and how. Also set `salesMotion` when the buying process is known. |
| companyName | string | – | Used in the heading and proposed program name; omit it when unknown. |
| currencyISO | string | – | ISO 4217 code. Non-USD advice omits the dollar reward bands. No exchange rate or equivalent-currency benchmark is available. |
| detail | string | – | Use 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,… |
| goal | string | – | What 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… |
| includeRules | boolean | – | Append guidance on applying the recommendations. Off by default. |
| industry | string | – | Closest industry segment: `financial_services_fintech` (banking, lending, investing, insurance, payments, crypto), `saas_ai` (software sold to businesses, developer tools, AI products), `media_newsle… |
| programType | string | – | – |
| qualifyingAction | string | – | The action a referred friend must complete, in the customer's words. |
| rewardBudgetPerReferral | number | – | The 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… |
| salesMotion | string | – | Use `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. |
| Name | Type | Req | Description |
|---|---|---|---|
| benchmarkFacts | array | – | Complete benchmark statements with metric units, median, Q1, Q3, sample, and source. Quote each statement intact. Empty when no suitable figures are available. |
| configurationPlan | array | – | Proposed 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. |
| decisions | object | – | Use one qualifying action throughout the draft. Unresolved choices require a customer decision before configuration. |
| markdown | string | – | The requested summary or full advice, including the same configuration calls and their conditions. |
No examples provided.
growsurf_record_sale 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.
| Name | Type | Req | Description |
|---|---|---|---|
| amountCashNet | integer | – | – |
| amountPaid | integer | – | – |
| campaignId | string | – | 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, witho… |
| chargeId | string | – | – |
| currency | string | yes | – |
| customerId | string | – | – |
| description | string | – | – |
| externalId | string | – | – |
| grossAmount | integer | yes | – |
| invoiceId | string | – | – |
| invoiceSubtotalExcludingTax | integer | – | – |
| invoiceTotal | integer | – | – |
| invoiceTotalExcludingTax | integer | – | – |
| netAmount | integer | – | – |
| orderId | string | – | – |
| paidAt | integer | – | – |
| participantEmail | string | – | – |
| participantId | string | – | – |
| paymentId | string | – | – |
| paymentIntentId | string | – | – |
| paymentProvider | string | – | Connected 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… |
| subscriptionId | string | – | – |
| taxAmount | integer | – | – |
| testMode | boolean | – | Required with `paymentProvider`: `true` for test or `false` for live. Otherwise omit. |
| totalTaxAmount | integer | – | – |
| totalTaxAmounts | array | – | – |
| totalTaxes | array | – | – |
| transactionId | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| commissionsCreated | integer | – | Commissions created by this duplicate request. |
| duplicate | boolean | – | `true` when the sale matched an existing transaction. |
| duplicateFields | array | – | Identifier fields that matched an existing transaction. |
| firstSale | boolean | – | Whether this was the referred customer's first recorded sale. |
| matchingCommissionIds | array | – | Commission ids that matched the submitted identifiers. |
| message | string | – | Human-readable result message. |
| success | boolean | – | `true` when the sale was recorded; `false` when it matched an existing transaction. |
No examples provided.
growsurf_refund_transaction 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.
| Name | Type | Req | Description |
|---|---|---|---|
| amendmentType | string | – | – |
| amount | integer | – | – |
| amountRefunded | integer | – | – |
| campaignId | string | – | 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, witho… |
| chargeId | string | – | – |
| currency | string | – | – |
| description | string | – | – |
| externalId | string | – | – |
| invoiceId | string | – | – |
| orderId | string | – | – |
| participantEmail | string | – | – |
| participantId | string | – | – |
| paymentId | string | – | – |
| paymentIntentId | string | – | – |
| paymentProvider | string | – | Connected provider for the original payment. Requires its `transactionId` and `testMode`. This amends GrowSurf records without sending a refund through the provider. |
| refundAmount | integer | – | Positive 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… |
| refundHistoryComplete | boolean | – | Set true only after reconciling and recording every original refundId and refundAmount, including refunds later canceled. This confirmation resolves previously incomplete history. Omit during ordinar… |
| refundId | string | – | Stable 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… |
| refundStatus | string | – | – |
| testMode | boolean | – | Original payment mode: `true` for test or `false` for live. Requires `paymentProvider`. |
| transactionId | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| adjusted | integer | – | Commissions partially adjusted. |
| amendmentType | string | – | Amendment type that was processed. |
| deleted | integer | – | Pending commissions deleted by the amendment. |
| matched | integer | – | Commissions found for the provided identifiers. |
| matchingCommissionIds | array | – | Commission ids that matched the submitted identifiers. |
| message | string | – | Human-readable result message. |
| notFound | boolean | – | Present and `true` when no commission matched the provided identifiers. |
| reversed | integer | – | Commissions reversed (set to zero amount). |
| success | boolean | – | `true` when the amendment was processed; `false` when no matching transaction was found. |
No examples provided.
growsurf_request_participant_payout_destination_confirmation Request 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.
| Name | Type | Req | Description |
|---|---|---|---|
| campaignId | string | – | 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, witho… |
| participantEmail | string | – | – |
| participantId | string | – | – |
| provider | string | yes | The payout provider the participant should confirm a destination for. |
| Name | Type | Req | Description |
|---|---|---|---|
| expiresAt | integer|null | – | When the confirmation link expires, as a Unix timestamp in milliseconds. |
| provider | string | – | The payout provider identifier the participant was asked to confirm. Values are open-ended; current examples include `PAYPAL` and `WISECOM`. |
| providerDisplayName | string | – | The customer-facing provider name (e.g. "PayPal", "Wise"). |
| status | string | – | Confirms the message was requested (`CONFIRMATION_REQUESTED`). |
No examples provided.
growsurf_request_team_verification 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.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | – | The team's display name. |
| verificationRequestedAt | integer|null | – | When verification was last requested, as a Unix timestamp in milliseconds. |
| verificationStatus | string | – | Team verification state. `VERIFIED` is required before a program can send participant emails. |
No examples provided.
growsurf_resend_team_owner_verification_email 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.
| Name | Type | Req | Description |
|---|---|---|---|
| status | string | – | Status of the verification email request. |
| success | boolean | – | Whether the verification email request was accepted. |
No examples provided.
growsurf_test_campaign_webhook Send Test 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.
| Name | Type | Req | Description |
|---|---|---|---|
| campaignId | string | – | 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, witho… |
| event | string | – | – |
| webhookId | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| payload | object | – | The mock event payload that was sent. |
| response | object | – | Response returned by the webhook endpoint during the test. |
| success | boolean | – | Whether the test webhook request completed. |
No examples provided.
growsurf_trigger_referral 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.
| Name | Type | Req | Description |
|---|---|---|---|
| campaignId | string | – | 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, witho… |
| delayInDays | integer | – | – |
| participantEmail | string | – | – |
| participantId | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | – | Human-readable result message. Present when credit was not awarded immediately. |
| success | boolean | – | Whether referral credit was awarded, scheduled, or cancelled. |
No examples provided.
growsurf_troubleshoot_referral_tracking 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.
| Name | Type | Req | Description |
|---|---|---|---|
| campaignId | string | – | 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, witho… |
| description | string | – | The problem in the customer's words, when `symptom` is unknown. |
| participantEmail | string | – | Affected participant email, when the id is unknown. |
| participantId | string | – | Affected participant id, echoed into participant-level checks. |
| symptom | string | – | The 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… |
| Name | Type | Req | Description |
|---|---|---|---|
| markdown | string | – | The generated guidance as a markdown document. |
No examples provided.
growsurf_update_campaign Update Program ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| campaignId | string | – | 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, witho… |
| companyLogoImageUrl | string | – | – |
| companyName | string | – | – |
| name | string | – | – |
| status | string | – | Lifecycle 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 Update Program 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.
| Name | Type | Req | Description |
|---|---|---|---|
| campaignId | string | – | 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, witho… |
| fields | object | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
growsurf_update_campaign_emails Update Program 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.
| Name | Type | Req | Description |
|---|---|---|---|
| campaignId | string | – | 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, witho… |
| fields | object | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
growsurf_update_campaign_installation Update Program 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.
| Name | Type | Req | Description |
|---|---|---|---|
| campaignId | string | – | 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, witho… |
| fields | object | yes | Installation fields to patch. Common keys include `shareUrl`, `allowedUrls`, `signupEvent`, `referralTrigger`, and `signup`. Arrays replace wholesale. |
| replaceExistingShareUrl | boolean | – | Set 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 Update Program 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.
| Name | Type | Req | Description |
|---|---|---|---|
| campaignId | string | – | 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, witho… |
| fields | object | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
growsurf_update_campaign_reward 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.
| Name | Type | Req | Description |
|---|---|---|---|
| campaignId | string | – | 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, witho… |
| campaignRewardId | string | yes | – |
| commissionStructure | object | – | Affiliate 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… |
| conversionsRequired | integer | – | – |
| couponCode | string | – | – |
| description | string | – | – |
| event | string | – | The 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… |
| imageUrl | string | – | – |
| isUnlimited | boolean | – | – |
| isVisible | boolean | – | – |
| limit | integer | – | – |
| limitDuration | string | – | – |
| metadata | object | – | – |
| nextMilestonePrefix | string | – | – |
| nextMilestoneSuffix | string | – | – |
| numberOfWinners | integer | – | – |
| order | integer | – | – |
| referralCouponCode | string | – | – |
| referralDescription | string | – | – |
| referredRewardUpfront | boolean | – | – |
| referredValue | object | – | Tax 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… |
| title | string | – | – |
| value | object | – | Tax 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 Update 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.
| Name | Type | Req | Description |
|---|---|---|---|
| campaignId | string | – | 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, witho… |
| events | array | – | – |
| isEnabled | boolean | – | – |
| payloadUrl | string | – | – |
| secret | string | – | Write-only. |
| webhookId | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
growsurf_update_participant 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`.
| Name | Type | Req | Description |
|---|---|---|---|
| affiliateStatus | string | – | Affiliate 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. |
| campaignId | string | – | 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, witho… |
| string | – | Change the participant's email address. | |
| firstName | string | – | – |
| lastName | string | – | – |
| metadata | object | – | – |
| notes | string | – | Freeform internal notes (internal only, never exposed to participants). |
| participantEmail | string | – | – |
| participantId | string | – | – |
| referralStatus | string | – | – |
| referredBy | string | – | – |
| unsubscribed | boolean | – | – |
| vanityKeys | array | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
growsurf_update_program_resource 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.
| Name | Type | Req | Description |
|---|---|---|---|
| campaignId | string | – | 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, witho… |
| category | string|null | – | – |
| description | string|null | – | – |
| isPublished | boolean | – | – |
| position | integer | – | – |
| resourceId | string | yes | – |
| text | string | – | Used with `TEXT`. |
| title | string | – | – |
| type | string | – | – |
| uploadResult | object | – | The unmodified result returned by the secure upload flow for a replacement `FILE`. |
| uploadTicket | string | – | The one-time upload ticket for a replacement `FILE`. |
| url | string | – | Used with `LINK`. |
Structured output declared, but exposes no named fields.
No examples provided.
growsurf_update_team 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`.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | The team's display name. |
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | – | The team's display name. |
| verificationRequestedAt | integer|null | – | When verification was last requested, as a Unix timestamp in milliseconds. |
| verificationStatus | string | – | Team verification state. `VERIFIED` is required before a program can send participant emails. |
No examples provided.
growsurf_webhook_normalize Normalize Webhook Payload ~39
Validate/normalize a GrowSurf webhook payload and generate a best-effort idempotency key for dedupe.
| Name | Type | Req | Description |
|---|---|---|---|
| payload | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| envelope | object | – | The normalized webhook envelope. Present only when `ok` is `true`. |
| error | string | – | Why the payload failed validation. Present only when `ok` is `false`. |
| idempotencyKey | string | – | A deterministic key for ignoring duplicate deliveries. Present only when `ok` is `true`. |
| ok | boolean | – | Whether the payload is a valid GrowSurf webhook envelope. |
No examples provided.
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.