Skip to main content
Glama
growsurf

GrowSurf MCP Server

Official

Get Program Design

growsurf_get_campaign_design
Read-onlyIdempotent

Fetch the configured design and copy settings for a GrowSurf campaign to inspect or reuse its window content, colors, sharing, avatars, widget, login, payout, traffic, and participant settings.

Instructions

Fetch the configured design fields for your GrowSurf program, including GrowSurf Window content, colors, sharing sections, participant avatars under participantAvatarStyle, referred-visitor content such as the Claim Offer Popup, the website widget under widget, the participant Traffic report under trafficInsights (it starts on for new affiliate programs and hidden for referral programs, and every setting is returned with its default copy), participant sign-in copy under login, payout-destination confirmation page copy under payoutDestinationConfirmation, country-name overrides under countryLabels, and the participant Settings panel under participantSettings (its languageSectionTitle and languageSectionInstructionsText label the language picker shown when the program has more than one language). participantAvatarStyle is CHARACTERS, INITIALS, ANIMALS, or GRADIENT; missing or unknown values mean INITIALS. The confirmation section is omitted when no confirmation fields are stored. Stored null fields are returned as null; omitted and null fields use localized defaults. Targets campaignId if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

Input Schema

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

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
loginNoThe returning-participant sign-in form plus its success, resend, validation, and error text.
shareNoShare channels, invite settings, and share-button styling.
statsNoThe participant's referral-progress stats panel. Only `title` is editable.
themeNoVisual theme styling (colors, shadows, and similar).
headerNoHeader content for participants (`postText`) and non-participants (`preText`).
signupNoSignup form fields, GDPR consent, and button and login text.
widgetNoThe website widget — the invite that sits in a corner of the customer's own site. It renders as a button or as a card, and its card folds back into the button when a visitor closes it. Both audience switches start off, so a program shows nothing until one is turned on.
windowNoLayout of the GrowSurf window (`navigationMode`: `TABS` or `LIST`).
payoutsNoAffiliate programs only. The Payouts section of the participant portal.
rewardsNoHeading, icon, and empty-state text of the rewards panel.
resourcesNoParticipant Resources presentation settings: visibility, title, link and copy labels, the message shown when nothing is published, and the section icon. Resource items use the program Resource tools.
commissionsNoAffiliate programs only. The Commissions section of the participant portal.
leaderboardNoThe leaderboard section: labels, selectors, and name masking.
landingPagesNoPortal and landing pages: company info, `content`, `styles`, third-party script ids, and SEO meta tags.
countryLabelsNoParticipant-facing country-name overrides keyed by ISO 3166-1 alpha-2 code (for example `GB`). Each label replaces the default country name wherever participants pick a country, such as payout and tax forms. Overrides merge per code on `PATCH`; `null` (or the default name) restores a code's default. Only overridden codes are returned.
referralStatusNoThe section listing who a participant invited and each invite's progress. `revealInviteEmails` lets a signed-in participant see original invitation addresses when disclosure permission was recorded. Private invites and full email masking keep addresses hidden. Other referral addresses stay masked. `revealInviteEmailText` supplies the sign-in prompt; `loadErrorMessage` is shown when the list cannot load; `followUp` supplies the invitation follow-up labels and messages.
referralSummaryNoReferral programs only. The participant's row of summary tiles (clicks, leads, referrals, rewards).
trafficInsightsNoThe Traffic report participants can open from the GrowSurf window: visits to their share link over time and where those visits came from. It starts on for new affiliate programs and hidden for referral programs. Every setting is returned, with the default copy for anything not changed. Labels cannot be blank.
affiliateSummaryNoAffiliate programs only. The affiliate's row of summary tiles (clicks, revenue, payouts).
referredExperienceNoThe banner, headline, and Claim Offer Popup shown to a visitor who arrives through a referral link. The popup is available for referral and affiliate programs.
participantSettingsNoThe participant's account settings area (logout, language picker, PayPal and Wise payout confirmation/status messages, tax details). `languageSectionTitle` and `languageSectionInstructionsText` (up to 500 characters each) are the title and help text of the language row, shown when the program has more than one language. `taxSection.instructionsText` and `taxSection.residencyLabel` show when tax forms are required; `taxSection.vatOnlyInstructionsText` and `taxSection.vatOnlyResidencyLabel` show instead when an affiliate program collects VAT numbers without requiring tax forms.
participantAvatarStyleNoHow participant avatars appear in the GrowSurf Window. New programs use `CHARACTERS`; missing or unknown stored values return `INITIALS`.
payoutDestinationConfirmationNoCustomizable text for the payout-destination confirmation page opened from payout integration cards. One shared set applies to every enabled payout provider. Provider-aware text may use `{{payoutProvider}}`; omitted and `null` fields use localized defaults.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changedv0.19.15
    • addedInput schema / properties / campaignId / minLength
      Added value: +1
    • addedInput schema / required
      Added value: +[
      +  "campaignId"
      +]
    • changedOutput schema / properties / participantSettings / description
      Previous value: -"The participant's account settings area (logout, PayPal and Wise payout confirmation/status messages, tax details)."New value: +"The participant's account settings area (logout, language picker, PayPal and Wise payout confirmation/status messages, tax details). `languageSectionTitle` and `languageSectionInstructionsText` (up to 500 characters each) are the title and help text of the language row, shown when the program has more than one language. `taxSection.instructionsText` and `taxSection.residencyLabel` show when tax forms are required; `taxSection.vatOnlyInstructionsText` and `taxSection.vatOnlyResidencyLabel` show instead when an affiliate program collects VAT numbers without requiring tax forms."
    • changedOutput schema / properties / referralStatus / description
      Previous value: -"The section listing who a participant invited and each invite's progress."New value: +"The section listing who a participant invited and each invite's progress. `revealInviteEmails` lets a signed-in participant see original invitation addresses when disclosure permission was recorded. Private invites and full email masking keep addresses hidden. Other referral addresses stay masked. `revealInviteEmailText` supplies the sign-in prompt; `loadErrorMessage` is shown when the list cannot load; `followUp` supplies the invitation follow-up labels and messages."
    • changedOutput schema / properties / widget / properties / reveal / description
      Previous value: -"When the card appears: right away, after `revealDelaySeconds`, or once the visitor scrolls halfway down the page. The button always appears right away."New value: +"What the element waits for before it appears: the page loading (`IMMEDIATE`) or the visitor scrolling halfway down the page (`SCROLL`). `revealDelaySeconds` then counts from that moment. `DELAY` is accepted for older programs and behaves as `IMMEDIATE`."
    • changedOutput schema / properties / widget / properties / revealDelaySeconds / description
      Previous value: -"Seconds to wait before showing the card, when `reveal` is `DELAY`."New value: +"Seconds to wait after the `reveal` trigger before showing the element. `0` shows it the moment the trigger fires."
  2. Changed1 schema field changedv0.19.9
    • changedInput schema / properties / campaignId / description
      Previous value: -"Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, without restarting the server."New value: +"Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Program IDs also identify newly created programs without restarting the server."
  3. Changed1 schema field changedv0.19.1
    • addedOutput schema / properties / trafficInsights
      Added value: +{
      +  "description": "The Traffic report participants can open from the GrowSurf window: visits to their share link over time and where those visits came from. It starts on for new affiliate programs and hidden for referral programs. Every setting is returned, with the default copy for anything not changed. Labels cannot be blank.",
      +  "properties": {
      +    "allLinksLabel": {
      +      "description": "The share link picker option that combines all of the participant's links.",
      +      "type": "string"
      +    },
      +    "backLinkText": {
      +      "description": "The text of the link back from the report.",
      +      "type": "string"
      +    },
      +    "breakdowns": {
      +      "description": "The tables that show where visits came from: `utm`, `referrer`, `destination`, `geo`, `technology`, and `trigger`. Each has `isVisible` and `label`; some also name their levels under `levels` or their fixed rows under `values`.",
      +      "type": "object"
      +    },
      +    "breakdownsTitle": {
      +      "description": "The heading above the breakdown table.",
      +      "type": "string"
      +    },
      +    "dateRangeLabels": {
      +      "description": "The date range picker labels, keyed by `LAST_7_DAYS`, `LAST_30_DAYS`, `LAST_90_DAYS`, and `ALL_TIME`.",
      +      "type": "object"
      +    },
      +    "defaultDateRange": {
      +      "description": "The date range the report opens with.",
      +      "enum": [
      +        "LAST_7_DAYS",
      +        "LAST_30_DAYS",
      +        "LAST_90_DAYS",
      +        "ALL_TIME"
      +      ],
      +      "type": "string"
      +    },
      +    "emptyState": {
      +      "description": "The message shown before the participant's link has any visits. Can be empty.",
      +      "type": "string"
      +    },
      +    "isPublicDisplayed": {
      +      "description": "Whether participants can open the Traffic report.",
      +      "type": "boolean"
      +    },
      +    "messages": {
      +      "description": "Messages shown when the report cannot show everything: `error`, `unavailable`, `partial`, `partialFrom` (`{{date}}` is replaced with the first available date), `breakdownPartial`, and `breakdownEmpty`.",
      +      "type": "object"
      +    },
      +    "metrics": {
      +      "description": "The two visit counts at the top of the report, `visits` and `uniqueVisitors`, each with `isVisible`, `label`, and `helperText`.",
      +      "type": "object"
      +    },
      +    "notSetLabel": {
      +      "description": "The row name for visits that have no value for the chosen breakdown.",
      +      "type": "string"
      +    },
      +    "title": {
      +      "description": "The report heading.",
      +      "type": "string"
      +    },
      +    "trafficForLabel": {
      +      "description": "The label in front of the share link picker.",
      +      "type": "string"
      +    },
      +    "viewTrafficInsightsLinkText": {
      +      "description": "The text of the row or tab that opens the report.",
      +      "type": "string"
      +    },
      +    "visitsOverTimeTitle": {
      +      "description": "The heading above the visits chart.",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  4. Changed2 schema fields changedv0.18.1
    • addedOutput schema / properties / theme / properties / widget
      Added value: +{
      +  "description": "Paid-plan color settings for the website widget.",
      +  "properties": {
      +    "backgroundColor": {
      +      "description": "Fill color of the button, and of the card's own button.",
      +      "maxLength": 255,
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "borderRadius": {
      +      "description": "Corner rounding, as a CSS length such as `12px`.",
      +      "maxLength": 255,
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "color": {
      +      "description": "Text and drawing color on the button, and on the card's own button.",
      +      "maxLength": 255,
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": "object"
      +}
    • addedOutput schema / properties / widget
      Added value: +{
      +  "description": "The website widget — the invite that sits in a corner of the customer's own site. It renders as a button or as a card, and its card folds back into the button when a visitor closes it. Both audience switches start off, so a program shows nothing until one is turned on.",
      +  "properties": {
      +    "appearance": {
      +      "description": "`BUTTON` is a single button in the corner. `CARD` is a small card with a heading, a line of text, and a button, which a visitor can close.",
      +      "enum": [
      +        "BUTTON",
      +        "CARD"
      +      ],
      +      "type": "string"
      +    },
      +    "artImageUrl": {
      +      "description": "The picture shown at the top of the card.",
      +      "maxLength": 500,
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "buttonText": {
      +      "description": "The label on the card's button, which opens the program.",
      +      "maxLength": 100,
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "icon": {
      +      "description": "An uploaded image instead of a `markKey` drawing. `CUSTOM` uses `iconImageUrl`; `NONE` shows no image. `DEFAULT` is the old GrowSurf image: a program already set to it keeps it and can read it back, but it cannot be set. Requires a paid plan.",
      +      "enum": [
      +        "CUSTOM",
      +        "NONE",
      +        "DEFAULT"
      +      ],
      +      "type": "string"
      +    },
      +    "iconImageUrl": {
      +      "description": "The uploaded image, used when `icon` is `CUSTOM`. Requires a paid plan.",
      +      "maxLength": 500,
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "isArtShown": {
      +      "description": "Whether the card shows a picture above its text. Ignored by the button.",
      +      "type": "boolean"
      +    },
      +    "isHiddenOnMobile": {
      +      "description": "Whether to leave phones alone. On small screens the card fills the bottom of the page.",
      +      "type": "boolean"
      +    },
      +    "isShownToNewVisitors": {
      +      "description": "Whether people who have not joined the program see the widget.",
      +      "type": "boolean"
      +    },
      +    "isShownToParticipants": {
      +      "description": "Whether people who have already joined see the widget.",
      +      "type": "boolean"
      +    },
      +    "markKey": {
      +      "description": "The small drawing on the widget. It takes the colour chosen for the widget, so it matches on any background. `null` for no drawing.",
      +      "enum": [
      +        "GIFT",
      +        "TICKET",
      +        "DISCOUNT",
      +        "CASH",
      +        "PERK",
      +        "SHARE",
      +        "LINK",
      +        "INVITE",
      +        "FRIENDS",
      +        "THANKS",
      +        null
      +      ],
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "newVisitorDescription": {
      +      "description": "The line under the heading for people who have not joined. Card only.",
      +      "maxLength": 255,
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "newVisitorText": {
      +      "description": "What people who have not joined read. It is the button's label, and the card's heading.",
      +      "maxLength": 100,
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "offsetEdge": {
      +      "description": "How far in from the top or bottom edge, in pixels, following `placement`. Raise it to clear a chat button that already sits in that corner.",
      +      "maximum": 400,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "offsetSide": {
      +      "description": "How far in from the left or right edge, in pixels, following `placement`. For a centered placement it becomes an even gap on both sides.",
      +      "maximum": 400,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "pageRules": {
      +      "description": "Which pages the widget appears on. This controls the widget only — referral tracking, embedded elements, and opening the window from the site's own code keep working on every page where GrowSurf is installed.",
      +      "properties": {
      +        "mode": {
      +          "description": "`ALL` shows it everywhere. `ONLY` shows it just on the listed pages. `EXCEPT` shows it everywhere but the listed pages. With no pages listed, `ONLY` and `EXCEPT` behave as `ALL`.",
      +          "enum": [
      +            "ALL",
      +            "ONLY",
      +            "EXCEPT"
      +          ],
      +          "type": "string"
      +        },
      +        "patterns": {
      +          "description": "The pages to match. Use `*` to stand in for anything, as in `/portal/*`. A path on its own, such as `/pricing`, matches that path on every installed domain.",
      +          "items": {
      +            "maxLength": 500,
      +            "type": "string"
      +          },
      +          "maxItems": 20,
      +          "type": "array"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "participantDescription": {
      +      "description": "The line under the heading for people who have already joined. Card only.",
      +      "maxLength": 255,
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "participantText": {
      +      "description": "What people who have already joined read. It is the button's label, and the card's heading.",
      +      "maxLength": 100,
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "placement": {
      +      "description": "Which corner or edge of the page the widget sits against.",
      +      "enum": [
      +        "TOP_LEFT",
      +        "TOP_CENTER",
      +        "TOP_RIGHT",
      +        "BOTTOM_LEFT",
      +        "BOTTOM_CENTER",
      +        "BOTTOM_RIGHT"
      +      ],
      +      "type": "string"
      +    },
      +    "returnAfterDays": {
      +      "description": "Days before the card is offered again to someone who closed it. Until then they keep the button, so they can still open the program. `0` never offers it again.",
      +      "maximum": 365,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "reveal": {
      +      "description": "When the card appears: right away, after `revealDelaySeconds`, or once the visitor scrolls halfway down the page. The button always appears right away.",
      +      "enum": [
      +        "IMMEDIATE",
      +        "DELAY",
      +        "SCROLL"
      +      ],
      +      "type": "string"
      +    },
      +    "revealDelaySeconds": {
      +      "description": "Seconds to wait before showing the card, when `reveal` is `DELAY`.",
      +      "maximum": 120,
      +      "minimum": 0,
      +      "type": "integer"
      +    }
      +  },
      +  "type": "object"
      +}
  5. Changed5 schema fields changedv0.14.0
    • addedOutput schema / properties / participantAvatarStyle
      Added value: +{
      +  "description": "How participant avatars appear in the GrowSurf Window. New programs use `CHARACTERS`; missing or unknown stored values return `INITIALS`.",
      +  "enum": [
      +    "CHARACTERS",
      +    "INITIALS",
      +    "ANIMALS",
      +    "GRADIENT"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / properties / referredExperience / description
      Previous value: -"The banner and headline shown to a visitor who arrives through a referral link."New value: +"The banner, headline, and Claim Offer Popup shown to a visitor who arrives through a referral link. The popup is available for referral and affiliate programs."
    • addedOutput schema / properties / referredExperience / properties
      Added value: +{
      +  "isOfferPopupConfettiEnabled": {
      +    "description": "Whether to show confetti after a claim.",
      +    "type": "boolean"
      +  },
      +  "isOfferPopupEnabled": {
      +    "description": "Whether referred visitors see the Claim Offer Popup.",
      +    "type": "boolean"
      +  },
      +  "isOfferPopupOverlayDimmed": {
      +    "description": "Whether a centered popup dims the page behind it.",
      +    "type": "boolean"
      +  },
      +  "isOfferPopupReferrerImageShown": {
      +    "description": "Whether to show the referrer's profile image.",
      +    "type": "boolean"
      +  },
      +  "isOfferPopupShownOnAllPages": {
      +    "description": "Whether the popup can appear on every installed page.",
      +    "type": "boolean"
      +  },
      +  "offerPopupButtonText": {
      +    "description": "Offer-save button text.",
      +    "maxLength": 100,
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  "offerPopupDelaySeconds": {
      +    "description": "Delay before the popup appears.",
      +    "enum": [
      +      0,
      +      3,
      +      5,
      +      10
      +    ],
      +    "type": "integer"
      +  },
      +  "offerPopupDescription": {
      +    "description": "Text below the popup heading.",
      +    "maxLength": 255,
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  "offerPopupImageUrl": {
      +    "description": "Optional popup image.",
      +    "maxLength": 500,
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  "offerPopupPlacement": {
      +    "description": "Where the popup appears.",
      +    "enum": [
      +      "CENTER",
      +      "BOTTOM",
      +      "BOTTOM_RIGHT",
      +      "BOTTOM_LEFT",
      +      "TOP"
      +    ],
      +    "type": "string"
      +  },
      +  "offerPopupSecondaryLinkText": {
      +    "description": "Optional post-claim link text.",
      +    "maxLength": 100,
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  "offerPopupSecondaryLinkUrl": {
      +    "description": "Optional post-claim link destination. When saving, use `http://` or `https://`. Send `null` or an empty string to clear it.",
      +    "maxLength": 255,
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  "offerPopupThankYouButtonText": {
      +    "description": "Post-claim signup button text.",
      +    "maxLength": 100,
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  "offerPopupThankYouText": {
      +    "description": "Message shown after the offer is saved.",
      +    "maxLength": 255,
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  "offerPopupTitle": {
      +    "description": "Popup heading.",
      +    "maxLength": 255,
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  }
      +}
    • addedOutput schema / properties / resources
      Added value: +{
      +  "description": "Participant Resources presentation settings: visibility, title, link and copy labels, the message shown when nothing is published, and the section icon. Resource items use the program Resource tools.",
      +  "type": "object"
      +}
    • addedOutput schema / properties / theme / properties
      Added value: +{
      +  "referredExperienceOfferPopup": {
      +    "description": "Paid-plan color settings for the Claim Offer Popup.",
      +    "properties": {
      +      "backgroundColor": {
      +        "description": "Popup background color.",
      +        "maxLength": 255,
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "color": {
      +        "description": "Popup text color.",
      +        "maxLength": 255,
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "type": "object"
      +  }
      +}
  6. First observedv0.12.2

TDQS

B3.2/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/closed-world, but the description adds real behavioral detail: unknown or missing `participantAvatarStyle` resolves to `INITIALS`, the confirmation section is omitted when no confirmation fields are stored, stored `null` is returned as `null` while omitted values use localized defaults, and `trafficInsights` defaults differ by program type. These fallback/omission semantics are useful, though they describe the payload rather than the call itself.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause, but the body is a single run-on sentence of roughly 180 words enumerating every returned design field group — content an existing output schema already carries. With an output schema present, this enumeration is largely redundant padding that buries the few genuinely useful sentences about defaults and omission.

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?

For a single-parameter read tool with rich annotations and an output schema, the definition covers purpose, targeting, and fallback semantics adequately; return values need not be explained given the output schema. The remaining gap is the absence of any routing guidance relative to the many sibling read tools.

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?

There is a single parameter with 100% schema description coverage, so the schema already documents `campaignId`. The description's 'Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID' essentially restates the schema rather than adding format, constraint, or resolution detail beyond it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Fetch the configured design fields for your GrowSurf program', then enumerates the design areas involved (window content, colors, sharing, avatars, widget, traffic insights, login, payout confirmation). It does not, however, differentiate itself from the closest read siblings such as growsurf_get_campaign, growsurf_get_campaign_options, or growsurf_get_campaign_installation, so an agent must infer the boundary from naming alone.

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

Usage Guidelines2/5

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

The description is entirely about what is returned and how defaults resolve; it never states when to call this versus alternatives (e.g., use get_campaign for general settings, update_campaign_design to change design). There is no exclusion or prerequisite guidance, leaving the agent to infer that this is the read counterpart of growsurf_update_campaign_design.

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