Skip to main content
Glama

Create NPC mnemons

create_npc_mnemons

Create NPC mnemons (individual people). role is an optional free-text role or occupation. Use affiliationEntryIds to name the factions each NPC belongs to; the server projects them into MEMBER relationships. For a faction, guild or cult use create_faction_mnemons. Players may not call this — GM/co-GM only.

Input Schema

NameRequiredDescriptionDefault
itemsYes
campaignIdYes

Output Schema

NameRequiredDescriptionDefault
resultsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • changedInput schema / properties / items / items / properties / affiliationEntryIds / description
      Previous value: -"INDIVIDUAL only: factions this person belongs to."New value: +"Factions this person belongs to (Faction entryIds or titles)."
    • removedInput schema / properties / items / items / properties / memberNpcEntryIds
      Removed value: -{
      -  "description": "FACTION only: members of this faction (NPC entryIds or titles).",
      -  "items": {
      -    "type": "string"
      -  },
      -  "type": "array"
      -}
    • removedInput schema / properties / items / items / properties / npcType
      Removed value: -{
      -  "description": "Required: FACTION (organization) or INDIVIDUAL (person).",
      -  "enum": [
      -    "FACTION",
      -    "INDIVIDUAL"
      -  ],
      -  "type": "string"
      -}
    • addedInput schema / properties / items / items / properties / role
      Added value: +{
      +  "description": "Free-text role or occupation, e.g. \"innkeeper\", \"captain of the guard\".",
      +  "type": "string"
      +}
    • changedInput schema / properties / items / items / required
      Previous value: -[
      -  "title",
      -  "markdown",
      -  "npcType"
      -]New value: +[
      +  "title",
      +  "markdown"
      +]
  2. Changed3 schema fields changed
    • removedInput schema / properties / items / items / properties / blocks
      Removed value: -{
      -  "description": "Initial content blocks (at least one).",
      -  "items": {
      -    "additionalProperties": false,
      -    "description": "A single content block. Image blocks need assetId OR (data + mimeType).",
      -    "properties": {
      -      "assetId": {
      -        "description": "Image block: pre-uploaded campaign asset id.",
      -        "type": "string"
      -      },
      -      "caption": {
      -        "description": "Image block caption.",
      -        "type": "string"
      -      },
      -      "checked": {
      -        "description": "Todo-block checked state.",
      -        "type": "boolean"
      -      },
      -      "content": {
      -        "description": "HTML text content for text-type blocks. Use <b>/<i>/<u>/<a>/<br>/<img> — NOT Markdown.",
      -        "type": "string"
      -      },
      -      "data": {
      -        "description": "Image block: inline base64 data (decoded server-side, max 5MB).",
      -        "type": "string"
      -      },
      -      "filename": {
      -        "description": "Image block filename hint.",
      -        "type": "string"
      -      },
      -      "language": {
      -        "description": "Code-block language hint.",
      -        "type": "string"
      -      },
      -      "mimeType": {
      -        "description": "Image block mime type — required when 'data' is set.",
      -        "type": "string"
      -      },
      -      "type": {
      -        "description": "Block type.",
      -        "enum": [
      -          "paragraph",
      -          "heading1",
      -          "heading2",
      -          "bullet_list",
      -          "numbered_list",
      -          "todo",
      -          "quote",
      -          "code",
      -          "callout",
      -          "divider",
      -          "image"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type"
      -    ],
      -    "type": "object"
      -  },
      -  "minItems": 1,
      -  "type": "array"
      -}
    • addedInput schema / properties / items / items / properties / markdown
      Added value: +{
      +  "description": "Body content as Markdown. Mentions: @[label](mnemon:<entryId>). Images: ![caption](asset:<assetId>@<campaignId>) — upload the asset first.",
      +  "minLength": 1,
      +  "type": "string"
      +}
    • changedInput schema / properties / items / items / required
      Previous value: -[
      -  "title",
      -  "blocks",
      -  "npcType"
      -]New value: +[
      +  "title",
      +  "markdown",
      +  "npcType"
      +]
  3. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and destructiveHint=false, so the write/safety profile is already covered. The description adds genuinely non-derived behavior: affiliationEntryIds cause the server to project MEMBER relationships, and the GM-only authorization requirement. It doesn't mention the 50-item batch cap or what happens on partial failure, keeping it short of a 5.

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?

Four compact sentences, no filler, with the core purpose first and the sibling exclusion and auth rule trailing. Every sentence carries decision-relevant information.

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 purpose, alternative, side effects, and auth. It omits the batch-size limit and the meaning/effect of visibility, which is a minor but real omission for a bulk-create tool.

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?

Reported schema coverage is 0%, so the description must compensate, and it only explains two fields: role as free-text occupation and affiliationEntryIds as accepted entryIds/titles. campaignId, markdown mention syntax, visibility, and sheetId receive no added meaning, leaving real gaps.

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 and resource ('Create NPC mnemons (individual people)') and immediately scopes it against the obvious sibling by naming create_faction_mnemons for groups. An agent can distinguish this from the other create_*_mnemons tools 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 Guidelines5/5

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

Explicitly routes the agent: use this for individual people, use create_faction_mnemons for factions/guilds/cults. It also states the access condition ('Players may not call this — GM/co-GM only'), which prevents a whole class of failed calls.

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.