Skip to main content
Glama

Jabbertoon cartoon studio

Server Details

Free 2D cartoon studio: moves, characters and looks; check a cartoon; share links. No key.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
99.6% over 23 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.8/5.0

Scored across 8 tools

Disambiguation4/5

Most tools target clearly distinct actions: guide retrieval, listing, move lookup, building, validation, sharing, and reporting. The main overlap is that the broad build tool can return links and check steps, which brushes against share_link and validate, and get_move/list_moves are closely related, but the descriptions and examples make the boundaries workable.

Naming Consistency4/5

All names use snake_case and are action-oriented, with get_ and list_ used consistently for read operations. The bare verbs build, validate, share_link, and report_problem deviate slightly from a strict verb_noun pattern but remain readable and predictable.

Tool Count5/5

Eight tools is well-scoped for a cartoon/3D-builder server that must cover guidance, characters, moves, building, validation, sharing, and problem reporting. Each tool occupies a meaningful role without excessive surface area.

Completeness4/5

The tool set covers the main authoring lifecycle: learn the format, inspect characters and moves, build or write programs, validate them, share links, and report problems. Minor gaps exist around explicit CRUD-style operations and world/game inventories, but the JSON-authoring and guide-based workflow lets agents work around them.

Available Tools

8 tools
buildBuild a thing in the 3D builder from steps, and link itB
Read-only
Inspect

Builds anything (a character, an animal, a car, a house) in Jabbertoon's 3D builder from steps, as its buttons do: spine, grow, bone (a skeleton, a bone at a time), add a ready part (leg, arm, head, wing, wheel, hat ...), set, copy, remove, look. Checks every step, says what was made (its parts and size) and gives a jabbertoon.com/editor/ link that opens it in the Forge, to change and use in a cartoon, world or game. Over MCP the answer also shows a picture of it from four sides. Steps that start {"op": "new", "kind": "move"} make a move from keys, {"op": "new", "kind": "world"} a world (a level is played to check it), and a game, every one in 3D: "walk" a place to walk at real size (played on foot: told what cannot be reached), or "trench", "space", "surface" or "sky" a game to fly. A refused step says where, why and how to fix it. export_link opens Export, free: STL/3MF to 3D print, glTF (Blender, Unity, Godot), SVG, Minecraft .schem. The steps: get_guide {"topic": "build"}, a game's {"topic": "game"}.

NameRequiredDescriptionDefault
buildNoA build to change (the build an answer gave); without it the steps start from a new spine.
stepsNoThe steps, in order: {op: spine | grow | bone | add | set | copy | remove | look, on (a part, or a name an earlier step gave with as), ...}.

TDQS

B3/5.0
Behavior1/5

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

The description says the tool 'Builds anything', makes moves/worlds/games, opens Export, and produces editable links, all of which imply mutation and side effects. The annotations declare readOnlyHint=true, which directly contradicts the described write behavior and export functionality.

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?

The opening sentence is front-loaded with the core purpose, but the description is a dense run-on with many parentheticals and asides. It contains useful details, yet it is difficult to scan and some phrases, such as 'a game's {"topic": "game"}', are awkwardly structured.

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 complex nested-step tool with no output schema, the description covers a lot: step validation, returned link, four-side picture over MCP, export formats, and guide topics. Its main completeness gap is that the mutation semantics are described without reconciling them to the read-only annotation.

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%, so the schema already documents both `build` and `steps`. The description adds some useful step-form examples, such as {"op": "new", "kind": "move"} and {"op": "new", "kind": "world"}, but much of its parameter discussion is embedded in long prose rather than clearly mapped to the two parameters.

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?

The description clearly states a specific verb and resource: building a 3D object in Jabbertoon's builder from ordered steps, including moves, worlds, and games. It lists the supported operations (spine, grow, bone, add, set, copy, remove, look) and names get_guide as a related tool, though it does not sharply differentiate itself from sibling tools such as validate.

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?

It gives some contextual guidance: use get_guide {"topic": "build"} for steps and {"topic": "game"} for games, and describes specific step kinds for moves, worlds, and games. However, it does not explicitly say when to use build versus validate or other siblings, nor does it state clear exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_guideRead Jabbertoon's guide for writing a cartoonA
Read-only
Inspect

Call this first. Returns one topic of Jabbertoon's guide as Markdown (under 20,000 characters): start (what it makes and the order of calls), cartoon (the JSON program: cast, scenes, lines, moves), text (the same cartoon as screenplay text), moves, characters, voices, places, errors, limits, build (the 3D builder's steps), export (a build as STL or 3MF to print, glTF, SVG blueprints, Minecraft), world (a world of blocks), walk (a place to walk), game (a game's steps), song (the editor's own file: characters, lines, moves, shots, a song), market, controls (pills, actions). Units everywhere: x and y are shares of the stage (0 to 1, the ground at 0.92), times are seconds. Example: {"topic": "cartoon"}.

