Skip to main content
Glama

Jabbertoon cartoon studio

Check a Jabbertoon cartoon, scene, move, pack or character

validate
Read-only

Checks a cartoon, with the editor's own checks, before anyone sees it. Give one of cartoon, program, pack, character or file. Returns errors (it will not play as written: also a character or background the site lacks) and warnings, each {code, where, says, fix, url}, with did_you_mean and an RFC 6902 patch when certain; issues a viewer would see (off stage, overlapping, an empty stage, a line cut off) with a summary of who is where and says what when (seconds; x as a share of the stage); and, when ok, the canonical program and a link. repair: true also returns the program with every certain patch applied. A written scene is played and read out (written_scene; playing: call again), kept until played, its answer an hour; nothing else is kept. Example: list_characters' cartoon_example.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "validate"
  }
}

Input Schema

NameRequiredDescriptionDefault
at_sNoA written scene's moments to read out, seconds.
fileNoOn your own computer only: a .json or .txt file's name in the output folder.
packNoA whole pack: its manifest and its content.
repairNotrue: also return repaired: the program with every certain patch applied, and the changes.
cartoonNoA cartoon: its program, a cartoon file {cast, program}, a project file, or its screenplay text (read only on your own computer).
programNoA move (get_move gives ready-made ones) or a scene program.
characterNoYour own character, {"name", "content"}, or a character pack.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / at_s
      Added value: +{
      +  "description": "A written scene's moments to read out, seconds.",
      +  "items": {
      +    "minimum": 0,
      +    "type": "number"
      +  },
      +  "maxItems": 3,
      +  "type": "array"
      +}
  2. Changed9 schema fields changed
    • removedInput schema / maxProperties
      Removed value: -1
    • changedInput schema / properties / cartoon / description
      Previous value: -"A saved cartoon file: {\"cast\": {\"<id>\": {\"name\", \"look\": {\"template\", \"style\", \"shape\", \"colors\"}, \"at\": {\"x\", \"y\", \"h\", \"facing\"}}}, \"places\"?, \"program\"}, where program is a kind \"cartoon\" program. list_characters returns a whole one (cartoon_example)."New value: +"A cartoon: its program, a cartoon file {cast, program}, a project file, or its screenplay text (read only on your own computer)."
    • changedInput schema / properties / cartoon / type
      Previous value: -"object"New value: +[
      +  "object",
      +  "string"
      +]
    • changedInput schema / properties / character / description
      Previous value: -"A character of your own, as share_link takes it: {\"name\": \"...\", \"content\": {...}}, the content of a character pack (tree, legs, kind, height, footprint, ...), or a whole character pack. Its tree is checked part by part. The format: https://jabbertoon.com/docs/packs/"New value: +"Your own character, {\"name\", \"content\"}, or a character pack."
    • addedInput schema / properties / file
      Added value: +{
      +  "description": "On your own computer only: a .json or .txt file's name in the output folder.",
      +  "maxLength": 255,
      +  "type": "string"
      +}
    • changedInput schema / properties / pack / description
      Previous value: -"A whole pack: the manifest (pack, id, type, version, name, author, license, remixable, derived_from, content_hash) and its content. The format: https://jabbertoon.com/docs/packs/"New value: +"A whole pack: its manifest and its content."
    • changedInput schema / properties / program / description
      Previous value: -"A block program: {\"v\": 1, \"kind\": \"behaviour\" | \"scene\" | \"cartoon\", \"scripts\": [...]}, as get_move returns. A move is kind \"behaviour\". The language: https://jabbertoon.com/docs/language/"New value: +"A move (get_move gives ready-made ones) or a scene program."
    • addedInput schema / properties / repair
      Added value: +{
      +  "description": "true: also return repaired: the program with every certain patch applied, and the changes.",
      +  "type": "boolean"
      +}
    • changedOutput schema / (root)
      Previous value: -{
      -  "$defs": {
      -    "problem": {
      -      "properties": {
      -        "code": {
      -          "type": "string"
      -        },
      -        "fix": {
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "says": {
      -          "type": "string"
      -        },
      -        "where": {
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        }
      -      },
      -      "required": [
      -        "code",
      -        "where",
      -        "says",
      -        "fix"
      -      ],
      -      "type": "object"
      -    }
      -  },
      -  "properties": {
      -    "checked": {
      -      "description": "What was checked: program, character, pack or cartoon.",
      -      "type": "string"
      -    },
      -    "error": {
      -      "$ref": "#/$defs/problem"
      -    },
      -    "error_count": {
      -      "description": "How many errors the checks found.",
      -      "type": "integer"
      -    },
      -    "errors": {
      -      "description": "The errors, in order: the first 50 at most (error_count says how many there are).",
      -      "items": {
      -        "$ref": "#/$defs/problem"
      -      },
      -      "type": "array"
      -    },
      -    "kind": {
      -      "description": "The program's kind (behaviour, scene, cartoon), character, or the pack's type.",
      -      "type": [
      -        "string",
      -        "null"
      -      ]
      -    },
      -    "notes": {
      -      "items": {
      -        "type": "string"
      -      },
      -      "type": "array"
      -    },
      -    "ok": {
      -      "description": "True when there are no errors.",
      -      "type": "boolean"
      -    },
      -    "url": {
      -      "description": "The page that describes this format.",
      -      "type": "string"
      -    },
      -    "warning_count": {
      -      "description": "How many warnings the checks found.",
      -      "type": "integer"
      -    },
      -    "warnings": {
      -      "description": "The warnings, in order: the first 50 at most (warning_count says how many there are).",
      -      "items": {
      -        "$ref": "#/$defs/problem"
      -      },
      -      "type": "array"
      -    }
      -  },
      -  "required": [
      -    "ok",
      -    "url"
      -  ],
      -  "type": "object"
      -}New value: +null
  3. First observed

TDQS

A4.4/5.0
Behavior5/5

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

With readOnlyHint=true and openWorldHint=false already supplied, the description still adds substantial behavior: error and warning object fields, did_you_mean and RFC 6902 patch output, viewer-visible issue categories, canonical program/link on success, repair behavior, and written_scene retention/read-out semantics. This is exactly the extra context an agent needs for a validation tool without an output schema.

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?

It front-loads the purpose and then groups return behavior, repair, and scene lifecycle, so the structure is usable. It is dense and semicolon-heavy with a few redundant clauses, but not padded.

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

Completeness5/5

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

For a 7-parameter, nested, no-output-schema validation tool, the description supplies the missing response contract and state/lifecycle behavior. Combined with 100% schema coverage, an agent has enough information to call it correctly.

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?

Schema coverage is 100% and all 7 parameters are already described there; the prose mostly repeats the accepted inputs and the repair flag. It adds some context for written_scene and the example but little parameter-level meaning beyond 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?

The opening states a specific verb and resource set—"Checks a cartoon... Give one of cartoon, program, pack, character or file"—and the title extends it to scene/move. This clearly separates validation from sibling creation and read tools.

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?

It tells the caller to use it "before anyone sees it" and lists the accepted input kinds, so the validation context is clear. It does not explicitly name alternatives like build or make_cartoon or state when not to validate, so it stops short of 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.

Resources