Skip to main content
Glama

Cluby MCP

Update benefit

update_benefit
DestructiveIdempotent

Edit a benefit (benefitId is the id from list_benefits). Only the fields sent change; content and activation are merged field by field, so send just the keys being edited. Requires the admin role on the benefit's venue. To change the photo, call import_image and pass its image as content.image; content.image: null removes it. Set status to hidden to hide it from members or active to show it again. visibleToStatusCards: [] makes it visible to every member; activation.schedules: null removes its schedules. Fields owned by a campaign or the partner product catalogue (see campaign and productVariantId) can be overwritten by them later.

Input Schema

NameRequiredDescriptionDefault
orgIdNoOrganization public id, the `id` field from list_orgs. Omit it when the API key reaches exactly one organization.
statusNo
contentNo
venueIdsNoVenue IDs where this benefit is available
benefitIdYesBenefit `id` from list_benefits
sortOrderNo
activationNo
campaignIdNo
productVariantIdNo
visibleToStatusCardsNoStatus card IDs. Undefined = no change, empty array = public benefit

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / activation / properties / resetTime / description
      Previous value: -"Time of day in UTC (HH:MM) when the per-member quota resets. Only the hour is kept."New value: +"Time of day on the venue's clock (HH:MM) when the per-member quota resets; 06:00 when omitted on create. Only the hour is kept."
  2. Changed4 schema fields changed
    • addedInput schema / properties / content / properties / image
      Added value: +{
      +  "anyOf": [
      +    {
      +      "properties": {
      +        "attribution": {
      +          "anyOf": [
      +            {
      +              "description": "Attribution metadata for images sourced from third-party providers (Unsplash, Pexels, Wikimedia Commons). Stored on each image variant so attribution travels with the image data wherever it's persisted. Wikimedia images under a CC BY or CC BY-SA license must be displayed with the photographer, license and source link.",
      +              "properties": {
      +                "license": {
      +                  "description": "Wikimedia only, e.g. \"CC BY-SA 4.0\"",
      +                  "type": "string"
      +                },
      +                "licenseUrl": {
      +                  "format": "uri",
      +                  "type": "string"
      +                },
      +                "photoId": {
      +                  "type": "string"
      +                },
      +                "photographerName": {
      +                  "type": "string"
      +                },
      +                "photographerProfileUrl": {
      +                  "format": "uri",
      +                  "type": "string"
      +                },
      +                "source": {
      +                  "enum": [
      +                    "unsplash",
      +                    "pexels",
      +                    "wikimedia"
      +                  ],
      +                  "type": "string"
      +                },
      +                "sourceUrl": {
      +                  "format": "uri",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "source",
      +                "photoId",
      +                "photographerName",
      +                "sourceUrl"
      +              ],
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "url": {
      +          "format": "uri",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "url"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The photo: `{ url }` with an image upload's `originalUrl`. Omit to keep the current one, null to remove it."
      +}
    • addedInput schema / properties / content / properties / images / description
      Added value: +"Refused: send content.image"
    • removedInput schema / properties / content / properties / images / items
      Removed value: -{
      -  "description": "An image source with URL, format, type, and optional dimensions for building responsive srcset",
      -  "properties": {
      -    "attribution": {
      -      "description": "Attribution metadata for images sourced from third-party providers (Unsplash, Pexels, Wikimedia Commons). Stored on each image variant so attribution travels with the image data wherever it's persisted. Wikimedia images under a CC BY or CC BY-SA license must be displayed with the photographer, license and source link.",
      -      "properties": {
      -        "license": {
      -          "description": "Wikimedia only, e.g. \"CC BY-SA 4.0\"",
      -          "type": "string"
      -        },
      -        "licenseUrl": {
      -          "format": "uri",
      -          "type": "string"
      -        },
      -        "photoId": {
      -          "type": "string"
      -        },
      -        "photographerName": {
      -          "type": "string"
      -        },
      -        "photographerProfileUrl": {
      -          "format": "uri",
      -          "type": "string"
      -        },
      -        "source": {
      -          "enum": [
      -            "unsplash",
      -            "pexels",
      -            "wikimedia"
      -          ],
      -          "type": "string"
      -        },
      -        "sourceUrl": {
      -          "format": "uri",
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "source",
      -        "photoId",
      -        "photographerName",
      -        "sourceUrl"
      -      ],
      -      "type": "object"
      -    },
      -    "format": {
      -      "enum": [
      -        "original",
      -        "raw",
      -        "jpg",
      -        "webp",
      -        "avif",
      -        "heif"
      -      ],
      -      "type": "string"
      -    },
      -    "height": {
      -      "type": "number"
      -    },
      -    "type": {
      -      "type": "string"
      -    },
      -    "url": {
      -      "type": "string"
      -    },
      -    "width": {
      -      "type": "number"
      -    }
      -  },
      -  "required": [
      -    "url",
      -    "format",
      -    "type"
      -  ],
      -  "type": "object"
      -}
    • removedInput schema / properties / content / properties / images / type
      Removed value: -"array"
  3. Changed1 schema field changed
    • addedInput schema / properties / activation / properties / duration / description
      Added value: +"How long activation remains visible on the screen when activated. Seconds."
  4. Changed9 schema fields changed
    • addedInput schema / properties / content / properties / size / anyOf
      Added value: +[
      +  {
      +    "description": "Optional numeric size of the benefit (e.g. 0.33, 500). Stored as DECIMAL(10,3) — at most 3 decimal places.",
      +    "exclusiveMinimum": 0,
      +    "maximum": 9999999.999,
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / content / properties / size / description
      Previous value: -"Optional numeric size of the benefit (e.g. 0.33, 500). Stored as DECIMAL(10,3) — at most 3 decimal places."New value: +"null clears the size"
    • removedInput schema / properties / content / properties / size / exclusiveMinimum
      Removed value: -0
    • removedInput schema / properties / content / properties / size / maximum
      Removed value: -9999999.999
    • removedInput schema / properties / content / properties / size / type
      Removed value: -"number"
    • addedInput schema / properties / content / properties / sizeUnits / anyOf
      Added value: +[
      +  {
      +    "description": "Optional unit of measurement for `size`",
      +    "enum": [
      +      "MILLILITER",
      +      "CENTILITER",
      +      "LITER",
      +      "PINT"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / content / properties / sizeUnits / description
      Previous value: -"Optional unit of measurement for `size`"New value: +"null clears the size unit"
    • removedInput schema / properties / content / properties / sizeUnits / enum
      Removed value: -[
      -  "MILLILITER",
      -  "CENTILITER",
      -  "LITER",
      -  "PINT"
      -]
    • removedInput schema / properties / content / properties / sizeUnits / type
      Removed value: -"string"
  5. Changed1 schema field changed
    • changedInput schema / properties / activation / properties / resetTime / description
      Previous value: -"Time when benefit resets in venue's local timezone (HH:MM format)"New value: +"Time of day in UTC (HH:MM) when the per-member quota resets. Only the hour is kept."
  6. Changed1 schema field changed
    • removedInput schema / properties / content / properties / icon
      Removed value: -{
      -  "properties": {
      -    "name": {
      -      "default": "star",
      -      "type": "string"
      -    },
      -    "variant": {
      -      "default": "solid",
      -      "enum": [
      -        "solid",
      -        "regular",
      -        "light"
      -      ],
      -      "type": "string"
      -    }
      -  },
      -  "type": "object"
      -}
  7. Changed6 schema fields changed
    • changedInput schema / properties / content / properties / images / items / properties / attribution / description
      Previous value: -"Attribution metadata for images sourced from third-party providers (e.g. Unsplash). Stored on each image variant so attribution travels with the image data wherever it's persisted."New value: +"Attribution metadata for images sourced from third-party providers (Unsplash, Pexels, Wikimedia Commons). Stored on each image variant so attribution travels with the image data wherever it's persisted. Wikimedia images under a CC BY or CC BY-SA license must be displayed with the photographer, license and source link."
    • addedInput schema / properties / content / properties / images / items / properties / attribution / properties / license
      Added value: +{
      +  "description": "Wikimedia only, e.g. \"CC BY-SA 4.0\"",
      +  "type": "string"
      +}
    • addedInput schema / properties / content / properties / images / items / properties / attribution / properties / licenseUrl
      Added value: +{
      +  "format": "uri",
      +  "type": "string"
      +}
    • removedInput schema / properties / content / properties / images / items / properties / attribution / properties / source / const
      Removed value: -"unsplash"
    • addedInput schema / properties / content / properties / images / items / properties / attribution / properties / source / enum
      Added value: +[
      +  "unsplash",
      +  "pexels",
      +  "wikimedia"
      +]
    • changedInput schema / properties / content / properties / images / items / properties / attribution / required
      Previous value: -[
      -  "source",
      -  "photoId",
      -  "photographerName",
      -  "photographerProfileUrl",
      -  "sourceUrl"
      -]New value: +[
      +  "source",
      +  "photoId",
      +  "photographerName",
      +  "sourceUrl"
      +]
  8. Changed10 schema fields changed
    • addedInput schema / properties / content / properties / description / anyOf
      Added value: +[
      +  {
      +    "description": "A localized string with a required default value and optional locale-specific translations",
      +    "properties": {
      +      "cs": {
      +        "type": "string"
      +      },
      +      "da": {
      +        "type": "string"
      +      },
      +      "de": {
      +        "type": "string"
      +      },
      +      "default": {
      +        "type": "string"
      +      },
      +      "en": {
      +        "type": "string"
      +      },
      +      "es": {
      +        "type": "string"
      +      },
      +      "et": {
      +        "type": "string"
      +      },
      +      "fi": {
      +        "type": "string"
      +      },
      +      "fr": {
      +        "type": "string"
      +      },
      +      "it": {
      +        "type": "string"
      +      },
      +      "ka": {
      +        "type": "string"
      +      },
      +      "lt": {
      +        "type": "string"
      +      },
      +      "lv": {
      +        "type": "string"
      +      },
      +      "nb": {
      +        "type": "string"
      +      },
      +      "nl": {
      +        "type": "string"
      +      },
      +      "pl": {
      +        "type": "string"
      +      },
      +      "pt": {
      +        "type": "string"
      +      },
      +      "ru": {
      +        "type": "string"
      +      },
      +      "sk": {
      +        "type": "string"
      +      },
      +      "sv": {
      +        "type": "string"
      +      },
      +      "uk": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "default"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / content / properties / description / description
      Previous value: -"A localized string with a required default value and optional locale-specific translations"New value: +"null clears the description"
    • removedInput schema / properties / content / properties / description / properties
      Removed value: -{
      -  "cs": {
      -    "type": "string"
      -  },
      -  "da": {
      -    "type": "string"
      -  },
      -  "de": {
      -    "type": "string"
      -  },
      -  "default": {
      -    "type": "string"
      -  },
      -  "en": {
      -    "type": "string"
      -  },
      -  "es": {
      -    "type": "string"
      -  },
      -  "et": {
      -    "type": "string"
      -  },
      -  "fi": {
      -    "type": "string"
      -  },
      -  "fr": {
      -    "type": "string"
      -  },
      -  "it": {
      -    "type": "string"
      -  },
      -  "ka": {
      -    "type": "string"
      -  },
      -  "lt": {
      -    "type": "string"
      -  },
      -  "lv": {
      -    "type": "string"
      -  },
      -  "nb": {
      -    "type": "string"
      -  },
      -  "nl": {
      -    "type": "string"
      -  },
      -  "pl": {
      -    "type": "string"
      -  },
      -  "pt": {
      -    "type": "string"
      -  },
      -  "ru": {
      -    "type": "string"
      -  },
      -  "sk": {
      -    "type": "string"
      -  },
      -  "sv": {
      -    "type": "string"
      -  },
      -  "uk": {
      -    "type": "string"
      -  }
      -}
    • removedInput schema / properties / content / properties / description / required
      Removed value: -[
      -  "default"
      -]
    • removedInput schema / properties / content / properties / description / type
      Removed value: -"object"
    • addedInput schema / properties / content / properties / offer
      Added value: +{
      +  "anyOf": [
      +    {
      +      "properties": {
      +        "type": {
      +          "enum": [
      +            "price",
      +            "percent_off"
      +          ],
      +          "type": "string"
      +        },
      +        "value": {
      +          "description": "For `price`: the amount in the minor unit of the organization's currency (500 = 5.00 EUR; 0 = free). For `percent_off`: basis points (2000 = 20 % off), at most 10000.",
      +          "maximum": 2147483647,
      +          "minimum": 0,
      +          "type": "integer"
      +        }
      +      },
      +      "required": [
      +        "type",
      +        "value"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The benefit's value: a price or a percentage off. null or absent for a benefit with no value shown."
      +}
    • changedInput schema / properties / content / properties / valueDisplay / description
      Previous value: -"A localized string with a required default value and optional locale-specific translations"New value: +"Read-only and refused: send content.offer"
    • removedInput schema / properties / content / properties / valueDisplay / properties
      Removed value: -{
      -  "cs": {
      -    "type": "string"
      -  },
      -  "da": {
      -    "type": "string"
      -  },
      -  "de": {
      -    "type": "string"
      -  },
      -  "default": {
      -    "type": "string"
      -  },
      -  "en": {
      -    "type": "string"
      -  },
      -  "es": {
      -    "type": "string"
      -  },
      -  "et": {
      -    "type": "string"
      -  },
      -  "fi": {
      -    "type": "string"
      -  },
      -  "fr": {
      -    "type": "string"
      -  },
      -  "it": {
      -    "type": "string"
      -  },
      -  "ka": {
      -    "type": "string"
      -  },
      -  "lt": {
      -    "type": "string"
      -  },
      -  "lv": {
      -    "type": "string"
      -  },
      -  "nb": {
      -    "type": "string"
      -  },
      -  "nl": {
      -    "type": "string"
      -  },
      -  "pl": {
      -    "type": "string"
      -  },
      -  "pt": {
      -    "type": "string"
      -  },
      -  "ru": {
      -    "type": "string"
      -  },
      -  "sk": {
      -    "type": "string"
      -  },
      -  "sv": {
      -    "type": "string"
      -  },
      -  "uk": {
      -    "type": "string"
      -  }
      -}
    • removedInput schema / properties / content / properties / valueDisplay / required
      Removed value: -[
      -  "default"
      -]
    • removedInput schema / properties / content / properties / valueDisplay / type
      Removed value: -"object"
  9. Added

TDQS

A4.3/5.0
Behavior5/5

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

Adds substantial context beyond `idempotentHint`/`destructiveHint`: partial-update semantics, per-field merging of `content` and `activation`, the admin-role permission requirement, the destructive removals (`content.image: null`, `activation.schedules: null`), and the warning that campaign/catalogue-owned fields may be overwritten later.

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?

Front-loads the merge semantics and ID provenance, then stacks the special cases as compact clauses. Dense but nearly every sentence carries operational information; only the campaign-ownership sentence could be trimmed.

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 10-parameter nested mutation with no output schema, it covers the highest-risk behaviors: partial update semantics, permission gate, image flow, removal sentinels, and external ownership. Missing coverage of `venueIds`/`sortOrder` semantics and return behavior keeps it from a 5.

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

Parameters3/5

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

Schema coverage is only 40% against 10 parameters, so the description must compensate. It clarifies the tricky ones (image, status, visibleToStatusCards, schedules) but says nothing about `venueIds`, `sortOrder`, `campaignId`, or `productVariantId`, leaving roughly half the surface to the schema alone.

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?

Specific verb+resource ('Edit a benefit') with an explicit provenance note that `benefitId` comes from `list_benefits`, which anchors it to the sibling listing tool. It immediately distinguishes itself from create_benefit by framing the whole operation as editing an existing record.

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?

Gives concrete routing: use `import_image` and pass its `image` for photos, set `status: hidden` to hide, `active` to show. It does not explicitly contrast with update_birthday_gift or say when not to use this tool, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources