Skip to main content
Glama
growsurf

GrowSurf MCP Server

Official

Create Program Resource

growsurf_create_program_resource

Create FILE, LINK, or TEXT resources for GrowSurf program participants, with optional publishing, category, and campaign targeting.

Instructions

Create a FILE, LINK, or TEXT resource for participants. LINK requires an HTTPS url. TEXT requires plain text. A FILE up to 10 MB requires a one-time uploadTicket and the unmodified uploadResult from GrowSurf's secure upload flow. New resources default to draft unless isPublished is set. API reference: https://docs.growsurf.com/developer-tools/rest-api/api-reference. Targets campaignId if supplied, otherwise GROWSURF_CAMPAIGN_ID.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlNoUsed only with `LINK`.
textNoUsed only with `TEXT`.
typeYes
titleYes
categoryNo
campaignIdNoTarget program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Program IDs also identify newly created programs without restarting the server.
descriptionNo
isPublishedNo
uploadResultNoThe unmodified result returned by the secure upload flow. Used only with `FILE`.
uploadTicketNoThe one-time upload ticket. Used only with `FILE`.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. 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."
  2. Addedv0.14.0

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly=false, idempotent=false, destructive=false, openWorld=true. The description adds genuinely new behavioral context: new resources default to draft unless isPublished is set, the uploadTicket is one-time, FILE is capped at 10 MB, and the unmodified uploadResult must be passed through. It stops short of describing auth/permission needs or failure behavior.

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

Conciseness4/5

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

Six tight sentences, front-loaded with the purpose and immediately followed by per-type requirements, then defaults, then the API reference and targeting. Every sentence carries load, though the bare API-reference URL adds little for an agent that already has the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the description covers the type matrix, the draft default, the upload flow, and campaign targeting for a 10-parameter conditional mutation. The main remaining gap is not explicitly routing the agent to the prepare-upload sibling that produces uploadTicket/uploadResult.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 50% schema description coverage, the description meaningfully compensates: it explains the conditional coupling of type to url/text/uploadTicket/uploadResult, the HTTPS constraint, the isPublished default, and the campaignId-to-GROWSURF_CAMPAIGN_ID fallback. This adds real semantics the schema's conditional allOf alone makes hard to parse.

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

Purpose5/5

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

The description opens with a specific verb+resource ("Create a `FILE`, `LINK`, or `TEXT` resource for participants") and immediately enumerates the three subtypes, which lets an agent distinguish it from sibling tools like update_program_resource, list_program_resources, and delete_program_resource without opening a schema.

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

Usage Guidelines4/5

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

It gives clear per-type usage conditions (LINK needs HTTPS url, TEXT needs text, FILE needs uploadTicket + uploadResult) and states the draft-by-default behavior. However, it never names the obvious prerequisite sibling `growsurf_prepare_program_resource_file` for the "secure upload flow," leaving the agent to infer where uploadTicket/uploadResult come from.

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