Skip to main content
Glama

Update quest mnemons

update_quest_mnemons
Idempotent

Update Quest mnemons. A field left out is left as it is: status, kind, playersCanTick, hook, the giverId / locationId / parentQuestId links (an empty string removes one), and objectives, rewards, background or gmNotes, each of which replaces its part of the quest and keeps the rest. Name existing objectives and chips by the ids get_mnemon's quest returns so they keep what the GM wrote under them. To tick one objective, use set_quest_objective_state.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
itemsYes
campaignIdYes

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed34 schema fields changed
    • addedInput schema / properties / items / items / properties / background
      Added value: +{
      +  "description": "Replaces the Background section, in Markdown.",
      +  "type": "string"
      +}
    • addedInput schema / properties / items / items / properties / expiresAt / description
      Added value: +"Retired quest board field (ISO-8601)."
    • addedInput schema / properties / items / items / properties / giverId
      Added value: +{
      +  "description": "Who gives the quest: an NPC's entryId or exact title (its Quest giver link). On update an empty string removes it.",
      +  "type": "string"
      +}
    • addedInput schema / properties / items / items / properties / gmNotes
      Added value: +{
      +  "description": "Replaces the GM-only notes, in Markdown.",
      +  "type": "string"
      +}
    • addedInput schema / properties / items / items / properties / hook
      Added value: +{
      +  "description": "The one line players see under the title in the quest log. An empty string clears it.",
      +  "type": "string"
      +}
    • addedInput schema / properties / items / items / properties / issuerNpcEntryId / description
      Added value: +"Retired quest board field: send giverId."
    • addedInput schema / properties / items / items / properties / issuerText / description
      Added value: +"Retired quest board field: write it into background."
    • addedInput schema / properties / items / items / properties / kind
      Added value: +{
      +  "description": "Main | Side | Personal. Reads as Side when unset.",
      +  "enum": [
      +    "Main",
      +    "Side",
      +    "Personal"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / items / items / properties / locationId
      Added value: +{
      +  "description": "Where the quest is given or set: a Location's entryId or exact title. On update an empty string removes it.",
      +  "type": "string"
      +}
    • addedInput schema / properties / items / items / properties / objectives
      Added value: +{
      +  "description": "Replaces the objective list. Name an existing objective by id to keep it and what the GM wrote under it; one left out is removed. To tick one objective, use set_quest_objective_state instead.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "children": {
      +        "description": "Its sub-objectives, in order. Omitted keeps the ones it has; an empty list removes them.",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "hidden": {
      +              "description": "true hides it from players, false shows it; omitted keeps what it has (a new one is shown).",
      +              "type": "boolean"
      +            },
      +            "id": {
      +              "description": "The objective to rewrite, as get_mnemon's quest.objectives[].id names it. Omit for a new objective.",
      +              "type": "string"
      +            },
      +            "optional": {
      +              "description": "An optional objective does not count toward the quest's progress. Defaults to false.",
      +              "type": "boolean"
      +            },
      +            "state": {
      +              "description": "open (the default), done or failed.",
      +              "enum": [
      +                "open",
      +                "done",
      +                "failed"
      +              ],
      +              "type": "string"
      +            },
      +            "text": {
      +              "description": "The objective, one line of Markdown. Mentions: @[label](mnemon:<entryId>).",
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "text"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "hidden": {
      +        "description": "true hides it from players, false shows it; omitted keeps what it has (a new one is shown).",
      +        "type": "boolean"
      +      },
      +      "id": {
      +        "description": "The objective to rewrite, as get_mnemon's quest.objectives[].id names it. Omit for a new objective.",
      +        "type": "string"
      +      },
      +      "optional": {
      +        "description": "An optional objective does not count toward the quest's progress. Defaults to false.",
      +        "type": "boolean"
      +      },
      +      "state": {
      +        "description": "open (the default), done or failed.",
      +        "enum": [
      +          "open",
      +          "done",
      +          "failed"
      +        ],
      +        "type": "string"
      +      },
      +      "text": {
      +        "description": "The objective, one line of Markdown. Mentions: @[label](mnemon:<entryId>).",
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "text"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / items / items / properties / parentQuestId
      Added value: +{
      +  "description": "The quest this one belongs to: a Quest's entryId or exact title. On update an empty string removes it.",
      +  "type": "string"
      +}
    • addedInput schema / properties / items / items / properties / playersCanTick
      Added value: +{
      +  "description": "Whether players may tick the objectives they can see. Off by default.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / items / items / properties / questStatus / description
      Added value: +"Retired: send status."
    • addedInput schema / properties / items / items / properties / relatedLocationEntryIds / description
      Added value: +"Locations the quest involves (entryIds or titles)."
    • addedInput schema / properties / items / items / properties / relatedNpcEntryIds / description
      Added value: +"NPCs the quest involves (entryIds or titles)."
    • addedInput schema / properties / items / items / properties / repeatable / description
      Added value: +"Retired quest board field."
    • changedInput schema / properties / items / items / properties / rewards / description
      Previous value: -"If present, replaces the entire rewards list."New value: +"Replaces the reward chips; an empty list clears them. Name an existing chip by id to keep it."
    • changedInput schema / properties / items / items / properties / rewards / items / properties / amount / description
      Previous value: -"Numeric amount for stack-like rewards."New value: +"How many: coins, experience points, a stack."
    • changedInput schema / properties / items / items / properties / rewards / items / properties / amount / type
      Previous value: -"integer"New value: +"number"
    • addedInput schema / properties / items / items / properties / rewards / items / properties / entryId
      Added value: +{
      +  "description": "item chips: the mnemon entry it links to (entryId or exact title). Not with ruleEntryId.",
      +  "type": "string"
      +}
    • addedInput schema / properties / items / items / properties / rewards / items / properties / hidden
      Added value: +{
      +  "description": "true hides the chip from players, false shows it; omitted keeps what it has (a new one is shown).",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / items / items / properties / rewards / items / properties / id
      Added value: +{
      +  "description": "The chip to rewrite, as get_mnemon's quest.rewards[].id names it. Omit for a new chip.",
      +  "type": "string"
      +}
    • changedInput schema / properties / items / items / properties / rewards / items / properties / itemId / description
      Previous value: -"Optional reference to an item entry."New value: +"Retired reward row: a free-text item reference."
    • addedInput schema / properties / items / items / properties / rewards / items / properties / kind
      Added value: +{
      +  "description": "currency | xp | item | other. Makes this a reward chip — send it on every reward.",
      +  "enum": [
      +    "currency",
      +    "xp",
      +    "item",
      +    "other"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / items / items / properties / rewards / items / properties / label / description
      Previous value: -"Display label (e.g. '100 gp', 'Ancient map')."New value: +"What the chip says: an item's name, a favour, a title."
    • changedInput schema / properties / items / items / properties / rewards / items / properties / linkedStepIds / description
      Previous value: -"stepIds and/or subquest entry ids whose completion unlocks this reward."New value: +"Retired reward row: the stepIds or subquest entry ids that unlock it."
    • addedInput schema / properties / items / items / properties / rewards / items / properties / notes / description
      Added value: +"Retired reward row: notes."
    • changedInput schema / properties / items / items / properties / rewards / items / properties / rewardType / description
      Previous value: -"Bucket: Gold | Item | XP | Reputation | etc."New value: +"Retired reward row, without kind: Gold | Item | XP | Reputation …"
    • addedInput schema / properties / items / items / properties / rewards / items / properties / ruleEntryId
      Added value: +{
      +  "description": "item chips: the rules-library entry it links to. Not with entryId.",
      +  "type": "string"
      +}
    • addedInput schema / properties / items / items / properties / rewards / items / properties / unit
      Added value: +{
      +  "description": "currency chips: the coin, as the campaign's setting names it (e.g. coin.gp), or free text such as 'gold'.",
      +  "type": "string"
      +}
    • addedInput schema / properties / items / items / properties / rewards / items / properties / unitLabel
      Added value: +{
      +  "description": "How the coin reads, e.g. 'Gold piece'.",
      +  "type": "string"
      +}
    • addedInput schema / properties / items / items / properties / status
      Added value: +{
      +  "description": "Available | Active | Completed | Failed. Reads as Available when unset.",
      +  "enum": [
      +    "Available",
      +    "Active",
      +    "Completed",
      +    "Failed"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / items / items / properties / steps / description
      Previous value: -"If present, replaces the entire steps list. Omit to leave steps untouched."New value: +"Retired: the old quest board's steps, for quests the migration has not converted. Send objectives."
    • addedInput schema / properties / items / items / properties / subQuestEntryIds / description
      Added value: +"This quest's subquests (entryIds or titles). Prefer parentQuestId on each subquest."
  2. Changed2 schema fields changed
    • addedInput schema / properties / items / items / properties / rewards
      Added value: +{
      +  "description": "If present, replaces the entire rewards list.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "amount": {
      +        "description": "Numeric amount for stack-like rewards.",
      +        "type": "integer"
      +      },
      +      "itemId": {
      +        "description": "Optional reference to an item entry.",
      +        "type": "string"
      +      },
      +      "label": {
      +        "description": "Display label (e.g. '100 gp', 'Ancient map').",
      +        "type": "string"
      +      },
      +      "linkedStepIds": {
      +        "description": "stepIds and/or subquest entry ids whose completion unlocks this reward.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "notes": {
      +        "type": "string"
      +      },
      +      "rewardType": {
      +        "description": "Bucket: Gold | Item | XP | Reputation | etc.",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / items / items / properties / steps
      Added value: +{
      +  "description": "If present, replaces the entire steps list. Omit to leave steps untouched.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "description": {
      +        "type": "string"
      +      },
      +      "notes": {
      +        "description": "Free-text bullet notes for the step.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "status": {
      +        "description": "Defaults to 'Available' when omitted. Unknown values are coerced server-side.",
      +        "enum": [
      +          "Hidden",
      +          "Available",
      +          "Active",
      +          "Completed",
      +          "Failed",
      +          "TurnedIn",
      +          "Abandoned",
      +          "Expired",
      +          "OnHold"
      +        ],
      +        "type": "string"
      +      },
      +      "stepId": {
      +        "description": "Optional. Server generates a fresh UUID when blank. Provide an existing stepId to reuse linkedStepIds.",
      +        "type": "string"
      +      },
      +      "targetLocationEntryIds": {
      +        "description": "Locations involved in this step.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "targetNpcEntryIds": {
      +        "description": "NPCs involved in this step (entryIds or titles).",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "title": {
      +        "description": "Short label for the step, e.g. 'Talk to the innkeeper'.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "title"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  3. First observed

TDQS

A4.5/5.0
Behavior5/5

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

Goes well past the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false) by spelling out patch semantics: omitted fields are preserved, links accept an empty string to remove, and objectives/rewards/background/gmNotes each replace their section while keeping the rest. It also warns that naming existing objectives and chips by their get_mnemon ids is what preserves GM-authored content underneath. This is exactly the destructive/merge detail annotations cannot convey.

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?

One front-loaded paragraph that opens with the verb and scope, then the merge rules, then the sibling escape hatch. Dense but every clause carries load. Slightly long and unbroken, with no visual separation between update semantics and field groups.

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 mutation tool with annotations and an output schema, the description supplies the merge/replace contract, the id-preservation rule, and the alternative tool routing. It omits operational edges such as the 50-item batch cap and behavior on unknown ids or titles, which the agent would otherwise only find in the schema.

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?

Top-level schema coverage is effectively 0% for campaignId and items, though the nested item schema is richly self-documented. The description compensates by naming the patchable fields and the empty-string-removal convention, and by pointing at get_mnemon's quest return shape for ids. It never mentions campaignId, leaving one required parameter undescribed outside the schema.

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?

States a specific verb+resource ('Update Quest mnemons') and immediately distinguishes the tool from its closest sibling by naming set_quest_objective_state for the single-objective tick case. An agent can tell this is a patch-style update for a whole quest, not a per-objective mutation, without reading the 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?

Explicitly routes the agent: 'To tick one objective, use set_quest_objective_state.' That is the key adjacent use case for an update-quest tool and it is named directly. It stops short of broader guidance (prerequisites, that quests must already exist, batch limits), so not a full 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.