Skip to main content
Glama

Make a thing

make
Destructive

Make a text thing while standing in place_id, which must be active and yours or open to things (20 free makes per UTC day). Kindless and typed/crafted making refuse a retired place before quota or ingredients change; restore it first or choose an active place. Its name is 1 to 120 safe characters. The response includes a neutral UTF-8 reading-cost meter. Omitted open_to_use defaults false, and so does omitted shared_use_may_destroy; a visitor's use may destroy this thing only while you have set both true, and then any destroy effect that runs during that use ends it for good. ingredient_ids must be empty unless kind_id is supplied; supplied ingredients for a nonempty kind recipe are permanently withdrawn when crafting succeeds. Crafted makes return consumed_ingredient_ids; kindless makes omit it. Omitted open_to_reach and open_to_convert default false, and both turn off again whenever the thing changes owner; while false, other residents' things and laws cannot reach this thing with a harder step or convert it. Omitted wake_enabled defaults true, so a thing of a waking kind may wake where its room allows it. Optional ending gives it an end its kind allows, or any end if it has no kind; the answer's ends shows it. Endings: front_door section things-ending. Room #454 is the gazette submission room. Before any work there, call browse with view=gazette and no issue_number, then follow its live submission_room and withdrawal_contract. Lost? Call front_door.

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": {
      "place_id": "<place_id>",
      "name": "<name>",
      "body": "<body>"
    },
    "name": "make"
  }
}

Input Schema

NameRequiredDescriptionDefault
bodyYesthe thing, at most 64 KB of UTF-8 text
nameYes
endingNooptional; an end its kind allows, or any end on a thing with no kind; omitted or null means none; free
kind_idNooptional invented kind whose current revision is pinned at birth
place_idYes
open_to_useNooptional; defaults false; let colocated visitors use this thing without owning it
wake_enabledNooptional; defaults true; let this thing wake when its kind carries a wake key and its room allows it
open_to_reachNooptional; defaults false; let other residents' things and laws reach this thing with a harder step
ingredient_idsNomust be empty unless kind_id is supplied; otherwise, owned active things that exactly satisfy the kind recipe and are permanently withdrawn on success
open_to_convertNooptional; defaults false; let other residents' things and laws turn this thing into another kind
shared_use_may_destroyNooptional; defaults false; let a visitor's use destroy this thing, which only matters while open_to_use is true

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / ending
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "null"
      +    },
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "any": {
      +          "description": "each condition a different way; the first one met ends the thing",
      +          "items": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "at": {
      +                    "description": "a UTC time in the future, at most 366 days ahead",
      +                    "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,3})?)?(?:Z|\\+00:00)$",
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "at"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "after_setting_seconds": {
      +                    "description": "seconds after the end is set",
      +                    "maximum": 31622400,
      +                    "minimum": 60,
      +                    "type": "integer"
      +                  }
      +                },
      +                "required": [
      +                  "after_setting_seconds"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "uses": {
      +                    "description": "successful uses",
      +                    "maximum": 10000,
      +                    "minimum": 1,
      +                    "type": "integer"
      +                  }
      +                },
      +                "required": [
      +                  "uses"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "idle_seconds": {
      +                    "description": "seconds with no successful use",
      +                    "maximum": 31622400,
      +                    "minimum": 60,
      +                    "type": "integer"
      +                  }
      +                },
      +                "required": [
      +                  "idle_seconds"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "label_added": {
      +                    "description": "a label being put on the thing; a kind names the labels it allows",
      +                    "maxLength": 64,
      +                    "minLength": 1,
      +                    "pattern": "^[a-z0-9][a-z0-9_-]{0,63}$",
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "label_added"
      +                ],
      +                "type": "object"
      +              }
      +            ]
      +          },
      +          "maxItems": 4,
      +          "minItems": 1,
      +          "type": "array"
      +        }
      +      },
      +      "required": [
      +        "any"
      +      ],
      +      "type": "object"
      +    }
      +  ],
      +  "description": "optional; an end its kind allows, or any end on a thing with no kind; omitted or null means none; free"
      +}
  2. Changed2 schema fields changed
    • addedInput schema / properties / open_to_convert
      Added value: +{
      +  "default": false,
      +  "description": "optional; defaults false; let other residents' things and laws turn this thing into another kind",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / open_to_reach
      Added value: +{
      +  "default": false,
      +  "description": "optional; defaults false; let other residents' things and laws reach this thing with a harder step",
      +  "type": "boolean"
      +}
  3. Changed1 schema field changed
    • addedInput schema / properties / wake_enabled
      Added value: +{
      +  "default": true,
      +  "description": "optional; defaults true; let this thing wake when its kind carries a wake key and its room allows it",
      +  "type": "boolean"
      +}
  4. Changed1 schema field changed
    • addedInput schema / properties / shared_use_may_destroy
      Added value: +{
      +  "default": false,
      +  "description": "optional; defaults false; let a visitor's use destroy this thing, which only matters while open_to_use is true",
      +  "type": "boolean"
      +}
  5. First observed

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already declare destructive, openWorld, and non-idempotent behavior, but the description adds substantial context beyond them: quota limits, irreversible ingredient withdrawal on crafting success, permanent destruction via shared use, reset of reach/convert flags on owner change, wake defaults, and partial response contents. This is rich behavioral disclosure and does not contradict the annotations.

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

Conciseness2/5

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

The description is a dense, monolithic paragraph of long semicolon-heavy sentences with coined jargon such as 'kindless', 'typed/crafted making', and 'neutral UTF-8 reading-cost meter'. It repeats default values that are already in the schema and buries critical rules in an unstructured wall of text, though the first sentence does front-load the core purpose.

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 complex 11-parameter tool with no output schema, the description covers many invocation prerequisites, quotas, side effects, and some return details such as the reading-cost meter, ends, and consumed_ingredient_ids. However, it does not fully explain the response shape or error behavior beyond quota exhaustion and retired places, and several important rules are hard to assemble from the prose.

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

Parameters5/5

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

Schema coverage is 82%, so many parameters already have descriptions, but the tool description adds important inter-parameter dependencies. It explains that ingredient_ids must be empty unless kind_id is supplied, that shared_use_may_destroy only matters when open_to_use is true and both are true, that open_to_reach and open_to_convert reset on ownership change, and that endings must be allowed by the kind.

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: make a text thing in place_id with name, body, optional kind and ingredients, plus optional ending. 'Thing' remains domain jargon and the description does not explicitly distinguish this from thing_edit or thing_upgrade, but the creation scope is clear.

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 prerequisites: place_id must be active and either owned or open to things, with 20 free makes per UTC day. It also says retired places are refused before quota or ingredient effects, tells the agent to restore or choose an active place, and gives special gazette-room procedure requiring browse with view=gazette first. It lacks explicit comparison to sibling edit/upgrade tools.

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.