Skip to main content
Glama

Edit a thing

thing_edit
Destructive

As the owner, edit one active thing. Send thing_id plus at least one changed field. name is one safe line of 1 to 120 characters; body may be empty and is at most 65,536 UTF-8 bytes; open_to_use and shared_use_may_destroy are boolean, and only you may change either. Closing shared_use_may_destroy again stops a destroy a visitor already scheduled with wait. An untyped thing accepts the exact null/REFUSE/pixel drawing shapes stated by draw_self. A typed thing shows its pinned kind revision and cannot take arbitrary instance pixels: it accepts exact REFUSE with an owner-written drawing_description, or drawing:null to clear that refusal and return to the pinned kind source. drawing_variant_name deliberately selects null for the pinned kind base or one exact named variant offered by that pinned revision. The selection stays with the thing across transfer. Every real drawing or selection change appends immutable history; an exact no-op appends nothing. open_to_reach, open_to_convert, and wake_enabled are boolean and owner-only; a thing you receive arrives with all three false, a converted thing arrives with wake_enabled false, and a converted thing cannot select a drawing variant. The answer is the same public thing read as look with thing_id. state_clear true empties the thing's state box and records the clear. A thing with an open sale offer cannot be edited. ending sets or renews an end, free, and null clears it; a copy may only clear its end, and a thing with your later-holder mark takes none. Once the end has come the thing is a remnant: its owner can only carry, give or withdraw it. Endings: front_door section things-ending. Lost? Call front_door.

Input Schema

NameRequiredDescriptionDefault
bodyNosafe text no larger than 65,536 UTF-8 bytes
nameNo
endingNoset an end its kind allows, or renew one inside its own grant (with no kind, only its maker while owning it), or null to clear it; free; a copy may only clear its end
drawingNo
thing_idYes
open_to_useNo
state_clearNotrue empties this thing's state box
wake_enabledNo
drawing_stateNo
open_to_reachNo
open_to_convertNo
drawing_descriptionNoHTTP/MCP runtime enforces safe public text and at most 280 UTF-8 bytes; HTTP is authoritative and MCP forwards its exact errors
drawing_variant_nameNonull deliberately selects the pinned kind base; a string selects that exact named variant
shared_use_may_destroyNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / state_clear / type
      Added value: +"boolean"
  2. 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": "set an end its kind allows, or renew one inside its own grant (with no kind, only its maker while owning it), or null to clear it; free; a copy may only clear its end"
      +}
  3. Changed2 schema fields changed
    • addedInput schema / properties / open_to_convert
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / open_to_reach
      Added value: +{
      +  "type": "boolean"
      +}
  4. Changed2 schema fields changed
    • addedInput schema / properties / state_clear
      Added value: +{
      +  "const": true,
      +  "description": "true empties this thing's state box"
      +}
    • addedInput schema / properties / wake_enabled
      Added value: +{
      +  "type": "boolean"
      +}
  5. Changed1 schema field changed
    • addedInput schema / properties / shared_use_may_destroy
      Added value: +{
      +  "type": "boolean"
      +}
  6. First observed

TDQS

A3.7/5.0
Behavior4/5

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

Substantially exceeds the annotations by disclosing side effects: immutable history appends on real changes, nothing appended on an exact no-op, selection carrying across transfer, owner-only gating on multiple flags, and post-end remnant restrictions. The information is present but buried in dense jargon ('later-holder mark', 'pinned kind revision'), which lowers how usable it is.

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

Conciseness3/5

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

Front-loads purpose and the required input, and nearly every sentence carries behavioral content rather than filler. However, it is a single undifferentiated block of run-on domain jargon with no grouping by parameter or condition, which makes it hard to scan under time pressure.

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 destructive, open-world mutation tool with no output schema, the description covers return shape ('the same public thing read as look with thing_id') and most behavioral edge cases. What is missing is a clear statement of failure modes and the permission/authorization consequences beyond 'owner'.

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?

With only 36% schema coverage across 14 parameters, the description compensates well: it explains name (1–120 chars, one safe line), body (may be empty, ≤65,536 bytes), the boolean flags and who may change them, state_clear, ending set/renew/clear rules, and the drawing-vs-typed-thing split with drawing_variant_name null meaning. Some parameters (thing_id, drawing_state) still rely on the schema.

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?

Opens with a specific verb+resource+actor: 'As the owner, edit one active thing,' and states the call precondition 'Send thing_id plus at least one changed field.' It does not name or differentiate from siblings such as thing_upgrade or place_edit, so the reader must infer boundaries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

Gives real preconditions ('a thing with an open sale offer cannot be edited', owner-only fields, a remnant owner may only carry/give/withdraw) and points to draw_self for drawing shapes and front_door for help. It never says when to use this instead of an alternative editing tool, so guidance is implied rather than explicit.

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.