Skip to main content
Glama

Create a gift quest

create_quest

Create a quest that wraps a gift. Returns playUrl (for the recipient), editUrl (private, for the web editor) and warnings. If it uses unpaid Quest+ features, playUrl is null and shareBlocked says why.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "quest": "<quest>"
    },
    "name": "create_quest"
  }
}

Input Schema

NameRequiredDescriptionDefault
questYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / quest / properties / steps / items / properties / skippable
      Added value: +{
      +  "description": "place: show a \"Skip\" button so the recipient can pass the step without walking there (a demo, or someone far away)",
      +  "type": "boolean"
      +}
  2. Changed2 schema fields changed
    • addedInput schema / properties / quest / properties / paper
      Added value: +{
      +  "description": "Pattern of the wrapping paper on the gift box (default dots); its colour follows the theme",
      +  "enum": [
      +    "dots",
      +    "stripes",
      +    "stars",
      +    "hearts"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / quest / properties / to
      Added value: +{
      +  "description": "The recipient's first name (optional): shown as \"For …\" on the first screen and in the link's preview in messengers",
      +  "maxLength": 60,
      +  "type": "string"
      +}
  3. Changed10 schema fields changed
    • changedInput schema / properties / quest / properties / steps / items / description
      Previous value: -"One quest step. Fields per type — message: prompt. question: prompt, answers[], optional image (a photo the question is about; Quest+). choice: prompt, options[2..6], correct (0-based index). code: prompt, code (a secret the recipient finds offline, e.g. written on a card). puzzle: image (key from an upload with kind=image), size 3|4, optional prompt. media (Quest+): media (key from an upload with kind=media), mediaType audio|video, optional prompt. date: prompt, date (YYYY-MM-DD; the recipient picks it in a calendar). number: prompt, number, optional tolerance (any answer within ± tolerance counts). qr: prompt (where to look), code (letters and digits) — a treasure hunt: the creator prints a card with a QR code that opens playUrl?k=<code> and hides it; the recipient scans it with the phone camera or types the code printed under it. The builder (editUrl) prints these cards; you can also make the QR yourself from playUrl + \"?k=\" + the URL-encoded code. candles: optional prompt, count 1..${MAX_CANDLES} (more than ${FREE_CANDLES} is Quest+, e.g. the age), optional image (a photo on the cake, Quest+) — the recipient blows into the microphone (or taps) to put out birthday candles. message: optional scratch: true hides the text under a layer the recipient rubs off; optional image (a photo in the letter, under the layer when scratch is on; Quest+). qr: optional note, a line printed on the card (e.g. where the next card is), printed with Quest+ only. Any step: opensAt (Quest+ advent calendar)."New value: +"One quest step. Fields per type — message: prompt. question: prompt, answers[], optional image (a photo the question is about; Quest+). choice: prompt, options[2..6], correct (0-based index). code: prompt, code (a secret the recipient finds offline, e.g. written on a card). puzzle: image (key from an upload with kind=image), size 3|4, optional prompt. media (Quest+): media (key from an upload with kind=media), mediaType audio|video, optional prompt. date: prompt, date (YYYY-MM-DD; the recipient picks it in a calendar). number: prompt, number, optional tolerance (any answer within ± tolerance counts). qr: prompt (where to look), code (letters and digits) — a treasure hunt: the creator prints a card with a QR code that opens playUrl?k=<code> and hides it; the recipient scans it with the phone camera or types the code printed under it. The builder (editUrl) prints these cards; you can also make the QR yourself from playUrl + \"?k=\" + the URL-encoded code. candles: optional prompt, count 1..${MAX_CANDLES} (more than ${FREE_CANDLES} is Quest+, e.g. the age), optional image (a photo on the cake, Quest+) — the recipient blows into the microphone (or taps) to put out birthday candles. message: optional scratch: true hides the text under a layer the recipient rubs off; optional image (a photo in the letter, under the layer when scratch is on; Quest+). qr: optional note, a line printed on the card (e.g. where the next card is), printed with Quest+ only. place: prompt (where to go), lat, lng, optional radius in metres — hot or cold: the recipient walks there with the phone (GPS) and the screen warms up as they get closer; the coordinates never reach their browser. spot: prompt, image (a photo or a map screenshot), x and y (0..1 shares of the photo's width and height, from its top-left corner), optional r — the recipient taps the right spot on the photo. Any step: opensAt (Quest+ advent calendar)."
    • changedInput schema / properties / quest / properties / steps / items / properties / image / description
      Previous value: -"puzzle (required); question, message, candles (optional, Quest+): image key from an upload with kind=image"New value: +"puzzle, spot (required); question, message, candles (optional, Quest+): image key from an upload with kind=image"
    • addedInput schema / properties / quest / properties / steps / items / properties / lat
      Added value: +{
      +  "description": "place: latitude of the spot",
      +  "maximum": 90,
      +  "minimum": -90,
      +  "type": "number"
      +}
    • addedInput schema / properties / quest / properties / steps / items / properties / lng
      Added value: +{
      +  "description": "place: longitude of the spot",
      +  "maximum": 180,
      +  "minimum": -180,
      +  "type": "number"
      +}
    • addedInput schema / properties / quest / properties / steps / items / properties / r
      Added value: +{
      +  "description": "spot: how big the target is, as a share of the photo (default 0.1)",
      +  "enum": [
      +    0.06,
      +    0.1,
      +    0.15
      +  ],
      +  "type": "number"
      +}
    • addedInput schema / properties / quest / properties / steps / items / properties / radius
      Added value: +{
      +  "description": "place: how close counts, in metres (default 50)",
      +  "enum": [
      +    25,
      +    50,
      +    100,
      +    250
      +  ],
      +  "type": "integer"
      +}
    • changedInput schema / properties / quest / properties / steps / items / properties / type / enum
      Previous value: -[
      -  "message",
      -  "question",
      -  "choice",
      -  "code",
      -  "puzzle",
      -  "media",
      -  "date",
      -  "number",
      -  "qr",
      -  "candles"
      -]New value: +[
      +  "message",
      +  "question",
      +  "choice",
      +  "code",
      +  "puzzle",
      +  "media",
      +  "date",
      +  "number",
      +  "qr",
      +  "candles",
      +  "place",
      +  "spot"
      +]
    • addedInput schema / properties / quest / properties / steps / items / properties / x
      Added value: +{
      +  "description": "spot: horizontal position of the right spot, share of the photo width from the left",
      +  "maximum": 1,
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / quest / properties / steps / items / properties / y
      Added value: +{
      +  "description": "spot: vertical position, share of the photo height from the top",
      +  "maximum": 1,
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / quest / properties / unwrap
      Added value: +{
      +  "description": "How the recipient opens the gift at the end: hands (default) — pull the ribbon to untie the bow, then tap to tear the paper off; tap — one tap on the box",
      +  "enum": [
      +    "hands",
      +    "tap"
      +  ],
      +  "type": "string"
      +}
  4. Changed1 schema field changed
    • removedInput schema / properties / quest / properties / dynamicQr
      Removed value: -{
      -  "description": "Mint a dynamic, trackable qrilo QR code (qrUrl)",
      -  "type": "boolean"
      -}
  5. Changed10 schema fields changed
    • changedInput schema / properties / quest / properties / steps / items / description
      Previous value: -"One quest step. Fields per type — message: prompt. question: prompt, answers[], optional image (a photo the question is about; Quest+). choice: prompt, options[2..6], correct (0-based index). code: prompt, code (a secret the recipient finds offline, e.g. written on a card). puzzle: image (key from an upload with kind=image), size 3|4, optional prompt. media (Quest+): media (key from an upload with kind=media), mediaType audio|video, optional prompt. Any step: opensAt (Quest+ advent calendar)."New value: +"One quest step. Fields per type — message: prompt. question: prompt, answers[], optional image (a photo the question is about; Quest+). choice: prompt, options[2..6], correct (0-based index). code: prompt, code (a secret the recipient finds offline, e.g. written on a card). puzzle: image (key from an upload with kind=image), size 3|4, optional prompt. media (Quest+): media (key from an upload with kind=media), mediaType audio|video, optional prompt. date: prompt, date (YYYY-MM-DD; the recipient picks it in a calendar). number: prompt, number, optional tolerance (any answer within ± tolerance counts). qr: prompt (where to look), code (letters and digits) — a treasure hunt: the creator prints a card with a QR code that opens playUrl?k=<code> and hides it; the recipient scans it with the phone camera or types the code printed under it. The builder (editUrl) prints these cards; you can also make the QR yourself from playUrl + \"?k=\" + the URL-encoded code. candles: optional prompt, count 1..${MAX_CANDLES} (more than ${FREE_CANDLES} is Quest+, e.g. the age), optional image (a photo on the cake, Quest+) — the recipient blows into the microphone (or taps) to put out birthday candles. message: optional scratch: true hides the text under a layer the recipient rubs off; optional image (a photo in the letter, under the layer when scratch is on; Quest+). qr: optional note, a line printed on the card (e.g. where the next card is), printed with Quest+ only. Any step: opensAt (Quest+ advent calendar)."
    • changedInput schema / properties / quest / properties / steps / items / properties / code / description
      Previous value: -"code: the secret code"New value: +"code: the secret code; qr: the code on the printed card (up to 40 characters)"
    • addedInput schema / properties / quest / properties / steps / items / properties / count
      Added value: +{
      +  "description": "candles: how many candles (default 5; more than 10 is Quest+)",
      +  "maximum": 60,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / quest / properties / steps / items / properties / date
      Added value: +{
      +  "description": "date: the right date, YYYY-MM-DD",
      +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +  "type": "string"
      +}
    • changedInput schema / properties / quest / properties / steps / items / properties / image / description
      Previous value: -"puzzle (required) or question (optional): image key from an upload with kind=image"New value: +"puzzle (required); question, message, candles (optional, Quest+): image key from an upload with kind=image"
    • addedInput schema / properties / quest / properties / steps / items / properties / note
      Added value: +{
      +  "description": "qr: a line printed on the card (Quest+)",
      +  "maxLength": 140,
      +  "type": "string"
      +}
    • addedInput schema / properties / quest / properties / steps / items / properties / number
      Added value: +{
      +  "description": "number: the right number",
      +  "type": "number"
      +}
    • addedInput schema / properties / quest / properties / steps / items / properties / scratch
      Added value: +{
      +  "description": "message: hide the text under a scratch layer",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / quest / properties / steps / items / properties / tolerance
      Added value: +{
      +  "description": "number: answers within ± this count as right (default 0)",
      +  "minimum": 0,
      +  "type": "number"
      +}
    • changedInput schema / properties / quest / properties / steps / items / properties / type / enum
      Previous value: -[
      -  "message",
      -  "question",
      -  "choice",
      -  "code",
      -  "puzzle",
      -  "media"
      -]New value: +[
      +  "message",
      +  "question",
      +  "choice",
      +  "code",
      +  "puzzle",
      +  "media",
      +  "date",
      +  "number",
      +  "qr",
      +  "candles"
      +]
  6. First observed

TDQS

A3.5/5.0
Behavior4/5

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

Annotations declare the write shape but nothing about outcomes; the description adds that it returns playUrl, editUrl (private), and warnings, and that unpaid Quest+ features null out playUrl with a shareBlocked reason — genuinely useful behavioral context an agent could not get from the schema. It stops short of noting non-idempotency (repeat calls create duplicate quests) or the notify email side effect that the schema documents.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action and then the return contract with zero filler. Every clause (playUrl, editUrl privacy, warnings, shareBlocked) carries information.

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

Completeness3/5

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

For a deeply nested creation tool with no output schema, describing the return values is the right move and it is done well. It omits prerequisites (which upload tools must run first), account/auth requirements, and any hint at limits such as 10 free steps; the schema covers payload detail but not the call sequence.

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?

The description adds no meaning about the quest payload itself, and top-level coverage of the single `quest` parameter is effectively nil. However, the nested schema carries exhaustive per-field descriptions (step types, gift types, Quest+ gating), so an agent is not left guessing — the description simply cedes that ground rather than compensating for 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 ("Create a quest that wraps a gift") and immediately names what it produces (playUrl, editUrl, warnings), so an agent knows exactly what the call does. It does not explicitly differentiate itself from update_quest, but "create" is unambiguous enough against the sibling list.

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?

No when-to-use or when-not-to-use guidance, no mention of update_quest as the alternative for modifying an existing quest, and no routing to upload_file_base64/upload_file_from_url even though file and media gifts require an upload key first. The Quest+ caveat (playUrl null) describes consequences, not when to choose this tool.

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