NameRequiredDescriptionDefault
topicNoLeave it out for start, which names the others.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover read-only and closed-world, but the description adds genuinely new behavioral facts: output is Markdown capped under 20,000 characters, omission of topic defaults to 'start', and coordinate/time unit conventions (x,y as 0-1 shares of stage, ground at 0.92, seconds). It loses a point because the topic list in prose omits several enum values (play, shapes, examples, keys, fight), leaving a mild inconsistency an agent must resolve from the 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?

Front-loaded with the imperative 'Call this first' and the return format, then the topic glossary, then units and an example. Dense but nearly every clause carries information; the topic parentheticals are the bulk and are justified by helping selection.

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?

No output schema exists, so the description must characterize the return value — it does so with format and size bound, plus unit conventions for the content it describes. Adequate for a one-parameter documentation tool, with only the topic-coverage mismatch against the enum as a gap.

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?

Schema coverage is 100% and the enum names the values, but the description goes further by glossing what each topic contains (cartoon = JSON program, export = STL/3MF/glTF/SVG/Minecraft, song = editor's own file), which genuinely aids topic selection. The gloss list does not match the enum exactly, so completeness of the explanation is imperfect.

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 ('Returns one topic of Jabbertoon's guide as Markdown') and enumerates the topics, so an agent knows this is the documentation tool rather than an action like build or validate. The 'Call this first' opener also frames its role in the toolset.

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 says to call it first, and the schema note plus the 'start' topic description ('names the others') tells the agent how to bootstrap. No alternative needs mentioning because no sibling serves the same purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_moveGet one move's program and readable textA
Read-only
Inspect

Returns one ready-made move: its block program as JSON, the same program as screenplay text, its length in seconds, what it works on, its settings with units, its page and links. Name it by id (c4c:beh:wave_hello), short name (wave_hello) or page slug. To write your own move, start from one, change it, then validate it. Example: {"move": "wave_hello"}.

NameRequiredDescriptionDefault
moveYesIts id, short name or page slug, as list_moves gives them.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description goes beyond them by disclosing the exact payload ( program, screenplay rendering, duration in seconds, settings with units) and by noting that moves come 'ready-made' and can be used as a starting point for authoring. It does not mention size limits or error behavior for an unknown move reference.

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?

Front-loaded with the return contents, then the naming rules, then the authoring workflow, then a call example. Every sentence earns its place, though the run-on enumeration of return fields is dense and could be split for readability.

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?

With no output schema, the description must carry the return contract, and it does — itemizing every field the agent will receive. Identifier formats and the follow-on validate step are covered. Missing only edge-case behavior (what happens if the reference is ambiguous or unknown).

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?

Schema coverage is 100% and the schema already says the value is the id, short name or page slug as list_moves gives them. The description still adds real value by spelling out the three accepted forms and giving a concrete id example ('c4c:beh:wave_hello') plus a call example, removing any guessing about format.

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 ('Returns one ready-made move') and then enumerates exactly what comes back: block program JSON, screenplay text, length in seconds, works-on target, settings with units, page and links. The word 'one' plus the enumerations clearly separates it from the sibling list_moves.

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 a clear authoring workflow: 'To write your own move, start from one, change it, then validate it,' routing the agent to the sibling validate tool. It also explains the three accepted identifier forms, but never states when not to use this tool or what to use instead for bulk retrieval.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_charactersList Jabbertoon's ready-made cartoon characters and voicesB
Read-only
Inspect

Lists the cast in 3D: the six people (bob, ria, sunny, sam, lee, rose) and the animals (dog, cat, fox, horse, gull, and bear2, fox2, rabbit2, raccoon2, cat2 on two legs), each with the designed entry a cast entry gives it and a voice; the voices a line can use; and cartoon_example, a whole talking cartoon to copy. (The six flat templates of older cartoons are listed too, as characters.) Call it to write a cast: {"dog": {"name": "Biscuit", "look": {"template": "dog", "colors": {"skin": "#8d6e63"}}, "voice": "am_puck"}}.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds useful inventory context (which characters, which voices, cartoon_example) but is vague about the actual return shape ('the designed entry a cast entry gives it') and says nothing about freshness, limits, or how the cast relates to the write path.

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?

It is front-loaded with the core purpose, but the middle sentence is a long, grammatically tangled run-on that is hard to parse. Several phrases ('the designed entry a cast entry gives it') add words without adding clarity.

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?

With no output schema, the description must carry the return-value burden; it does list the main contents (cast, voices, cartoon_example, flat templates) but explains their structure opaquely. Enough to know roughly what comes back, not enough to know the shape.

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?

There are zero parameters, so the baseline is 4. The description even shows the object shape an agent would supply when writing a cast, which is helpful orientation even though it is not a parameter of this tool.

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 ('Lists the cast in 3D') and enumerates the actual members (bob, ria, sunny, sam, lee, rose; dog, cat, fox, etc.), so an agent can distinguish it from list_looks and list_moves. It does not explicitly name a sibling it replaces, but the character/voice inventory makes the scope unambiguous.

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?

'Call it to write a cast' plus a concrete JSON sample implies the usage context clearly, but there is no statement of when NOT to call it or which sibling to prefer for other listing needs (looks, moves). Adequate but leaves the alternatives to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_movesList Jabbertoon's ready-made cartoon movesA
Read-only
Inspect

Lists the ready-made moves a character can do (walk in, wave hello, hop, bow, slump, talk...): id, name, length in seconds, the bodies it works on (two legs, four, none), its settings with units, page and links. A does block plays one: {"op": "does", "who": "dog", "behaviour": "c4c:beh:wave_hello"}. q keeps the moves whose words match or that do what a word means (dance finds Groove, scared finds Cower). Example: {"q": "wave"}.

NameRequiredDescriptionDefault
qNoWords to look for ("wave", "dance"); leave it out for every move.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds genuinely useful behavior beyond that: the full shape of returned records, the fuzzy/semantic nature of q matching, and how the result is consumed in a does block. It omits pagination or ordering behavior, but for a safe read tool this is solid added context.

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?

Front-loaded with the resource and returned fields, followed by search semantics and a compact example. The embedded does-block JSON is slightly tangential to a listing tool, but it is short and directly illustrates why the ids returned here matter.

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?

With no output schema, the description carries the return-shape burden and does so by enumerating every field, including units on settings. Combined with the search semantics explanation, an agent has enough to invoke and interpret the result; only ordering/pagination detail is absent.

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?

Schema coverage is 100% and the q parameter is already documented, so the baseline is 3. The description goes further by explaining that q matches words OR meaning ("dance finds Groove, scared finds Cower") and gives a concrete example, adding semantics the schema does not carry.

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 (Lists) and resource (ready-made cartoon moves) and enumerates the returned fields (id, name, length, bodies, settings, page, links). It is clearly distinct from list_characters and list_looks by resource, though it never explicitly contrasts itself with the singular get_move sibling.

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 clear usage context: omit q for every move, use q for word/meaning search, and shows how a returned move is played via a does block. It stops short of naming an alternative tool (e.g. get_move) for retrieving a single move, so it is context-rich but not a full when/when-not routing guide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

report_problemTell Jabbertoon something is wrongAInspect

Tells the people who make Jabbertoon something is wrong: a wrong answer, a check that refused a good cartoon or passed a bad one, a move that looks wrong, a link that does not open, wrong docs, something missing, or a step that was hard to get right (kind hard_step, with hard_because: optional, never needed to go on). Unlike the other tools, it keeps what you send: the report (kind, tool, code, where, item, note, hard_because) is saved for a person to read. Never put the cartoon, a name, an address or anything about the person you help in it. Example: {"kind": "validator_wrong", "tool": "validate", "code": "op_unknown", "note": "say was refused in a cartoon"}.

NameRequiredDescriptionDefault
osNoSet by the jabbertoon tool: win32, darwin or linux.
codeNoThe error code it gave, e.g. op_unknown.
itemNoWhat it is about: a move, character or look (c4c:beh:bow, dog, crayon), or a page.
kindYesWhat kind of problem it is (hard_step: a step that was hard to get right).
noteNoWhat was wrong, in a sentence or two. No cartoon, names or personal details.
toolNoThe tool whose answer was wrong, e.g. validate.
whereNoWhere it pointed, e.g. scripts[0].body[2].
cli_versionNoSet by the jabbertoon tool.
hard_becauseNoFor kind hard_step: what made the step hard (an error's words, a field that was unclear, a size that was hard to guess). Optional. No cartoon, names or personal details.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare the write/non-idempotent profile; the description adds the crucial facts that the payload is persisted and read by a human, and imposes an explicit privacy prohibition ('Never put the cartoon, a name, an address or anything about the person you help in it'). That is exactly the behavioral context an agent cannot get from structured fields.

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?

Front-loaded with the purpose, then conditions, persistence, privacy rule and an example — every block earns its place. The first sentence is a long run-on with stacked clauses and a redundant parenthetical on hard_because, which slightly hurts readability.

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?

With 9 parameters, no output schema and a privacy-sensitive payload, the description covers what to send, what must be excluded, and that a human will read it. It does not say what the tool returns or whether submission is acknowledged, which is the only real gap given no output schema exists.

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?

Schema coverage is 100%, so the baseline is 3; the description goes further by grouping the fields that get saved (kind, tool, code, where, item, note, hard_because) and by giving a worked example payload with realistic values. It adds moderate meaning over the schema but does not explain os/cli_version or the item vs where distinction.

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 ('Tells the people who make Jabbertoon something is wrong') and enumerates the concrete problem categories it handles, making it immediately distinguishable from read-only siblings like validate, get_move or list_moves. An agent can tell what this tool is for without opening 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?

Gives clear triggering conditions ('a wrong answer, a check that refused a good cartoon or passed a bad one, a move that looks wrong, a link that does not open, wrong docs, something missing') and explicitly carves out the hard_step sub-case. It also contrasts the tool with siblings ('Unlike the other tools, it keeps what you send'), though it never states when *not* to file a report.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validateCheck a Jabbertoon cartoon, scene, move, pack or characterA
Read-only
Inspect

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. Nothing you send is kept. Example: list_characters' cartoon_example.

NameRequiredDescriptionDefault
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.

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the readOnlyHint/openWorldHint annotations: it discloses the retention policy ('Nothing you send is kept'), the exact error/warning object shape {code, where, says, fix, url}, the presence of did_you_mean and an RFC 6902 patch 'when certain,' the viewer-facing issue categories, and what repair:true returns. This is unusually rich behavioral disclosure for a read-only tool.

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?

Front-loads the purpose and return contract with almost no filler, and the example is tacked on usefully at the end. The middle sentences are dense and run-on, which costs a point but not readability of the key facts.

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?

With no output schema and a nested-object, six-parameter input, the description carries the full return-value burden and does so: error fields, warnings, viewer issues, summary contents, and the ok-path canonical program plus link. Nothing an agent needs to invoke or interpret it is missing.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning: the mutually alternative inputs (cartoon/program/pack/character/file), the note that get_move supplies ready-made programs, and the semantics of repair:true applying 'every certain patch.' It adds value over the schema rather than repeating it.

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 (checks) and resource (cartoon/program/pack/character/file) plus the timing constraint 'before anyone sees it,' which distinguishes it from build and share_link without naming them. It is clear what the tool does, though sibling differentiation is only implicit.

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?

'Give one of cartoon, program, pack, character or file' frames the calling context, and 'before anyone sees it' implies pre-publication validation. It offers a concrete example (list_characters' cartoon_example) but does not explicitly say when not to use it versus build or get_guide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updates
    • Changedget_guide1 field changed
      • changedInput schema / properties / topic / enum
        Previous value: -[
        -  "start",
        -  "cartoon",
        -  "text",
        -  "moves",
        -  "characters",
        -  "looks",
        -  "voices",
        -  "places",
        -  "errors",
        -  "limits",
        -  "build",
        -  "game",
        -  "song",
        -  "walk",
        -  "play",
        -  "export",
        -  "shapes",
        -  "examples",
        -  "keys",
        -  "world",
        -  "market",
        -  "controls",
        -  "fight"
        -]New value: +[
        +  "start",
        +  "cartoon",
        +  "text",
        +  "moves",
        +  "characters",
        +  "voices",
        +  "places",
        +  "errors",
        +  "limits",
        +  "build",
        +  "game",
        +  "song",
        +  "walk",
        +  "play",
        +  "export",
        +  "shapes",
        +  "examples",
        +  "keys",
        +  "world",
        +  "market",
        +  "controls",
        +  "fight"
        +]
    • Removedlist_looks
  2. 1 tool update
    • Changedget_guide1 field changed
      • changedInput schema / properties / topic / enum
        Previous value: -[
        -  "start",
        -  "cartoon",
        -  "text",
        -  "moves",
        -  "characters",
        -  "looks",
        -  "voices",
        -  "places",
        -  "errors",
        -  "limits",
        -  "build",
        -  "game",
        -  "song",
        -  "walk",
        -  "export",
        -  "shapes",
        -  "examples",
        -  "keys",
        -  "world",
        -  "market",
        -  "controls"
        -]New value: +[
        +  "start",
        +  "cartoon",
        +  "text",
        +  "moves",
        +  "characters",
        +  "looks",
        +  "voices",
        +  "places",
        +  "errors",
        +  "limits",
        +  "build",
        +  "game",
        +  "song",
        +  "walk",
        +  "play",
        +  "export",
        +  "shapes",
        +  "examples",
        +  "keys",
        +  "world",
        +  "market",
        +  "controls",
        +  "fight"
        +]
  3. 1 tool update
    • Changedget_guide1 field changed
      • changedInput schema / properties / topic / enum
        Previous value: -[
        -  "start",
        -  "cartoon",
        -  "text",
        -  "moves",
        -  "characters",
        -  "looks",
        -  "voices",
        -  "places",
        -  "errors",
        -  "limits",
        -  "build",
        -  "game",
        -  "song",
        -  "walk",
        -  "export",
        -  "shapes",
        -  "examples",
        -  "keys",
        -  "world",
        -  "market"
        -]New value: +[
        +  "start",
        +  "cartoon",
        +  "text",
        +  "moves",
        +  "characters",
        +  "looks",
        +  "voices",
        +  "places",
        +  "errors",
        +  "limits",
        +  "build",
        +  "game",
        +  "song",
        +  "walk",
        +  "export",
        +  "shapes",
        +  "examples",
        +  "keys",
        +  "world",
        +  "market",
        +  "controls"
        +]
  4. 1 tool update
    • Changedget_guide1 field changed
      • changedInput schema / properties / topic / enum
        Previous value: -[
        -  "start",
        -  "cartoon",
        -  "text",
        -  "moves",
        -  "characters",
        -  "looks",
        -  "voices",
        -  "places",
        -  "errors",
        -  "limits",
        -  "build",
        -  "game",
        -  "song",
        -  "walk",
        -  "export",
        -  "shapes",
        -  "examples",
        -  "keys",
        -  "world"
        -]New value: +[
        +  "start",
        +  "cartoon",
        +  "text",
        +  "moves",
        +  "characters",
        +  "looks",
        +  "voices",
        +  "places",
        +  "errors",
        +  "limits",
        +  "build",
        +  "game",
        +  "song",
        +  "walk",
        +  "export",
        +  "shapes",
        +  "examples",
        +  "keys",
        +  "world",
        +  "market"
        +]
  5. 1 tool update
    • Changedreport_problem3 fields changed
      • addedInput schema / properties / hard_because
        Added value: +{
        +  "description": "For kind hard_step: what made the step hard (an error's words, a field that was unclear, a size that was hard to guess). Optional. No cartoon, names or personal details.",
        +  "maxLength": 500,
        +  "type": "string"
        +}
      • changedInput schema / properties / kind / description
        Previous value: -"What kind of problem it is."New value: +"What kind of problem it is (hard_step: a step that was hard to get right)."
      • changedInput schema / properties / kind / enum
        Previous value: -[
        -  "wrong_answer",
        -  "validator_wrong",
        -  "move_looks_wrong",
        -  "link_does_not_open",
        -  "docs_wrong",
        -  "missing",
        -  "other"
        -]New value: +[
        +  "wrong_answer",
        +  "validator_wrong",
        +  "move_looks_wrong",
        +  "link_does_not_open",
        +  "docs_wrong",
        +  "missing",
        +  "hard_step",
        +  "other"
        +]
  6. 1 tool update
    • Changedget_guide1 field changed
      • changedInput schema / properties / topic / enum
        Previous value: -[
        -  "start",
        -  "cartoon",
        -  "text",
        -  "moves",
        -  "characters",
        -  "looks",
        -  "voices",
        -  "places",
        -  "errors",
        -  "limits",
        -  "build",
        -  "game",
        -  "song"
        -]New value: +[
        +  "start",
        +  "cartoon",
        +  "text",
        +  "moves",
        +  "characters",
        +  "looks",
        +  "voices",
        +  "places",
        +  "errors",
        +  "limits",
        +  "build",
        +  "game",
        +  "song",
        +  "walk",
        +  "export",
        +  "shapes",
        +  "examples",
        +  "keys",
        +  "world"
        +]
  7. 1 tool update
    • Changedget_guide1 field changed
      • changedInput schema / properties / topic / enum
        Previous value: -[
        -  "start",
        -  "cartoon",
        -  "text",
        -  "moves",
        -  "characters",
        -  "looks",
        -  "voices",
        -  "places",
        -  "errors",
        -  "limits",
        -  "build",
        -  "game"
        -]New value: +[
        +  "start",
        +  "cartoon",
        +  "text",
        +  "moves",
        +  "characters",
        +  "looks",
        +  "voices",
        +  "places",
        +  "errors",
        +  "limits",
        +  "build",
        +  "game",
        +  "song"
        +]
  8. 1 tool update
    • Changedbuild1 field changed
      • changedInput schema / properties / steps / description
        Previous value: -"The steps, in order: {op: spine | grow | add | set | copy | remove | look, on (a part, or a name an earlier step gave with as), ...}."New value: +"The steps, in order: {op: spine | grow | bone | add | set | copy | remove | look, on (a part, or a name an earlier step gave with as), ...}."
  9. 2 tool updates
    • Changedbuild1 field changed
      • removedInput schema / properties / steps / items
        Removed value: -{
        -  "type": "object"
        -}
    • Changedget_guide1 field changed
      • changedInput schema / properties / topic / enum
        Previous value: -[
        -  "start",
        -  "cartoon",
        -  "text",
        -  "moves",
        -  "characters",
        -  "looks",
        -  "voices",
        -  "places",
        -  "errors",
        -  "limits",
        -  "build"
        -]New value: +[
        +  "start",
        +  "cartoon",
        +  "text",
        +  "moves",
        +  "characters",
        +  "looks",
        +  "voices",
        +  "places",
        +  "errors",
        +  "limits",
        +  "build",
        +  "game"
        +]
  10. 2 tool updates
    • Addedbuild
    • Changedget_guide1 field changed
      • changedInput schema / properties / topic / enum
        Previous value: -[
        -  "start",
        -  "cartoon",
        -  "text",
        -  "moves",
        -  "characters",
        -  "looks",
        -  "voices",
        -  "places",
        -  "errors",
        -  "limits"
        -]New value: +[
        +  "start",
        +  "cartoon",
        +  "text",
        +  "moves",
        +  "characters",
        +  "looks",
        +  "voices",
        +  "places",
        +  "errors",
        +  "limits",
        +  "build"
        +]
  11. 8 tool updates
    • Addedget_guide
    • Changedget_move2 fields changed
      • changedInput schema / properties / move / description
        Previous value: -"The move's id (c4c:beh:wave_hello), short name (wave_hello) or page slug, as list_moves gives them."New value: +"Its id, short name or page slug, as list_moves gives them."
      • 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": {
        -    "content_hash": {
        -      "type": "string"
        -    },
        -    "description": {
        -      "type": "string"
        -    },
        -    "error": {
        -      "$ref": "#/$defs/problem"
        -    },
        -    "id": {
        -      "type": "string"
        -    },
        -    "license": {
        -      "type": "string"
        -    },
        -    "links": {
        -      "type": "object"
        -    },
        -    "name": {
        -      "type": "string"
        -    },
        -    "notes": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    "ok": {
        -      "type": "boolean"
        -    },
        -    "pack_slug": {
        -      "type": "string"
        -    },
        -    "program": {
        -      "description": "The move's block program (JSON).",
        -      "type": "object"
        -    },
        -    "seconds": {
        -      "type": [
        -        "number",
        -        "null"
        -      ]
        -    },
        -    "skeleton": {
        -      "type": "boolean"
        -    },
        -    "slug": {
        -      "type": "string"
        -    },
        -    "text": {
        -      "description": "The same program as readable text, one block per line.",
        -      "type": "string"
        -    },
        -    "url": {
        -      "description": "The move's page on jabbertoon.com (the list of moves when the move is not found).",
        -      "type": "string"
        -    },
        -    "version": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "ok",
        -    "url"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedlist_characters1 field changed
      • 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": {
        -    "cartoon_example": {
        -      "description": "A whole talking cartoon file ({cast, program}) to copy: give it to validate as cartoon.",
        -      "type": "object"
        -    },
        -    "cast_entry_example": {
        -      "description": "One cast entry that draws the first character: the value under a cast id, as in {\"cast\": {\"A\": <this>}}.",
        -      "type": "object"
        -    },
        -    "characters": {
        -      "items": {
        -        "properties": {
        -          "colors": {
        -            "description": "The look.colors keys (body, skin, acc), what each paints on this character, and the default colour.",
        -            "type": "array"
        -          },
        -          "id": {
        -            "description": "The character pack id (c4c:char:<slug>) when the pack is published, else null.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "legs": {
        -            "type": "integer"
        -          },
        -          "links": {
        -            "description": "Links that open it: studio (put it in a cartoon) and create (start a new character from it).",
        -            "type": "object"
        -          },
        -          "name": {
        -            "type": "string"
        -          },
        -          "options": {
        -            "description": "The look.options keys this character has, with their values.",
        -            "type": "array"
        -          },
        -          "slug": {
        -            "type": "string"
        -          },
        -          "template": {
        -            "description": "What a cast entry's look.template says to draw this character.",
        -            "type": "string"
        -          },
        -          "url": {
        -            "description": "The character's page on jabbertoon.com.",
        -            "type": "string"
        -          },
        -          "views": {
        -            "description": "The views it is drawn in; the first is its own.",
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          }
        -        },
        -        "required": [
        -          "slug",
        -          "name",
        -          "template",
        -          "url"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "count": {
        -      "type": "integer"
        -    },
        -    "error": {
        -      "$ref": "#/$defs/problem"
        -    },
        -    "notes": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    "ok": {
        -      "type": "boolean"
        -    },
        -    "url": {
        -      "description": "The page that lists every character.",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "ok",
        -    "url"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedlist_looks1 field changed
      • 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": {
        -    "body_shapes": {
        -      "items": {
        -        "properties": {
        -          "description": {
        -            "type": "string"
        -          },
        -          "id": {
        -            "description": "What look.shape says.",
        -            "type": "string"
        -          },
        -          "name": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "id",
        -          "name"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "count": {
        -      "type": "integer"
        -    },
        -    "error": {
        -      "$ref": "#/$defs/problem"
        -    },
        -    "looks": {
        -      "items": {
        -        "properties": {
        -          "description": {
        -            "type": "string"
        -          },
        -          "id": {
        -            "description": "What look.style says.",
        -            "type": "string"
        -          },
        -          "links": {
        -            "description": "studio: opens the cartoon studio in this look.",
        -            "type": "object"
        -          },
        -          "name": {
        -            "type": "string"
        -          },
        -          "url": {
        -            "description": "The look's page on jabbertoon.com.",
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "id",
        -          "name",
        -          "url"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "notes": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    "ok": {
        -      "type": "boolean"
        -    },
        -    "url": {
        -      "description": "The page that shows every look.",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "ok",
        -    "url"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedlist_moves2 fields changed
      • changedInput schema / properties / q / description
        Previous value: -"Words to look for in a move's name, id or description, or what the move does, e.g. \"wave\", \"walk in\" or \"dance\". Leave it out to list every move."New value: +"Words to look for (\"wave\", \"dance\"); leave it out for every move."
      • 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": {
        -    "count": {
        -      "description": "How many moves are listed here.",
        -      "type": "integer"
        -    },
        -    "error": {
        -      "$ref": "#/$defs/problem"
        -    },
        -    "filters": {
        -      "description": "The filters this answer used, exactly as given.",
        -      "type": "object"
        -    },
        -    "moves": {
        -      "items": {
        -        "properties": {
        -          "description": {
        -            "type": "string"
        -          },
        -          "id": {
        -            "description": "The pack id, e.g. c4c:beh:wave_hello.",
        -            "type": "string"
        -          },
        -          "license": {
        -            "type": "string"
        -          },
        -          "links": {
        -            "description": "Links that open the move: blocks (the block editor) and studio (the cartoon studio).",
        -            "type": "object"
        -          },
        -          "name": {
        -            "type": "string"
        -          },
        -          "pack_slug": {
        -            "description": "The short name used in #p= links, e.g. wave_hello.",
        -            "type": "string"
        -          },
        -          "seconds": {
        -            "description": "How long the move's preview plays, in seconds.",
        -            "type": [
        -              "number",
        -              "null"
        -            ]
        -          },
        -          "skeleton": {
        -            "description": "True for the moves that bend chains, reach with hands or turn between views.",
        -            "type": "boolean"
        -          },
        -          "slug": {
        -            "description": "The last part of the move's page URL.",
        -            "type": "string"
        -          },
        -          "url": {
        -            "description": "The move's page on jabbertoon.com.",
        -            "type": "string"
        -          },
        -          "version": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "id",
        -          "slug",
        -          "name",
        -          "url"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "notes": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    "ok": {
        -      "type": "boolean"
        -    },
        -    "total": {
        -      "description": "How many moves there are in all.",
        -      "type": "integer"
        -    },
        -    "url": {
        -      "description": "The page that lists every move.",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "ok",
        -    "url"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedreport_problem10 fields changed
      • addedInput schema / properties / cli_version
        Added value: +{
        +  "description": "Set by the jabbertoon tool.",
        +  "maxLength": 40,
        +  "type": "string"
        +}
      • addedInput schema / properties / code
        Added value: +{
        +  "description": "The error code it gave, e.g. op_unknown.",
        +  "maxLength": 64,
        +  "type": "string"
        +}
      • changedInput schema / properties / item / description
        Previous value: -"What it is about: a move, character or look (c4c:beh:bow, dog, crayon), a tool name, or a jabbertoon.com page."New value: +"What it is about: a move, character or look (c4c:beh:bow, dog, crayon), or a page."
      • changedInput schema / properties / note / description
        Previous value: -"What was wrong, in a sentence or two. No personal details."New value: +"What was wrong, in a sentence or two. No cartoon, names or personal details."
      • changedInput schema / properties / note / maxLength
        Previous value: -1000New value: +500
      • addedInput schema / properties / os
        Added value: +{
        +  "description": "Set by the jabbertoon tool: win32, darwin or linux.",
        +  "maxLength": 40,
        +  "type": "string"
        +}
      • removedInput schema / properties / request
        Removed value: -{
        -  "description": "The tool call that produced the problem, as {\"tool\": \"...\", \"arguments\": {...}}. It is kept with the report, cut to 4,000 characters.",
        -  "type": "object"
        -}
      • addedInput schema / properties / tool
        Added value: +{
        +  "description": "The tool whose answer was wrong, e.g. validate.",
        +  "maxLength": 64,
        +  "type": "string"
        +}
      • addedInput schema / properties / where
        Added value: +{
        +  "description": "Where it pointed, e.g. scripts[0].body[2].",
        +  "maxLength": 200,
        +  "type": "string"
        +}
      • 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": {
        -    "error": {
        -      "$ref": "#/$defs/problem"
        -    },
        -    "notes": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    "ok": {
        -      "type": "boolean"
        -    },
        -    "removed": {
        -      "description": "What was taken out of the report before it was saved (an email address, for example).",
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    "report_id": {
        -      "type": "string"
        -    },
        -    "says": {
        -      "type": "string"
        -    },
        -    "status": {
        -      "description": "received",
        -      "type": "string"
        -    },
        -    "url": {
        -      "description": "The page about Jabbertoon's tools for AI assistants.",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "ok",
        -    "url"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedshare_link6 fields changed
      • changedInput schema / properties / cartoon / description
        Previous value: -"A saved cartoon file: {\"cast\"?, \"places\"?, \"program\"}. Links that play one are coming in the next release: the answer is not_yet."New value: +"Its program, a cartoon file {cast, places?, program}, or its screenplay text (read on your own computer only)."
      • changedInput schema / properties / cartoon / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "string"
        +]
      • changedInput schema / properties / character / description
        Previous value: -"A character: {\"name\": \"...\", \"content\": {...}}, the content of a character pack (tree, legs, kind, height, footprint, ...), or a whole character pack."New value: +"Your own character, {\"name\", \"content\"}, or a character pack."
      • addedInput schema / properties / file
        Added value: +{
        +  "description": "On your own computer only: a file's name in the output folder.",
        +  "maxLength": 255,
        +  "type": "string"
        +}
      • changedInput schema / properties / program / description
        Previous value: -"A move: a block program {\"v\": 1, \"kind\": \"behaviour\", \"scripts\": [...]}, as get_move returns. A program of kind \"scene\" or \"cartoon\" gets not_yet."New value: +"A move (kind \"behaviour\"), a scene or a cartoon program."
      • 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": {
        -    "code": {
        -      "description": "The share code: base64url of the UTF-8 canonical JSON, no padding; the part after #c=.",
        -      "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": "behaviour, scene, cartoon or character.",
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "length": {
        -      "description": "The link's length in characters.",
        -      "type": "integer"
        -    },
        -    "link": {
        -      "description": "The link to give the person.",
        -      "type": "string"
        -    },
        -    "links": {
        -      "description": "Every page that opens it: blocks, studio, create.",
        -      "type": "object"
        -    },
        -    "notes": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    "ok": {
        -      "type": "boolean"
        -    },
        -    "url": {
        -      "description": "The jabbertoon.com page the link opens (with not_yet, the page that says what links open today).",
        -      "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
    • Changedvalidate9 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
  12. 7 tool updates
    • First observedget_move
    • First observedlist_characters
    • First observedlist_looks
    • First observedlist_moves
    • First observedreport_problem
    • First observedshare_link
    • First observedvalidate

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Turn words, images, and audio into an animated video with MP4 export.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    A design studio where AI draws, charts and animates: agents create fully editable hand-drawn visuals, build charts from data, and their edits become stop-motion GIF and video animations. Free, offline, zero-dependency, MIT.
    4
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables an AI assistant to turn a plain scene description into a stick-figure animation — complete with walks, props, poses, physics-timed arcs and audio — and export it as MP4, WebM or GIF, or save it as an editable project file. Frames are rendered headlessly by the real animation app, so output matches the app's own exporter.
    GPL 3.0
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources