Skip to main content
Glama

Server Details

Create, edit, read and review web presentations: slides, linked buttons, pictures, runnable code.

Ownership verified

The last two health checks of this connector failed. If this server requires authentication, missing or expired test credentials may be the cause. A test profile lets Glama authenticate for health checks and discover tools; it is separate from your personal connections.

If you are the author, claim ownership, then add or update a test profile under Admin → Test Profile.

Status
Unhealthy
Uptime
94.3% over 42 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL
ChatGPT
–
Claude
–

TDQS

B3.4/5.0

Scored across 50 tools

Disambiguation3/5

Many tools are distinct, but there are several overlapping clusters: get_presentation vs read_presentation vs get_slides, add_slide vs add_slides, edit_blocks vs edit_slides vs update_slide, check_code vs run_code, and preview_slides vs check_layout. The detailed descriptions help clarify scope, but an agent must read carefully to choose the right tool.

Naming Consistency4/5

Nearly all tool names use a consistent snake_case verb_noun pattern (add_comment, create_presentation, delete_slide, list_presentations). The main deviation is whoami, which breaks the pattern, and name_slides_after_titles is verbose though still understandable.

Tool Count2/5

Fifty tools is far above the typical 3-15 range and heavy even for a broad presentation platform. Many single/bulk variants and editing/read variants could be consolidated without losing capability, making the set unwieldy for an agent.

Completeness4/5

The surface covers presentations, slides, blocks, projects, comments, access requests, versions, translations, import/export, code execution, layout checks, images and speaker notes. Minor gaps remain, such as no direct tool to grant a specific user access to a presentation outside a request, and no bulk slide deletion.

Available Tools

50 tools
add_commentLeave a noteAInspect

Leave a note on any presentation you can see -- on a slide ("slide_id") or on the whole presentation -- or answer a thread ("reply_to"). Notes and replies are visible to everyone who can view the presentation.

NameRequiredDescriptionDefault
slugYesThe presentation's slug (its address: /movie/<slug>/).
textYesThe note (plain text, up to 4000 characters).
reply_toNoThe id of a note to answer.
slide_idNoThe id of a slide (stable, the "id" of the slide in the presentation). Its number (position) changes when slides are reordered.

Output Schema

NameRequiredDescription
idYes
textYes
agentNoName of the AI agent that wrote it, if any.
authorNo
resolvedNo
slide_idNonull: a note on the whole presentation.
created_atNoISO 8601 date and time.
slide_numberNo
slide_deletedNoThe slide of the note was deleted (the history has it).

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, so the mutation risk profile is covered structurally. The description adds a consequence the annotations cannot: notes and replies are visible to every viewer of the presentation, which is exactly the kind of side-effect disclosure that matters for a write tool. It does not mention that repeated calls create duplicate notes (non-idempotent) or what failures look like.

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

Conciseness5/5

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

Two sentences, front-loaded with the core action, with the placement options and the visibility caveat following immediately. No filler or restatement of the title.

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

Completeness4/5

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

An output schema exists, so return values need not be explained, and annotations plus full schema coverage carry the structural load. The description supplies the access requirement and audience visibility. The only gap is silence on duplicate-creation behavior for a non-idempotent write tool.

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 description coverage is 100%, so the per-parameter baseline is 3. The description goes beyond the schema by explaining the interaction between parameters — omitting slide_id targets the whole presentation, and reply_to answers an existing thread rather than starting a new note — which the individual field descriptions do not make explicit together.

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 ("Leave a note on any presentation") and enumerates the three placement modes: slide-level, presentation-level, and thread reply. This cleanly separates it from delete_comment, list_comments, and resolve_comment. It stops short of naming a sibling explicitly, so a 4 rather than a 5.

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?

The description tells the agent which parameter combination selects which behavior (slide_id for a slide note, neither for a presentation-wide note, reply_to to answer a thread), which is genuine when-to-use guidance. It also establishes the access precondition ("any presentation you can see"). No explicit when-not-to-use or error-condition guidance.

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

add_slideAdd a slideAInspect

Add a slide to a presentation you may edit, at the end or at "position" (1-based), optionally with its blocks right away. Returns the new slide (ids only unless "response" is "full").

NameRequiredDescriptionDefault
hNoCanvas height in px (default 720).
wNoCanvas width in px (200-4000, default 1280).
bgNoBackground colour, #rrggbb.
fitNoHow the background picture fits.
nameNoSlide name (at most 100 characters), in the language of the presentation.
slugYesThe presentation's slug (its address: /movie/<slug>/).
name_trNoThe slide name in the other languages of the site: {"en": "..."}.
objectsNoBlocks of the slide, bottom to top: [{"type": "text"|"shape"|"button"|"line"|"image"|"code", "props": {...}}]. Missing props take the presentation theme's defaults (every prop is described in the block format reference). A link to a slide of the same presentation may be given as {"kind": "slide", "slide_number": N}.
positionNo1-based place; default: the end.
responseNo"brief" (default): only the ids, numbers and types of the slides and blocks; "full": every prop of every block too.
backgroundNoBackground picture: the "src" of an uploaded picture; null removes it.
transitionNoEntrance effect of this incoming slide (default: none).none
transition_durationNoAnimation duration in milliseconds (100-3000, default 500); not auto advance. Values outside the range are clamped.

Output Schema

NameRequiredDescription
hNo
wNo
bgNo
idYesStable id of the slide.
fitNo
urlNoThe address people open in a browser.
nameNo
notesNoThe speaker notes (for those who may edit; only when there are some).
numberYes1-based position; changes when slides are reordered.
name_trNoThe same text in the other languages of the site: {"en": "..."}.
objectsYesBlocks, bottom to top ("props" only in the full form).
versionNoStamp of the content as it is now: give it back as "base_version" to change it only if nobody else did meanwhile.
backgroundNoThe "src" of the background picture, or null.
transitionNoEntrance effect of this incoming slide.
layout_warningsNoHow the changed slides will probably look: texts too long for their blocks, blocks outside the slide, texts over each other (estimated -- look at them).
transition_durationNoAnimation milliseconds, not auto advance.
missing_translationsNoWhat is not translated yet into the other languages of the site (add it): the first ones; "missing_translations_count" says how many there are.
missing_translations_countNoHow many texts are not translated yet.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover the mutation/safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), so the bar is lower. The description still adds real value: it discloses the edit-permission requirement and the return shape (the new slide, ids only unless response="full"), which annotations do not.

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

Conciseness5/5

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

Two sentences, front-loaded with the action and placement, then the return contract. No filler, and the parenthetical qualifiers are load-bearing.

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 13-parameter mutation tool with nested objects and an output schema, the description covers placement, optional inline blocks, and response verbosity — the decisions an agent must make. Minor gaps remain around whether creating a slide shifts existing slide numbers and any limits on slide count, but nothing essential to a correct call is missing.

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 all 13 parameters including enums and the nested objects structure are already documented in the schema. The description restates position semantics and the response enum but adds no format, constraint, or interaction detail beyond what the schema provides. Baseline 3 applies.

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?

Specific verb + resource ("Add a slide") plus scope details: append or at a 1-based position, optionally with blocks. It clearly conveys what gets created. It does not, however, distinguish itself from the sibling add_slides (plural/batch), which an agent must otherwise infer from the name alone.

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?

"a presentation you may edit" implies the prerequisite permission, and the default placement (end) is stated, so usage is partially framed. But there is no explicit when-to-use guidance versus add_slides (batch insert), copy_slides, or edit_slides when adding blocks to an existing slide, and no stated failure conditions.

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

add_slidesAdd several slidesAInspect

Add several slides at once to a presentation you may edit, at the end or from "position" (1-based) on. Each slide is {"name", "w", "h", "bg", "fit", "transition", "transition_duration", "background", "objects": [blocks]}. A link {"kind": "slide", "slide_number": N} counts the slides of the presentation as they are after the insertion, so new slides may lead to each other. Returns the new slides (ids only unless "response" is "full").

NameRequiredDescriptionDefault
slugYesThe presentation's slug (its address: /movie/<slug>/).
slidesYesThe slides: [{"name", "w", "h", "bg", "fit", "transition", "transition_duration", "background", "objects"}].
positionNo1-based place of the first new slide; default: the end.
responseNo"brief" (default): only the ids, numbers and types of the slides and blocks; "full": every prop of every block too.

Output Schema

NameRequiredDescription
totalNoSlides in the presentation now.
slidesYesThe new slides.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare this is a non-read-only, non-idempotent, non-destructive mutation. The description adds useful behavior: it requires edit permission, returns the new slides, and explains that slide_number links count slides after insertion so new slides can link to each other.

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

Conciseness5/5

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

The description is dense but front-loaded: purpose first, then slide object shape, then link-resolution behavior, then return format. Every sentence contributes useful information without wasted prose.

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 a 100%-covered schema and an output schema, the description is nearly complete for invocation. The only minor gap is that nested block props are only referenced indirectly rather than described, but that is acceptable given the structured schema and block format reference.

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 description coverage is 100%, so the schema carries the baseline. The description adds meaningful semantics beyond the schema by clarifying that position is 1-based, defaulting to the end, and by explaining that slide-number links are resolved after insertion.

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 description states a specific verb and resource: adding several slides at once to an editable presentation. It also distinguishes bulk insertion from the singular sibling add_slide by emphasizing 'several slides at once' and specifying insertion positions.

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?

The description gives clear usage context: the presentation must be editable, and slides are inserted at the end or from a 1-based position. It does not explicitly compare with add_slide or copy_slides, so the alternative selection guidance is implied rather than stated.

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

answer_access_requestAnswer an access requestAInspect

Approve or decline a request for access to one of your presentations or projects. "role" may change what is given (default: what was asked for); "whole_project" gives it for every presentation of the project of that presentation.

NameRequiredDescriptionDefault
roleNo"view" -- read; "edit" -- read and change.
approveYestrue approves the request, false declines it.
request_idYesThe id of the access request.
whole_projectNoGive the access for the whole project the presentation is in (default false: this presentation only).

Output Schema

NameRequiredDescription
idYes
roleNoview or edit.
userNoWho asks.
agentNo
titleNoIts title; null while you may not see it (a private one you asked for).
statusYespending, approved or declined.
messageNo
projectNoSlug of the project, for access to all of it.
created_atNoISO 8601 date and time.
presentationNoSlug of the presentation (null: a project).

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the safety profile is covered. The description adds the scope semantics of whole_project, but omits behavioral details such as whether the requester is notified, whether a declined request can be re-answered, or whether answering twice errors out.

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?

Two tight sentences with the approve/decline action front-loaded and the scope modifier second. Slightly awkward embedded quoting of parameter names costs it a point but there is no filler.

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?

Output schema exists, annotations cover safety, and all parameters are described, so remaining burden is small. The description covers the decision semantics and scope adequately, though it could note side effects on the requester or re-answering behavior.

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 description coverage is 100%, so all four parameters (including the role enum and its meanings) are already documented. The description only restates the role default and whole_project behavior, adding no syntax or format detail beyond the schema. Baseline 3 applies.

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?

Specific verb pair ('Approve or decline') plus a specific resource ('request for access to one of your presentations or projects'). It is clearly distinguishable from siblings like set_access (grant directly), request_access (create a request), and list_access_requests (enumerate).

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?

Conveys the decision context and clarifies the 'role' default ('what was asked for') and the 'whole_project' scope, but never states when to use this versus set_access or request_access, nor what happens on an already-answered request. Usage is implied rather than spelled out.

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

check_codeCheck the code of a presentationAInspect

Run the code blocks of a presentation you may edit, in the order of the slides (on a slide: from the top), the way a viewer who goes through it would, and compare what each shows with its "expect" (the expected output, a prop of code blocks that only those who may edit see). Runs every block that is "runnable" or has an "expect". With "fresh" (the default) your databases of the presentation are first made again from its database scripts, so the check starts where a new viewer starts; what the blocks change stays in your databases. Per block: "status" "match", "mismatch" (with the first "difference"), "error" (it failed), "ran" (no "expect" to compare with) or "skipped" (out of time: check the rest with "slide_ids" and "fresh": false), and "got" -- what it showed, which you may put into "expect". The comparison ignores spaces around cells, the separator lines of tables, "(N rows)" and the header of a table when only its rows are expected.

NameRequiredDescriptionDefault
slugYesThe presentation's slug (its address: /movie/<slug>/).
freshNoFirst make your databases again from the scripts (default true).
slide_idsNoOnly the code blocks of these slides (default: all of them).
only_expectedNoOnly the blocks that have an "expect" (default false).

Output Schema

NameRequiredDescription
totalYes
blocksYesThe code blocks in the order they ran.
summaryYesHow many blocks of each status.

TDQS

A3.9/5.0
Behavior5/5

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

This adds substantial behavior beyond the annotations: with the default 'fresh' the databases are rebuilt from scripts, but changes made by the blocks persist, which tells the agent about real state mutation despite destructiveHint=false. It also enumerates every status outcome and the exact comparison normalizations (whitespace around cells, table separators, row counts, table headers).

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?

Purpose is front-loaded, but the body is one dense run-on sentence with nested parentheticals that is hard to parse on first read. Nearly all content is relevant, yet the phrasing is far less scannable than it could be.

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 tool with four parameters, an output schema, and mutation side effects, this covers what an agent needs: ordering, comparison rules, side effects, and status semantics. The only omission is guidance on the 'only_expected' parameter and on permission failure behavior.

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 real meaning: 'fresh' is disclosed as defaulting to true and what it recreates, and 'slide_ids' is framed as the resumption mechanism after a timeout. 'only_expected' is not mentioned, leaving one gap.

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 definition states a concrete verb+resource: run a presentation's code blocks in slide order and compare each output against its 'expect'. This is clearly distinct from presentation-reading siblings. It never names the closest sibling (run_code), instead explaining it as if no alternative existed, so sibling differentiation is implicit rather than explicit.

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 implicitly scopes usage to presentations 'you may edit' and tells the agent how to resume after a 'skipped' block via 'slide_ids' and 'fresh': false. However, it never says when to pick this over run_code, nor what to do when blocks fail vs. mismatch beyond listing statuses.

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

check_layoutCheck how slides will lookB
Read-onlyIdempotent
Inspect

Warnings about how the slides of a presentation look: a text that runs past its block or code that is cut off ("overflow"), a block partly or wholly outside the slide ("cut", "outside"), text blocks lying over each other ("overlap"), in every language of the site (a warning only a translation has carries its "lang"). Texts and code are measured in a browser on the server ("measured": true); when that is not available their sizes are estimated from the letter widths of the font. Only what shows counts: a text on a block without fill or border may run into the bottom padding. The changing operations add the (estimated) warnings of the slides they changed to their answer ("layout_warnings").

NameRequiredDescriptionDefault
slugYesThe presentation's slug (its address: /movie/<slug>/).
slide_idsNoOnly these slides (ids).
to_numberNoOnly the slides up to this number (inclusive).
from_numberNoOnly the slides from this number on (1-based).

Output Schema

NameRequiredDescription
checkedYesSlides checked.
measuredNoThe texts were measured in a browser (false: estimated).
warningsYesHow the changed slides will probably look: texts too long for their blocks, blocks outside the slide, texts over each other (estimated -- look at them).

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description adds genuinely useful context beyond that: measurements run in a server-side browser when available and fall back to font-width estimation ("measured": true), and edited slides carry their warnings into mutation responses as "layout_warnings". It stops short of disclosing cost or latency of the browser measurement, which is the main behavioral risk for an agent deciding to call it.

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 warning taxonomy is front-loaded, which is good, but the prose is roundabout and parenthesis-heavy, and the highly situational caveat about text running into bottom padding on unfilled blocks consumes a full sentence. The most decision-relevant fact for an agent - that mutations already attach layout_warnings - is buried at the very end.

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

Completeness4/5

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

An output schema exists, so return values need not be explained, and the description still covers the interpretation caveats an agent needs (measured vs. estimated sizes, language tagging, only-visible-content rule). For a read-only diagnostic with full schema coverage this is essentially complete, though it omits any hint about cost or how many slides a range check can handle.

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 slug, slide_ids, from_number and to_number are all documented in the schema; baseline 3 applies. The description adds nothing about the relationship or precedence between slide_ids and the number range filters, and the "lang" it mentions is an output attribute of warnings, not an input, so no extra parameter meaning is conveyed.

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 states a specific capability: it returns warnings about how presentation slides will look, and enumerates the concrete warning classes ("overflow", "cut", "outside", "overlap") plus per-language reporting. The purpose is unambiguous, but it never explicitly contrasts itself with the visual sibling preview_slides, leaving the agent to infer the distinction between a rendered preview and a diagnostic warning list.

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?

Usage is only implied: the warning taxonomy suggests the tool is for validating layout before export or publish, and the final sentence hints that mutating operations already return layout_warnings. There is no explicit statement of when to call this versus preview_slides, and no guidance about when a full check is unnecessary.

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

copy_slidesCopy slidesAInspect

Copy slides with all their blocks into a presentation you may edit: "slide_ids" of this very presentation (to duplicate them) or of the presentation "from" (any you can see). A copy keeps the blocks, the translations, the background and the speaker notes (the notes only when you may edit the original). Links between the copied slides lead to the copies; links to slides that are not copied along keep their target in the same presentation and lead nowhere in another one. "copies": every slide that many times, in turn (one prepared slide for each appendix). The copies go after slide number "after" (0: at the start); by default right after the last of the slides when duplicating, at the end when they come from another presentation. Returns the new slides (ids only unless "response" is "full").

NameRequiredDescriptionDefault
fromNoSlug of the presentation the slides are in (default: this one).
slugYesThe presentation's slug (its address: /movie/<slug>/).
afterNoThe copies go after the slide with this number (0: first).
copiesNoHow many copies of each (default 1).
responseNo"brief" (default): only the ids, numbers and types of the slides and blocks; "full": every prop of every block too.
slide_idsYesThe slides to copy (ids), in the order the copies get.

Output Schema

NameRequiredDescription
totalYes
slidesYesThe copies, in their order.

TDQS

A4.3/5.0
Behavior5/5

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

With annotations already covering safety (readOnlyHint=false, destructiveHint=false, idempotentHint=false), the description goes well beyond them: it discloses what is preserved (blocks, translations, background, speaker notes, with the notes caveat tied to edit permission), how internal links are rewritten, and that dangling links lead nowhere across presentations. It also states the return shape (ids only unless response is "full"), which is exactly the behavioral context an agent needs before invoking a mutating copy.

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 action and mode split, then the preservation and link semantics, then placement defaults, then the return contract — a sensible order with little filler. The dense link-rewriting sentence is hard to parse and would read better as separate clauses, but overall length is proportionate to the operation's complexity.

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 six-parameter copy tool with a full input schema and an output schema, everything an agent needs is present: scope, permission caveat on speaker notes, placement defaults, multiplicity semantics, link behavior, and return detail. Return values need not be re-explained given the output schema, and the description does not attempt to.

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 baseline is 3, but the description adds real meaning on top: "copies" is explained as repeated duplication in turn (one prepared slide for each appendix) and "after" is given its default resolution for both the duplicate and cross-presentation cases, which the schema does not state. Enumerable "response" is only summarized, not enriched.

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 first sentence states a specific verb (copy) and resource (slides with all their blocks) and immediately splits the operation into two distinct modes: duplicating within this presentation versus copying from another. It does not name the neighboring siblings (add_slides, reorder_slides, add_slide) that an agent might confuse it with, so sibling differentiation is implied rather than explicit.

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?

"slide_ids" of this very presentation (to duplicate them) or of the presentation "from" (any you can see)" clearly maps each scenario to the relevant parameter, and the default placement rules are spelled out for both modes. What is missing is an explicit exclusion or alternates clause, e.g. when to use add_slides instead when the goal is new content rather than a copy.

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

create_presentationCreate a presentationAInspect

Create a new presentation of yours, empty or complete in one call. "slides" is a list of {"name", "name_tr", "w", "h", "bg", "fit", "background", "objects": [blocks]}; blocks may link to each other's slides with {"kind": "slide", "slide_number": N} (1-based, in this list). Returns the new presentation with the ids of its slides and blocks (every prop too with "response": "full"). Every presentation is in all the languages of the site (ru, en) at once: write the texts in "lang" and give the other languages right away -- "title_tr", "name_tr" of every slide and "tr" in the props of every text, shape and button block ({"en": ""}); the layout is shared. The answer lists what is still "missing_translations".

NameRequiredDescriptionDefault
langNoThe language "title", slide names and blocks' "html" are written in (default: the one most of the words of the title, the slide names and the texts are in).
themeNoDefault colours of the slides and of new blocks.
titleYesTitle (at most 100 characters).
accessNoWho sees it (default "private": only you, until you publish it; "public": everybody reads it; "open": every signed-in person edits it too).
slidesNoSlides with their blocks (optional).
projectNoSlug of one of your projects to create the presentation in (at its end); its blocks may then lead to the slides of the other presentations of that project.
databaseNoSetup scripts of the databases the runnable code blocks work in, by language. Every viewer runs the blocks in a private database made from the script (up to 50000 characters each; an empty string removes a script).
responseNo"brief" (default): only the ids, numbers and types of the slides and blocks; "full": every prop of every block too.
title_trNoThe title in the other languages of the site: {"en": "..."}.
descriptionNoDescription shown on the presentation page (optional).

Output Schema

NameRequiredDescription
idYes
urlNoThe address people open in a browser.
langNoThe language its texts are written in; "tr" holds the others.
slugYesThe address of the presentation: /movie/<slug>/.
ownerNoUser name of the author.
themeNo
titleYes
accessNoopen, public or private.
slidesYes
projectNoThe project it belongs to, or null.
versionNoStamp of the content as it is now: give it back as "base_version" to change it only if nobody else did meanwhile.
can_editNoWhether you may change it.
databaseNoSetup scripts of the databases of runnable code blocks (shown to the author only).
title_trNoThe same text in the other languages of the site: {"en": "..."}.
languagesNoThe languages of the site.
cover_slideNoId of the slide shown as its cover in the lists (null: an uploaded picture, or no slides).
descriptionNo
database_charsNoA part or the words only were read: how long each database script is (the whole presentation without "texts_only" gives them).
missing_translationsNoWhat is not translated yet into the other languages of the site (add it): the first ones; "missing_translations_count" says how many there are.
missing_translations_countNoHow many texts are not translated yet.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly=false, destructive=false, idempotent=false, openWorld=false. The description adds substantial context beyond that: that every presentation exists in all site languages simultaneously, that translations must be supplied via *_tr fields and "tr" props, and that the response reports "missing_translations". It omits permission/auth prerequisites but the access enum in the schema covers visibility.

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 core action, then the slides/blocks format, then the translation rule, then the return shape — a sensible ordering. It is dense and uses compact code-like notation mid-sentence, which slightly hurts readability but wastes little.

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 10-parameter tool with nested slide objects and an output schema, the description covers the parts that are hardest to infer: the block/slide payload shape, slide-link syntax, the multi-language obligation, and what the response contains. Database scripts and theme defaults are left to the schema, which is acceptable given 100% coverage.

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 description coverage is 100%, so the baseline is 3; the description earns above that by explaining the cross-slide linking convention ({"kind": "slide", "slide_number": N} is 1-based within the submitted list) and the response="full" behavior of returning every prop — semantics not fully conveyed by the schema alone.

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 ("Create a new presentation") plus meaningful scope: it can be created empty or fully populated with slides and blocks in one call. The phrase "in one call" implicitly contrasts with the create-then-add_slides path, though no sibling is named explicitly, keeping it short of a 5.

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?

Usage context is implied rather than stated — batching slides into creation, and writing all site languages up front. There is no explicit guidance on when to prefer this over import_presentation, copy_slides, or create-then-add_slides, and no stated prerequisites (e.g. upload_image first for backgrounds).

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

create_projectCreate a projectAInspect

Create a project of yours, optionally putting some of your presentations into it (in this order). A presentation is in one project at most: one that is in another project moves over.

NameRequiredDescriptionDefault
titleYesTitle (at most 100 characters).
descriptionNoDescription (optional).
presentationsNoSlugs of presentations.

Output Schema

NameRequiredDescription
idYes
urlNoThe address people open in a browser.
roleNoowner, edit, view or null.
slugYesThe address of the project: /project/<slug>/.
ownerNo
titleYes
accessNoopen, public or private: inherited by its presentations.
grantsNoWho was given access (the owner sees it).
is_ownerNo
descriptionNo
presentationsNoIts presentations, in order.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations declare a non-readonly, non-destructive, non-idempotent write, but they cannot express the side effect the description supplies: a presentation already in another project is moved out of it. That cross-resource mutation is exactly the kind of context annotations miss, though permissions/limits are not mentioned.

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

Conciseness5/5

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

Two sentences, zero filler, and the primary action is front-loaded before the optional-parameter and side-effect details. Every clause carries information the caller needs.

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

Completeness4/5

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

An output schema exists, so return values need no explanation, and annotations cover the safety profile. The description covers the notable side effect; only ownership/permission requirements for creating in a workspace are left unstated.

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 real meaning beyond the schema: the presentations array is consumed 'in this order', and the one-project-per-presentation constraint governs which slugs are valid inputs.

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+resource ('Create a project') plus scope ('of yours') and the optional inclusion of presentations. It distinguishes itself from update_project/get_project only implicitly via the create framing and the move-over behavior; no sibling is named outright.

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?

The create framing implies when to use it versus update_project, but there is no explicit when-to-use, when-not-to-use, or alternative routing. The move-over sentence is behavioral, not usage guidance, so the agent must infer the boundary.

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

delete_commentDelete a noteA
DestructiveIdempotent
Inspect

Delete a note (with its replies, when it starts a thread). Its author or the owner of the presentation may do it.

NameRequiredDescriptionDefault
comment_idYesThe id of a note.

Output Schema

NameRequiredDescription
deletedYesId of the deleted note.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description adds two pieces of context the annotations cannot: the cascading deletion of replies when the note starts a thread, and the authorization requirement (author or presentation owner).

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

Conciseness5/5

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

Two short sentences, no filler, with the core action and its cascade effect front-loaded before the permission clause. Every clause earns its place.

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 annotations covering the mutation/destructive profile, an output schema present, and the parameter fully documented, the description supplies the remaining critical facts: cascade deletion and who is authorized. Only the distinction from resolve_comment is left implicit.

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 description coverage is 100% for the single comment_id parameter, so the schema fully documents the input. The description adds no format, syntax, or lookup guidance beyond what the schema provides, making the baseline 3 appropriate.

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 ('Delete a note') and clarifies the cascade scope ('with its replies, when it starts a thread'). It is clearly distinguishable from add_comment/list_comments, though it does not explicitly contrast with resolve_comment, which is the nearest ambiguous sibling.

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?

Provides a permission condition ('Its author or the owner of the presentation may do it') but gives no explicit when-to-use guidance versus alternatives such as resolve_comment (which likely closes rather than removes a comment). Usage is only implied.

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

delete_presentationDelete a presentationB
DestructiveIdempotent
Inspect

Delete one of your presentations (it disappears from the site and from the list of presentations).

NameRequiredDescriptionDefault
slugYesThe presentation's slug (its address: /movie/<slug>/).

Output Schema

NameRequiredDescription
deletedYesSlug of the deleted presentation.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds the specific effect that the presentation disappears from the site and from the list, which is modest context beyond the annotations but no irreversibility or permission detail.

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?

A single efficient sentence with the core action front-loaded and the parenthetical clarifying scope. No wasted verbiage, though the parenthetical is nearly redundant with the destructive annotation.

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?

An output schema exists, so return values need not be described, and annotations cover the destructive/idempotent nature. However, for a permanent deletion tool there is no word on reversibility or preconditions, leaving a small but real gap.

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 description coverage is 100% with a single well-documented slug parameter, so the schema carries the semantic load. The description adds nothing about the identifier beyond what the schema already provides, matching the baseline for full coverage.

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 (delete) and resource (presentation), making it immediately distinguishable from delete_slide and delete_project by name. It stops short of explicitly contrasting itself with siblings, but the action and target are unambiguous.

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

Usage Guidelines2/5

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

There is no guidance on when to use this versus alternatives (e.g., restoring via restore_version, or deleting slides individually), nor any stated prerequisite such as required permissions or confirmation. The agent must infer usage entirely.

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

delete_projectDelete a projectA
DestructiveIdempotent
Inspect

Delete a project of yours. Its presentations stay, as presentations on their own; the links between them stop leading anywhere.

NameRequiredDescriptionDefault
projectYesThe project's slug (its address: /project/<slug>/).

Output Schema

NameRequiredDescription
deletedYesSlug of the deleted project.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false. The description adds genuinely new behavioral context: presentations are preserved, and their internal links dangle afterwards. That surviving-side-effect detail is exactly what annotations cannot express.

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

Conciseness5/5

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

Two short sentences, front-loaded with the action and followed by the exact consequence. No filler, no restatement of the title.

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

Completeness4/5

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

An output schema exists and annotations carry the safety profile, so the description's job is narrow: clarify collateral effects. It does that well. What is missing is any mention of required permissions or whether the deletion is recoverable.

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 the single 'project' param is documented as a slug with its address format. The description's 'of yours' hints at an ownership precondition but adds no syntax or identification detail beyond the schema. Baseline 3 applies.

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?

Clear specific verb+resource ('Delete a project'), scoped by ownership ('of yours'). The consequence sentence implicitly distinguishes it from delete_presentation (presentations survive), though no sibling is named explicitly.

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

Usage Guidelines2/5

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

No statement of when to choose this over delete_presentation or update_project, and no prerequisites or warnings. Ownership ('of yours') is the only implied constraint; the rest is left to inference.

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

delete_slideDelete a slideB
DestructiveIdempotent
Inspect

Delete a slide of your presentation. Links that led to it stop leading anywhere.

NameRequiredDescriptionDefault
slugYesThe presentation's slug (its address: /movie/<slug>/).
slide_idYesThe id of a slide (stable, the "id" of the slide in the presentation). Its number (position) changes when slides are reordered.
base_versionNoOptional: the "version" of the slide as you read it. The change is refused (409 conflict) when somebody changed the slide meanwhile, instead of overwriting their work.

Output Schema

NameRequiredDescription
slidesNoSlides left.
deletedYesId of the deleted slide.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered structurally. The description adds one genuinely useful side-effect disclosure — 'Links that led to it stop leading anywhere' — which is not derivable from annotations, but it says nothing about reversibility (restore_version exists) or the conflict behavior beyond what the schema already documents.

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

Conciseness5/5

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

Two short sentences, zero filler, with the action stated first and the consequence second. Every clause earns its place.

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

Completeness4/5

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

An output schema exists, annotations cover the safety profile, and all three parameters are documented in the schema, so the description need not restate returns or field meanings. What is missing is guidance on when deletion is appropriate versus editing or restoring, and any note on whether the deletion is recoverable.

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 description coverage is 100%, with slug, slide_id, and the optional base_version all fully explained in the schema itself, including the 409 conflict semantics. The description adds no parameter-level detail, so the baseline 3 applies.

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 (Delete) and resource (a slide of your presentation), which cleanly separates it from delete_presentation, delete_comment, and delete_project by resource type. It never explicitly contrasts with the neighboring slide-mutating tools (add_slide, update_slide, edit_slides), so it stops short of full sibling differentiation.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance, no prerequisites, and no mention of alternatives such as update_slide or restore_version. The agent must infer usage entirely from the tool name and the sibling list.

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

edit_blocksAdd, change or delete blocksAInspect

Change some blocks of a slide and leave the others alone, in one step: "add": new blocks [{"type", "props"}] (placed on top, or at the bottom with "at_bottom": true); "update": [{"id", "props"}] -- only the given props change. The same props for several blocks at once, like selecting them in the editor: {"ids": [...], "props"}; or for a card and everything drawn on it: {"inside": <id of the card's background block>, "props"} -- that block and every block lying within its rectangle (props a block type does not have, like "link" of a code block, are skipped for it); "delete": [block ids]. Returns the slide (ids only unless "response" is "full").

NameRequiredDescriptionDefault
addNoNew blocks: [{"type", "props"}].
slugYesThe presentation's slug (its address: /movie/<slug>/).
deleteNoIds of blocks to delete.
updateNoChanges: [{"id" | "ids": [...] | "inside": <card block id>, "props"}].
responseNo"brief" (default): only the ids, numbers and types of the slides and blocks; "full": every prop of every block too.
slide_idYesThe id of a slide (stable, the "id" of the slide in the presentation). Its number (position) changes when slides are reordered.
at_bottomNoPut the added blocks under the others (default: on top).
base_versionNoOptional: the "version" of the slide as you read it. The change is refused (409 conflict) when somebody changed the slide meanwhile, instead of overwriting their work.

Output Schema

NameRequiredDescription
hNo
wNo
bgNo
idYesStable id of the slide.
fitNo
urlNoThe address people open in a browser.
nameNo
notesNoThe speaker notes (for those who may edit; only when there are some).
numberYes1-based position; changes when slides are reordered.
name_trNoThe same text in the other languages of the site: {"en": "..."}.
objectsYesBlocks, bottom to top ("props" only in the full form).
versionNoStamp of the content as it is now: give it back as "base_version" to change it only if nobody else did meanwhile.
backgroundNoThe "src" of the background picture, or null.
transitionNoEntrance effect of this incoming slide.
layout_warningsNoHow the changed slides will probably look: texts too long for their blocks, blocks outside the slide, texts over each other (estimated -- look at them).
transition_durationNoAnimation milliseconds, not auto advance.
missing_translationsNoWhat is not translated yet into the other languages of the site (add it): the first ones; "missing_translations_count" says how many there are.
missing_translations_countNoHow many texts are not translated yet.

TDQS

A3.5/5.0
Behavior1/5

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

The description explicitly supports deleting blocks, including a "delete": [block ids] operation and the title "Add, change or delete blocks", but the annotations declare destructiveHint=false. That is a direct contradiction about whether the tool performs destructive updates.

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

Conciseness5/5

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

The description is front-loaded and organized around the three operations. Despite covering a complex multi-mode tool, every sentence adds operational detail and there is little wasted text.

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?

Given the rich schema, 100% description coverage, and output schema, the description covers the essential operation semantics well. It does not discuss base_version conflict behavior, but the schema already documents that parameter and the contradiction lies primarily in behavioral transparency.

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 adds meaningful semantics beyond the schema, especially for update modes: only supplied props change, multiple ids can share props, and "inside" targets a card background plus all blocks within its rectangle while skipping unsupported props.

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 states a specific resource and set of verbs: add, update, and delete blocks of a slide, while leaving other blocks untouched. It is clear what the tool does, though it does not explicitly distinguish itself from siblings like update_slide or edit_slides.

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?

The description gives clear usage context: use it to change some blocks of a slide in one step while leaving the rest alone. It explains the three operation modes, but it does not name alternatives or state when not to use this tool versus sibling tools.

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

edit_slidesChange blocks on several slidesAInspect

Change blocks on many slides in one step (and one version in the history). "edits" is a list of {"slide_id", "add", "update", "delete", "at_bottom", "base_version"}; on its slide each item adds new blocks ("add": [{"type", "props"}], on top or with "at_bottom": true under the others), changes the given props of blocks ("update": [{"id" | "ids": [...] | "inside": , "props"}]) and deletes blocks ("delete": [ids]). Nothing is changed when one item is wrong (or its slide changed meanwhile). Returns the changed slides.

NameRequiredDescriptionDefault
slugYesThe presentation's slug (its address: /movie/<slug>/).
editsYesUp to 100 items: [{"slide_id", "add"?, "update"?, "delete"?, "at_bottom"?, "base_version"?}].
responseNo"brief" (default): only the ids, numbers and types of the slides and blocks; "full": every prop of every block too.

Output Schema

NameRequiredDescription
slidesYesThe changed slides.
layout_warningsNoHow the changed slides will probably look: texts too long for their blocks, blocks outside the slide, texts over each other (estimated -- look at them).
missing_translationsNoWhat is not translated yet into the other languages of the site (add it): the first ones; "missing_translations_count" says how many there are.
missing_translations_countNoHow many texts are not translated yet.

TDQS

A4/5.0
Behavior4/5

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

The description goes meaningfully beyond the annotations: it discloses all-or-nothing atomicity ('Nothing is changed when one item is wrong'), optimistic concurrency via 'base_version' and the 'slide changed meanwhile' check, that exactly one history version is produced, and that changed slides are returned. Annotations only declare the generic non-readOnly/non-destructive/non-idempotent profile, so this added context is real value.

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 batch+versioning purpose, then the payload contract, then the failure semantics and return value — a good information order. It is dense and slightly run-on with nested parentheticals, and the opening sentence trails into a fragment before the spec begins.

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?

Covers the risky behaviors an agent must know before calling a mutation tool: atomic failure, stale-write protection, history side effect, and return shape. With an output schema present it does not need to enumerate return values, and the 'response' enum is documented in the schema, so the remaining gap is only the missing sibling comparison.

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 100%, but the 'edits' items are declared only as untyped objects, so the description carries the entire payload contract: the add/update/delete/at_bottom/base_version keys, the 'add' block shape {type, props}, top-vs-bottom placement, and the three update targeting forms ('id', 'ids', 'inside' with a card block id). That is substantive meaning the schema does not provide.

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 concrete verb and resource ('change blocks on many slides') and adds the batch/versioning framing, which distinguishes it from single-block editing. It never names its closest siblings (edit_blocks, update_slide), so the differentiation is implicit rather than explicit.

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?

Usage is implied through the batching semantics and the atomicity guarantee, which tells an agent this is the right tool when multiple slides must change together or not at all. However, there is no explicit 'use this instead of edit_blocks/update_slide when...' routing, which is exactly what an agent needs among 50 siblings.

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

export_presentationExport as PowerPoint, archive or PDFA
Read-onlyIdempotent
Inspect

A file of one of your presentations: "pptx" (PowerPoint: texts, shapes, pictures and links stay editable), "zip" (the site's own archive: everything, also the database scripts; it can be imported back) or "pdf" (one page per slide, as viewers see it). Returns a download "url" that works without a key for an hour. Only the author may export.

NameRequiredDescriptionDefault
slugYesThe presentation's slug (its address: /movie/<slug>/).
formatYesThe kind of file.

Output Schema

NameRequiredDescription
urlYesWhere to download the file.
noteNo
formatYes
filenameNo
expires_inNoSeconds the url works.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds genuinely new behavior: the returned download URL works without a key for one hour (temporal/auth detail), export is restricted to the author (authorization), and each format's fidelity is described. This is meaningful added context beyond the 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?

Dense single paragraph with zero filler; the format enumeration carries most of the information load and the permission constraint is placed last. The leading fragment 'A file of one of your presentations:' is slightly awkward as an opener but quickly resolves into specifics.

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?

Covers the essentials for a low-complexity, 2-param tool: output artifact types, the download URL, its expiry, and the caller restriction. With an output schema present there is no obligation to describe return structure, so the remaining gap (error modes) is minor.

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 goes beyond the schema's terse 'The kind of file' by explaining what each enum value actually contains and whether it is editable or re-importable. That materially disambiguates the format choice.

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?

Names a specific verb+resource ('export' a 'presentation') and immediately distinguishes itself from siblings like import_presentation and get_format by enumerating the three output artifacts it produces. An agent can tell exactly what this tool produces 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 selection guidance for the format enum (pptx = editable, zip = site archive re-importable, pdf = viewer-faithful), which is effectively when-to-use guidance for the enum. It also states the authorization prerequisite ('Only the author may export'). It does not explicitly name an alternative sibling for related reads, so it falls just short of 5.

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

get_accessAccess settingsA
Read-onlyIdempotent
Inspect

The access settings of your presentation: its own level ("open", "public", "private"), the level that counts ("effective_level": a presentation of a project inherits the project's level when that one is stricter), who was given access (and which role), and the pending requests.

NameRequiredDescriptionDefault
slugYesThe presentation's slug (its address: /movie/<slug>/).

Output Schema

NameRequiredDescription
levelYesopen, public or private: the presentation's own level.
grantsNo
project_levelNoThe level of its project, if any.
effective_levelNoThe level that counts (the project's one when stricter).
pending_requestsNo

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description adds genuinely non-obvious semantics: that 'effective_level' can differ from the presentation's own level because a project's stricter level is inherited. That is behavioral context an agent cannot get from the schema or annotations.

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?

One front-loaded sentence that enumerates return content with two tight parentheticals. It is efficient, though the sentence is a noun phrase rather than a statement of action, which slightly weakens the opening.

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

Completeness4/5

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

An output schema exists, so return values need no prose, and annotations cover the safety profile; the one input is fully described in the schema. The meaningful remaining gap is that the boundary with list_access_requests and set_access is never stated, which matters in a 48-tool surface.

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 the single slug parameter is already documented in the schema as the address form /movie/<slug>/. The description adds nothing about the parameter, so the baseline 3 applies.

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 enumerates exactly what the tool returns: own level, effective_level (with the inheritance rule), granted access with roles, and pending requests. That is a specific resource with real content, not tautology. It stops short of naming what distinguishes it from siblings like set_access or list_access_requests, which overlap on the 'pending requests' and 'level' concepts.

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

Usage Guidelines2/5

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

There is no when-to-use statement, no prerequisite, and no alternative named. The reader must infer from the name that this is the read counterpart to set_access, and the description's mention of 'pending requests' actually blurs the line with list_access_requests without resolving it.

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

get_formatBlock format referenceB
Read-onlyIdempotent
Inspect

The complete reference of what a slide can contain: block types with every prop and its default, allowed values of every enumerated prop, number ranges, colour props, link kinds, fonts, shapes and themes.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
htmlNo
enumsNo
linksNo
typesYes
canvasNo
colorsNo
bordersNo
numbersNo
booleansNo
languagesNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is fully covered and the description does not contradict it. The description adds that this is a 'complete reference' (i.e. static documentation data), but offers no additional behavioral context beyond that; with annotations carrying the load, a 3 is appropriate.

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?

A single front-loaded sentence with a colon-separated inventory of what the reference contains; nothing is padded. The enumeration is long but each item earns its place by signalling the reference's breadth.

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 zero-parameter static reference with an output schema already describing the returned structure, the description is largely complete — the agent needs no return-value detail. The only gap is the absent routing guidance relative to the many block/slide-editing siblings.

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?

The tool takes zero parameters, so the baseline is 4. There are no argument semantics to clarify, and the description correctly does not waste space inventing any.

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 names a specific resource and enumerates its contents precisely ('block types with every prop and its default, allowed values of every enumerated prop, number ranges, colour props...'), so an agent knows this returns a schema-style reference document rather than slide data. It does not, however, explicitly contrast itself with adjacent tools such as check_layout or get_slide, so the distinction is inferable rather than stated.

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

Usage Guidelines2/5

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

There is no when-to-use guidance: nothing says to consult this before add_slide/edit_blocks, nor how it relates to check_layout. The agent must infer that this is a lookup resource for block structure. No alternatives or exclusions are offered.

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

get_glossaryRead the glossary of the translationA
Read-onlyIdempotent
Inspect

How the machine translator translates the terms of a presentation ("slug") or of every presentation of a project ("project"): {"en": {"стенд, стенде": "lab"}} -- the target language, then the term (its forms separated by commas) and its translation. A presentation's own entries go over its project's.

NameRequiredDescriptionDefault
slugNoThe presentation (its slug) -- or give "project".
projectNoThe project (its slug): its glossary counts for all its presentations.

Output Schema

NameRequiredDescription
projectNoThe project of the presentation, if any.
glossaryYes{"<language>": {"<term, its forms>": "<translation>"}}.
translatorNoWhether the site has a machine translator.
project_glossaryNoThe glossary of that project (counts too).

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already establish that this is a safe, idempotent, non-destructive, closed-world read. The description adds genuinely non-obvious behavior: the merge/precedence rule that 'a presentation's own entries go over its project's'. That override semantics is exactly the kind of context annotations cannot express.

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?

Dense but earns its space: the sample entry format conveys the return shape compactly, and the precedence rule is stated in a single closing clause. Front-loading is slightly weak because the opening sentence is the awkward 'How the machine translator translates...' rather than a plain statement of the operation.

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

Completeness4/5

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

An output schema exists, so return values need not be spelled out, yet the description still sketches the entry format. With both parameters fully covered in the schema, the only real gap is guidance on when to use this versus set_glossary.

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 both parameters are already documented and the baseline is 3. The description earns a point by tying the two parameters to their real meaning — slug for a single presentation versus project for all its presentations — and adding the precedence rule between them.

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 title ('Read the glossary of the translation') supplies the verb and resource, and the description explains exactly what a glossary contains, including a concrete JSON example. It does not, however, explicitly distinguish this read tool from the sibling set_glossary, so the agent must infer the read/write split from names alone.

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

Usage Guidelines2/5

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

There is no statement of when to call this tool versus alternatives (notably set_glossary). The slug-vs-project choice is described only inside the schema, not in the description, so the description itself offers no usage guidance.

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

get_presentationGet a presentation for editingA
Read-onlyIdempotent
Inspect

A presentation you can see, with every slide and every block (ids and complete props), in playback order. Use the ids to edit slides and blocks ("can_edit" says whether you may). Links to slides show both "slide" (id) and "slide_number". All of a presentation of 30 slides is a few hundred thousand characters: read a big one in parts -- "from_number" / "to_number" or "slide_ids", and "texts_only": true gives only the words of the blocks (html, tr, code), no geometry. Every slide has a "version": pass it as "base_version" when you change the slide.

NameRequiredDescriptionDefault
slugYesThe presentation's slug (its address: /movie/<slug>/).
slide_idsNoOnly these slides (ids).
to_numberNoOnly the slides up to this number (inclusive).
texts_onlyNoOnly the texts of the blocks (for reading, checking or translating), not their props.
from_numberNoOnly the slides from this number on (1-based).

Output Schema

NameRequiredDescription
idYes
urlNoThe address people open in a browser.
langNoThe language its texts are written in; "tr" holds the others.
slugYesThe address of the presentation: /movie/<slug>/.
ownerNoUser name of the author.
themeNo
titleYes
accessNoopen, public or private.
slidesYes
projectNoThe project it belongs to, or null.
versionNoStamp of the content as it is now: give it back as "base_version" to change it only if nobody else did meanwhile.
can_editNoWhether you may change it.
databaseNoSetup scripts of the databases of runnable code blocks (shown to the author only).
title_trNoThe same text in the other languages of the site: {"en": "..."}.
languagesNoThe languages of the site.
cover_slideNoId of the slide shown as its cover in the lists (null: an uploaded picture, or no slides).
descriptionNo
database_charsNoA part or the words only were read: how long each database script is (the whole presentation without "texts_only" gives them).
missing_translationsNoWhat is not translated yet into the other languages of the site (add it): the first ones; "missing_translations_count" says how many there are.
missing_translations_countNoHow many texts are not translated yet.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the description focuses on real behavioral traits: payload size (hundreds of thousands of chars for 30 slides), the pagination strategy, the texts_only reduction, and the optimistic-concurrency contract (slide version → base_version). That is genuinely beyond what annotations and schema convey.

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 the core payload description and the size warning well, but the sentences are long, run-on, and rely on awkward inline quoting; the base_version note about a different tool's parameter is buried at the end and could confuse.

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

Completeness4/5

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

An output schema exists and annotations cover safety, so the description's remaining job — scale, pagination, texts_only, and versioning — is mostly done. The missing piece is disambiguation from sibling retrieval tools, which matters given how many overlapping getters exist.

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 all five parameters are already documented with meaning. The description reinforces intent (from_number/to_number ranges, slide_ids, texts_only) but adds little syntax or semantics the schema lacks; the base_version linkage is useful but refers to a different tool's parameter.

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+resource and scope: returns every slide and block with ids and complete props in playback order. It's clear this is the full-detail retrieval tool for editing, but it never names the sibling it differs from (get_slides, get_slide, read_presentation), so the agent must infer the boundary.

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 useful in-tool guidance — read big presentations in parts, use texts_only for reading/translating, pass the slide version as base_version when editing — but offers no explicit when-to-use-this-vs-alternative guidance against the many sibling retrieval tools. It also never says when *not* to call it (e.g., prefer get_slides for a few slides).

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

get_projectGet a projectB
Read-onlyIdempotent
Inspect

A project you can see, with its presentations (the ones you can see) in order.

NameRequiredDescriptionDefault
projectYesThe project's slug (its address: /project/<slug>/).

Output Schema

NameRequiredDescription
idYes
urlNoThe address people open in a browser.
roleNoowner, edit, view or null.
slugYesThe address of the project: /project/<slug>/.
ownerNo
titleNo
accessNoopen, public or private: inherited by its presentations.
grantsNoWho was given access (the owner sees it).
is_ownerNo
descriptionNo
presentationsYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already establish that this is a safe, read-only, idempotent operation, so the description does not need to restate that. It adds useful behavioral context by saying only visible projects/presentations are returned and that presentations are ordered, but it does not explain what happens when a project is inaccessible.

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?

The description is a single compact sentence with no wasted clauses. The parenthetical repetition of visibility is slightly awkward but still efficient.

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?

Given a simple one-parameter read tool with an output schema and comprehensive annotations, the description provides the essential scope: it returns a visible project plus its visible presentations in order. Minor gaps around access failures are acceptable because the schema and annotations cover much of the rest.

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 the single parameter is fully documented as the project slug with an address format. The description adds no parameter-specific meaning beyond that schema, so the baseline of 3 is appropriate.

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 identifies the resource as a project and clarifies that it includes the project's presentations in order. It is clear enough to distinguish from presentation-focused siblings, but it does not explicitly contrast with list_projects or get_presentation.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus list_projects, get_presentation, or other project-related tools. The phrase 'you can see' hints at access scoping but does not establish selection criteria.

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

get_slideGet one slideB
Read-onlyIdempotent
Inspect

One slide of a presentation you can see, with all of its blocks (ids and complete props).

NameRequiredDescriptionDefault
slugYesThe presentation's slug (its address: /movie/<slug>/).
slide_idYesThe id of a slide (stable, the "id" of the slide in the presentation). Its number (position) changes when slides are reordered.

Output Schema

NameRequiredDescription
hNo
wNo
bgNo
idYesStable id of the slide.
fitNo
urlNoThe address people open in a browser.
nameNo
notesNoThe speaker notes (for those who may edit; only when there are some).
numberYes1-based position; changes when slides are reordered.
name_trNoThe same text in the other languages of the site: {"en": "..."}.
objectsYesBlocks, bottom to top ("props" only in the full form).
versionNoStamp of the content as it is now: give it back as "base_version" to change it only if nobody else did meanwhile.
backgroundNoThe "src" of the background picture, or null.
transitionNoEntrance effect of this incoming slide.
layout_warningsNoHow the changed slides will probably look: texts too long for their blocks, blocks outside the slide, texts over each other (estimated -- look at them).
transition_durationNoAnimation milliseconds, not auto advance.
missing_translationsNoWhat is not translated yet into the other languages of the site (add it): the first ones; "missing_translations_count" says how many there are.
missing_translations_countNoHow many texts are not translated yet.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior, so the safety profile is fully covered. The description adds that the response contains blocks with their ids and complete props — useful return-shape context. The phrase 'a presentation you can see' hints at access scoping but is vague.

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?

A single efficient sentence with no waste, front-loading the resource and then qualifying the payload. Slightly awkward phrasing ('a presentation you can see') but structurally sound.

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 simple read tool with a full output schema, complete parameter documentation, and rich annotations, the description covers the essentials. Only the access-implied restriction ('you can see') is underspecified, which is a minor gap.

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%: slug and slide_id are both fully documented in the schema, including the note that slide_id is stable while position changes on reorder. The description adds nothing beyond the schema, so baseline 3 applies.

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 the specific resource retrieved: a single slide of a presentation, along with all of its blocks including ids and complete props. The singular framing distinguishes it implicitly from get_slides and get_presentation, though no sibling is named.

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

Usage Guidelines2/5

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

No explicit when-to-use or when-to-use-instead guidance. The agent must infer from the singular 'one slide' that this is for retrieving a single known slide rather than listing (get_slides) or previewing (preview_slides). Nothing about prerequisites or alternatives is stated.

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

get_slidesGet some slides for editingA
Read-onlyIdempotent
Inspect

Some slides of a presentation you can see, with their blocks (ids and complete props) -- a part of a big presentation: "from_number" / "to_number" (1-based, inclusive) and/or "slide_ids"; "texts_only": true gives only the words of the blocks (html, tr, code), no geometry. Every slide has a "version": pass it as "base_version" when you change the slide. The answer also has the presentation's "version" and "slides_total".

NameRequiredDescriptionDefault
slugYesThe presentation's slug (its address: /movie/<slug>/).
slide_idsNoOnly these slides (ids).
to_numberNoOnly the slides up to this number (inclusive).
texts_onlyNoOnly the texts of the blocks (for reading, checking or translating), not their props.
from_numberNoOnly the slides from this number on (1-based).

Output Schema

NameRequiredDescription
idYes
urlNoThe address people open in a browser.
langNoThe language its texts are written in; "tr" holds the others.
slugYesThe address of the presentation: /movie/<slug>/.
ownerNoUser name of the author.
themeNo
titleNo
accessNoopen, public or private.
slidesYes
projectNoThe project it belongs to, or null.
versionNoStamp of the content as it is now: give it back as "base_version" to change it only if nobody else did meanwhile.
can_editNoWhether you may change it.
databaseNoSetup scripts of the databases of runnable code blocks (shown to the author only).
title_trNoThe same text in the other languages of the site: {"en": "..."}.
languagesNoThe languages of the site.
cover_slideNoId of the slide shown as its cover in the lists (null: an uploaded picture, or no slides).
descriptionNo
slides_totalNo
database_charsNoA part or the words only were read: how long each database script is (the whole presentation without "texts_only" gives them).
missing_translationsNoWhat is not translated yet into the other languages of the site (add it): the first ones; "missing_translations_count" says how many there are.
missing_translations_countNoHow many texts are not translated yet.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover read-only/idempotent/no-destruction, so the description correctly spends its words on beyond-annotation behavior: the per-slide version must be echoed as base_version on edits, and the response carries the presentation version and slides_total. It does not discuss size limits or how large ranges are handled.

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?

Core purpose is front-loaded in the first clause and every remaining clause carries information (selection axes, texts_only, version contract). The paragraph is dense and slightly run-on, but there is no filler.

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 an output schema present, the description needn't explain return shapes, yet it still names the key returned fields (version, slides_total) and the edit-time version contract. For a 5-parameter read tool, an agent has enough to select slides and feed a subsequent edit correctly.

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 earns above that by clarifying the range semantics (1-based, inclusive) and, importantly, what texts_only actually returns (words from html/tr/code blocks, no geometry). It leaves the interaction between slide_ids and the numeric range unstated.

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 (get some slides of a presentation) plus exactly what comes back: blocks with ids and complete props. It is clearly narrower than read_presentation/get_slide by describing partial selection via from_number/to_number/slide_ids, though it never names those siblings explicitly.

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?

The title and text frame it as the editing-oriented fetch, and it explains two concrete usage modes: texts_only=true for reading/checking/translating, and passing a slide's version as base_version when you change the slide. It stops short of explicit exclusions (e.g., when to prefer get_slide or read_presentation instead).

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

get_versionContent of a versionB
Read-onlyIdempotent
Inspect

What a presentation you may edit looked like in a version: "markdown" (default) -- its slides and texts as markdown; "json" -- the complete content.

NameRequiredDescriptionDefault
slugYesThe presentation's slug (its address: /movie/<slug>/).
formatNoResult format: "markdown" (default) or "json" (the complete content).
numberYesThe version number.

Output Schema

NameRequiredDescription
agentNo
authorNo
numberYes
changesNoWhat changed in this version.
contentNo
markdownNo
created_atNoISO 8601 date and time.
updated_atNoISO 8601 date and time.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered structurally. The description adds some value by characterizing what is returned (slides and texts as markdown, or complete content as json), but says nothing about permissions actually required, size limits, or behavior on a non-existent version number.

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?

A single compact sentence with the format options enumerated inline; nothing is wasted. The opening clause 'What a presentation you may edit looked like in a version' is slightly convoluted, which keeps it from a 5.

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 an output schema present, return values needn't be explained, and the schema covers all three parameters. However, the description omits how an agent obtains a valid version number and how this read relates to restore_version, which is a noticeable gap for a tool living among many version/history siblings.

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 description coverage is 100%, so the schema already documents slug, number, and format, and the enum with its default. The description repeats the format semantics ('markdown' default, 'json' complete content) rather than adding syntax or constraints beyond the schema. Baseline 3 applies when the schema carries the load.

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 names a specific verb+resource combo — retrieving the content of a version of a presentation — and the format clause clarifies what 'content' means. It is clear on its own but does not distinguish itself from siblings like list_history, restore_version, or read_presentation, so the agent must still infer where it fits.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance. The phrase 'a presentation you may edit' hints at a permission precondition but says nothing about when this tool should be chosen over list_history (finding the version number) or restore_version (reverting). No alternatives or exclusions are named.

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

import_presentationImport a PowerPoint or EaseWeb fileAInspect

Create a new presentation of yours from a PowerPoint file (.pptx) or an EaseWeb archive (.zip, as exported by the site): slides, texts with their formatting, shapes, pictures, backgrounds and links become editable blocks, the way the "Import" button of the site does it. Returns the new presentation (ids only unless "response" is "full") and "warnings" about what could not be converted. With "into" (the slug of a presentation you may edit) the file updates that presentation instead: slide N of the file replaces the blocks and the background of slide N, which keeps its id, so links to it, notes and history stay; unchanged texts keep their translations. "slides" limits it to some numbers of the file; slides of the file after the last one of the presentation are added. Its title, theme, slide names and database scripts stay.

NameRequiredDescriptionDefault
intoNoSlug of an existing presentation to update from the file (instead of creating a new one).
titleNoTitle of the new presentation (optional).
accessNoWho sees it (default "private": only you, until you publish it; "public": everybody reads it; "open": every signed-in person edits it too).
renameNoWith "into": give the slides the names the file has (default false: they keep theirs).
slidesNoWith "into": only these slide numbers of the file (1-based); all by default.
projectNoSlug of one of your projects to put the presentation in.
filenameNoName of the file, like "lecture.pptx" (its extension helps to recognise the format; without a title, it gives the title).
responseNo"brief" (default): only the ids, numbers and types of the slides and blocks; "full": every prop of every block too.
data_base64YesThe file, base64 (a data: URL prefix is allowed; at most 28 MB).
base_versionNoWith "into": the "version" of the presentation as you read it; refused (409) when it changed meanwhile.
remove_extraNoWith "into": remove the slides of the presentation after the last slide of the file (default false).

Output Schema

NameRequiredDescription
idYes
urlNoThe address people open in a browser.
langNoThe language its texts are written in; "tr" holds the others.
slugYesThe address of the presentation: /movie/<slug>/.
ownerNoUser name of the author.
themeNo
titleNo
accessNoopen, public or private.
slidesYes
projectNoThe project it belongs to, or null.
updatedNo
versionNoStamp of the content as it is now: give it back as "base_version" to change it only if nobody else did meanwhile.
can_editNoWhether you may change it.
databaseNoSetup scripts of the databases of runnable code blocks (shown to the author only).
title_trNoThe same text in the other languages of the site: {"en": "..."}.
warningsNoWhat could not be converted.
languagesNoThe languages of the site.
cover_slideNoId of the slide shown as its cover in the lists (null: an uploaded picture, or no slides).
descriptionNo
database_charsNoA part or the words only were read: how long each database script is (the whole presentation without "texts_only" gives them).
missing_translationsNoWhat is not translated yet into the other languages of the site (add it): the first ones; "missing_translations_count" says how many there are.
missing_translations_countNoHow many texts are not translated yet.

TDQS

A4.6/5.0
Behavior5/5

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

With annotations only declaring the safety flags, the description carries real weight: it explains that slide N replaces the blocks and background of slide N while keeping the id, notes, history and translations, that trailing slides of the file are appended, and that title/theme/slide names/database scripts are left untouched. It also discloses the response contract (ids only unless "full") and the 'warnings' channel for unconvertible content.

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?

Two paragraphs split cleanly along the create-vs-update axis, with the primary outcome and return shape front-loaded. A few sentences are long and clause-heavy (the 'into' paragraph chains four preservation rules), but each clause adds a distinct behavioral fact rather than restating the schema.

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 an 11-parameter mutation tool with an output schema, the description covers what an agent actually needs to decide: mode selection, in-place replacement scope, what survives, and that conversion problems surface as warnings rather than errors. Return-value detail is correctly left to the output schema and parameter detail to the 100%-covered input schema.

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 meaningfully enriches the hardest parameters: it explains the 'into' replacement semantics and the exact meaning of 'slides' (1-based slide numbers of the file, with trailing file slides added). Parameters like 'access', 'project', 'rename', 'remove_extra' and 'base_version' are left entirely to 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?

States a specific verb and resource ('Create a new presentation ... from a PowerPoint file (.pptx) or an EaseWeb archive (.zip)') and names the source formats and conversion behavior. It is clearly distinguishable from siblings like create_presentation (empty deck), copy_slides, and export_presentation.

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 explicitly lays out the two mutually exclusive modes: omit 'into' to create a new presentation, or pass 'into' to update an existing one in place. What is missing is a stated exclusion or pointer to alternatives (e.g., use create_presentation when you have no file), which keeps it short of a 5.

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

list_access_requestsAccess requestsB
Read-onlyIdempotent
Inspect

"incoming" (default): requests for access to YOUR presentations (pending ones, or all with include_decided); "outgoing": the requests you (or your agents) sent and their status.

NameRequiredDescriptionDefault
directionNo"incoming" (default): requests to you; "outgoing": requests you sent.
include_decidedNoAlso return approved and declined requests.

Output Schema

NameRequiredDescription
requestsYes

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, so the safety profile is covered. The description adds real behavioral context beyond them: the default result set is pending-only, and include_decided widens it to approved/declined, which is the kind of filtering default an agent needs and cannot get from annotations.

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?

Two compact clauses, no filler, and the most important distinction (incoming vs outgoing) is front-loaded. The fragment format is terse to the point of being slightly telegraphic, but nothing is wasted.

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 an output schema present the description needn't explain return values, and annotations cover safety; the description fills the remaining gap about defaults and mode semantics. It stops short of relating this tool to answer_access_request/request_access, which would make the picture fully complete.

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 description coverage is 100%, so both parameters are already documented and the baseline is 3. The description largely restates the enum semantics, adding only the emphasis on 'YOUR presentations' and the pending-default behavior for include_decided, which is modest value over the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description never states the operation itself (listing/inspecting access requests); it only elaborates on the direction modes, leaning on the tool name to convey the verb. A reader can infer it enumerates access requests, but the definition starts mid-thought rather than declaring the resource and action.

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 clarifies the two modes (incoming = requests to your presentations, outgoing = requests you or your agents sent) and when pending-vs-all applies, which is useful implied routing. However, it never points to the related siblings that would be alternatives (answer_access_request, request_access, get_access), so the agent must guess how this differs from those.

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

list_commentsRead the notesA
Read-onlyIdempotent
Inspect

Notes on a presentation, as threads with replies. Anyone who can view the presentation sees all its notes. Without "include_resolved" only open threads.

NameRequiredDescriptionDefault
slugYesThe presentation's slug (its address: /movie/<slug>/).
slide_idNoThe id of a slide (stable, the "id" of the slide in the presentation). Its number (position) changes when slides are reordered.
include_resolvedNoAlso return resolved threads (default: only open ones).

Output Schema

NameRequiredDescription
commentsYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent and non-destructive, so safety is covered. The description adds genuinely new context: the permission model ('Anyone who can view the presentation sees all its notes'), which tells the agent results are not scoped to the caller's own authorship.

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?

Three short sentences with the return shape front-loaded and the default-filter rule last. No filler, though the include_resolved sentence partially duplicates the schema and could be trimmed or used to say something the schema does not.

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 an output schema, full parameter coverage and rich annotations, the definition only needs to add the permission/visibility model, which it does. Missing only a note on whether slide_id narrows scope to one slide's threads.

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 description coverage is 100%, so all three parameters including slug and slide_id are already documented. The description restates the include_resolved default, which the schema itself already states ('default: only open ones'), adding no new syntax or edge-case meaning.

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 names the resource (notes/comment threads on a presentation) and return shape (threads with replies), which lets an agent distinguish it from add_comment, delete_comment and resolve_comment. It lacks an explicit verb, relying on the noun phrase plus the title 'Read the notes' to convey retrieval.

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?

The only usage-relevant statement is the default filtering rule ('Without include_resolved only open threads'), which is implied guidance rather than an explicit when-to-use. No exclusions or named alternatives (e.g. use add_comment to write) are given, so sibling selection is inferred from name alone.

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

list_historyHistory of changesA
Read-onlyIdempotent
Inspect

The versions of a presentation you may edit, newest first: number, who made it (person and agent), when, and what changed. Changes of one author in a row within 10 minutes are one version. Those who may only read a presentation do not see its history.

NameRequiredDescriptionDefault
slugYesThe presentation's slug (its address: /movie/<slug>/).
limitNoAt most this many (default 50).

Output Schema

NameRequiredDescription
versionsYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already establish readOnly, idempotent, non-destructive and closed-world behavior, so the bar is lower, and the description still adds real semantics beyond them: the newest-first ordering, the non-obvious aggregation rule (one author's consecutive changes within 10 minutes collapse to a single version), and the permission-based visibility rule. It omits pagination/limit behavior, but the added behavioral context is substantive.

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?

Three sentences, each carrying distinct information, front-loaded with the resource and its ordering. There is no filler; the only slight cost is that the opening sentence is dense with the returned-field list.

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

Completeness4/5

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

An output schema exists, so return values need not be explained in prose, and the description still covers ordering, the version-grouping rule, and the visibility constraint. For a two-parameter read-only list tool this is nearly complete; only pagination behavior around limit is left unstated.

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 description coverage is 100%, with both slug and limit fully documented in the schema (including the default of 50). The description adds no extra meaning to either parameter, so the baseline of 3 applies.

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 states a specific resource and its scope: versions of a presentation the caller may edit, returned newest first, with the fields it exposes (number, author, timestamp, diff). It is clear and distinguishable, but it never names or contrasts with the closely related siblings get_version and restore_version, so sibling differentiation is left to inference.

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?

Usage context is implied rather than stated: it tells you the history is only visible to those who can edit, which implicitly routes read-only users away. However, it gives no explicit guidance on when to call this versus get_version (single version) or restore_version (revert), so the agent must infer the boundary.

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

list_presentationsList presentationsB
Read-onlyIdempotent
Inspect

Presentations: "mine" (default) -- yours; "shared" -- other people's that you were given access to; "open" -- open presentations of anybody, which every signed-in person or agent may read and edit. Each has slug, id, title, description, theme, access level, whether you can edit it, number of slides, address and its project (if any).

NameRequiredDescriptionDefault
scopeNoWhich presentations: "mine" (default), "shared" with you, or "open" ones of anybody.
projectNoOnly the presentations of this project (its slug), in its order; "scope" is then ignored.

Output Schema

NameRequiredDescription
presentationsYes

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The one genuine addition is the access semantics — that "open" presentations are readable and editable by anyone signed in — which is real behavioural context. The rest of the text (the field list) largely restates what the output schema already provides.

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 short with no filler sentences, but it is not front-loaded: the first token is a colon-terminated fragment rather than a statement of the action, and the line break mid-sentence makes it read like a clipped doc snippet. The most useful information (that this lists presentations filtered by scope) has to be reconstructed by the reader.

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 an output schema and full annotation coverage, the return shape and safety profile are already handled, so the description only needs to anchor purpose and selection rules — and it half does that. Missing are any statement of ordering/pagination and the project-overrides-scope rule, so an agent could still call it correctly but without full confidence about result ordering.

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 the scope enum is already documented in the schema with the same wording. The description adds a minor gloss on visibility/permissions per scope but nothing about ordering, pagination, or the project-vs-scope precedence (that constraint lives only in the project parameter's schema text). Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description never states a verb — it opens with the fragment "Presentations:" and then enumerates scope values and returned fields. The listing behaviour is inferable from the name/title and the scope enumeration, but an agent must read the whole text to conclude what the call actually does. It gives no explicit differentiation from siblings like get_presentation or list_projects.

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?

Scope semantics are spelled out well enough to imply when each variant applies (mine/shared/open), including that "open" material is editable by any signed-in person or agent. However there is no explicit routing guidance (e.g. use this to enumerate, then get_presentation for full content) and no mention of the interaction with the project parameter overriding scope, which only appears in the schema.

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

list_projectsList projectsB
Read-onlyIdempotent
Inspect

Projects: presentations that belong together (a course, a series of lessons). Yours and those of other people that you were given access to, each with its presentations in order. Blocks may lead to the slides of the other presentations of the same project, and only of it.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
projectsYes

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds useful scope context (your projects plus those you were granted access to, with presentations in order), but the trailing sentence about blocks leading to slides of other presentations is confusing and does not clearly describe this tool's behavior.

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 domain definition is front-loaded, which is reasonable, but the last sentence is opaque and arguably off-topic for a list operation, diluting otherwise compact prose.

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 an output schema present and rich annotations, the description is not required to explain return values or safety, and it does supply the access scope. However, it omits any routing information among the many sibling tools and ends with a sentence that confuses rather than completes the picture.

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?

The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies for a parameterless tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description defines what a project is ('presentations that belong together') and describes the scope of what is returned, but never states the action verb directly — the listing behavior is carried entirely by the name/title. It also does not distinguish this tool from siblings like get_project or list_presentations, so the agent must infer the distinction from naming alone.

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

Usage Guidelines2/5

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

There is no when-to-use guidance and no alternative named; nothing tells the agent to prefer get_project for a single project or list_presentations for presentations. The access-scope sentence implies coverage but not when this call is appropriate.

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

name_slides_after_titlesName the slides after their titlesAInspect

Give every slide of a presentation you may edit the name of its title: the text block with the biggest letters (the highest one of those), in every language it is written in. Slides whose names were set by hand get the title too; slides without text keep theirs. From then on a slide named after its title keeps following it when the title changes. Returns the renamed slides.

NameRequiredDescriptionDefault
slugYesThe presentation's slug (its address: /movie/<slug>/).

Output Schema

NameRequiredDescription
renamedYesThe slides that got the name of their title.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare it is a write (readOnlyHint=false), non-idempotent, and non-destructive, but the description adds genuinely new behavior: manually-set names are overwritten, slides without text are left alone, and the new name persists and re-follows later title changes. Disclosing the overwrite of hand-set names is valuable context beyond the safety hints, though it stops short of stating auth specifics or exact return shape.

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 behavior is front-loaded, but the prose is convoluted, especially 'the text block with the biggest letters (the highest one of those)', which forces the agent to parse a nested clarification. Every sentence carries information, but the structure is denser and more awkward than needed.

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 single-parameter write tool with an output schema present, the description gives a thorough account of the algorithm, its persistence behavior, and its edge cases (hand-named slides, textless slides). The main remaining gap is the absence of explicit usage/alternative guidance, which is minor given the detailed behavior.

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?

The single slug parameter is fully documented in the schema (100% coverage), including its /movie/<slug>/ format. The description adds no syntax or meaning beyond that, so the baseline 3 for schema-driven parameters applies.

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 names a specific verb (name) and resource (every slide of a presentation) and defines the mechanism precisely: the title is 'the text block with the biggest letters'. It is clearly distinguishable from generic siblings like update_slide or edit_slides, though it never explicitly contrasts itself with those.

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?

Usage is only implied via the prerequisite 'a presentation you may edit', which conveys a permission requirement but not an explicit when-to-use or when-not-to-use rule. No alternative (e.g. update_slide) is named or routed to, so the agent must infer placement from the sibling list.

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

preview_slidesSee slides as picturesA
Read-onlyIdempotent
Inspect

Pictures (PNG) of slides exactly as viewers see them, drawn by a browser on the server: check that the texts fit their blocks, that blocks do not lie over each other and that the slide looks right. At most 6 slides per call: the first ones of "slide_ids" or of "from_number".."to_number" (slide 1 by default). Every picture is "width" px wide. The answer also has the "layout_warnings" of those slides, measured in the same browser.

NameRequiredDescriptionDefault
langNoLanguage of the texts on the pictures (default: the language of the presentation).
slugYesThe presentation's slug (its address: /movie/<slug>/).
widthNoWidth of the pictures in px (default 960; more shows small text better, but a picture costs more to look at).
slide_idsNoOnly these slides (ids).
to_numberNoOnly the slides up to this number (inclusive).
from_numberNoOnly the slides from this number on (1-based).

Output Schema

NameRequiredDescription
moreNoSlides asked for but not drawn (ask for them in another call).
slidesYes
slides_totalNo
layout_warningsNoHow the changed slides will probably look: texts too long for their blocks, blocks outside the slide, texts over each other (estimated -- look at them).

TDQS

A4.3/5.0
Behavior4/5

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

Beyond the readOnly/non-destructive annotations, it discloses that rendering happens in a server-side browser, that there is a hard cap of at most 6 slides per call, and that layout_warnings are returned alongside the images. It does not explain failure modes (e.g., rendering timeouts, what happens if a slide id is out of range), and the return payload is partly covered by the 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?

Densely packed with the essential facts (output type, renderer, cap, selection rule, width, warnings) and front-loaded with the core purpose. The sentences are long and slightly run-on, with a small amount of restatement of the schema's width behavior.

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 read-only rendering tool with a full output schema and full schema coverage, the description covers purpose, limits, and selection behavior adequately. It leaves a gap only around how this relates to the sibling layout-check tool and around error conditions.

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 parameters are already documented; the description adds precedence semantics not in the schema — that the 6-slide limit takes the first entries of slide_ids or of the from_number..to_number range, and that slide 1 is the default. That selection-order detail is genuinely useful and goes past the schema text.

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 description gives a concrete verb and resource ('Pictures (PNG) of slides ... drawn by a browser on the server') and immediately frames the output as a visual rendering, which separates it from sibling readers like get_slides or check_layout. It also states what the pictures are useful for, so the agent knows it is not just another slide-metadata call.

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 gives a clear use condition: verify that text fits its blocks, blocks don't overlap, and the slide 'looks right' — i.e., visual QA where structural checks are insufficient. It does not, however, mention the obvious alternative check_layout or when that cheaper option should be preferred over rendering PNGs.

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

read_presentationRead any presentationA
Read-onlyIdempotent
Inspect

Read any presentation you can see (not private, or shared with you) the way a person sees it: slide by slide, the texts in reading order, pictures' descriptions, code, and where every button or link leads. A card (a shape with a link and the blocks on it that lead to the same place) is one entry of type "card" with the ids of all its blocks. format "markdown" (default) is compact; "json" is structured.

NameRequiredDescriptionDefault
langNoRead the texts in this language (default: the one it is written in); what is not translated shows in its own language.
slugYesThe presentation's slug (its address: /movie/<slug>/).
formatNoResult format: "markdown" (default, compact) or "json" (structured).
slide_idsNoOnly these slides (ids).
to_numberNoOnly the slides up to this number (inclusive).
from_numberNoOnly the slides from this number on (1-based).

Output Schema

NameRequiredDescription
idNo
urlNoThe address people open in a browser.
langNoThe language its texts are written in; "tr" holds the others.
slugNoThe address of the presentation: /movie/<slug>/.
ownerNoUser name of the author.
themeNo
titleNo
accessNoopen, public or private.
slidesNo
projectNoThe project it belongs to, or null.
versionNoStamp of the content as it is now: give it back as "base_version" to change it only if nobody else did meanwhile.
can_editNoWhether you may change it.
markdownNo
title_trNoThe same text in the other languages of the site: {"en": "..."}.
languagesNoThe languages of the site.
shown_langNoThe language of the texts shown.
cover_slideNoId of the slide shown as its cover in the lists (null: an uploaded picture, or no slides).
descriptionNo
slides_totalNoSlides of the whole presentation (a part may be shown).
missing_translationsNoWhat is not translated yet into the other languages of the site (add it): the first ones; "missing_translations_count" says how many there are.
missing_translations_countNoHow many texts are not translated yet.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already establish readOnly/idempotent/non-destructive/openWorld=false, so the safety profile is covered. The description still adds real value: it discloses what the output contains (reading order, image descriptions, code, link destinations), the 'card' grouping semantics with its block ids, and the compact-vs-structured tradeoff of the two formats.

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?

Two sentences, purpose front-loaded, and the card detail is placed immediately before the format note where it matters. Slightly dense — the parenthetical defining a card is long — but no filler sentences.

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 an output schema present, the description need not explain return values, yet it does sketch the shape (per-slide entries, card entries with block ids) and the format choice. Combined with 100% schema coverage and read-only annotations, an agent has everything needed 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 description coverage is 100%, so the baseline is 3. The description restates the format enum ('markdown' default/compact, 'json' structured) without adding anything the schema lacks, and says nothing about lang, slide_ids, or the from_number/to_number windowing.

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 concrete verb and resource and frames the result precisely: reading a presentation 'the way a person sees it' — slide by slide, texts in reading order, image descriptions, code, and link targets. That framing implicitly separates it from a raw data fetch, but no sibling (get_presentation, get_slides, preview_slides) is named to anchor the difference.

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?

Access scope is stated ('any presentation you can see (not private, or shared with you)'), which is useful, but there is no explicit when-to-use rule and no comparison to the several sibling read tools (get_presentation, get_slide, get_slides, preview_slides). The agent must infer that this is the human-readable rendering path rather than having it stated.

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

reorder_slidesReorder slidesA
Idempotent
Inspect

Set the playback order: "order" lists the ids of ALL slides of the presentation in the new order.

NameRequiredDescriptionDefault
slugYesThe presentation's slug (its address: /movie/<slug>/).
orderYesEvery slide id, once.

Output Schema

NameRequiredDescription
orderYes

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare this is a non-readonly but non-destructive, idempotent mutation. The description adds genuinely useful behavioral context beyond that: the order array must contain ALL slides, implying full-replacement semantics where a partial list is invalid. It still does not say what happens if ids are missing or repeated (error vs. silent drop), which is the main remaining gap.

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?

A single compact sentence that front-loads the action ('Set the playback order') and then explains the key parameter. The nested colon-and-quotes construction is slightly awkward but wastes no words.

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

Completeness4/5

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

An output schema exists, so return values need not be explained, and annotations cover the safety profile. For a two-parameter idempotent mutation the description covers the essential constraint, leaving only the failure behavior for incomplete or invalid orders unstated.

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 description coverage is 100% and both parameters are documented in the schema, including 'Every slide id, once.' The description reinforces the same completeness constraint on 'order' but adds no new syntax, format, or edge-case detail, so the baseline of 3 applies.

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: set the playback order of a presentation's slides, identified by slug and an id list. It is clearly distinct from siblings like add_slide, delete_slide, and edit_slides, though it never names those alternatives explicitly.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance, no mention of prerequisites (e.g., needing the presentation to exist, or permissions), and no routing to alternative tools such as edit_slides for non-order edits. Usage is only inferable from the verb itself.

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

replace_textFind and replaceAInspect

Find and replace words in a whole presentation you may edit, in one step: the texts of text, shape and button blocks (in every language by default, or only "langs"), the slide names, and with "in_code": true the code of code blocks. Formatting stays (the words are replaced inside it; a phrase split by formatting, like half of it bold, is not found). The number of an automatic slide reference ({{slide:N}}) is not text and is not found: it changes by itself when slides move; to point a reference to another slide, write the block's html with a new {{slide:N}}. "regex": true makes "find" a Python regular expression ("replace" may use \1). "dry_run": true only counts. Returns how many were replaced on which slides.

NameRequiredDescriptionDefault
findYesWhat to find (at most 500 characters).
slugYesThe presentation's slug (its address: /movie/<slug>/).
langsNoOnly these languages of the texts (default: all).
regexNo"find" is a regular expression (default: plain text).
dry_runNoOnly count, change nothing.
in_codeNoThe code of code blocks too (default: false).
replaceYesWhat to put instead (may be empty).
in_namesNoThe names of the slides too (default: true).
slide_idsNoOnly these slides (ids).
to_numberNoOnly the slides up to this number (inclusive).
match_caseNoCase matters (default: true).
from_numberNoOnly the slides from this number on (1-based).
base_versionNoOptional: the "version" of the presentation as you read it; refused when it changed meanwhile.

Output Schema

NameRequiredDescription
slidesYes
dry_runNo
versionNoStamp of the content as it is now: give it back as "base_version" to change it only if nobody else did meanwhile.
replacedYesHow many places were (or, with dry_run, would be) changed.
layout_warningsNoHow the changed slides will probably look: texts too long for their blocks, blocks outside the slide, texts over each other (estimated -- look at them).

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare the generic mutation profile (readOnly=false, destructive=false, idempotent=false); the description adds non-obvious behavioral facts an agent could not infer: formatting is preserved but a phrase split by formatting is not matched, {{slide:N}} references are not treated as text, and the return value reports counts per slide. These are exactly the surprises that would cause silent failure.

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 core action and tightly packed, with caveats following the primary statement. Some density and parenthetical nesting (the formatting-split example, the reference aside) make it slightly harder to scan, but no sentence is filler.

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 13-parameter mutation tool with annotations and an output schema, the description covers scope, matching rules, formatting behavior, dry-run, and return shape. It stays silent on edge cases such as how match_case interacts with regex: true and whether the slide-selection parameters combine, which leaves a small 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%, so baseline is 3, but the description adds meaning beyond the schema: it clarifies that langs defaults to all languages, that in_code must be opted into, and — most valuably — that with regex: true the 'replace' string may use \1 backreferences, which the schema does not say. Minor combination semantics (slide_ids vs from_number/to_number) remain unaddressed.

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+resource ('Find and replace words in a whole presentation') and enumerates the exact surfaces affected: text/shape/button block texts, slide names, and code blocks when in_code is true. An agent can distinguish this bulk-replace tool from edit_blocks or update_slide without opening schemas.

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 operational conditions — regex: true for Python regex, dry_run: true to only count, in_code: true to include code — and explicitly redirects one case to a different mechanism ('to point a reference to another slide, write the block's html with a new {{slide:N}}'), which implies edit_blocks. It never names an alternative tool outright or says when not to use this one, so it falls short of a 5.

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

request_accessAsk for accessAInspect

Ask the author of a presentation for access: "view" to read a private one, "edit" to change one that is not open. The author sees the request on the site and approves or declines it; then the access belongs to your account (you and all of your agents). Asking again updates the pending request.

NameRequiredDescriptionDefault
roleNo"view" -- read; "edit" -- read and change.
slugYesThe presentation's slug (its address: /movie/<slug>/).
messageNoWhy you need it (optional).

Output Schema

NameRequiredDescription
idYes
roleNoview or edit.
userNoWho asks.
agentNo
titleNoIts title; null while you may not see it (a private one you asked for).
statusYespending, approved or declined.
messageNo
projectNoSlug of the project, for access to all of it.
created_atNoISO 8601 date and time.
presentationNoSlug of the presentation (null: a project).

TDQS

A4.3/5.0
Behavior5/5

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

Beyond annotations, it explains the approval workflow: the author sees and approves or declines the request, access attaches to the account including all agents, and asking again updates the pending request. These are important behavioral details not captured by 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.

Conciseness5/5

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

The description is front-loaded with the purpose and then sequentially explains roles, approval flow, account scope, and repeat behavior. It is compact and every sentence contributes useful information.

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?

Given the full schema descriptions, annotations, and output schema, the description supplies the missing workflow context: pending approval, account-level access, and behavior when asking again. Nothing essential for correct invocation is missing.

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 description coverage is 100%, so the schema already explains slug, role, and message. The description reinforces the role meanings but adds little parameter-level detail beyond what the schema provides, making the baseline 3 appropriate.

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 states a specific verb and resource: requesting access to a presentation, with the two possible roles. It distinguishes presentation access from project access by naming the resource explicitly, though it does not name the sibling tool request_project_access.

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 gives clear usage conditions: use "view" to read a private presentation and "edit" to change one that is not open. It does not explicitly cover when to use this versus set_access, get_access, or request_project_access, but the main scenario is clear.

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

request_project_accessAsk for access to a projectAInspect

Ask the author of a project for access to all of it: "view" to read its private presentations, "edit" to change them. Approved access counts for every presentation of the project, also the ones added later.

NameRequiredDescriptionDefault
roleNo"view" -- read; "edit" -- read and change.
messageNoWhy you need it (optional).
projectYesThe project's slug (its address: /project/<slug>/).

Output Schema

NameRequiredDescription
idYes
roleNoview or edit.
userNoWho asks.
agentNo
titleNoIts title; null while you may not see it (a private one you asked for).
statusYespending, approved or declined.
messageNo
projectNoSlug of the project, for access to all of it.
created_atNoISO 8601 date and time.
presentationNoSlug of the presentation (null: a project).

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare non-read-only, non-destructive, non-idempotent, closed-world. The description adds real context beyond them: the request goes to the author and approval propagates to every presentation in the project, including ones added later. It does not say whether repeat calls re-notify the author or what state the request starts in.

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

Conciseness5/5

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

A single front-loaded sentence with the scope guarantee tacked on where it matters. No filler, no repetition of the tool title.

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?

Output schema exists and annotations cover safety, so the description need not explain return values. It is nearly complete for a 3-param mutation; the only omission is post-call behavior on repeated requests and how this differs from the per-presentation request_access sibling.

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 description coverage is 100% and the enum values are already documented in the schema, so the description only restates what 'view' and 'edit' mean. Baseline 3 applies; no additional syntax or edge-case guidance (e.g., what default role is used when role is omitted) is offered.

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+resource (ask for access to a project) and defines the two roles inline. The scope phrase 'all of it... counts for every presentation of the project' implicitly separates it from the sibling request_access, but it never names that alternative explicitly.

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?

Usage is only implied: an agent can infer you call this when you lack access to a project, but there is no statement of when to prefer it over request_access, what happens if access already exists, or what prerequisites (e.g., being able to see the project slug) apply.

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

resolve_commentResolve a noteAInspect

Mark a thread as done (or open it again with "resolved": false). The owner of the presentation or the one who started the thread may do it.

NameRequiredDescriptionDefault
resolvedNoDefault true.
comment_idYesThe id of a note.

Output Schema

NameRequiredDescription
idYes
resolvedYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations say destructiveHint=false and readOnlyHint=false; the description adds the authorization rule (who may resolve), which is exactly the kind of context annotations don't carry. It doesn't mention idempotency or reversibility explicitly, though the resolved:false path implies reversibility.

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?

Two short sentences: action + toggle first, permission rule second. Nothing wasted, though the permission clause is slightly under-integrated.

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 two-parameter toggle with an output schema and full annotation coverage, the description covers what it does, the reopen path, and who can call it. Return values are covered by the output schema; idempotency behavior is the only minor gap.

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 the schema already documents both comment_id and resolved (including the default true). The description restates the resolved:false toggle, adding a little semantic framing but nothing beyond the schema. Baseline 3.

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 (mark) and resource (a thread/note), and clarifies the toggle to reopen via resolved:false. Toggling resolve vs. open is distinguishable from sibling delete_comment or add_comment, though it doesn't explicitly contrast with them by name.

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?

Conveys the permission model – owner of the presentation or thread starter may do it – which is a real usage constraint. But it doesn't explicitly say when to choose resolve vs. reopen beyond the parameter flip, and names no alternative tools.

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

restore_versionGo back to a versionAInspect

Make a presentation you may edit look exactly as it did in a version (slides, blocks, order, title). The restore is a new version itself, so it can be undone the same way.

NameRequiredDescriptionDefault
slugYesThe presentation's slug (its address: /movie/<slug>/).
numberYesThe version number.

Output Schema

NameRequiredDescription
versionNo
restoredYesThe version that was brought back.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations only give the generic mutation profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false). The description adds genuinely new behavioral context: the restore is itself a new version, so it is undoable the same way, and an edit permission is implied. That is useful disclosure beyond the structured fields, though auth requirements and failure modes remain unstated.

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

Conciseness5/5

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

Two short sentences, front-loaded with the action and scope, then the reversibility caveat. Every clause earns its place with no redundancy.

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 annotations covering the safety profile and an output schema covering return values, the description supplies the key missing piece (undo semantics) and the edit precondition. It is complete enough to call correctly, with only minor gaps around permissions and error behavior.

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% (slug and number both documented in-schema), so the schema carries the parameter burden. The description adds no format or constraint detail beyond it; baseline 3 is appropriate.

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 ('make ... look exactly as it did') and resource (a presentation version), and enumerates the restored scope (slides, blocks, order, title). An agent can distinguish it from read-only siblings like get_version or list_history, though no sibling is named explicitly.

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?

'A presentation you may edit' implies an edit-permission precondition, and the tool's role (reverting to a prior version) is inferable from context. However, there is no explicit when-to-use guidance, no statement of when to prefer it over update_presentation/edit_slides, and no exclusions.

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

run_codeRun codeAInspect

Run code the way the Run button of a code block does, to check it: "sql", "mongodb", "redis" and "clickhouse" run in your own database of the presentation (made from its database scripts; what you change stays in it), "python" and "bash" in a sandbox without network that keeps nothing. The presentation itself does not change.

NameRequiredDescriptionDefault
codeYesThe code (at most 20000 characters).
langYesLanguage of the code.
slugYesThe presentation's slug (its address: /movie/<slug>/).
resetNosql, mongodb, redis, clickhouse: first make your database again from the script of the presentation.

Output Schema

NameRequiredDescription
langYes
stderrNo
stdoutNo
noticesNo
omittedNo
resultsNo
exit_codeNo
sql_errorNo
timed_outNo
elapsed_msNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only give generic hints (readOnlyHint=false, idempotentHint=false); the description adds the crucial side-effect model: sql/mongodb/redis/clickhouse mutate a persistent presentation-scoped database ('what you change stays in it'), while python/bash run sandboxed with no network and no retention. It also explicitly reassures the presentation itself is untouched, which is high-value context beyond the 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?

Densely packed and front-loaded with the purpose, and nearly every clause carries information (language groups, persistence, sandbox, presentation safety). It is a single run-on sentence that would be easier to parse if split, which keeps it from a 5.

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?

An output schema exists so return values need not be described, and annotations plus the description together cover the safety and side-effect profile. For a code-execution tool the agent has everything needed: what runs, where it runs, what persists, and what is left untouched.

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 real meaning: it partitions the lang enum into two groups with distinct execution and persistence semantics that the schema's bare 'Language of the code.' does not convey. The reset parameter's effect is only covered by the schema, not the description, keeping it from a 5.

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 ('Run code the way the Run button of a code block does') and immediately scopes the intent ('to check it'). No sibling tool executes code, and the description makes that distinct role obvious 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?

The stated purpose ('to check it') clearly frames the use case for verification, and the language groups imply when each mode is appropriate. It offers no explicit when-not or named alternatives, but the tool is unique enough among siblings that this is a minor gap.

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

set_accessChange accessAInspect

Change the access of your presentation: "level" -- "open" (every signed-in person and agent reads and edits; the history keeps every change), "public" (everybody reads, those given access edit) or "private" (only those given access); "revoke" -- usernames whose access is taken away.

NameRequiredDescriptionDefault
slugYesThe presentation's slug (its address: /movie/<slug>/).
levelNoNew access level: "open", "public" or "private".
revokeNoUser names whose access is taken away.

Output Schema

NameRequiredDescription
levelYesopen, public or private: the presentation's own level.
grantsNo
project_levelNoThe level of its project, if any.
effective_levelNoThe level that counts (the project's one when stricter).
pending_requestsNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false; the description adds real semantic content beyond that — what 'open' actually grants (edit rights for all signed-in users and agents, with full history retention), the public read/edit split, and that 'revoke' removes named users. It does not disclose required permissions or whether a level change is reversible, which is the remaining gap for a mutation 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-loaded with the action and resource, then the parameter semantics in a single dense sentence with no filler. The heavy quoting and inline parentheticals make it slightly harder to scan than a bulleted breakdown would be, but nothing is wasted.

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?

An output schema exists, so return values need not be explained. With all three parameters documented in the schema and the enum consequences spelled out here, an agent has everything required to invoke it correctly; only secondary details like permission requirements are 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% so the baseline is 3, but the description genuinely adds meaning the schema lacks: it defines the consequences of each enum value rather than restating 'open, public or private'. The revoke parameter is described only as 'usernames whose access is taken away', which mirrors the schema without adding much.

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 ('Change the access of your presentation') and enumerates the two mutation modes, so an agent can distinguish it from get_access or request_access. It stops short of naming the read-side siblings explicitly, so the differentiation is inferred rather than stated.

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?

Usage is implied by the verb-plus-modes framing: use this to modify access levels or revoke named users. There is no explicit when-to-use vs. when-not guidance, and no mention of the prerequisite that the caller presumably must be an owner or admin — the agent must infer it from the sibling set (get_access, answer_access_request).

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

set_glossaryChange the glossary of the translationB
Idempotent
Inspect

Tell the machine translator how to translate terms: {"en": {"стенд, стенде, стенда": "lab", "засечки, засечек": "marks", "Занятие": "Lesson"}} -- the target language, the term with the forms of it that differ (separated by commas) and its translation. For a presentation ("slug", you may edit it) or for all of a project ("project", yours). The entries are added to the glossary; an entry with "" as its translation is taken out; "replace": true replaces the whole glossary. The machine translations of the texts with these terms are made again (translations written by people stay).

NameRequiredDescriptionDefault
slugNoThe presentation (its slug) -- or give "project".
projectNoThe project (its slug): its glossary counts for all its presentations.
replaceNoReplace the whole glossary (default: add to it).
glossaryYes{"<language>": {"<term, its forms>": "<translation>"}}.

Output Schema

NameRequiredDescription
projectNoThe project of the presentation, if any.
glossaryYes{"<language>": {"<term, its forms>": "<translation>"}}.
translatorNoWhether the site has a machine translator.
project_glossaryNoThe glossary of that project (counts too).

TDQS

B3.1/5.0
Behavior1/5

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

The description discloses destructive behavior that conflicts with the annotation destructiveHint=false: it states that 'replace': true replaces the whole glossary and that an entry whose translation is "" is taken out. Removing or wholesale overwriting glossary entries is a destructive update, so the annotation and the description disagree. Per the rubric this is an annotation contradiction, which caps this dimension.

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 description is front-loaded with the core action, but it is one dense run-on block with an embedded, awkwardly quoted JSON sample in the middle and stacked clauses about add/remove/replace and re-translation. It earns most of its length given the tool's complexity, but the structure could be broken into clearer rules.

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 4-parameter, nested-object mutation tool with an output schema (so return values need not be described), the description covers target selection, add/remove/replace semantics, and the side effect that machine translations are regenerated while human translations are preserved. The remaining gap is the absence of any access/permission prerequisite and no pointer to closely related siblings.

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 baseline is 3, and the description adds genuine meaning beyond the schema: it explains the comma-separated term forms as inflected variants of the same term, and introduces the empty-string translation as the removal signal, which appears nowhere in the property descriptions. Scope resolution (slug vs 'project') is clarified consistently with 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?

The description states a concrete verb and resource: tell the machine translator how to translate terms by setting a glossary, with an inline example of the accepted data shape. It implicitly separates itself from the read-side sibling get_glossary and from translate_presentation (which it says is re-triggered for affected texts), but it never names a sibling explicitly. Clear purpose, no explicit differentiation.

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?

Usage is implied rather than stated: the text explains that entries are added by default, removed via an empty translation, and wholesale replaced with replace=true, and that the target is either a presentation slug or the whole project. There is no explicit "use this when / instead of X" guidance and no mention of get_glossary, translate_presentation or set_language as alternatives, so an agent must infer the routing.

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

set_languageChange the language of a presentationAInspect

Say which language the texts of a presentation you may edit are written in, when the site guessed it wrong (all its texts are Russian, but it was made English). Every text, slide name and the title is put right: where a translation into the new language exists, it becomes the text and the text becomes the translation into the old language; texts that are in the new language already stay; the ones that are in neither are listed as "untranslated". Returns the counts and what is still to translate.

NameRequiredDescriptionDefault
langYesThe language the texts are written in.
slugYesThe presentation's slug (its address: /movie/<slug>/).

Output Schema

NameRequiredDescription
keptNoTexts that were in the language already.
langYes
swappedNoTexts whose translation became the text.
untranslatedNoTexts in neither language.
previous_langNo
untranslated_blocksNoThe first of those blocks.
missing_translationsNoWhat is not translated yet into the other languages of the site (add it): the first ones; "missing_translations_count" says how many there are.
missing_translations_countNoHow many texts are not translated yet.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare the mutation profile (readOnly=false, destructive=false, idempotent=false), and the description adds substantial behavior beyond them: which elements are affected (texts, slide names, title), that existing translations are swapped rather than overwritten, that already-correct texts stay untouched, and that unmatched texts are surfaced as 'untranslated'. What is missing is the access requirement beyond the vague 'a presentation you may edit' and any note about whether the swap can be undone.

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?

All the information is relevant, but the delivery is a run-on sentence with the usage condition buried in a mid-sentence clause and an awkward register ('is put right'). Restructuring as 'what it does / when to use / what it changes' would cost fewer words and front-load the purpose.

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 an output schema present and annotations covering safety, the description's job is behavioral explanation, which it largely delivers: affected fields, swap semantics, untouched texts, and the untranslated bucket. Only the permission model and reversibility are left implicit for a non-idempotent write tool.

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

Parameters3/5

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

Schema coverage is 100% and the lang enum (ru/en) is documented, so the schema already carries the parameter burden. The description adds the crucial framing that lang is the language the texts are currently written in and that the mismatch scenario is the point, but it does not elaborate on slug handling or edge cases, so baseline 3 applies.

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 makes clear this tool declares/corrects the language a presentation's texts are written in, and then re-pairs texts with their translations. The verb is phrased indirectly ('Say which language the texts ... are written in') rather than as 'set/change', and it never names the sibling translate_presentation, so the agent must infer the boundary itself.

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 gives a concrete triggering condition: use it 'when the site guessed it wrong (all its texts are Russian, but it was made English)'. That is a clear when-to-use signal, but there is no explicit when-not and no reference to alternatives like translate_presentation, which an agent could easily confuse with this tool.

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

set_speaker_notesWrite the speaker notes of a slideA
Idempotent
Inspect

What the speaker says on a slide: plain text that viewers do not see on the slide. Those who may edit the presentation read it with the slide ("notes"); an export to PowerPoint puts it into the notes under the slide, and an import reads PowerPoint's notes. "" removes the notes.

NameRequiredDescriptionDefault
slugYesThe presentation's slug (its address: /movie/<slug>/).
notesYesThe notes, plain text (up to 20000 characters).
slide_idYesThe id of a slide (stable, the "id" of the slide in the presentation). Its number (position) changes when slides are reordered.

Output Schema

NameRequiredDescription
notesYesThe notes now.
slide_idYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=false, idempotent=true, destructiveHint=false), so the bar is lower. The description adds real context beyond them: the notes are visible to those who may edit the presentation, they round-trip through PowerPoint import/export, and an empty string clears them.

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 purpose is front-loaded, but the middle of the description drifts into PowerPoint round-trip and viewer-visibility detail, and the final clause ('"" removes the notes.') is awkwardly punctuated and reads like an afterthought.

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

Completeness4/5

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

An output schema exists so return values need not be explained. The description covers the important semantics (what notes are, how they persist through export/import, how to clear them) for a 3-parameter write tool, with only permission/prerequisite detail left implicit.

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 description coverage is 100%, so baseline would be 3. The description adds meaning the schema does not: passing an empty string deletes the notes, which is the key behavioral contract for the 'notes' parameter.

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 title and description make clear this writes the speaker notes of a slide, and the opening clause defines the resource concretely ('plain text that viewers do not see on the slide'). It is distinguishable from update_slide or add_comment, though the framing is conceptual rather than a crisp verb+resource statement.

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?

Usage is only implied: it says an empty string removes the notes, which is a useful operational nuance, but there is no explicit when-to-use guidance or routing versus siblings like update_slide or edit_slides.

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

translate_presentationTranslate what is not translatedAInspect

Fill in, by machine translation, the texts of a presentation you may edit that have no translation into the other languages of the site yet: the title, the slide names and the texts of text, shape and button blocks. Translations a person or an agent wrote stay as they are; machine translations whose source text changed are made again. The site does this by itself a few seconds after every change when it has a translator; this does it now and says how many. Answers 503 when the site has no translator.

NameRequiredDescriptionDefault
slugYesThe presentation's slug (its address: /movie/<slug>/).

Output Schema

NameRequiredDescription
translatedYesTranslations made now.
missing_translationsNoWhat is not translated yet into the other languages of the site (add it): the first ones; "missing_translations_count" says how many there are.
missing_translations_countNoHow many texts are not translated yet.

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses exactly what gets mutated (only missing/changed machine translations), what is preserved, that it reports a count, and that it returns 503 when no translator is configured. This is rich behavioral context an agent needs before invoking a write operation.

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 verb and scope, and every clause carries information (scope, preservation rules, retranslation rule, auto-vs-now timing, error code). The sentences are dense and slightly run-on 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?

Even with an output schema present, it notes the count returned and the 503 failure mode, covering mutation scope and error behavior. For a single-param tool with full schema coverage, nothing material is missing.

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?

Only one parameter and the schema already documents it at 100% coverage (slug, with the /movie/<slug>/ form). The description adds no further parameter detail, so the baseline 3 applies.

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 action (fill in machine translations) on a specific resource (presentation texts) and enumerates the exact scope: title, slide names, and text/shape/button block texts. It also clarifies what is outside scope (human/agent translations stay, unchanged-source machine translations stay), making the operation unambiguous.

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?

Explains the site auto-translates a few seconds after each change when a translator exists, implying this tool is for translating immediately rather than waiting. It doesn't give explicit 'use this instead of X' routing, but no sibling performs translation, and the immediate-vs-deferred condition is clear.

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

update_presentationChange title, description, theme or databaseAInspect

Change the title, description, theme or cover of a presentation you may edit, or (its author only) the setup scripts of the databases its runnable code blocks work in. The theme only sets the defaults of new slides and blocks; existing slides keep their colours. The slug (address) does not change.

NameRequiredDescriptionDefault
slugYesThe presentation's slug (its address: /movie/<slug>/).
themeNoColour theme: the defaults of new slides and blocks.
titleNoNew title (at most 100 characters).
databaseNoSetup scripts of the databases the runnable code blocks work in, by language. Every viewer runs the blocks in a private database made from the script (up to 50000 characters each; an empty string removes a script). Only the author may change them; the languages left out keep their scripts.
title_trNoThe title in the other languages of the site: {"en": "..."} (the languages left out keep theirs).
cover_slideNoId of the slide shown as the cover of the presentation in the lists of presentations; null: the first slide, whichever it is (the default).
descriptionNoNew description; an empty string removes it.
names_from_titlesNoName every slide after its title (the text block with the biggest letters, the highest one of those), in every language it is written in. From then on a slide named after its title keeps following it.

Output Schema

NameRequiredDescription
idYes
urlNoThe address people open in a browser.
langNoThe language its texts are written in; "tr" holds the others.
slugYesThe address of the presentation: /movie/<slug>/.
ownerNoUser name of the author.
themeNo
titleYes
accessNoopen, public or private.
slidesNoNumber of slides.
projectNoThe project it belongs to, or null.
renamedNoSlides that got the name of their title.
versionNoStamp of the content as it is now: give it back as "base_version" to change it only if nobody else did meanwhile.
can_editNoWhether you may change it.
databaseNoSetup scripts of the databases of runnable code blocks (shown to the author only).
title_trNoThe same text in the other languages of the site: {"en": "..."}.
languagesNoThe languages of the site.
cover_slideNoId of the slide shown as its cover in the lists (null: an uploaded picture, or no slides).
descriptionNo
missing_translationsNoWhat is not translated yet into the other languages of the site (add it): the first ones; "missing_translations_count" says how many there are.
missing_translations_countNoHow many texts are not translated yet.

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the annotations, it discloses important behavior: the theme only affects new slides while existing ones keep their colors, the slug never changes, an empty string removes a script, and omitted languages keep their values. These non-obvious side effects and the permission restriction on database scripts are exactly the kind of context annotations cannot convey.

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?

Three sentences, front-loaded with the main purpose and the key behavioral caveats. The first sentence is somewhat dense with its parenthetical author clause, but every clause carries information.

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

Completeness4/5

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

With 8 parameters, nested objects, and an output schema already available, the description covers the critical semantics an agent needs to call it safely. The only omission is explicit sibling routing, which is a minor shortfall for a tool with this many overlapping neighbors.

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 real value beyond the schema: it clarifies that theme sets only defaults, that the slug is immutable, and that database edits are author-restricted. Minor gap: it doesn't explain names_from_titles or cover_slide semantics 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 description uses a precise verb ('Change') and enumerates the specific editable resources (title, description, theme, cover, and database setup scripts). This distinguishes the tool from siblings like update_slide or edit_blocks that operate on different resources.

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 states a scope condition ('a presentation you may edit', and author-only for database scripts), which gives some usage context. But it never names alternatives such as name_slides_after_titles, which overlaps with the names_from_titles parameter, or update_slide, so the agent must infer when to choose this tool instead.

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

update_projectChange a projectAInspect

Change a project of yours: its title and description, which presentations are in it ("add" puts presentations of yours at its end, "remove" makes them presentations on their own again) and their order ("order": the slugs of all of its presentations). Links between presentations work only inside a project: a removed presentation's links to the others stop leading anywhere. Access: "access" is the level of the project, which its presentations inherit (the stricter of the project's and the presentation's own level counts); "grant" gives people access to all of it ({"user": name, "role": "view"|"edit"}), "revoke" takes it away (user names).

NameRequiredDescriptionDefault
addNoSlugs of presentations.
grantNoGive access to the whole project: [{"user": <user name>, "role": "view"|"edit"}].
orderNoSlugs of all the presentations of the project, in the new order.
titleNoNew title.
accessNoLevel of the project: "open", "public" or "private".
removeNoSlugs of presentations.
revokeNoUser names whose access is taken away.
projectYesThe project's slug (its address: /project/<slug>/).
descriptionNoNew description.

Output Schema

NameRequiredDescription
idYes
urlNoThe address people open in a browser.
roleNoowner, edit, view or null.
slugYesThe address of the project: /project/<slug>/.
ownerNo
titleYes
accessNoopen, public or private: inherited by its presentations.
grantsNoWho was given access (the owner sees it).
is_ownerNo
descriptionNo
presentationsNoIts presentations, in order.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations declare readOnly=false, destructive=false, idempotent=false, so the safety profile is covered; the description adds genuine context beyond them: links between presentations only work inside a project and a removed presentation's links stop leading anywhere, and access is inherited with the stricter of project/presentation levels winning. "remove" being re-parenting rather than deletion is consistent with destructiveHint=false. Error/conflict behavior on duplicate slugs or invalid order is still unstated.

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?

Every clause carries semantics, and the tool's core action is front-loaded. However it is delivered as one dense run-on paragraph with nested quotes and parentheses, mixing several parameters in prose, which hurts scannability for an agent parsing parameter behavior.

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?

All nine parameters are addressed and an output schema exists, so return values need not be explained. For a mutation tool, what remains thin is preconditions (what role the caller needs) and failure modes, but the operational semantics of every mutator are otherwise covered.

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 adds real meaning on top: "order" must contain the slugs of ALL the project's presentations, "add" appends at the end, "remove" re-parents rather than deletes, and "access" is inherited by presentations under a strictest-wins rule. "grant" role format is repeated from the schema, which adds little.

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 concrete verb+resource ("Change a project of yours") and enumerates the mutable facets: title, description, contained presentations, their order, and access. The scope is precise, though it never names update_presentation, the sibling whose title/description editing overlaps, leaving the boundary to be inferred.

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?

Usage of each sub-operation is described functionally ("add" puts presentations at its end, "remove" makes them presentations on their own), so the semantics of each mode are implied. But there is no explicit when-to-use guidance, no statement of prerequisites (e.g. the caller's own role on the project), and no routing to update_presentation vs. set_access for overlapping needs.

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

update_slideChange a slideAInspect

Change a slide: its name, size, background colour / picture, entrance transition, and -- when "objects" is given -- its COMPLETE list of blocks: blocks with an existing "id" are kept (their props are merged with the given ones), blocks without an id are added, blocks not in the list are deleted. Returns the slide (ids only unless "response" is "full").

NameRequiredDescriptionDefault
hNoCanvas height in px (default 720).
wNoCanvas width in px (200-4000, default 1280).
bgNoBackground colour, #rrggbb.
fitNoHow the background picture fits.
nameNoSlide name (at most 100 characters), in the language of the presentation.
slugYesThe presentation's slug (its address: /movie/<slug>/).
name_trNoThe slide name in the other languages of the site: {"en": "..."}.
objectsNoBlocks of the slide, bottom to top: [{"type": "text"|"shape"|"button"|"line"|"image"|"code", "props": {...}}]. Missing props take the presentation theme's defaults (every prop is described in the block format reference). A link to a slide of the same presentation may be given as {"kind": "slide", "slide_number": N}.
responseNo"brief" (default): only the ids, numbers and types of the slides and blocks; "full": every prop of every block too.
slide_idYesThe id of a slide (stable, the "id" of the slide in the presentation). Its number (position) changes when slides are reordered.
backgroundNoBackground picture: the "src" of an uploaded picture; null removes it.
transitionNoEntrance effect of this incoming slide (default: none).none
base_versionNoOptional: the "version" of the slide as you read it. The change is refused (409 conflict) when somebody changed the slide meanwhile, instead of overwriting their work.
transition_durationNoAnimation duration in milliseconds (100-3000, default 500); not auto advance. Values outside the range are clamped.

Output Schema

NameRequiredDescription
hNo
wNo
bgNo
idYesStable id of the slide.
fitNo
urlNoThe address people open in a browser.
nameNo
notesNoThe speaker notes (for those who may edit; only when there are some).
numberYes1-based position; changes when slides are reordered.
name_trNoThe same text in the other languages of the site: {"en": "..."}.
objectsYesBlocks, bottom to top ("props" only in the full form).
versionNoStamp of the content as it is now: give it back as "base_version" to change it only if nobody else did meanwhile.
backgroundNoThe "src" of the background picture, or null.
transitionNoEntrance effect of this incoming slide.
layout_warningsNoHow the changed slides will probably look: texts too long for their blocks, blocks outside the slide, texts over each other (estimated -- look at them).
transition_durationNoAnimation milliseconds, not auto advance.
missing_translationsNoWhat is not translated yet into the other languages of the site (add it): the first ones; "missing_translations_count" says how many there are.
missing_translations_countNoHow many texts are not translated yet.

TDQS

A4/5.0
Behavior5/5

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

With annotations already declaring that this is not a read-only call, the description adds the details annotations cannot express: objects is a COMPLETE replacement list, id-bearing blocks are merged, id-less blocks are added, and blocks omitted from the list are deleted. It also discloses the base_version precondition (409 conflict rather than silent overwrite) and the two return shapes ('ids only unless response is full').

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?

One dense sentence, front-loaded with the mutated facets, then the destructive replacement rule, then the return shape; nothing is superfluous. However, long nested parentheticals make it harder to scan than it needs to be, so it falls short of ideal structure.

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?

Because an output schema exists, the description need not re-describe return values, and all 14 parameters are documented in the schema, so nothing essential is missing from the definition. The one unstated point is that the whole-list objects replacement is destructive for omitted blocks; the behavior is described, but the description is silent on whether the deletion is recoverable, which is the only remaining gap for a 14-parameter mutation tool on a shared resource.

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 explains the merge-versus-add-versus-delete semantics of the objects array and the response verbosity switch, neither of which the schema spells out. That extra meaning is exactly what makes the array parameter safe to use.

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 names a specific verb ('Change') and resource ('a slide') and lists exactly which facets are covered: name, size, background colour/picture, transition, and blocks. That is far more than a restatement of the title. It does not explicitly contrast itself with close siblings such as edit_blocks or edit_slides, so an agent must infer the division of labour.

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?

The 'when "objects" is given' clause gives one real conditional and implicitly distinguishes full-list replacement from incremental editing, but the description never says when to prefer edit_blocks or edit_slides. There are no stated prerequisites (the permission and authentication needed to change a slide) and no explicit exclusions, so usage is only implied.

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

upload_imageUpload a pictureAInspect

Store a picture (PNG, JPEG, GIF or WEBP, up to 25 MB, base64-encoded) and get its "src" for an image block or a slide background. Big pictures are scaled down to 2560 px.

NameRequiredDescriptionDefault
data_base64YesThe file, base64 (a data: URL prefix is allowed).

Output Schema

NameRequiredDescription
hNo
wNo
srcYesUse it as "src" of an image block or background.
urlNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly=false, destructive=false, idempotent=false and openWorld=false. The description adds genuinely new behavioral context: accepted formats (PNG/JPEG/GIF/WEBP), a 25 MB ceiling, base64 encoding, and the non-obvious transformation that large images are downscaled to 2560 px. It omits auth/error behavior, so it stops short of a 5.

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

Conciseness5/5

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

Two sentences, front-loaded with what is stored and what is returned, followed by the format/size constraints and the downscaling caveat. No filler and nothing repeated from structured fields.

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 single-parameter upload with an output schema covering the returned src, the description supplies everything an agent needs: input format, size cap, encoding, and the resolution transformation. Nothing required to call it correctly 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% and there is only one parameter, so the baseline is 3; the schema already documents the base64 payload and the allowed data: URL prefix. The description nevertheless adds constraints absent from the schema (format whitelist, 25 MB size limit), which materially affects how the agent must prepare the value.

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?

Specific verb (store/upload) plus resource (a picture) plus the outcome (its "src" for an image block or slide background). No sibling tool performs image uploads, so this definition is unambiguous against the rest of the toolset without needing to name an alternative.

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?

The description implies the use case by saying the returned src feeds an image block or slide background, which tells the agent roughly when to reach for it. However, it never states prerequisites or when-not to use it (e.g. whether it must precede edit_blocks or add_slide), so usage is only 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.

whoamiWho am IA
Read-onlyIdempotent
Inspect

Who the API key belongs to and what it may do: the user name, the name of the key and its access ("read" or "write").

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
keyNoName of the API key.
scopeYesread or write.
usernameYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, which fully covers the safety profile. The description adds that the response is scoped to the calling key and names the possible access values ('read' or 'write'), which is modest extra context but not deep behavioral disclosure.

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

Conciseness5/5

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

A single front-loaded sentence naming the subject (key owner, key name) and the payload (access level) with no filler. Every clause earns its place.

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?

A zero-param read tool with an output schema and full annotation coverage needs little prose, and the description supplies the one thing worth surfacing for callers: that access is one of 'read' or 'write'. Only a slightly more explicit statement of the access model would make it exhaustive.

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?

The tool takes zero parameters, so by baseline there is nothing for the description to document; it correctly avoids inventing parameter talk. No weakness here.

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 states precisely what the tool resolves: the identity behind the API key (user name, key name) and its access level. That is a clear resource with implied verb ('who am I'), though it never contrasts itself with siblings like get_access, so it earns a 4 rather than a 5.

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?

Usage is implied by the identity-check nature of a zero-parameter tool, but the description gives no explicit when-to-use or when-not-to-use guidance and names no alternative (e.g., get_access, check_layout). Minimum viable, nothing misleading.

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. 12 tool updates
    • Changedadd_slide1 field changed
      • changedOutput schema / properties / objects / items / properties / type / description
        Previous value: -"text, shape, button, line, image or code."New value: +"text, shape, button, line, image, code or table."
    • Changedadd_slides1 field changed
      • changedOutput schema / properties / slides / items / properties / objects / items / properties / type / description
        Previous value: -"text, shape, button, line, image or code."New value: +"text, shape, button, line, image, code or table."
    • Addedcheck_code
    • Addedcopy_slides
    • Changedcreate_presentation1 field changed
      • changedOutput schema / properties / slides / items / properties / objects / items / properties / type / description
        Previous value: -"text, shape, button, line, image or code."New value: +"text, shape, button, line, image, code or table."
    • Changededit_blocks1 field changed
      • changedOutput schema / properties / objects / items / properties / type / description
        Previous value: -"text, shape, button, line, image or code."New value: +"text, shape, button, line, image, code or table."
    • Changededit_slides1 field changed
      • changedOutput schema / properties / slides / items / properties / objects / items / properties / type / description
        Previous value: -"text, shape, button, line, image or code."New value: +"text, shape, button, line, image, code or table."
    • Changedget_presentation1 field changed
      • changedOutput schema / properties / slides / items / properties / objects / items / properties / type / description
        Previous value: -"text, shape, button, line, image or code."New value: +"text, shape, button, line, image, code or table."
    • Changedget_slide1 field changed
      • changedOutput schema / properties / objects / items / properties / type / description
        Previous value: -"text, shape, button, line, image or code."New value: +"text, shape, button, line, image, code or table."
    • Changedget_slides1 field changed
      • changedOutput schema / properties / slides / items / properties / objects / items / properties / type / description
        Previous value: -"text, shape, button, line, image or code."New value: +"text, shape, button, line, image, code or table."
    • Changedimport_presentation1 field changed
      • changedOutput schema / properties / slides / items / properties / objects / items / properties / type / description
        Previous value: -"text, shape, button, line, image or code."New value: +"text, shape, button, line, image, code or table."
    • Changedupdate_slide1 field changed
      • changedOutput schema / properties / objects / items / properties / type / description
        Previous value: -"text, shape, button, line, image or code."New value: +"text, shape, button, line, image, code or table."
  2. 25 tool updates
    • Changedadd_slide2 fields changed
      • addedOutput schema / properties / layout_warnings / items / properties / lang
        Added value: +{
        +  "description": "Only the text in this language has the problem.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / missing_translations / items / properties / outdated
        Added value: +{
        +  "description": "There is a translation, written for an earlier text.",
        +  "type": "boolean"
        +}
    • Changedadd_slides2 fields changed
      • addedOutput schema / properties / slides / items / properties / layout_warnings / items / properties / lang
        Added value: +{
        +  "description": "Only the text in this language has the problem.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / slides / items / properties / missing_translations / items / properties / outdated
        Added value: +{
        +  "description": "There is a translation, written for an earlier text.",
        +  "type": "boolean"
        +}
    • Changedanswer_access_request2 fields changed
      • addedOutput schema / properties / title / description
        Added value: +"Its title; null while you may not see it (a private one you asked for)."
      • changedOutput schema / properties / title / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
    • Changedcheck_layout1 field changed
      • addedOutput schema / properties / warnings / items / properties / lang
        Added value: +{
        +  "description": "Only the text in this language has the problem.",
        +  "type": "string"
        +}
    • Changedcreate_presentation3 fields changed
      • addedOutput schema / properties / missing_translations / items / properties / outdated
        Added value: +{
        +  "description": "There is a translation, written for an earlier text.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / slides / items / properties / layout_warnings / items / properties / lang
        Added value: +{
        +  "description": "Only the text in this language has the problem.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / slides / items / properties / missing_translations / items / properties / outdated
        Added value: +{
        +  "description": "There is a translation, written for an earlier text.",
        +  "type": "boolean"
        +}
    • Changededit_blocks2 fields changed
      • addedOutput schema / properties / layout_warnings / items / properties / lang
        Added value: +{
        +  "description": "Only the text in this language has the problem.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / missing_translations / items / properties / outdated
        Added value: +{
        +  "description": "There is a translation, written for an earlier text.",
        +  "type": "boolean"
        +}
    • Changededit_slides4 fields changed
      • addedOutput schema / properties / layout_warnings / items / properties / lang
        Added value: +{
        +  "description": "Only the text in this language has the problem.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / missing_translations / items / properties / outdated
        Added value: +{
        +  "description": "There is a translation, written for an earlier text.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / slides / items / properties / layout_warnings / items / properties / lang
        Added value: +{
        +  "description": "Only the text in this language has the problem.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / slides / items / properties / missing_translations / items / properties / outdated
        Added value: +{
        +  "description": "There is a translation, written for an earlier text.",
        +  "type": "boolean"
        +}
    • Changedget_access2 fields changed
      • addedOutput schema / properties / pending_requests / items / properties / title / description
        Added value: +"Its title; null while you may not see it (a private one you asked for)."
      • changedOutput schema / properties / pending_requests / items / properties / title / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
    • Changedget_presentation3 fields changed
      • addedOutput schema / properties / missing_translations / items / properties / outdated
        Added value: +{
        +  "description": "There is a translation, written for an earlier text.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / slides / items / properties / layout_warnings / items / properties / lang
        Added value: +{
        +  "description": "Only the text in this language has the problem.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / slides / items / properties / missing_translations / items / properties / outdated
        Added value: +{
        +  "description": "There is a translation, written for an earlier text.",
        +  "type": "boolean"
        +}
    • Changedget_project1 field changed
      • addedOutput schema / properties / presentations / items / properties / missing_translations / items / properties / outdated
        Added value: +{
        +  "description": "There is a translation, written for an earlier text.",
        +  "type": "boolean"
        +}
    • Changedget_slide2 fields changed
      • addedOutput schema / properties / layout_warnings / items / properties / lang
        Added value: +{
        +  "description": "Only the text in this language has the problem.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / missing_translations / items / properties / outdated
        Added value: +{
        +  "description": "There is a translation, written for an earlier text.",
        +  "type": "boolean"
        +}
    • Changedget_slides3 fields changed
      • addedOutput schema / properties / missing_translations / items / properties / outdated
        Added value: +{
        +  "description": "There is a translation, written for an earlier text.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / slides / items / properties / layout_warnings / items / properties / lang
        Added value: +{
        +  "description": "Only the text in this language has the problem.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / slides / items / properties / missing_translations / items / properties / outdated
        Added value: +{
        +  "description": "There is a translation, written for an earlier text.",
        +  "type": "boolean"
        +}
    • Changedimport_presentation3 fields changed
      • addedOutput schema / properties / missing_translations / items / properties / outdated
        Added value: +{
        +  "description": "There is a translation, written for an earlier text.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / slides / items / properties / layout_warnings / items / properties / lang
        Added value: +{
        +  "description": "Only the text in this language has the problem.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / slides / items / properties / missing_translations / items / properties / outdated
        Added value: +{
        +  "description": "There is a translation, written for an earlier text.",
        +  "type": "boolean"
        +}
    • Changedlist_access_requests2 fields changed
      • addedOutput schema / properties / requests / items / properties / title / description
        Added value: +"Its title; null while you may not see it (a private one you asked for)."
      • changedOutput schema / properties / requests / items / properties / title / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
    • Changedlist_presentations1 field changed
      • addedOutput schema / properties / presentations / items / properties / missing_translations / items / properties / outdated
        Added value: +{
        +  "description": "There is a translation, written for an earlier text.",
        +  "type": "boolean"
        +}
    • Changedpreview_slides1 field changed
      • addedOutput schema / properties / layout_warnings / items / properties / lang
        Added value: +{
        +  "description": "Only the text in this language has the problem.",
        +  "type": "string"
        +}
    • Changedread_presentation1 field changed
      • addedOutput schema / properties / missing_translations / items / properties / outdated
        Added value: +{
        +  "description": "There is a translation, written for an earlier text.",
        +  "type": "boolean"
        +}
    • Changedreplace_text1 field changed
      • addedOutput schema / properties / layout_warnings / items / properties / lang
        Added value: +{
        +  "description": "Only the text in this language has the problem.",
        +  "type": "string"
        +}
    • Changedrequest_access2 fields changed
      • addedOutput schema / properties / title / description
        Added value: +"Its title; null while you may not see it (a private one you asked for)."
      • changedOutput schema / properties / title / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
    • Changedrequest_project_access2 fields changed
      • addedOutput schema / properties / title / description
        Added value: +"Its title; null while you may not see it (a private one you asked for)."
      • changedOutput schema / properties / title / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
    • Changedset_access2 fields changed
      • addedOutput schema / properties / pending_requests / items / properties / title / description
        Added value: +"Its title; null while you may not see it (a private one you asked for)."
      • changedOutput schema / properties / pending_requests / items / properties / title / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
    • Changedset_language1 field changed
      • addedOutput schema / properties / missing_translations / items / properties / outdated
        Added value: +{
        +  "description": "There is a translation, written for an earlier text.",
        +  "type": "boolean"
        +}
    • Changedtranslate_presentation1 field changed
      • addedOutput schema / properties / missing_translations / items / properties / outdated
        Added value: +{
        +  "description": "There is a translation, written for an earlier text.",
        +  "type": "boolean"
        +}
    • Changedupdate_presentation1 field changed
      • addedOutput schema / properties / missing_translations / items / properties / outdated
        Added value: +{
        +  "description": "There is a translation, written for an earlier text.",
        +  "type": "boolean"
        +}
    • Changedupdate_slide2 fields changed
      • addedOutput schema / properties / layout_warnings / items / properties / lang
        Added value: +{
        +  "description": "Only the text in this language has the problem.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / missing_translations / items / properties / outdated
        Added value: +{
        +  "description": "There is a translation, written for an earlier text.",
        +  "type": "boolean"
        +}
  3. 15 tool updates
    • Changedadd_comment1 field changed
      • addedOutput schema / properties / slide_deleted
        Added value: +{
        +  "description": "The slide of the note was deleted (the history has it).",
        +  "type": "boolean"
        +}
    • Changedadd_slide1 field changed
      • addedOutput schema / properties / notes
        Added value: +{
        +  "description": "The speaker notes (for those who may edit; only when there are some).",
        +  "type": "string"
        +}
    • Changedadd_slides1 field changed
      • addedOutput schema / properties / slides / items / properties / notes
        Added value: +{
        +  "description": "The speaker notes (for those who may edit; only when there are some).",
        +  "type": "string"
        +}
    • Changedcreate_presentation2 fields changed
      • addedOutput schema / properties / database_chars
        Added value: +{
        +  "description": "A part or the words only were read: how long each database script is (the whole presentation without \"texts_only\" gives them).",
        +  "type": "object"
        +}
      • addedOutput schema / properties / slides / items / properties / notes
        Added value: +{
        +  "description": "The speaker notes (for those who may edit; only when there are some).",
        +  "type": "string"
        +}
    • Changededit_blocks1 field changed
      • addedOutput schema / properties / notes
        Added value: +{
        +  "description": "The speaker notes (for those who may edit; only when there are some).",
        +  "type": "string"
        +}
    • Changededit_slides1 field changed
      • addedOutput schema / properties / slides / items / properties / notes
        Added value: +{
        +  "description": "The speaker notes (for those who may edit; only when there are some).",
        +  "type": "string"
        +}
    • Addedget_glossary
    • Changedget_presentation2 fields changed
      • addedOutput schema / properties / database_chars
        Added value: +{
        +  "description": "A part or the words only were read: how long each database script is (the whole presentation without \"texts_only\" gives them).",
        +  "type": "object"
        +}
      • addedOutput schema / properties / slides / items / properties / notes
        Added value: +{
        +  "description": "The speaker notes (for those who may edit; only when there are some).",
        +  "type": "string"
        +}
    • Changedget_slide1 field changed
      • addedOutput schema / properties / notes
        Added value: +{
        +  "description": "The speaker notes (for those who may edit; only when there are some).",
        +  "type": "string"
        +}
    • Changedget_slides2 fields changed
      • addedOutput schema / properties / database_chars
        Added value: +{
        +  "description": "A part or the words only were read: how long each database script is (the whole presentation without \"texts_only\" gives them).",
        +  "type": "object"
        +}
      • addedOutput schema / properties / slides / items / properties / notes
        Added value: +{
        +  "description": "The speaker notes (for those who may edit; only when there are some).",
        +  "type": "string"
        +}
    • Changedimport_presentation2 fields changed
      • addedOutput schema / properties / database_chars
        Added value: +{
        +  "description": "A part or the words only were read: how long each database script is (the whole presentation without \"texts_only\" gives them).",
        +  "type": "object"
        +}
      • addedOutput schema / properties / slides / items / properties / notes
        Added value: +{
        +  "description": "The speaker notes (for those who may edit; only when there are some).",
        +  "type": "string"
        +}
    • Changedlist_comments2 fields changed
      • addedOutput schema / properties / comments / items / properties / replies / items / properties / slide_deleted
        Added value: +{
        +  "description": "The slide of the note was deleted (the history has it).",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / comments / items / properties / slide_deleted
        Added value: +{
        +  "description": "The slide of the note was deleted (the history has it).",
        +  "type": "boolean"
        +}
    • Addedset_glossary
    • Addedset_speaker_notes
    • Changedupdate_slide1 field changed
      • addedOutput schema / properties / notes
        Added value: +{
        +  "description": "The speaker notes (for those who may edit; only when there are some).",
        +  "type": "string"
        +}
  4. 3 tool updates
    • Changedcreate_presentation1 field changed
      • changedInput schema / properties / lang / description
        Previous value: -"The language \"title\", slide names and blocks' \"html\" are written in (default: Russian when they have Cyrillic letters, otherwise English)."New value: +"The language \"title\", slide names and blocks' \"html\" are written in (default: the one most of the words of the title, the slide names and the texts are in)."
    • Addedset_language
    • Addedtranslate_presentation
  5. 6 tool updates
    • Changedcheck_layout1 field changed
      • addedOutput schema / properties / measured
        Added value: +{
        +  "description": "The texts were measured in a browser (false: estimated).",
        +  "type": "boolean"
        +}
    • Changedcreate_presentation1 field changed
      • addedInput schema / properties / access
        Added value: +{
        +  "description": "Who sees it (default \"private\": only you, until you publish it; \"public\": everybody reads it; \"open\": every signed-in person edits it too).",
        +  "enum": [
        +    "open",
        +    "public",
        +    "private"
        +  ],
        +  "type": "string"
        +}
    • Addedget_slides
    • Changedimport_presentation1 field changed
      • addedInput schema / properties / access
        Added value: +{
        +  "description": "Who sees it (default \"private\": only you, until you publish it; \"public\": everybody reads it; \"open\": every signed-in person edits it too).",
        +  "enum": [
        +    "open",
        +    "public",
        +    "private"
        +  ],
        +  "type": "string"
        +}
    • Addedname_slides_after_titles
    • Changedupdate_presentation2 fields changed
      • addedInput schema / properties / names_from_titles
        Added value: +{
        +  "description": "Name every slide after its title (the text block with the biggest letters, the highest one of those), in every language it is written in. From then on a slide named after its title keeps following it.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / renamed
        Added value: +{
        +  "description": "Slides that got the name of their title.",
        +  "items": {
        +    "properties": {
        +      "name": {
        +        "type": "string"
        +      },
        +      "number": {
        +        "type": "integer"
        +      },
        +      "slide_id": {
        +        "type": "integer"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
  6. 18 tool updates
    • Changedadd_slide4 fields changed
      • addedOutput schema / properties / layout_warnings
        Added value: +{
        +  "description": "How the changed slides will probably look: texts too long for their blocks, blocks outside the slide, texts over each other (estimated -- look at them).",
        +  "items": {
        +    "properties": {
        +      "block_id": {
        +        "type": "integer"
        +      },
        +      "detail": {
        +        "type": "string"
        +      },
        +      "problem": {
        +        "description": "overflow, cut, outside or overlap.",
        +        "type": "string"
        +      },
        +      "slide_id": {
        +        "type": "integer"
        +      },
        +      "slide_number": {
        +        "type": "integer"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / missing_translations / description
        Previous value: -"What is not translated yet into the other languages of the site (add it)."New value: +"What is not translated yet into the other languages of the site (add it): the first ones; \"missing_translations_count\" says how many there are."
      • addedOutput schema / properties / missing_translations_count
        Added value: +{
        +  "description": "How many texts are not translated yet.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / version
        Added value: +{
        +  "description": "Stamp of the content as it is now: give it back as \"base_version\" to change it only if nobody else did meanwhile.",
        +  "type": "string"
        +}
    • Changedadd_slides4 fields changed
      • addedOutput schema / properties / slides / items / properties / layout_warnings
        Added value: +{
        +  "description": "How the changed slides will probably look: texts too long for their blocks, blocks outside the slide, texts over each other (estimated -- look at them).",
        +  "items": {
        +    "properties": {
        +      "block_id": {
        +        "type": "integer"
        +      },
        +      "detail": {
        +        "type": "string"
        +      },
        +      "problem": {
        +        "description": "overflow, cut, outside or overlap.",
        +        "type": "string"
        +      },
        +      "slide_id": {
        +        "type": "integer"
        +      },
        +      "slide_number": {
        +        "type": "integer"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / slides / items / properties / missing_translations / description
        Previous value: -"What is not translated yet into the other languages of the site (add it)."New value: +"What is not translated yet into the other languages of the site (add it): the first ones; \"missing_translations_count\" says how many there are."
      • addedOutput schema / properties / slides / items / properties / missing_translations_count
        Added value: +{
        +  "description": "How many texts are not translated yet.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / slides / items / properties / version
        Added value: +{
        +  "description": "Stamp of the content as it is now: give it back as \"base_version\" to change it only if nobody else did meanwhile.",
        +  "type": "string"
        +}
    • Addedcheck_layout
    • Changedcreate_presentation7 fields changed
      • changedOutput schema / properties / missing_translations / description
        Previous value: -"What is not translated yet into the other languages of the site (add it)."New value: +"What is not translated yet into the other languages of the site (add it): the first ones; \"missing_translations_count\" says how many there are."
      • addedOutput schema / properties / missing_translations_count
        Added value: +{
        +  "description": "How many texts are not translated yet.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / slides / items / properties / layout_warnings
        Added value: +{
        +  "description": "How the changed slides will probably look: texts too long for their blocks, blocks outside the slide, texts over each other (estimated -- look at them).",
        +  "items": {
        +    "properties": {
        +      "block_id": {
        +        "type": "integer"
        +      },
        +      "detail": {
        +        "type": "string"
        +      },
        +      "problem": {
        +        "description": "overflow, cut, outside or overlap.",
        +        "type": "string"
        +      },
        +      "slide_id": {
        +        "type": "integer"
        +      },
        +      "slide_number": {
        +        "type": "integer"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / slides / items / properties / missing_translations / description
        Previous value: -"What is not translated yet into the other languages of the site (add it)."New value: +"What is not translated yet into the other languages of the site (add it): the first ones; \"missing_translations_count\" says how many there are."
      • addedOutput schema / properties / slides / items / properties / missing_translations_count
        Added value: +{
        +  "description": "How many texts are not translated yet.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / slides / items / properties / version
        Added value: +{
        +  "description": "Stamp of the content as it is now: give it back as \"base_version\" to change it only if nobody else did meanwhile.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / version
        Added value: +{
        +  "description": "Stamp of the content as it is now: give it back as \"base_version\" to change it only if nobody else did meanwhile.",
        +  "type": "string"
        +}
    • Changeddelete_slide1 field changed
      • addedInput schema / properties / base_version
        Added value: +{
        +  "description": "Optional: the \"version\" of the slide as you read it. The change is refused (409 conflict) when somebody changed the slide meanwhile, instead of overwriting their work.",
        +  "type": "string"
        +}
    • Changededit_blocks5 fields changed
      • addedInput schema / properties / base_version
        Added value: +{
        +  "description": "Optional: the \"version\" of the slide as you read it. The change is refused (409 conflict) when somebody changed the slide meanwhile, instead of overwriting their work.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / layout_warnings
        Added value: +{
        +  "description": "How the changed slides will probably look: texts too long for their blocks, blocks outside the slide, texts over each other (estimated -- look at them).",
        +  "items": {
        +    "properties": {
        +      "block_id": {
        +        "type": "integer"
        +      },
        +      "detail": {
        +        "type": "string"
        +      },
        +      "problem": {
        +        "description": "overflow, cut, outside or overlap.",
        +        "type": "string"
        +      },
        +      "slide_id": {
        +        "type": "integer"
        +      },
        +      "slide_number": {
        +        "type": "integer"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / missing_translations / description
        Previous value: -"What is not translated yet into the other languages of the site (add it)."New value: +"What is not translated yet into the other languages of the site (add it): the first ones; \"missing_translations_count\" says how many there are."
      • addedOutput schema / properties / missing_translations_count
        Added value: +{
        +  "description": "How many texts are not translated yet.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / version
        Added value: +{
        +  "description": "Stamp of the content as it is now: give it back as \"base_version\" to change it only if nobody else did meanwhile.",
        +  "type": "string"
        +}
    • Addededit_slides
    • Addedexport_presentation
    • Changedget_presentation11 fields changed
      • addedInput schema / properties / from_number
        Added value: +{
        +  "description": "Only the slides from this number on (1-based).",
        +  "type": "integer"
        +}
      • addedInput schema / properties / slide_ids
        Added value: +{
        +  "description": "Only these slides (ids).",
        +  "items": {
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / texts_only
        Added value: +{
        +  "description": "Only the texts of the blocks (for reading, checking or translating), not their props.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / to_number
        Added value: +{
        +  "description": "Only the slides up to this number (inclusive).",
        +  "type": "integer"
        +}
      • changedOutput schema / properties / missing_translations / description
        Previous value: -"What is not translated yet into the other languages of the site (add it)."New value: +"What is not translated yet into the other languages of the site (add it): the first ones; \"missing_translations_count\" says how many there are."
      • addedOutput schema / properties / missing_translations_count
        Added value: +{
        +  "description": "How many texts are not translated yet.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / slides / items / properties / layout_warnings
        Added value: +{
        +  "description": "How the changed slides will probably look: texts too long for their blocks, blocks outside the slide, texts over each other (estimated -- look at them).",
        +  "items": {
        +    "properties": {
        +      "block_id": {
        +        "type": "integer"
        +      },
        +      "detail": {
        +        "type": "string"
        +      },
        +      "problem": {
        +        "description": "overflow, cut, outside or overlap.",
        +        "type": "string"
        +      },
        +      "slide_id": {
        +        "type": "integer"
        +      },
        +      "slide_number": {
        +        "type": "integer"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / slides / items / properties / missing_translations / description
        Previous value: -"What is not translated yet into the other languages of the site (add it)."New value: +"What is not translated yet into the other languages of the site (add it): the first ones; \"missing_translations_count\" says how many there are."
      • addedOutput schema / properties / slides / items / properties / missing_translations_count
        Added value: +{
        +  "description": "How many texts are not translated yet.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / slides / items / properties / version
        Added value: +{
        +  "description": "Stamp of the content as it is now: give it back as \"base_version\" to change it only if nobody else did meanwhile.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / version
        Added value: +{
        +  "description": "Stamp of the content as it is now: give it back as \"base_version\" to change it only if nobody else did meanwhile.",
        +  "type": "string"
        +}
    • Changedget_project3 fields changed
      • changedOutput schema / properties / presentations / items / properties / missing_translations / description
        Previous value: -"What is not translated yet into the other languages of the site (add it)."New value: +"What is not translated yet into the other languages of the site (add it): the first ones; \"missing_translations_count\" says how many there are."
      • addedOutput schema / properties / presentations / items / properties / missing_translations_count
        Added value: +{
        +  "description": "How many texts are not translated yet.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / presentations / items / properties / version
        Added value: +{
        +  "description": "Stamp of the content as it is now: give it back as \"base_version\" to change it only if nobody else did meanwhile.",
        +  "type": "string"
        +}
    • Changedget_slide4 fields changed
      • addedOutput schema / properties / layout_warnings
        Added value: +{
        +  "description": "How the changed slides will probably look: texts too long for their blocks, blocks outside the slide, texts over each other (estimated -- look at them).",
        +  "items": {
        +    "properties": {
        +      "block_id": {
        +        "type": "integer"
        +      },
        +      "detail": {
        +        "type": "string"
        +      },
        +      "problem": {
        +        "description": "overflow, cut, outside or overlap.",
        +        "type": "string"
        +      },
        +      "slide_id": {
        +        "type": "integer"
        +      },
        +      "slide_number": {
        +        "type": "integer"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / missing_translations / description
        Previous value: -"What is not translated yet into the other languages of the site (add it)."New value: +"What is not translated yet into the other languages of the site (add it): the first ones; \"missing_translations_count\" says how many there are."
      • addedOutput schema / properties / missing_translations_count
        Added value: +{
        +  "description": "How many texts are not translated yet.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / version
        Added value: +{
        +  "description": "Stamp of the content as it is now: give it back as \"base_version\" to change it only if nobody else did meanwhile.",
        +  "type": "string"
        +}
    • Changedimport_presentation13 fields changed
      • addedInput schema / properties / base_version
        Added value: +{
        +  "description": "With \"into\": the \"version\" of the presentation as you read it; refused (409) when it changed meanwhile.",
        +  "type": "string"
        +}
      • addedInput schema / properties / into
        Added value: +{
        +  "description": "Slug of an existing presentation to update from the file (instead of creating a new one).",
        +  "type": "string"
        +}
      • addedInput schema / properties / remove_extra
        Added value: +{
        +  "description": "With \"into\": remove the slides of the presentation after the last slide of the file (default false).",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / rename
        Added value: +{
        +  "description": "With \"into\": give the slides the names the file has (default false: they keep theirs).",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / slides
        Added value: +{
        +  "description": "With \"into\": only these slide numbers of the file (1-based); all by default.",
        +  "items": {
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / missing_translations / description
        Previous value: -"What is not translated yet into the other languages of the site (add it)."New value: +"What is not translated yet into the other languages of the site (add it): the first ones; \"missing_translations_count\" says how many there are."
      • addedOutput schema / properties / missing_translations_count
        Added value: +{
        +  "description": "How many texts are not translated yet.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / slides / items / properties / layout_warnings
        Added value: +{
        +  "description": "How the changed slides will probably look: texts too long for their blocks, blocks outside the slide, texts over each other (estimated -- look at them).",
        +  "items": {
        +    "properties": {
        +      "block_id": {
        +        "type": "integer"
        +      },
        +      "detail": {
        +        "type": "string"
        +      },
        +      "problem": {
        +        "description": "overflow, cut, outside or overlap.",
        +        "type": "string"
        +      },
        +      "slide_id": {
        +        "type": "integer"
        +      },
        +      "slide_number": {
        +        "type": "integer"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / slides / items / properties / missing_translations / description
        Previous value: -"What is not translated yet into the other languages of the site (add it)."New value: +"What is not translated yet into the other languages of the site (add it): the first ones; \"missing_translations_count\" says how many there are."
      • addedOutput schema / properties / slides / items / properties / missing_translations_count
        Added value: +{
        +  "description": "How many texts are not translated yet.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / slides / items / properties / version
        Added value: +{
        +  "description": "Stamp of the content as it is now: give it back as \"base_version\" to change it only if nobody else did meanwhile.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / updated
        Added value: +{
        +  "properties": {
        +    "added": {
        +      "description": "Numbers of the slides it added.",
        +      "items": {
        +        "type": "integer"
        +      },
        +      "type": "array"
        +    },
        +    "changed": {
        +      "description": "Numbers of the slides the file replaced.",
        +      "items": {
        +        "type": "integer"
        +      },
        +      "type": "array"
        +    },
        +    "removed": {
        +      "type": "integer"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / version
        Added value: +{
        +  "description": "Stamp of the content as it is now: give it back as \"base_version\" to change it only if nobody else did meanwhile.",
        +  "type": "string"
        +}
    • Changedlist_presentations3 fields changed
      • changedOutput schema / properties / presentations / items / properties / missing_translations / description
        Previous value: -"What is not translated yet into the other languages of the site (add it)."New value: +"What is not translated yet into the other languages of the site (add it): the first ones; \"missing_translations_count\" says how many there are."
      • addedOutput schema / properties / presentations / items / properties / missing_translations_count
        Added value: +{
        +  "description": "How many texts are not translated yet.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / presentations / items / properties / version
        Added value: +{
        +  "description": "Stamp of the content as it is now: give it back as \"base_version\" to change it only if nobody else did meanwhile.",
        +  "type": "string"
        +}
    • Addedpreview_slides
    • Changedread_presentation7 fields changed
      • addedInput schema / properties / from_number
        Added value: +{
        +  "description": "Only the slides from this number on (1-based).",
        +  "type": "integer"
        +}
      • addedInput schema / properties / slide_ids
        Added value: +{
        +  "description": "Only these slides (ids).",
        +  "items": {
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / to_number
        Added value: +{
        +  "description": "Only the slides up to this number (inclusive).",
        +  "type": "integer"
        +}
      • changedOutput schema / properties / missing_translations / description
        Previous value: -"What is not translated yet into the other languages of the site (add it)."New value: +"What is not translated yet into the other languages of the site (add it): the first ones; \"missing_translations_count\" says how many there are."
      • addedOutput schema / properties / missing_translations_count
        Added value: +{
        +  "description": "How many texts are not translated yet.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / slides_total
        Added value: +{
        +  "description": "Slides of the whole presentation (a part may be shown).",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / version
        Added value: +{
        +  "description": "Stamp of the content as it is now: give it back as \"base_version\" to change it only if nobody else did meanwhile.",
        +  "type": "string"
        +}
    • Addedreplace_text
    • Changedupdate_presentation3 fields changed
      • changedOutput schema / properties / missing_translations / description
        Previous value: -"What is not translated yet into the other languages of the site (add it)."New value: +"What is not translated yet into the other languages of the site (add it): the first ones; \"missing_translations_count\" says how many there are."
      • addedOutput schema / properties / missing_translations_count
        Added value: +{
        +  "description": "How many texts are not translated yet.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / version
        Added value: +{
        +  "description": "Stamp of the content as it is now: give it back as \"base_version\" to change it only if nobody else did meanwhile.",
        +  "type": "string"
        +}
    • Changedupdate_slide5 fields changed
      • addedInput schema / properties / base_version
        Added value: +{
        +  "description": "Optional: the \"version\" of the slide as you read it. The change is refused (409 conflict) when somebody changed the slide meanwhile, instead of overwriting their work.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / layout_warnings
        Added value: +{
        +  "description": "How the changed slides will probably look: texts too long for their blocks, blocks outside the slide, texts over each other (estimated -- look at them).",
        +  "items": {
        +    "properties": {
        +      "block_id": {
        +        "type": "integer"
        +      },
        +      "detail": {
        +        "type": "string"
        +      },
        +      "problem": {
        +        "description": "overflow, cut, outside or overlap.",
        +        "type": "string"
        +      },
        +      "slide_id": {
        +        "type": "integer"
        +      },
        +      "slide_number": {
        +        "type": "integer"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / missing_translations / description
        Previous value: -"What is not translated yet into the other languages of the site (add it)."New value: +"What is not translated yet into the other languages of the site (add it): the first ones; \"missing_translations_count\" says how many there are."
      • addedOutput schema / properties / missing_translations_count
        Added value: +{
        +  "description": "How many texts are not translated yet.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / version
        Added value: +{
        +  "description": "Stamp of the content as it is now: give it back as \"base_version\" to change it only if nobody else did meanwhile.",
        +  "type": "string"
        +}
  7. 8 tool updates
    • Changedcreate_presentation3 fields changed
      • addedInput schema / properties / database / properties / clickhouse
        Added value: +{
        +  "description": "ClickHouse SQL (statements separated by \";\") that creates and fills the database.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / cover_slide
        Added value: +{
        +  "description": "Id of the slide shown as its cover in the lists (null: an uploaded picture, or no slides).",
        +  "type": [
        +    "integer",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / database / properties / clickhouse
        Added value: +{
        +  "type": "string"
        +}
    • Changedget_presentation2 fields changed
      • addedOutput schema / properties / cover_slide
        Added value: +{
        +  "description": "Id of the slide shown as its cover in the lists (null: an uploaded picture, or no slides).",
        +  "type": [
        +    "integer",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / database / properties / clickhouse
        Added value: +{
        +  "type": "string"
        +}
    • Changedget_project1 field changed
      • addedOutput schema / properties / presentations / items / properties / cover_slide
        Added value: +{
        +  "description": "Id of the slide shown as its cover in the lists (null: an uploaded picture, or no slides).",
        +  "type": [
        +    "integer",
        +    "null"
        +  ]
        +}
    • Changedimport_presentation2 fields changed
      • addedOutput schema / properties / cover_slide
        Added value: +{
        +  "description": "Id of the slide shown as its cover in the lists (null: an uploaded picture, or no slides).",
        +  "type": [
        +    "integer",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / database / properties / clickhouse
        Added value: +{
        +  "type": "string"
        +}
    • Changedlist_presentations1 field changed
      • addedOutput schema / properties / presentations / items / properties / cover_slide
        Added value: +{
        +  "description": "Id of the slide shown as its cover in the lists (null: an uploaded picture, or no slides).",
        +  "type": [
        +    "integer",
        +    "null"
        +  ]
        +}
    • Changedread_presentation1 field changed
      • addedOutput schema / properties / cover_slide
        Added value: +{
        +  "description": "Id of the slide shown as its cover in the lists (null: an uploaded picture, or no slides).",
        +  "type": [
        +    "integer",
        +    "null"
        +  ]
        +}
    • Changedrun_code3 fields changed
      • changedInput schema / properties / lang / enum
        Previous value: -[
        -  "sql",
        -  "mongodb",
        -  "redis",
        -  "python",
        -  "bash"
        -]New value: +[
        +  "sql",
        +  "mongodb",
        +  "redis",
        +  "clickhouse",
        +  "python",
        +  "bash"
        +]
      • changedInput schema / properties / reset / description
        Previous value: -"sql, mongodb, redis: first make your database again from the script of the presentation."New value: +"sql, mongodb, redis, clickhouse: first make your database again from the script of the presentation."
      • changedOutput schema / description
        Previous value: -"sql / mongodb / redis: \"results\" (tables, counts or messages), \"notices\" and \"sql_error\"; python / bash: \"stdout\", \"stderr\", \"exit_code\" and \"timed_out\"."New value: +"sql / mongodb / redis / clickhouse: \"results\" (tables, counts or messages), \"notices\" and \"sql_error\"; python / bash: \"stdout\", \"stderr\", \"exit_code\" and \"timed_out\"."
    • Changedupdate_presentation4 fields changed
      • addedInput schema / properties / cover_slide
        Added value: +{
        +  "description": "Id of the slide shown as the cover of the presentation in the lists of presentations; null: the first slide, whichever it is (the default).",
        +  "type": [
        +    "integer",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / database / properties / clickhouse
        Added value: +{
        +  "description": "ClickHouse SQL (statements separated by \";\") that creates and fills the database.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / cover_slide
        Added value: +{
        +  "description": "Id of the slide shown as its cover in the lists (null: an uploaded picture, or no slides).",
        +  "type": [
        +    "integer",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / database / properties / clickhouse
        Added value: +{
        +  "type": "string"
        +}
  8. 8 tool updates
    • Changedadd_slide4 fields changed
      • addedInput schema / properties / transition
        Added value: +{
        +  "default": "none",
        +  "description": "Entrance effect of this incoming slide (default: none).",
        +  "enum": [
        +    "none",
        +    "fade",
        +    "slide-left",
        +    "slide-right",
        +    "zoom"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / transition_duration
        Added value: +{
        +  "default": 500,
        +  "description": "Animation duration in milliseconds (100-3000, default 500); not auto advance. Values outside the range are clamped.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / transition
        Added value: +{
        +  "description": "Entrance effect of this incoming slide.",
        +  "enum": [
        +    "none",
        +    "fade",
        +    "slide-left",
        +    "slide-right",
        +    "zoom"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / transition_duration
        Added value: +{
        +  "description": "Animation milliseconds, not auto advance.",
        +  "maximum": 3000,
        +  "minimum": 100,
        +  "type": "integer"
        +}
    • Changedadd_slides4 fields changed
      • changedInput schema / properties / slides / description
        Previous value: -"The slides: [{\"name\", \"w\", \"h\", \"bg\", \"fit\", \"background\", \"objects\"}]."New value: +"The slides: [{\"name\", \"w\", \"h\", \"bg\", \"fit\", \"transition\", \"transition_duration\", \"background\", \"objects\"}]."
      • addedInput schema / properties / slides / items / properties
        Added value: +{
        +  "background": {
        +    "description": "Background picture: the \"src\" of an uploaded picture; null removes it.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "bg": {
        +    "description": "Background colour, #rrggbb.",
        +    "type": "string"
        +  },
        +  "fit": {
        +    "description": "How the background picture fits.",
        +    "enum": [
        +      "contain",
        +      "cover",
        +      "stretch"
        +    ],
        +    "type": "string"
        +  },
        +  "h": {
        +    "description": "Canvas height in px (default 720).",
        +    "type": "integer"
        +  },
        +  "name": {
        +    "description": "Slide name (at most 100 characters), in the language of the presentation.",
        +    "maxLength": 100,
        +    "type": "string"
        +  },
        +  "name_tr": {
        +    "additionalProperties": {
        +      "type": "string"
        +    },
        +    "description": "The slide name in the other languages of the site: {\"en\": \"...\"}.",
        +    "type": "object"
        +  },
        +  "objects": {
        +    "description": "Blocks of the slide, bottom to top: [{\"type\": \"text\"|\"shape\"|\"button\"|\"line\"|\"image\"|\"code\", \"props\": {...}}]. Missing props take the presentation theme's defaults (every prop is described in the block format reference). A link to a slide of the same presentation may be given as {\"kind\": \"slide\", \"slide_number\": N}.",
        +    "items": {
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "transition": {
        +    "default": "none",
        +    "description": "Entrance effect of this incoming slide (default: none).",
        +    "enum": [
        +      "none",
        +      "fade",
        +      "slide-left",
        +      "slide-right",
        +      "zoom"
        +    ],
        +    "type": "string"
        +  },
        +  "transition_duration": {
        +    "default": 500,
        +    "description": "Animation duration in milliseconds (100-3000, default 500); not auto advance. Values outside the range are clamped.",
        +    "type": "integer"
        +  },
        +  "w": {
        +    "description": "Canvas width in px (200-4000, default 1280).",
        +    "type": "integer"
        +  }
        +}
      • addedOutput schema / properties / slides / items / properties / transition
        Added value: +{
        +  "description": "Entrance effect of this incoming slide.",
        +  "enum": [
        +    "none",
        +    "fade",
        +    "slide-left",
        +    "slide-right",
        +    "zoom"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / slides / items / properties / transition_duration
        Added value: +{
        +  "description": "Animation milliseconds, not auto advance.",
        +  "maximum": 3000,
        +  "minimum": 100,
        +  "type": "integer"
        +}
    • Changedcreate_presentation3 fields changed
      • addedInput schema / properties / slides / items / properties
        Added value: +{
        +  "background": {
        +    "description": "Background picture: the \"src\" of an uploaded picture; null removes it.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "bg": {
        +    "description": "Background colour, #rrggbb.",
        +    "type": "string"
        +  },
        +  "fit": {
        +    "description": "How the background picture fits.",
        +    "enum": [
        +      "contain",
        +      "cover",
        +      "stretch"
        +    ],
        +    "type": "string"
        +  },
        +  "h": {
        +    "description": "Canvas height in px (default 720).",
        +    "type": "integer"
        +  },
        +  "name": {
        +    "description": "Slide name (at most 100 characters), in the language of the presentation.",
        +    "maxLength": 100,
        +    "type": "string"
        +  },
        +  "name_tr": {
        +    "additionalProperties": {
        +      "type": "string"
        +    },
        +    "description": "The slide name in the other languages of the site: {\"en\": \"...\"}.",
        +    "type": "object"
        +  },
        +  "objects": {
        +    "description": "Blocks of the slide, bottom to top: [{\"type\": \"text\"|\"shape\"|\"button\"|\"line\"|\"image\"|\"code\", \"props\": {...}}]. Missing props take the presentation theme's defaults (every prop is described in the block format reference). A link to a slide of the same presentation may be given as {\"kind\": \"slide\", \"slide_number\": N}.",
        +    "items": {
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "transition": {
        +    "default": "none",
        +    "description": "Entrance effect of this incoming slide (default: none).",
        +    "enum": [
        +      "none",
        +      "fade",
        +      "slide-left",
        +      "slide-right",
        +      "zoom"
        +    ],
        +    "type": "string"
        +  },
        +  "transition_duration": {
        +    "default": 500,
        +    "description": "Animation duration in milliseconds (100-3000, default 500); not auto advance. Values outside the range are clamped.",
        +    "type": "integer"
        +  },
        +  "w": {
        +    "description": "Canvas width in px (200-4000, default 1280).",
        +    "type": "integer"
        +  }
        +}
      • addedOutput schema / properties / slides / items / properties / transition
        Added value: +{
        +  "description": "Entrance effect of this incoming slide.",
        +  "enum": [
        +    "none",
        +    "fade",
        +    "slide-left",
        +    "slide-right",
        +    "zoom"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / slides / items / properties / transition_duration
        Added value: +{
        +  "description": "Animation milliseconds, not auto advance.",
        +  "maximum": 3000,
        +  "minimum": 100,
        +  "type": "integer"
        +}
    • Changededit_blocks2 fields changed
      • addedOutput schema / properties / transition
        Added value: +{
        +  "description": "Entrance effect of this incoming slide.",
        +  "enum": [
        +    "none",
        +    "fade",
        +    "slide-left",
        +    "slide-right",
        +    "zoom"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / transition_duration
        Added value: +{
        +  "description": "Animation milliseconds, not auto advance.",
        +  "maximum": 3000,
        +  "minimum": 100,
        +  "type": "integer"
        +}
    • Changedget_presentation2 fields changed
      • addedOutput schema / properties / slides / items / properties / transition
        Added value: +{
        +  "description": "Entrance effect of this incoming slide.",
        +  "enum": [
        +    "none",
        +    "fade",
        +    "slide-left",
        +    "slide-right",
        +    "zoom"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / slides / items / properties / transition_duration
        Added value: +{
        +  "description": "Animation milliseconds, not auto advance.",
        +  "maximum": 3000,
        +  "minimum": 100,
        +  "type": "integer"
        +}
    • Changedget_slide2 fields changed
      • addedOutput schema / properties / transition
        Added value: +{
        +  "description": "Entrance effect of this incoming slide.",
        +  "enum": [
        +    "none",
        +    "fade",
        +    "slide-left",
        +    "slide-right",
        +    "zoom"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / transition_duration
        Added value: +{
        +  "description": "Animation milliseconds, not auto advance.",
        +  "maximum": 3000,
        +  "minimum": 100,
        +  "type": "integer"
        +}
    • Changedimport_presentation2 fields changed
      • addedOutput schema / properties / slides / items / properties / transition
        Added value: +{
        +  "description": "Entrance effect of this incoming slide.",
        +  "enum": [
        +    "none",
        +    "fade",
        +    "slide-left",
        +    "slide-right",
        +    "zoom"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / slides / items / properties / transition_duration
        Added value: +{
        +  "description": "Animation milliseconds, not auto advance.",
        +  "maximum": 3000,
        +  "minimum": 100,
        +  "type": "integer"
        +}
    • Changedupdate_slide4 fields changed
      • addedInput schema / properties / transition
        Added value: +{
        +  "default": "none",
        +  "description": "Entrance effect of this incoming slide (default: none).",
        +  "enum": [
        +    "none",
        +    "fade",
        +    "slide-left",
        +    "slide-right",
        +    "zoom"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / transition_duration
        Added value: +{
        +  "default": 500,
        +  "description": "Animation duration in milliseconds (100-3000, default 500); not auto advance. Values outside the range are clamped.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / transition
        Added value: +{
        +  "description": "Entrance effect of this incoming slide.",
        +  "enum": [
        +    "none",
        +    "fade",
        +    "slide-left",
        +    "slide-right",
        +    "zoom"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / transition_duration
        Added value: +{
        +  "description": "Animation milliseconds, not auto advance.",
        +  "maximum": 3000,
        +  "minimum": 100,
        +  "type": "integer"
        +}
  9. 1 tool update
    • Changedget_format1 field changed
      • addedOutput schema / properties / borders
        Added value: +{
        +  "type": "object"
        +}
  10. 22 tool updates
    • Changedadd_slide4 fields changed
      • changedInput schema / properties / name / description
        Previous value: -"Slide name (at most 100 characters)."New value: +"Slide name (at most 100 characters), in the language of the presentation."
      • addedInput schema / properties / name_tr
        Added value: +{
        +  "additionalProperties": {
        +    "type": "string"
        +  },
        +  "description": "The slide name in the other languages of the site: {\"en\": \"...\"}.",
        +  "type": "object"
        +}
      • addedOutput schema / properties / missing_translations
        Added value: +{
        +  "description": "What is not translated yet into the other languages of the site (add it).",
        +  "items": {
        +    "properties": {
        +      "block_id": {
        +        "type": "integer"
        +      },
        +      "lang": {
        +        "type": "string"
        +      },
        +      "slide_id": {
        +        "type": "integer"
        +      },
        +      "slide_number": {
        +        "type": "integer"
        +      },
        +      "what": {
        +        "description": "title, slide name or block.",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / name_tr
        Added value: +{
        +  "description": "The same text in the other languages of the site: {\"en\": \"...\"}.",
        +  "type": "object"
        +}
    • Changedadd_slides2 fields changed
      • addedOutput schema / properties / slides / items / properties / missing_translations
        Added value: +{
        +  "description": "What is not translated yet into the other languages of the site (add it).",
        +  "items": {
        +    "properties": {
        +      "block_id": {
        +        "type": "integer"
        +      },
        +      "lang": {
        +        "type": "string"
        +      },
        +      "slide_id": {
        +        "type": "integer"
        +      },
        +      "slide_number": {
        +        "type": "integer"
        +      },
        +      "what": {
        +        "description": "title, slide name or block.",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / slides / items / properties / name_tr
        Added value: +{
        +  "description": "The same text in the other languages of the site: {\"en\": \"...\"}.",
        +  "type": "object"
        +}
    • Changedanswer_access_request3 fields changed
      • changedOutput schema / properties / presentation / description
        Previous value: -"Slug of the presentation."New value: +"Slug of the presentation (null: a project)."
      • changedOutput schema / properties / presentation / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • addedOutput schema / properties / project
        Added value: +{
        +  "description": "Slug of the project, for access to all of it.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedcreate_presentation8 fields changed
      • addedInput schema / properties / lang
        Added value: +{
        +  "description": "The language \"title\", slide names and blocks' \"html\" are written in (default: Russian when they have Cyrillic letters, otherwise English).",
        +  "enum": [
        +    "ru",
        +    "en"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / title_tr
        Added value: +{
        +  "additionalProperties": {
        +    "type": "string"
        +  },
        +  "description": "The title in the other languages of the site: {\"en\": \"...\"}.",
        +  "type": "object"
        +}
      • addedOutput schema / properties / lang
        Added value: +{
        +  "description": "The language its texts are written in; \"tr\" holds the others.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / languages
        Added value: +{
        +  "description": "The languages of the site.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / missing_translations
        Added value: +{
        +  "description": "What is not translated yet into the other languages of the site (add it).",
        +  "items": {
        +    "properties": {
        +      "block_id": {
        +        "type": "integer"
        +      },
        +      "lang": {
        +        "type": "string"
        +      },
        +      "slide_id": {
        +        "type": "integer"
        +      },
        +      "slide_number": {
        +        "type": "integer"
        +      },
        +      "what": {
        +        "description": "title, slide name or block.",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / slides / items / properties / missing_translations
        Added value: +{
        +  "description": "What is not translated yet into the other languages of the site (add it).",
        +  "items": {
        +    "properties": {
        +      "block_id": {
        +        "type": "integer"
        +      },
        +      "lang": {
        +        "type": "string"
        +      },
        +      "slide_id": {
        +        "type": "integer"
        +      },
        +      "slide_number": {
        +        "type": "integer"
        +      },
        +      "what": {
        +        "description": "title, slide name or block.",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / slides / items / properties / name_tr
        Added value: +{
        +  "description": "The same text in the other languages of the site: {\"en\": \"...\"}.",
        +  "type": "object"
        +}
      • addedOutput schema / properties / title_tr
        Added value: +{
        +  "description": "The same text in the other languages of the site: {\"en\": \"...\"}.",
        +  "type": "object"
        +}
    • Changedcreate_project2 fields changed
      • addedOutput schema / properties / access
        Added value: +{
        +  "description": "open, public or private: inherited by its presentations.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / grants
        Added value: +{
        +  "description": "Who was given access (the owner sees it).",
        +  "items": {
        +    "properties": {
        +      "role": {
        +        "type": "string"
        +      },
        +      "since": {
        +        "description": "ISO 8601 date and time.",
        +        "type": "string"
        +      },
        +      "user": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changededit_blocks2 fields changed
      • addedOutput schema / properties / missing_translations
        Added value: +{
        +  "description": "What is not translated yet into the other languages of the site (add it).",
        +  "items": {
        +    "properties": {
        +      "block_id": {
        +        "type": "integer"
        +      },
        +      "lang": {
        +        "type": "string"
        +      },
        +      "slide_id": {
        +        "type": "integer"
        +      },
        +      "slide_number": {
        +        "type": "integer"
        +      },
        +      "what": {
        +        "description": "title, slide name or block.",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / name_tr
        Added value: +{
        +  "description": "The same text in the other languages of the site: {\"en\": \"...\"}.",
        +  "type": "object"
        +}
    • Changedget_access6 fields changed
      • addedOutput schema / properties / effective_level
        Added value: +{
        +  "description": "The level that counts (the project's one when stricter).",
        +  "type": "string"
        +}
      • changedOutput schema / properties / level / description
        Previous value: -"open, public or private."New value: +"open, public or private: the presentation's own level."
      • changedOutput schema / properties / pending_requests / items / properties / presentation / description
        Previous value: -"Slug of the presentation."New value: +"Slug of the presentation (null: a project)."
      • changedOutput schema / properties / pending_requests / items / properties / presentation / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • addedOutput schema / properties / pending_requests / items / properties / project
        Added value: +{
        +  "description": "Slug of the project, for access to all of it.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / project_level
        Added value: +{
        +  "description": "The level of its project, if any.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedget_format1 field changed
      • addedOutput schema / properties / languages
        Added value: +{
        +  "type": "object"
        +}
    • Changedget_presentation6 fields changed
      • addedOutput schema / properties / lang
        Added value: +{
        +  "description": "The language its texts are written in; \"tr\" holds the others.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / languages
        Added value: +{
        +  "description": "The languages of the site.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / missing_translations
        Added value: +{
        +  "description": "What is not translated yet into the other languages of the site (add it).",
        +  "items": {
        +    "properties": {
        +      "block_id": {
        +        "type": "integer"
        +      },
        +      "lang": {
        +        "type": "string"
        +      },
        +      "slide_id": {
        +        "type": "integer"
        +      },
        +      "slide_number": {
        +        "type": "integer"
        +      },
        +      "what": {
        +        "description": "title, slide name or block.",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / slides / items / properties / missing_translations
        Added value: +{
        +  "description": "What is not translated yet into the other languages of the site (add it).",
        +  "items": {
        +    "properties": {
        +      "block_id": {
        +        "type": "integer"
        +      },
        +      "lang": {
        +        "type": "string"
        +      },
        +      "slide_id": {
        +        "type": "integer"
        +      },
        +      "slide_number": {
        +        "type": "integer"
        +      },
        +      "what": {
        +        "description": "title, slide name or block.",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / slides / items / properties / name_tr
        Added value: +{
        +  "description": "The same text in the other languages of the site: {\"en\": \"...\"}.",
        +  "type": "object"
        +}
      • addedOutput schema / properties / title_tr
        Added value: +{
        +  "description": "The same text in the other languages of the site: {\"en\": \"...\"}.",
        +  "type": "object"
        +}
    • Changedget_project6 fields changed
      • addedOutput schema / properties / access
        Added value: +{
        +  "description": "open, public or private: inherited by its presentations.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / grants
        Added value: +{
        +  "description": "Who was given access (the owner sees it).",
        +  "items": {
        +    "properties": {
        +      "role": {
        +        "type": "string"
        +      },
        +      "since": {
        +        "description": "ISO 8601 date and time.",
        +        "type": "string"
        +      },
        +      "user": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / presentations / items / properties / lang
        Added value: +{
        +  "description": "The language its texts are written in; \"tr\" holds the others.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / presentations / items / properties / languages
        Added value: +{
        +  "description": "The languages of the site.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / presentations / items / properties / missing_translations
        Added value: +{
        +  "description": "What is not translated yet into the other languages of the site (add it).",
        +  "items": {
        +    "properties": {
        +      "block_id": {
        +        "type": "integer"
        +      },
        +      "lang": {
        +        "type": "string"
        +      },
        +      "slide_id": {
        +        "type": "integer"
        +      },
        +      "slide_number": {
        +        "type": "integer"
        +      },
        +      "what": {
        +        "description": "title, slide name or block.",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / presentations / items / properties / title_tr
        Added value: +{
        +  "description": "The same text in the other languages of the site: {\"en\": \"...\"}.",
        +  "type": "object"
        +}
    • Changedget_slide2 fields changed
      • addedOutput schema / properties / missing_translations
        Added value: +{
        +  "description": "What is not translated yet into the other languages of the site (add it).",
        +  "items": {
        +    "properties": {
        +      "block_id": {
        +        "type": "integer"
        +      },
        +      "lang": {
        +        "type": "string"
        +      },
        +      "slide_id": {
        +        "type": "integer"
        +      },
        +      "slide_number": {
        +        "type": "integer"
        +      },
        +      "what": {
        +        "description": "title, slide name or block.",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / name_tr
        Added value: +{
        +  "description": "The same text in the other languages of the site: {\"en\": \"...\"}.",
        +  "type": "object"
        +}
    • Changedimport_presentation6 fields changed
      • addedOutput schema / properties / lang
        Added value: +{
        +  "description": "The language its texts are written in; \"tr\" holds the others.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / languages
        Added value: +{
        +  "description": "The languages of the site.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / missing_translations
        Added value: +{
        +  "description": "What is not translated yet into the other languages of the site (add it).",
        +  "items": {
        +    "properties": {
        +      "block_id": {
        +        "type": "integer"
        +      },
        +      "lang": {
        +        "type": "string"
        +      },
        +      "slide_id": {
        +        "type": "integer"
        +      },
        +      "slide_number": {
        +        "type": "integer"
        +      },
        +      "what": {
        +        "description": "title, slide name or block.",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / slides / items / properties / missing_translations
        Added value: +{
        +  "description": "What is not translated yet into the other languages of the site (add it).",
        +  "items": {
        +    "properties": {
        +      "block_id": {
        +        "type": "integer"
        +      },
        +      "lang": {
        +        "type": "string"
        +      },
        +      "slide_id": {
        +        "type": "integer"
        +      },
        +      "slide_number": {
        +        "type": "integer"
        +      },
        +      "what": {
        +        "description": "title, slide name or block.",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / slides / items / properties / name_tr
        Added value: +{
        +  "description": "The same text in the other languages of the site: {\"en\": \"...\"}.",
        +  "type": "object"
        +}
      • addedOutput schema / properties / title_tr
        Added value: +{
        +  "description": "The same text in the other languages of the site: {\"en\": \"...\"}.",
        +  "type": "object"
        +}
    • Changedlist_access_requests3 fields changed
      • changedOutput schema / properties / requests / items / properties / presentation / description
        Previous value: -"Slug of the presentation."New value: +"Slug of the presentation (null: a project)."
      • changedOutput schema / properties / requests / items / properties / presentation / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • addedOutput schema / properties / requests / items / properties / project
        Added value: +{
        +  "description": "Slug of the project, for access to all of it.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedlist_presentations4 fields changed
      • addedOutput schema / properties / presentations / items / properties / lang
        Added value: +{
        +  "description": "The language its texts are written in; \"tr\" holds the others.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / presentations / items / properties / languages
        Added value: +{
        +  "description": "The languages of the site.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / presentations / items / properties / missing_translations
        Added value: +{
        +  "description": "What is not translated yet into the other languages of the site (add it).",
        +  "items": {
        +    "properties": {
        +      "block_id": {
        +        "type": "integer"
        +      },
        +      "lang": {
        +        "type": "string"
        +      },
        +      "slide_id": {
        +        "type": "integer"
        +      },
        +      "slide_number": {
        +        "type": "integer"
        +      },
        +      "what": {
        +        "description": "title, slide name or block.",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / presentations / items / properties / title_tr
        Added value: +{
        +  "description": "The same text in the other languages of the site: {\"en\": \"...\"}.",
        +  "type": "object"
        +}
    • Changedlist_projects2 fields changed
      • addedOutput schema / properties / projects / items / properties / access
        Added value: +{
        +  "description": "open, public or private: inherited by its presentations.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / projects / items / properties / grants
        Added value: +{
        +  "description": "Who was given access (the owner sees it).",
        +  "items": {
        +    "properties": {
        +      "role": {
        +        "type": "string"
        +      },
        +      "since": {
        +        "description": "ISO 8601 date and time.",
        +        "type": "string"
        +      },
        +      "user": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedread_presentation6 fields changed
      • addedInput schema / properties / lang
        Added value: +{
        +  "description": "Read the texts in this language (default: the one it is written in); what is not translated shows in its own language.",
        +  "enum": [
        +    "ru",
        +    "en"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / lang
        Added value: +{
        +  "description": "The language its texts are written in; \"tr\" holds the others.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / languages
        Added value: +{
        +  "description": "The languages of the site.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / missing_translations
        Added value: +{
        +  "description": "What is not translated yet into the other languages of the site (add it).",
        +  "items": {
        +    "properties": {
        +      "block_id": {
        +        "type": "integer"
        +      },
        +      "lang": {
        +        "type": "string"
        +      },
        +      "slide_id": {
        +        "type": "integer"
        +      },
        +      "slide_number": {
        +        "type": "integer"
        +      },
        +      "what": {
        +        "description": "title, slide name or block.",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / shown_lang
        Added value: +{
        +  "description": "The language of the texts shown.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / title_tr
        Added value: +{
        +  "description": "The same text in the other languages of the site: {\"en\": \"...\"}.",
        +  "type": "object"
        +}
    • Changedrequest_access3 fields changed
      • changedOutput schema / properties / presentation / description
        Previous value: -"Slug of the presentation."New value: +"Slug of the presentation (null: a project)."
      • changedOutput schema / properties / presentation / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • addedOutput schema / properties / project
        Added value: +{
        +  "description": "Slug of the project, for access to all of it.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Addedrequest_project_access
    • Changedset_access6 fields changed
      • addedOutput schema / properties / effective_level
        Added value: +{
        +  "description": "The level that counts (the project's one when stricter).",
        +  "type": "string"
        +}
      • changedOutput schema / properties / level / description
        Previous value: -"open, public or private."New value: +"open, public or private: the presentation's own level."
      • changedOutput schema / properties / pending_requests / items / properties / presentation / description
        Previous value: -"Slug of the presentation."New value: +"Slug of the presentation (null: a project)."
      • changedOutput schema / properties / pending_requests / items / properties / presentation / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • addedOutput schema / properties / pending_requests / items / properties / project
        Added value: +{
        +  "description": "Slug of the project, for access to all of it.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / project_level
        Added value: +{
        +  "description": "The level of its project, if any.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedupdate_presentation5 fields changed
      • addedInput schema / properties / title_tr
        Added value: +{
        +  "additionalProperties": {
        +    "type": "string"
        +  },
        +  "description": "The title in the other languages of the site: {\"en\": \"...\"} (the languages left out keep theirs).",
        +  "type": "object"
        +}
      • addedOutput schema / properties / lang
        Added value: +{
        +  "description": "The language its texts are written in; \"tr\" holds the others.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / languages
        Added value: +{
        +  "description": "The languages of the site.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / missing_translations
        Added value: +{
        +  "description": "What is not translated yet into the other languages of the site (add it).",
        +  "items": {
        +    "properties": {
        +      "block_id": {
        +        "type": "integer"
        +      },
        +      "lang": {
        +        "type": "string"
        +      },
        +      "slide_id": {
        +        "type": "integer"
        +      },
        +      "slide_number": {
        +        "type": "integer"
        +      },
        +      "what": {
        +        "description": "title, slide name or block.",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / title_tr
        Added value: +{
        +  "description": "The same text in the other languages of the site: {\"en\": \"...\"}.",
        +  "type": "object"
        +}
    • Changedupdate_project5 fields changed
      • addedInput schema / properties / access
        Added value: +{
        +  "description": "Level of the project: \"open\", \"public\" or \"private\".",
        +  "enum": [
        +    "open",
        +    "public",
        +    "private"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / grant
        Added value: +{
        +  "description": "Give access to the whole project: [{\"user\": <user name>, \"role\": \"view\"|\"edit\"}].",
        +  "items": {
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / revoke
        Added value: +{
        +  "description": "User names whose access is taken away.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / access
        Added value: +{
        +  "description": "open, public or private: inherited by its presentations.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / grants
        Added value: +{
        +  "description": "Who was given access (the owner sees it).",
        +  "items": {
        +    "properties": {
        +      "role": {
        +        "type": "string"
        +      },
        +      "since": {
        +        "description": "ISO 8601 date and time.",
        +        "type": "string"
        +      },
        +      "user": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedupdate_slide4 fields changed
      • changedInput schema / properties / name / description
        Previous value: -"Slide name (at most 100 characters)."New value: +"Slide name (at most 100 characters), in the language of the presentation."
      • addedInput schema / properties / name_tr
        Added value: +{
        +  "additionalProperties": {
        +    "type": "string"
        +  },
        +  "description": "The slide name in the other languages of the site: {\"en\": \"...\"}.",
        +  "type": "object"
        +}
      • addedOutput schema / properties / missing_translations
        Added value: +{
        +  "description": "What is not translated yet into the other languages of the site (add it).",
        +  "items": {
        +    "properties": {
        +      "block_id": {
        +        "type": "integer"
        +      },
        +      "lang": {
        +        "type": "string"
        +      },
        +      "slide_id": {
        +        "type": "integer"
        +      },
        +      "slide_number": {
        +        "type": "integer"
        +      },
        +      "what": {
        +        "description": "title, slide name or block.",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / name_tr
        Added value: +{
        +  "description": "The same text in the other languages of the site: {\"en\": \"...\"}.",
        +  "type": "object"
        +}
  11. 12 tool updates
    • Changedanswer_access_request1 field changed
      • addedInput schema / properties / whole_project
        Added value: +{
        +  "description": "Give the access for the whole project the presentation is in (default false: this presentation only).",
        +  "type": "boolean"
        +}
    • Changedcreate_presentation2 fields changed
      • addedInput schema / properties / project
        Added value: +{
        +  "description": "Slug of one of your projects to create the presentation in (at its end); its blocks may then lead to the slides of the other presentations of that project.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / project
        Added value: +{
        +  "description": "The project it belongs to, or null.",
        +  "properties": {
        +    "slug": {
        +      "type": "string"
        +    },
        +    "title": {
        +      "type": "string"
        +    }
        +  },
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
    • Addedcreate_project
    • Addeddelete_project
    • Changedget_presentation1 field changed
      • addedOutput schema / properties / project
        Added value: +{
        +  "description": "The project it belongs to, or null.",
        +  "properties": {
        +    "slug": {
        +      "type": "string"
        +    },
        +    "title": {
        +      "type": "string"
        +    }
        +  },
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
    • Addedget_project
    • Changedimport_presentation2 fields changed
      • addedInput schema / properties / project
        Added value: +{
        +  "description": "Slug of one of your projects to put the presentation in.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / project
        Added value: +{
        +  "description": "The project it belongs to, or null.",
        +  "properties": {
        +    "slug": {
        +      "type": "string"
        +    },
        +    "title": {
        +      "type": "string"
        +    }
        +  },
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
    • Changedlist_presentations2 fields changed
      • addedInput schema / properties / project
        Added value: +{
        +  "description": "Only the presentations of this project (its slug), in its order; \"scope\" is then ignored.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / presentations / items / properties / project
        Added value: +{
        +  "description": "The project it belongs to, or null.",
        +  "properties": {
        +    "slug": {
        +      "type": "string"
        +    },
        +    "title": {
        +      "type": "string"
        +    }
        +  },
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
    • Addedlist_projects
    • Changedread_presentation1 field changed
      • addedOutput schema / properties / project
        Added value: +{
        +  "description": "The project it belongs to, or null.",
        +  "properties": {
        +    "slug": {
        +      "type": "string"
        +    },
        +    "title": {
        +      "type": "string"
        +    }
        +  },
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
    • Changedupdate_presentation1 field changed
      • addedOutput schema / properties / project
        Added value: +{
        +  "description": "The project it belongs to, or null.",
        +  "properties": {
        +    "slug": {
        +      "type": "string"
        +    },
        +    "title": {
        +      "type": "string"
        +    }
        +  },
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
    • Addedupdate_project
  12. 10 tool updates
    • Changedadd_comment1 field changed
      • addedInput schema / properties / text / maxLength
        Added value: +4000
    • Changedadd_slide6 fields changed
      • changedInput schema / properties / name / description
        Previous value: -"Slide name (at most 30 characters)."New value: +"Slide name (at most 100 characters)."
      • addedInput schema / properties / name / maxLength
        Added value: +100
      • addedInput schema / properties / response
        Added value: +{
        +  "description": "\"brief\" (default): only the ids, numbers and types of the slides and blocks; \"full\": every prop of every block too.",
        +  "enum": [
        +    "brief",
        +    "full"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / description
        Added value: +"A slide; the brief form (the default of the tools that change slides) has only id, number, name, url and the id and type of every block."
      • changedOutput schema / properties / objects / description
        Previous value: -"Blocks, bottom to top."New value: +"Blocks, bottom to top (\"props\" only in the full form)."
      • changedOutput schema / properties / objects / items / required
        Previous value: -[
        -  "id",
        -  "type",
        -  "props"
        -]New value: +[
        +  "id",
        +  "type"
        +]
    • Addedadd_slides
    • Changedcreate_presentation5 fields changed
      • addedInput schema / properties / response
        Added value: +{
        +  "description": "\"brief\" (default): only the ids, numbers and types of the slides and blocks; \"full\": every prop of every block too.",
        +  "enum": [
        +    "brief",
        +    "full"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / title / maxLength
        Added value: +100
      • addedOutput schema / properties / slides / items / description
        Added value: +"A slide; the brief form (the default of the tools that change slides) has only id, number, name, url and the id and type of every block."
      • changedOutput schema / properties / slides / items / properties / objects / description
        Previous value: -"Blocks, bottom to top."New value: +"Blocks, bottom to top (\"props\" only in the full form)."
      • changedOutput schema / properties / slides / items / properties / objects / items / required
        Previous value: -[
        -  "id",
        -  "type",
        -  "props"
        -]New value: +[
        +  "id",
        +  "type"
        +]
    • Changededit_blocks4 fields changed
      • addedInput schema / properties / response
        Added value: +{
        +  "description": "\"brief\" (default): only the ids, numbers and types of the slides and blocks; \"full\": every prop of every block too.",
        +  "enum": [
        +    "brief",
        +    "full"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / description
        Added value: +"A slide; the brief form (the default of the tools that change slides) has only id, number, name, url and the id and type of every block."
      • changedOutput schema / properties / objects / description
        Previous value: -"Blocks, bottom to top."New value: +"Blocks, bottom to top (\"props\" only in the full form)."
      • changedOutput schema / properties / objects / items / required
        Previous value: -[
        -  "id",
        -  "type",
        -  "props"
        -]New value: +[
        +  "id",
        +  "type"
        +]
    • Changedget_presentation3 fields changed
      • addedOutput schema / properties / slides / items / description
        Added value: +"A slide; the brief form (the default of the tools that change slides) has only id, number, name, url and the id and type of every block."
      • changedOutput schema / properties / slides / items / properties / objects / description
        Previous value: -"Blocks, bottom to top."New value: +"Blocks, bottom to top (\"props\" only in the full form)."
      • changedOutput schema / properties / slides / items / properties / objects / items / required
        Previous value: -[
        -  "id",
        -  "type",
        -  "props"
        -]New value: +[
        +  "id",
        +  "type"
        +]
    • Changedget_slide3 fields changed
      • addedOutput schema / description
        Added value: +"A slide; the brief form (the default of the tools that change slides) has only id, number, name, url and the id and type of every block."
      • changedOutput schema / properties / objects / description
        Previous value: -"Blocks, bottom to top."New value: +"Blocks, bottom to top (\"props\" only in the full form)."
      • changedOutput schema / properties / objects / items / required
        Previous value: -[
        -  "id",
        -  "type",
        -  "props"
        -]New value: +[
        +  "id",
        +  "type"
        +]
    • Addedimport_presentation
    • Changedupdate_presentation1 field changed
      • addedInput schema / properties / title / maxLength
        Added value: +100
    • Changedupdate_slide6 fields changed
      • changedInput schema / properties / name / description
        Previous value: -"Slide name (at most 30 characters)."New value: +"Slide name (at most 100 characters)."
      • addedInput schema / properties / name / maxLength
        Added value: +100
      • addedInput schema / properties / response
        Added value: +{
        +  "description": "\"brief\" (default): only the ids, numbers and types of the slides and blocks; \"full\": every prop of every block too.",
        +  "enum": [
        +    "brief",
        +    "full"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / description
        Added value: +"A slide; the brief form (the default of the tools that change slides) has only id, number, name, url and the id and type of every block."
      • changedOutput schema / properties / objects / description
        Previous value: -"Blocks, bottom to top."New value: +"Blocks, bottom to top (\"props\" only in the full form)."
      • changedOutput schema / properties / objects / items / required
        Previous value: -[
        -  "id",
        -  "type",
        -  "props"
        -]New value: +[
        +  "id",
        +  "type"
        +]
  13. 4 tool updates
    • Changedcreate_presentation2 fields changed
      • addedInput schema / properties / database
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Setup scripts of the databases the runnable code blocks work in, by language. Every viewer runs the blocks in a private database made from the script (up to 50000 characters each; an empty string removes a script).",
        +  "properties": {
        +    "mongodb": {
        +      "description": "MongoDB shell (mongosh JavaScript) that creates and fills the database.",
        +      "type": "string"
        +    },
        +    "redis": {
        +      "description": "Redis commands that creates and fills the database.",
        +      "type": "string"
        +    },
        +    "sql": {
        +      "description": "PostgreSQL SQL that creates and fills the database.",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / database
        Added value: +{
        +  "description": "Setup scripts of the databases of runnable code blocks (shown to the author only).",
        +  "properties": {
        +    "mongodb": {
        +      "type": "string"
        +    },
        +    "redis": {
        +      "type": "string"
        +    },
        +    "sql": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_presentation1 field changed
      • addedOutput schema / properties / database
        Added value: +{
        +  "description": "Setup scripts of the databases of runnable code blocks (shown to the author only).",
        +  "properties": {
        +    "mongodb": {
        +      "type": "string"
        +    },
        +    "redis": {
        +      "type": "string"
        +    },
        +    "sql": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedrun_code
    • Changedupdate_presentation2 fields changed
      • addedInput schema / properties / database
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Setup scripts of the databases the runnable code blocks work in, by language. Every viewer runs the blocks in a private database made from the script (up to 50000 characters each; an empty string removes a script). Only the author may change them; the languages left out keep their scripts.",
        +  "properties": {
        +    "mongodb": {
        +      "description": "MongoDB shell (mongosh JavaScript) that creates and fills the database.",
        +      "type": "string"
        +    },
        +    "redis": {
        +      "description": "Redis commands that creates and fills the database.",
        +      "type": "string"
        +    },
        +    "sql": {
        +      "description": "PostgreSQL SQL that creates and fills the database.",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / database
        Added value: +{
        +  "description": "Setup scripts of the databases of runnable code blocks (shown to the author only).",
        +  "properties": {
        +    "mongodb": {
        +      "type": "string"
        +    },
        +    "redis": {
        +      "type": "string"
        +    },
        +    "sql": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
  14. 27 tool updates
    • Changedadd_comment1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "agent": {
        +      "description": "Name of the AI agent that wrote it, if any.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "author": {
        +      "type": "string"
        +    },
        +    "created_at": {
        +      "description": "ISO 8601 date and time.",
        +      "type": "string"
        +    },
        +    "id": {
        +      "type": "integer"
        +    },
        +    "resolved": {
        +      "type": "boolean"
        +    },
        +    "slide_id": {
        +      "description": "null: a note on the whole presentation.",
        +      "type": [
        +        "integer",
        +        "null"
        +      ]
        +    },
        +    "slide_number": {
        +      "type": [
        +        "integer",
        +        "null"
        +      ]
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "text"
        +  ],
        +  "type": "object"
        +}
    • Changedadd_slide1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "background": {
        +      "description": "The \"src\" of the background picture, or null.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "bg": {
        +      "type": "string"
        +    },
        +    "fit": {
        +      "type": "string"
        +    },
        +    "h": {
        +      "type": "integer"
        +    },
        +    "id": {
        +      "description": "Stable id of the slide.",
        +      "type": "integer"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "number": {
        +      "description": "1-based position; changes when slides are reordered.",
        +      "type": "integer"
        +    },
        +    "objects": {
        +      "description": "Blocks, bottom to top.",
        +      "items": {
        +        "properties": {
        +          "id": {
        +            "type": "integer"
        +          },
        +          "props": {
        +            "description": "Every prop of the block (see the block format reference).",
        +            "type": "object"
        +          },
        +          "type": {
        +            "description": "text, shape, button, line, image or code.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "type",
        +          "props"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "url": {
        +      "description": "The address people open in a browser.",
        +      "type": "string"
        +    },
        +    "w": {
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "number",
        +    "objects"
        +  ],
        +  "type": "object"
        +}
    • Changedanswer_access_request2 fields changed
      • addedInput schema / properties / approve / description
        Added value: +"true approves the request, false declines it."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "agent": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "created_at": {
        +      "description": "ISO 8601 date and time.",
        +      "type": "string"
        +    },
        +    "id": {
        +      "type": "integer"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "presentation": {
        +      "description": "Slug of the presentation.",
        +      "type": "string"
        +    },
        +    "role": {
        +      "description": "view or edit.",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "pending, approved or declined.",
        +      "type": "string"
        +    },
        +    "title": {
        +      "type": "string"
        +    },
        +    "user": {
        +      "description": "Who asks.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "status"
        +  ],
        +  "type": "object"
        +}
    • Changedcreate_presentation2 fields changed
      • addedInput schema / properties / description / description
        Added value: +"Description shown on the presentation page (optional)."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "access": {
        +      "description": "open, public or private.",
        +      "type": "string"
        +    },
        +    "can_edit": {
        +      "description": "Whether you may change it.",
        +      "type": "boolean"
        +    },
        +    "description": {
        +      "type": "string"
        +    },
        +    "id": {
        +      "type": "integer"
        +    },
        +    "owner": {
        +      "description": "User name of the author.",
        +      "type": "string"
        +    },
        +    "slides": {
        +      "items": {
        +        "properties": {
        +          "background": {
        +            "description": "The \"src\" of the background picture, or null.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "bg": {
        +            "type": "string"
        +          },
        +          "fit": {
        +            "type": "string"
        +          },
        +          "h": {
        +            "type": "integer"
        +          },
        +          "id": {
        +            "description": "Stable id of the slide.",
        +            "type": "integer"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "number": {
        +            "description": "1-based position; changes when slides are reordered.",
        +            "type": "integer"
        +          },
        +          "objects": {
        +            "description": "Blocks, bottom to top.",
        +            "items": {
        +              "properties": {
        +                "id": {
        +                  "type": "integer"
        +                },
        +                "props": {
        +                  "description": "Every prop of the block (see the block format reference).",
        +                  "type": "object"
        +                },
        +                "type": {
        +                  "description": "text, shape, button, line, image or code.",
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "id",
        +                "type",
        +                "props"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "url": {
        +            "description": "The address people open in a browser.",
        +            "type": "string"
        +          },
        +          "w": {
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "number",
        +          "objects"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "slug": {
        +      "description": "The address of the presentation: /movie/<slug>/.",
        +      "type": "string"
        +    },
        +    "theme": {
        +      "type": "string"
        +    },
        +    "title": {
        +      "type": "string"
        +    },
        +    "url": {
        +      "description": "The address people open in a browser.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "slug",
        +    "title",
        +    "slides"
        +  ],
        +  "type": "object"
        +}
    • Changeddelete_comment1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "deleted": {
        +      "description": "Id of the deleted note.",
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "deleted"
        +  ],
        +  "type": "object"
        +}
    • Changeddelete_presentation1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "deleted": {
        +      "description": "Slug of the deleted presentation.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "deleted"
        +  ],
        +  "type": "object"
        +}
    • Changeddelete_slide1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "deleted": {
        +      "description": "Id of the deleted slide.",
        +      "type": "integer"
        +    },
        +    "slides": {
        +      "description": "Slides left.",
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "deleted"
        +  ],
        +  "type": "object"
        +}
    • Changededit_blocks1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "background": {
        +      "description": "The \"src\" of the background picture, or null.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "bg": {
        +      "type": "string"
        +    },
        +    "fit": {
        +      "type": "string"
        +    },
        +    "h": {
        +      "type": "integer"
        +    },
        +    "id": {
        +      "description": "Stable id of the slide.",
        +      "type": "integer"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "number": {
        +      "description": "1-based position; changes when slides are reordered.",
        +      "type": "integer"
        +    },
        +    "objects": {
        +      "description": "Blocks, bottom to top.",
        +      "items": {
        +        "properties": {
        +          "id": {
        +            "type": "integer"
        +          },
        +          "props": {
        +            "description": "Every prop of the block (see the block format reference).",
        +            "type": "object"
        +          },
        +          "type": {
        +            "description": "text, shape, button, line, image or code.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "type",
        +          "props"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "url": {
        +      "description": "The address people open in a browser.",
        +      "type": "string"
        +    },
        +    "w": {
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "number",
        +    "objects"
        +  ],
        +  "type": "object"
        +}
    • Changedget_access1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "grants": {
        +      "items": {
        +        "properties": {
        +          "role": {
        +            "type": "string"
        +          },
        +          "since": {
        +            "description": "ISO 8601 date and time.",
        +            "type": "string"
        +          },
        +          "user": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "level": {
        +      "description": "open, public or private.",
        +      "type": "string"
        +    },
        +    "pending_requests": {
        +      "items": {
        +        "properties": {
        +          "agent": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "created_at": {
        +            "description": "ISO 8601 date and time.",
        +            "type": "string"
        +          },
        +          "id": {
        +            "type": "integer"
        +          },
        +          "message": {
        +            "type": "string"
        +          },
        +          "presentation": {
        +            "description": "Slug of the presentation.",
        +            "type": "string"
        +          },
        +          "role": {
        +            "description": "view or edit.",
        +            "type": "string"
        +          },
        +          "status": {
        +            "description": "pending, approved or declined.",
        +            "type": "string"
        +          },
        +          "title": {
        +            "type": "string"
        +          },
        +          "user": {
        +            "description": "Who asks.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "status"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "level"
        +  ],
        +  "type": "object"
        +}
    • Changedget_format1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "booleans": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "canvas": {
        +      "type": "object"
        +    },
        +    "colors": {
        +      "type": "object"
        +    },
        +    "enums": {
        +      "type": "object"
        +    },
        +    "html": {
        +      "type": "string"
        +    },
        +    "links": {
        +      "type": "object"
        +    },
        +    "numbers": {
        +      "type": "object"
        +    },
        +    "types": {
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "types"
        +  ],
        +  "type": "object"
        +}
    • Changedget_presentation1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "access": {
        +      "description": "open, public or private.",
        +      "type": "string"
        +    },
        +    "can_edit": {
        +      "description": "Whether you may change it.",
        +      "type": "boolean"
        +    },
        +    "description": {
        +      "type": "string"
        +    },
        +    "id": {
        +      "type": "integer"
        +    },
        +    "owner": {
        +      "description": "User name of the author.",
        +      "type": "string"
        +    },
        +    "slides": {
        +      "items": {
        +        "properties": {
        +          "background": {
        +            "description": "The \"src\" of the background picture, or null.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "bg": {
        +            "type": "string"
        +          },
        +          "fit": {
        +            "type": "string"
        +          },
        +          "h": {
        +            "type": "integer"
        +          },
        +          "id": {
        +            "description": "Stable id of the slide.",
        +            "type": "integer"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "number": {
        +            "description": "1-based position; changes when slides are reordered.",
        +            "type": "integer"
        +          },
        +          "objects": {
        +            "description": "Blocks, bottom to top.",
        +            "items": {
        +              "properties": {
        +                "id": {
        +                  "type": "integer"
        +                },
        +                "props": {
        +                  "description": "Every prop of the block (see the block format reference).",
        +                  "type": "object"
        +                },
        +                "type": {
        +                  "description": "text, shape, button, line, image or code.",
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "id",
        +                "type",
        +                "props"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "url": {
        +            "description": "The address people open in a browser.",
        +            "type": "string"
        +          },
        +          "w": {
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "number",
        +          "objects"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "slug": {
        +      "description": "The address of the presentation: /movie/<slug>/.",
        +      "type": "string"
        +    },
        +    "theme": {
        +      "type": "string"
        +    },
        +    "title": {
        +      "type": "string"
        +    },
        +    "url": {
        +      "description": "The address people open in a browser.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "slug",
        +    "title",
        +    "slides"
        +  ],
        +  "type": "object"
        +}
    • Changedget_slide1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "background": {
        +      "description": "The \"src\" of the background picture, or null.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "bg": {
        +      "type": "string"
        +    },
        +    "fit": {
        +      "type": "string"
        +    },
        +    "h": {
        +      "type": "integer"
        +    },
        +    "id": {
        +      "description": "Stable id of the slide.",
        +      "type": "integer"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "number": {
        +      "description": "1-based position; changes when slides are reordered.",
        +      "type": "integer"
        +    },
        +    "objects": {
        +      "description": "Blocks, bottom to top.",
        +      "items": {
        +        "properties": {
        +          "id": {
        +            "type": "integer"
        +          },
        +          "props": {
        +            "description": "Every prop of the block (see the block format reference).",
        +            "type": "object"
        +          },
        +          "type": {
        +            "description": "text, shape, button, line, image or code.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "type",
        +          "props"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "url": {
        +      "description": "The address people open in a browser.",
        +      "type": "string"
        +    },
        +    "w": {
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "number",
        +    "objects"
        +  ],
        +  "type": "object"
        +}
    • Changedget_version2 fields changed
      • addedInput schema / properties / format / description
        Added value: +"Result format: \"markdown\" (default) or \"json\" (the complete content)."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The version, with \"markdown\" (default) or \"content\" (format \"json\").",
        +  "properties": {
        +    "agent": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "author": {
        +      "type": "string"
        +    },
        +    "changes": {
        +      "description": "What changed in this version.",
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "content": {
        +      "type": "object"
        +    },
        +    "created_at": {
        +      "description": "ISO 8601 date and time.",
        +      "type": "string"
        +    },
        +    "markdown": {
        +      "type": "string"
        +    },
        +    "number": {
        +      "type": "integer"
        +    },
        +    "updated_at": {
        +      "description": "ISO 8601 date and time.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "number"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_access_requests3 fields changed
      • addedInput schema / properties / direction / description
        Added value: +"\"incoming\" (default): requests to you; \"outgoing\": requests you sent."
      • addedInput schema / properties / include_decided / description
        Added value: +"Also return approved and declined requests."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "requests": {
        +      "items": {
        +        "properties": {
        +          "agent": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "created_at": {
        +            "description": "ISO 8601 date and time.",
        +            "type": "string"
        +          },
        +          "id": {
        +            "type": "integer"
        +          },
        +          "message": {
        +            "type": "string"
        +          },
        +          "presentation": {
        +            "description": "Slug of the presentation.",
        +            "type": "string"
        +          },
        +          "role": {
        +            "description": "view or edit.",
        +            "type": "string"
        +          },
        +          "status": {
        +            "description": "pending, approved or declined.",
        +            "type": "string"
        +          },
        +          "title": {
        +            "type": "string"
        +          },
        +          "user": {
        +            "description": "Who asks.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "status"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "requests"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_comments2 fields changed
      • addedInput schema / properties / include_resolved / description
        Added value: +"Also return resolved threads (default: only open ones)."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "comments": {
        +      "items": {
        +        "properties": {
        +          "agent": {
        +            "description": "Name of the AI agent that wrote it, if any.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "author": {
        +            "type": "string"
        +          },
        +          "created_at": {
        +            "description": "ISO 8601 date and time.",
        +            "type": "string"
        +          },
        +          "id": {
        +            "type": "integer"
        +          },
        +          "replies": {
        +            "items": {
        +              "properties": {
        +                "agent": {
        +                  "description": "Name of the AI agent that wrote it, if any.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "author": {
        +                  "type": "string"
        +                },
        +                "created_at": {
        +                  "description": "ISO 8601 date and time.",
        +                  "type": "string"
        +                },
        +                "id": {
        +                  "type": "integer"
        +                },
        +                "resolved": {
        +                  "type": "boolean"
        +                },
        +                "slide_id": {
        +                  "description": "null: a note on the whole presentation.",
        +                  "type": [
        +                    "integer",
        +                    "null"
        +                  ]
        +                },
        +                "slide_number": {
        +                  "type": [
        +                    "integer",
        +                    "null"
        +                  ]
        +                },
        +                "text": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "id",
        +                "text"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "resolved": {
        +            "type": "boolean"
        +          },
        +          "slide_id": {
        +            "description": "null: a note on the whole presentation.",
        +            "type": [
        +              "integer",
        +              "null"
        +            ]
        +          },
        +          "slide_number": {
        +            "type": [
        +              "integer",
        +              "null"
        +            ]
        +          },
        +          "text": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "text"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "comments"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_history1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "versions": {
        +      "items": {
        +        "properties": {
        +          "agent": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "author": {
        +            "type": "string"
        +          },
        +          "changes": {
        +            "description": "What changed in this version.",
        +            "items": {
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "created_at": {
        +            "description": "ISO 8601 date and time.",
        +            "type": "string"
        +          },
        +          "number": {
        +            "type": "integer"
        +          },
        +          "updated_at": {
        +            "description": "ISO 8601 date and time.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "number"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "versions"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_presentations2 fields changed
      • addedInput schema / properties / scope / description
        Added value: +"Which presentations: \"mine\" (default), \"shared\" with you, or \"open\" ones of anybody."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "presentations": {
        +      "items": {
        +        "properties": {
        +          "access": {
        +            "description": "open, public or private.",
        +            "type": "string"
        +          },
        +          "can_edit": {
        +            "description": "Whether you may change it.",
        +            "type": "boolean"
        +          },
        +          "description": {
        +            "type": "string"
        +          },
        +          "id": {
        +            "type": "integer"
        +          },
        +          "owner": {
        +            "description": "User name of the author.",
        +            "type": "string"
        +          },
        +          "slides": {
        +            "description": "Number of slides.",
        +            "type": "integer"
        +          },
        +          "slug": {
        +            "description": "The address of the presentation: /movie/<slug>/.",
        +            "type": "string"
        +          },
        +          "theme": {
        +            "type": "string"
        +          },
        +          "title": {
        +            "type": "string"
        +          },
        +          "url": {
        +            "description": "The address people open in a browser.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "slug",
        +          "title"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "presentations"
        +  ],
        +  "type": "object"
        +}
    • Changedread_presentation2 fields changed
      • addedInput schema / properties / format / description
        Added value: +"Result format: \"markdown\" (default, compact) or \"json\" (structured)."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "With format \"markdown\" (default): {\"markdown\"}; with \"json\": the presentation slide by slide.",
        +  "properties": {
        +    "access": {
        +      "description": "open, public or private.",
        +      "type": "string"
        +    },
        +    "can_edit": {
        +      "description": "Whether you may change it.",
        +      "type": "boolean"
        +    },
        +    "description": {
        +      "type": "string"
        +    },
        +    "id": {
        +      "type": "integer"
        +    },
        +    "markdown": {
        +      "type": "string"
        +    },
        +    "owner": {
        +      "description": "User name of the author.",
        +      "type": "string"
        +    },
        +    "slides": {
        +      "items": {
        +        "properties": {
        +          "blocks": {
        +            "description": "Texts, pictures, code and links in reading order.",
        +            "items": {
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "has_background_picture": {
        +            "type": "boolean"
        +          },
        +          "id": {
        +            "type": "integer"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "number": {
        +            "type": "integer"
        +          },
        +          "url": {
        +            "description": "The address people open in a browser.",
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "slug": {
        +      "description": "The address of the presentation: /movie/<slug>/.",
        +      "type": "string"
        +    },
        +    "theme": {
        +      "type": "string"
        +    },
        +    "title": {
        +      "type": "string"
        +    },
        +    "url": {
        +      "description": "The address people open in a browser.",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedreorder_slides1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "order": {
        +      "items": {
        +        "properties": {
        +          "id": {
        +            "type": "integer"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "number": {
        +            "type": "integer"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "order"
        +  ],
        +  "type": "object"
        +}
    • Changedrequest_access1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "agent": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "created_at": {
        +      "description": "ISO 8601 date and time.",
        +      "type": "string"
        +    },
        +    "id": {
        +      "type": "integer"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "presentation": {
        +      "description": "Slug of the presentation.",
        +      "type": "string"
        +    },
        +    "role": {
        +      "description": "view or edit.",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "pending, approved or declined.",
        +      "type": "string"
        +    },
        +    "title": {
        +      "type": "string"
        +    },
        +    "user": {
        +      "description": "Who asks.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "status"
        +  ],
        +  "type": "object"
        +}
    • Changedresolve_comment1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "id": {
        +      "type": "integer"
        +    },
        +    "resolved": {
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "resolved"
        +  ],
        +  "type": "object"
        +}
    • Changedrestore_version1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "restored": {
        +      "description": "The version that was brought back.",
        +      "type": "integer"
        +    },
        +    "version": {
        +      "properties": {
        +        "agent": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "author": {
        +          "type": "string"
        +        },
        +        "changes": {
        +          "description": "What changed in this version.",
        +          "items": {
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "created_at": {
        +          "description": "ISO 8601 date and time.",
        +          "type": "string"
        +        },
        +        "number": {
        +          "type": "integer"
        +        },
        +        "updated_at": {
        +          "description": "ISO 8601 date and time.",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "number"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "restored"
        +  ],
        +  "type": "object"
        +}
    • Changedset_access3 fields changed
      • addedInput schema / properties / level / description
        Added value: +"New access level: \"open\", \"public\" or \"private\"."
      • addedInput schema / properties / revoke / description
        Added value: +"User names whose access is taken away."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "grants": {
        +      "items": {
        +        "properties": {
        +          "role": {
        +            "type": "string"
        +          },
        +          "since": {
        +            "description": "ISO 8601 date and time.",
        +            "type": "string"
        +          },
        +          "user": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "level": {
        +      "description": "open, public or private.",
        +      "type": "string"
        +    },
        +    "pending_requests": {
        +      "items": {
        +        "properties": {
        +          "agent": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "created_at": {
        +            "description": "ISO 8601 date and time.",
        +            "type": "string"
        +          },
        +          "id": {
        +            "type": "integer"
        +          },
        +          "message": {
        +            "type": "string"
        +          },
        +          "presentation": {
        +            "description": "Slug of the presentation.",
        +            "type": "string"
        +          },
        +          "role": {
        +            "description": "view or edit.",
        +            "type": "string"
        +          },
        +          "status": {
        +            "description": "pending, approved or declined.",
        +            "type": "string"
        +          },
        +          "title": {
        +            "type": "string"
        +          },
        +          "user": {
        +            "description": "Who asks.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "status"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "level"
        +  ],
        +  "type": "object"
        +}
    • Changedupdate_presentation4 fields changed
      • addedInput schema / properties / description / description
        Added value: +"New description; an empty string removes it."
      • addedInput schema / properties / theme / description
        Added value: +"Colour theme: the defaults of new slides and blocks."
      • addedInput schema / properties / title / description
        Added value: +"New title (at most 100 characters)."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "access": {
        +      "description": "open, public or private.",
        +      "type": "string"
        +    },
        +    "can_edit": {
        +      "description": "Whether you may change it.",
        +      "type": "boolean"
        +    },
        +    "description": {
        +      "type": "string"
        +    },
        +    "id": {
        +      "type": "integer"
        +    },
        +    "owner": {
        +      "description": "User name of the author.",
        +      "type": "string"
        +    },
        +    "slides": {
        +      "description": "Number of slides.",
        +      "type": "integer"
        +    },
        +    "slug": {
        +      "description": "The address of the presentation: /movie/<slug>/.",
        +      "type": "string"
        +    },
        +    "theme": {
        +      "type": "string"
        +    },
        +    "title": {
        +      "type": "string"
        +    },
        +    "url": {
        +      "description": "The address people open in a browser.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "slug",
        +    "title"
        +  ],
        +  "type": "object"
        +}
    • Changedupdate_slide1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "background": {
        +      "description": "The \"src\" of the background picture, or null.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "bg": {
        +      "type": "string"
        +    },
        +    "fit": {
        +      "type": "string"
        +    },
        +    "h": {
        +      "type": "integer"
        +    },
        +    "id": {
        +      "description": "Stable id of the slide.",
        +      "type": "integer"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "number": {
        +      "description": "1-based position; changes when slides are reordered.",
        +      "type": "integer"
        +    },
        +    "objects": {
        +      "description": "Blocks, bottom to top.",
        +      "items": {
        +        "properties": {
        +          "id": {
        +            "type": "integer"
        +          },
        +          "props": {
        +            "description": "Every prop of the block (see the block format reference).",
        +            "type": "object"
        +          },
        +          "type": {
        +            "description": "text, shape, button, line, image or code.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "type",
        +          "props"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "url": {
        +      "description": "The address people open in a browser.",
        +      "type": "string"
        +    },
        +    "w": {
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "number",
        +    "objects"
        +  ],
        +  "type": "object"
        +}
    • Changedupload_image1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "h": {
        +      "type": "integer"
        +    },
        +    "src": {
        +      "description": "Use it as \"src\" of an image block or background.",
        +      "type": "string"
        +    },
        +    "url": {
        +      "type": "string"
        +    },
        +    "w": {
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "src"
        +  ],
        +  "type": "object"
        +}
    • Changedwhoami1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "key": {
        +      "description": "Name of the API key.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "scope": {
        +      "description": "read or write.",
        +      "type": "string"
        +    },
        +    "username": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "username",
        +    "scope"
        +  ],
        +  "type": "object"
        +}
  15. 27 tool updates
    • First observedadd_comment
    • First observedadd_slide
    • First observedanswer_access_request
    • First observedcreate_presentation
    • First observeddelete_comment
    • First observeddelete_presentation
    • First observeddelete_slide
    • First observededit_blocks
    • First observedget_access
    • First observedget_format
    • First observedget_presentation
    • First observedget_slide
    • First observedget_version
    • First observedlist_access_requests
    • First observedlist_comments
    • First observedlist_history
    • First observedlist_presentations
    • First observedread_presentation
    • First observedreorder_slides
    • First observedrequest_access
    • First observedresolve_comment
    • First observedrestore_version
    • First observedset_access
    • First observedupdate_presentation
    • First observedupdate_slide
    • First observedupload_image
    • First observedwhoami

Publisher details

Operator
EaseWeb · Publisher source
Operator website
https://easeweb.host/
Vendor relationship
First-party · Publisher source
Trust center
Not available
Restrictions
None. Free; requires an EaseWeb account (sign-in with Google, Apple or Yandex, created on first sign-in). No paid plan, admin approval, regional limits or custom OAuth app needed: OAuth works with dynamic client registration or Client ID Metadata Documents.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables coding agents to scaffold, preview, inspect, navigate, capture, and build interactive HTML presentations authored as React/TSX source files. It operates the local presenter—keys, step tabs, URLs, and tools share one position—while agents edit the source directly.
    16 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables agents to create, inspect, and edit self-contained HTML presentation decks through semantic tools, validate them against the htmldeck/v1 contract, hand them to a local visual editor, and export them as standalone HTML, PDF, or per-slide PNG.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Turns an AI client into a slide author that produces single self-contained HTML decks with live diagrams, step-by-step reveals, in-place text editing and PDF export. It also lets the AI verify its own work through layout audits and screenshots, all locally with no API key.
    102 npm
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources