EaseWeb
Server Details
Create, edit, read and review web presentations: slides, linked buttons, pictures, runnable code.
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
Scored across 50 tools
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.
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.
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.
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 toolsadd_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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). | |
| text | Yes | The note (plain text, up to 4000 characters). | |
| reply_to | No | The id of a note to answer. | |
| slide_id | No | The id of a slide (stable, the "id" of the slide in the presentation). Its number (position) changes when slides are reordered. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| text | Yes | |
| agent | No | Name of the AI agent that wrote it, if any. |
| author | No | |
| resolved | No | |
| slide_id | No | null: a note on the whole presentation. |
| created_at | No | ISO 8601 date and time. |
| slide_number | No | |
| slide_deleted | No | The slide of the note was deleted (the history has it). |
TDQS
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.
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.
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.
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.
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.
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").
| Name | Required | Description | Default |
|---|---|---|---|
| h | No | Canvas height in px (default 720). | |
| w | No | Canvas width in px (200-4000, default 1280). | |
| bg | No | Background colour, #rrggbb. | |
| fit | No | How the background picture fits. | |
| name | No | Slide name (at most 100 characters), in the language of the presentation. | |
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). | |
| name_tr | No | The slide name in the other languages of the site: {"en": "..."}. | |
| objects | No | 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}. | |
| position | No | 1-based place; default: the end. | |
| response | No | "brief" (default): only the ids, numbers and types of the slides and blocks; "full": every prop of every block too. | |
| background | No | Background picture: the "src" of an uploaded picture; null removes it. | |
| transition | No | Entrance effect of this incoming slide (default: none). | none |
| transition_duration | No | Animation duration in milliseconds (100-3000, default 500); not auto advance. Values outside the range are clamped. |
Output Schema
| Name | Required | Description |
|---|---|---|
| h | No | |
| w | No | |
| bg | No | |
| id | Yes | Stable id of the slide. |
| fit | No | |
| url | No | The address people open in a browser. |
| name | No | |
| notes | No | The speaker notes (for those who may edit; only when there are some). |
| number | Yes | 1-based position; changes when slides are reordered. |
| name_tr | No | The same text in the other languages of the site: {"en": "..."}. |
| objects | Yes | Blocks, bottom to top ("props" only in the full form). |
| version | No | Stamp of the content as it is now: give it back as "base_version" to change it only if nobody else did meanwhile. |
| background | No | The "src" of the background picture, or null. |
| transition | No | Entrance effect of this incoming slide. |
| layout_warnings | No | 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). |
| transition_duration | No | Animation milliseconds, not auto advance. |
| missing_translations | No | 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. |
| missing_translations_count | No | How many texts are not translated yet. |
TDQS
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.
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.
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.
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.
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.
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").
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). | |
| slides | Yes | The slides: [{"name", "w", "h", "bg", "fit", "transition", "transition_duration", "background", "objects"}]. | |
| position | No | 1-based place of the first new slide; default: the end. | |
| response | No | "brief" (default): only the ids, numbers and types of the slides and blocks; "full": every prop of every block too. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | Slides in the presentation now. |
| slides | Yes | The new slides. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | "view" -- read; "edit" -- read and change. | |
| approve | Yes | true approves the request, false declines it. | |
| request_id | Yes | The id of the access request. | |
| whole_project | No | Give the access for the whole project the presentation is in (default false: this presentation only). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| role | No | view or edit. |
| user | No | Who asks. |
| agent | No | |
| title | No | Its title; null while you may not see it (a private one you asked for). |
| status | Yes | pending, approved or declined. |
| message | No | |
| project | No | Slug of the project, for access to all of it. |
| created_at | No | ISO 8601 date and time. |
| presentation | No | Slug of the presentation (null: a project). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). | |
| fresh | No | First make your databases again from the scripts (default true). | |
| slide_ids | No | Only the code blocks of these slides (default: all of them). | |
| only_expected | No | Only the blocks that have an "expect" (default false). |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| blocks | Yes | The code blocks in the order they ran. |
| summary | Yes | How many blocks of each status. |
TDQS
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.
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.
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.
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.
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.
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 lookBRead-onlyIdempotentInspect
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").
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). | |
| slide_ids | No | Only these slides (ids). | |
| to_number | No | Only the slides up to this number (inclusive). | |
| from_number | No | Only the slides from this number on (1-based). |
Output Schema
| Name | Required | Description |
|---|---|---|
| checked | Yes | Slides checked. |
| measured | No | The texts were measured in a browser (false: estimated). |
| warnings | Yes | 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). |
TDQS
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.
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.
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.
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.
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.
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").
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Slug of the presentation the slides are in (default: this one). | |
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). | |
| after | No | The copies go after the slide with this number (0: first). | |
| copies | No | How many copies of each (default 1). | |
| response | No | "brief" (default): only the ids, numbers and types of the slides and blocks; "full": every prop of every block too. | |
| slide_ids | Yes | The slides to copy (ids), in the order the copies get. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| slides | Yes | The copies, in their order. |
TDQS
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.
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.
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.
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.
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.
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".
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | 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). | |
| theme | No | Default colours of the slides and of new blocks. | |
| title | Yes | Title (at most 100 characters). | |
| access | No | Who sees it (default "private": only you, until you publish it; "public": everybody reads it; "open": every signed-in person edits it too). | |
| slides | No | Slides with their blocks (optional). | |
| project | No | 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. | |
| database | No | 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). | |
| response | No | "brief" (default): only the ids, numbers and types of the slides and blocks; "full": every prop of every block too. | |
| title_tr | No | The title in the other languages of the site: {"en": "..."}. | |
| description | No | Description shown on the presentation page (optional). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | No | The address people open in a browser. |
| lang | No | The language its texts are written in; "tr" holds the others. |
| slug | Yes | The address of the presentation: /movie/<slug>/. |
| owner | No | User name of the author. |
| theme | No | |
| title | Yes | |
| access | No | open, public or private. |
| slides | Yes | |
| project | No | The project it belongs to, or null. |
| version | No | Stamp of the content as it is now: give it back as "base_version" to change it only if nobody else did meanwhile. |
| can_edit | No | Whether you may change it. |
| database | No | Setup scripts of the databases of runnable code blocks (shown to the author only). |
| title_tr | No | The same text in the other languages of the site: {"en": "..."}. |
| languages | No | The languages of the site. |
| cover_slide | No | Id of the slide shown as its cover in the lists (null: an uploaded picture, or no slides). |
| description | No | |
| database_chars | No | A part or the words only were read: how long each database script is (the whole presentation without "texts_only" gives them). |
| missing_translations | No | 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. |
| missing_translations_count | No | How many texts are not translated yet. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Title (at most 100 characters). | |
| description | No | Description (optional). | |
| presentations | No | Slugs of presentations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | No | The address people open in a browser. |
| role | No | owner, edit, view or null. |
| slug | Yes | The address of the project: /project/<slug>/. |
| owner | No | |
| title | Yes | |
| access | No | open, public or private: inherited by its presentations. |
| grants | No | Who was given access (the owner sees it). |
| is_owner | No | |
| description | No | |
| presentations | No | Its presentations, in order. |
TDQS
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.
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.
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.
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.
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.
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 noteADestructiveIdempotentInspect
Delete a note (with its replies, when it starts a thread). Its author or the owner of the presentation may do it.
| Name | Required | Description | Default |
|---|---|---|---|
| comment_id | Yes | The id of a note. |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes | Id of the deleted note. |
TDQS
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.
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.
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.
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.
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.
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 presentationBDestructiveIdempotentInspect
Delete one of your presentations (it disappears from the site and from the list of presentations).
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes | Slug of the deleted presentation. |
TDQS
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.
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.
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.
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.
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.
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 projectADestructiveIdempotentInspect
Delete a project of yours. Its presentations stay, as presentations on their own; the links between them stop leading anywhere.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | The project's slug (its address: /project/<slug>/). |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes | Slug of the deleted project. |
TDQS
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.
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.
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.
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.
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.
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 slideBDestructiveIdempotentInspect
Delete a slide of your presentation. Links that led to it stop leading anywhere.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). | |
| slide_id | Yes | The id of a slide (stable, the "id" of the slide in the presentation). Its number (position) changes when slides are reordered. | |
| base_version | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| slides | No | Slides left. |
| deleted | Yes | Id of the deleted slide. |
TDQS
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.
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.
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.
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.
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.
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").
| Name | Required | Description | Default |
|---|---|---|---|
| add | No | New blocks: [{"type", "props"}]. | |
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). | |
| delete | No | Ids of blocks to delete. | |
| update | No | Changes: [{"id" | "ids": [...] | "inside": <card block id>, "props"}]. | |
| response | No | "brief" (default): only the ids, numbers and types of the slides and blocks; "full": every prop of every block too. | |
| slide_id | Yes | The id of a slide (stable, the "id" of the slide in the presentation). Its number (position) changes when slides are reordered. | |
| at_bottom | No | Put the added blocks under the others (default: on top). | |
| base_version | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| h | No | |
| w | No | |
| bg | No | |
| id | Yes | Stable id of the slide. |
| fit | No | |
| url | No | The address people open in a browser. |
| name | No | |
| notes | No | The speaker notes (for those who may edit; only when there are some). |
| number | Yes | 1-based position; changes when slides are reordered. |
| name_tr | No | The same text in the other languages of the site: {"en": "..."}. |
| objects | Yes | Blocks, bottom to top ("props" only in the full form). |
| version | No | Stamp of the content as it is now: give it back as "base_version" to change it only if nobody else did meanwhile. |
| background | No | The "src" of the background picture, or null. |
| transition | No | Entrance effect of this incoming slide. |
| layout_warnings | No | 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). |
| transition_duration | No | Animation milliseconds, not auto advance. |
| missing_translations | No | 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. |
| missing_translations_count | No | How many texts are not translated yet. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). | |
| edits | Yes | Up to 100 items: [{"slide_id", "add"?, "update"?, "delete"?, "at_bottom"?, "base_version"?}]. | |
| response | No | "brief" (default): only the ids, numbers and types of the slides and blocks; "full": every prop of every block too. |
Output Schema
| Name | Required | Description |
|---|---|---|
| slides | Yes | The changed slides. |
| layout_warnings | No | 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). |
| missing_translations | No | 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. |
| missing_translations_count | No | How many texts are not translated yet. |
TDQS
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.
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.
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.
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.
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.
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 PDFARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). | |
| format | Yes | The kind of file. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | Where to download the file. |
| note | No | |
| format | Yes | |
| filename | No | |
| expires_in | No | Seconds the url works. |
TDQS
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.
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.
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.
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.
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.
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 settingsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). |
Output Schema
| Name | Required | Description |
|---|---|---|
| level | Yes | open, public or private: the presentation's own level. |
| grants | No | |
| project_level | No | The level of its project, if any. |
| effective_level | No | The level that counts (the project's one when stricter). |
| pending_requests | No |
TDQS
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.
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.
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.
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.
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.
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 referenceBRead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| html | No | |
| enums | No | |
| links | No | |
| types | Yes | |
| canvas | No | |
| colors | No | |
| borders | No | |
| numbers | No | |
| booleans | No | |
| languages | No |
TDQS
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.
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.
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.
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.
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.
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 translationARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | The presentation (its slug) -- or give "project". | |
| project | No | The project (its slug): its glossary counts for all its presentations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| project | No | The project of the presentation, if any. |
| glossary | Yes | {"<language>": {"<term, its forms>": "<translation>"}}. |
| translator | No | Whether the site has a machine translator. |
| project_glossary | No | The glossary of that project (counts too). |
TDQS
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.
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.
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.
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.
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.
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 editingARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). | |
| slide_ids | No | Only these slides (ids). | |
| to_number | No | Only the slides up to this number (inclusive). | |
| texts_only | No | Only the texts of the blocks (for reading, checking or translating), not their props. | |
| from_number | No | Only the slides from this number on (1-based). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | No | The address people open in a browser. |
| lang | No | The language its texts are written in; "tr" holds the others. |
| slug | Yes | The address of the presentation: /movie/<slug>/. |
| owner | No | User name of the author. |
| theme | No | |
| title | Yes | |
| access | No | open, public or private. |
| slides | Yes | |
| project | No | The project it belongs to, or null. |
| version | No | Stamp of the content as it is now: give it back as "base_version" to change it only if nobody else did meanwhile. |
| can_edit | No | Whether you may change it. |
| database | No | Setup scripts of the databases of runnable code blocks (shown to the author only). |
| title_tr | No | The same text in the other languages of the site: {"en": "..."}. |
| languages | No | The languages of the site. |
| cover_slide | No | Id of the slide shown as its cover in the lists (null: an uploaded picture, or no slides). |
| description | No | |
| database_chars | No | A part or the words only were read: how long each database script is (the whole presentation without "texts_only" gives them). |
| missing_translations | No | 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. |
| missing_translations_count | No | How many texts are not translated yet. |
TDQS
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.
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.
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.
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.
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.
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 projectBRead-onlyIdempotentInspect
A project you can see, with its presentations (the ones you can see) in order.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | The project's slug (its address: /project/<slug>/). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | No | The address people open in a browser. |
| role | No | owner, edit, view or null. |
| slug | Yes | The address of the project: /project/<slug>/. |
| owner | No | |
| title | No | |
| access | No | open, public or private: inherited by its presentations. |
| grants | No | Who was given access (the owner sees it). |
| is_owner | No | |
| description | No | |
| presentations | Yes |
TDQS
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.
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.
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.
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.
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.
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 slideBRead-onlyIdempotentInspect
One slide of a presentation you can see, with all of its blocks (ids and complete props).
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). | |
| slide_id | Yes | The id of a slide (stable, the "id" of the slide in the presentation). Its number (position) changes when slides are reordered. |
Output Schema
| Name | Required | Description |
|---|---|---|
| h | No | |
| w | No | |
| bg | No | |
| id | Yes | Stable id of the slide. |
| fit | No | |
| url | No | The address people open in a browser. |
| name | No | |
| notes | No | The speaker notes (for those who may edit; only when there are some). |
| number | Yes | 1-based position; changes when slides are reordered. |
| name_tr | No | The same text in the other languages of the site: {"en": "..."}. |
| objects | Yes | Blocks, bottom to top ("props" only in the full form). |
| version | No | Stamp of the content as it is now: give it back as "base_version" to change it only if nobody else did meanwhile. |
| background | No | The "src" of the background picture, or null. |
| transition | No | Entrance effect of this incoming slide. |
| layout_warnings | No | 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). |
| transition_duration | No | Animation milliseconds, not auto advance. |
| missing_translations | No | 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. |
| missing_translations_count | No | How many texts are not translated yet. |
TDQS
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.
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.
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.
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.
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.
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 editingARead-onlyIdempotentInspect
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".
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). | |
| slide_ids | No | Only these slides (ids). | |
| to_number | No | Only the slides up to this number (inclusive). | |
| texts_only | No | Only the texts of the blocks (for reading, checking or translating), not their props. | |
| from_number | No | Only the slides from this number on (1-based). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | No | The address people open in a browser. |
| lang | No | The language its texts are written in; "tr" holds the others. |
| slug | Yes | The address of the presentation: /movie/<slug>/. |
| owner | No | User name of the author. |
| theme | No | |
| title | No | |
| access | No | open, public or private. |
| slides | Yes | |
| project | No | The project it belongs to, or null. |
| version | No | Stamp of the content as it is now: give it back as "base_version" to change it only if nobody else did meanwhile. |
| can_edit | No | Whether you may change it. |
| database | No | Setup scripts of the databases of runnable code blocks (shown to the author only). |
| title_tr | No | The same text in the other languages of the site: {"en": "..."}. |
| languages | No | The languages of the site. |
| cover_slide | No | Id of the slide shown as its cover in the lists (null: an uploaded picture, or no slides). |
| description | No | |
| slides_total | No | |
| database_chars | No | A part or the words only were read: how long each database script is (the whole presentation without "texts_only" gives them). |
| missing_translations | No | 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. |
| missing_translations_count | No | How many texts are not translated yet. |
TDQS
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.
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.
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.
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.
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.
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 versionBRead-onlyIdempotentInspect
What a presentation you may edit looked like in a version: "markdown" (default) -- its slides and texts as markdown; "json" -- the complete content.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). | |
| format | No | Result format: "markdown" (default) or "json" (the complete content). | |
| number | Yes | The version number. |
Output Schema
| Name | Required | Description |
|---|---|---|
| agent | No | |
| author | No | |
| number | Yes | |
| changes | No | What changed in this version. |
| content | No | |
| markdown | No | |
| created_at | No | ISO 8601 date and time. |
| updated_at | No | ISO 8601 date and time. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| into | No | Slug of an existing presentation to update from the file (instead of creating a new one). | |
| title | No | Title of the new presentation (optional). | |
| access | No | Who sees it (default "private": only you, until you publish it; "public": everybody reads it; "open": every signed-in person edits it too). | |
| rename | No | With "into": give the slides the names the file has (default false: they keep theirs). | |
| slides | No | With "into": only these slide numbers of the file (1-based); all by default. | |
| project | No | Slug of one of your projects to put the presentation in. | |
| filename | No | Name of the file, like "lecture.pptx" (its extension helps to recognise the format; without a title, it gives the title). | |
| response | No | "brief" (default): only the ids, numbers and types of the slides and blocks; "full": every prop of every block too. | |
| data_base64 | Yes | The file, base64 (a data: URL prefix is allowed; at most 28 MB). | |
| base_version | No | With "into": the "version" of the presentation as you read it; refused (409) when it changed meanwhile. | |
| remove_extra | No | With "into": remove the slides of the presentation after the last slide of the file (default false). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | No | The address people open in a browser. |
| lang | No | The language its texts are written in; "tr" holds the others. |
| slug | Yes | The address of the presentation: /movie/<slug>/. |
| owner | No | User name of the author. |
| theme | No | |
| title | No | |
| access | No | open, public or private. |
| slides | Yes | |
| project | No | The project it belongs to, or null. |
| updated | No | |
| version | No | Stamp of the content as it is now: give it back as "base_version" to change it only if nobody else did meanwhile. |
| can_edit | No | Whether you may change it. |
| database | No | Setup scripts of the databases of runnable code blocks (shown to the author only). |
| title_tr | No | The same text in the other languages of the site: {"en": "..."}. |
| warnings | No | What could not be converted. |
| languages | No | The languages of the site. |
| cover_slide | No | Id of the slide shown as its cover in the lists (null: an uploaded picture, or no slides). |
| description | No | |
| database_chars | No | A part or the words only were read: how long each database script is (the whole presentation without "texts_only" gives them). |
| missing_translations | No | 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. |
| missing_translations_count | No | How many texts are not translated yet. |
TDQS
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.
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.
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.
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.
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.
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 requestsBRead-onlyIdempotentInspect
"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.
| Name | Required | Description | Default |
|---|---|---|---|
| direction | No | "incoming" (default): requests to you; "outgoing": requests you sent. | |
| include_decided | No | Also return approved and declined requests. |
Output Schema
| Name | Required | Description |
|---|---|---|
| requests | Yes |
TDQS
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.
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.
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.
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.
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.
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 notesARead-onlyIdempotentInspect
Notes on a presentation, as threads with replies. Anyone who can view the presentation sees all its notes. Without "include_resolved" only open threads.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). | |
| slide_id | No | The id of a slide (stable, the "id" of the slide in the presentation). Its number (position) changes when slides are reordered. | |
| include_resolved | No | Also return resolved threads (default: only open ones). |
Output Schema
| Name | Required | Description |
|---|---|---|
| comments | Yes |
TDQS
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.
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.
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.
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.
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.
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 changesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). | |
| limit | No | At most this many (default 50). |
Output Schema
| Name | Required | Description |
|---|---|---|
| versions | Yes |
TDQS
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.
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.
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.
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.
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.
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 presentationsBRead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Which presentations: "mine" (default), "shared" with you, or "open" ones of anybody. | |
| project | No | Only the presentations of this project (its slug), in its order; "scope" is then ignored. |
Output Schema
| Name | Required | Description |
|---|---|---|
| presentations | Yes |
TDQS
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.
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.
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.
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.
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.
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 projectsBRead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| projects | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). |
Output Schema
| Name | Required | Description |
|---|---|---|
| renamed | Yes | The slides that got the name of their title. |
TDQS
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.
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.
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.
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.
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.
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 picturesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language of the texts on the pictures (default: the language of the presentation). | |
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). | |
| width | No | Width of the pictures in px (default 960; more shows small text better, but a picture costs more to look at). | |
| slide_ids | No | Only these slides (ids). | |
| to_number | No | Only the slides up to this number (inclusive). | |
| from_number | No | Only the slides from this number on (1-based). |
Output Schema
| Name | Required | Description |
|---|---|---|
| more | No | Slides asked for but not drawn (ask for them in another call). |
| slides | Yes | |
| slides_total | No | |
| layout_warnings | No | 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). |
TDQS
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.
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.
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.
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.
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.
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 presentationARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Read the texts in this language (default: the one it is written in); what is not translated shows in its own language. | |
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). | |
| format | No | Result format: "markdown" (default, compact) or "json" (structured). | |
| slide_ids | No | Only these slides (ids). | |
| to_number | No | Only the slides up to this number (inclusive). | |
| from_number | No | Only the slides from this number on (1-based). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| url | No | The address people open in a browser. |
| lang | No | The language its texts are written in; "tr" holds the others. |
| slug | No | The address of the presentation: /movie/<slug>/. |
| owner | No | User name of the author. |
| theme | No | |
| title | No | |
| access | No | open, public or private. |
| slides | No | |
| project | No | The project it belongs to, or null. |
| version | No | Stamp of the content as it is now: give it back as "base_version" to change it only if nobody else did meanwhile. |
| can_edit | No | Whether you may change it. |
| markdown | No | |
| title_tr | No | The same text in the other languages of the site: {"en": "..."}. |
| languages | No | The languages of the site. |
| shown_lang | No | The language of the texts shown. |
| cover_slide | No | Id of the slide shown as its cover in the lists (null: an uploaded picture, or no slides). |
| description | No | |
| slides_total | No | Slides of the whole presentation (a part may be shown). |
| missing_translations | No | 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. |
| missing_translations_count | No | How many texts are not translated yet. |
TDQS
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.
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.
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.
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.
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.
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 slidesAIdempotentInspect
Set the playback order: "order" lists the ids of ALL slides of the presentation in the new order.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). | |
| order | Yes | Every slide id, once. |
Output Schema
| Name | Required | Description |
|---|---|---|
| order | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| find | Yes | What to find (at most 500 characters). | |
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). | |
| langs | No | Only these languages of the texts (default: all). | |
| regex | No | "find" is a regular expression (default: plain text). | |
| dry_run | No | Only count, change nothing. | |
| in_code | No | The code of code blocks too (default: false). | |
| replace | Yes | What to put instead (may be empty). | |
| in_names | No | The names of the slides too (default: true). | |
| slide_ids | No | Only these slides (ids). | |
| to_number | No | Only the slides up to this number (inclusive). | |
| match_case | No | Case matters (default: true). | |
| from_number | No | Only the slides from this number on (1-based). | |
| base_version | No | Optional: the "version" of the presentation as you read it; refused when it changed meanwhile. |
Output Schema
| Name | Required | Description |
|---|---|---|
| slides | Yes | |
| dry_run | No | |
| version | No | Stamp of the content as it is now: give it back as "base_version" to change it only if nobody else did meanwhile. |
| replaced | Yes | How many places were (or, with dry_run, would be) changed. |
| layout_warnings | No | 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). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | "view" -- read; "edit" -- read and change. | |
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). | |
| message | No | Why you need it (optional). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| role | No | view or edit. |
| user | No | Who asks. |
| agent | No | |
| title | No | Its title; null while you may not see it (a private one you asked for). |
| status | Yes | pending, approved or declined. |
| message | No | |
| project | No | Slug of the project, for access to all of it. |
| created_at | No | ISO 8601 date and time. |
| presentation | No | Slug of the presentation (null: a project). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | "view" -- read; "edit" -- read and change. | |
| message | No | Why you need it (optional). | |
| project | Yes | The project's slug (its address: /project/<slug>/). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| role | No | view or edit. |
| user | No | Who asks. |
| agent | No | |
| title | No | Its title; null while you may not see it (a private one you asked for). |
| status | Yes | pending, approved or declined. |
| message | No | |
| project | No | Slug of the project, for access to all of it. |
| created_at | No | ISO 8601 date and time. |
| presentation | No | Slug of the presentation (null: a project). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| resolved | No | Default true. | |
| comment_id | Yes | The id of a note. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| resolved | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). | |
| number | Yes | The version number. |
Output Schema
| Name | Required | Description |
|---|---|---|
| version | No | |
| restored | Yes | The version that was brought back. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The code (at most 20000 characters). | |
| lang | Yes | Language of the code. | |
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). | |
| reset | No | sql, mongodb, redis, clickhouse: first make your database again from the script of the presentation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| lang | Yes | |
| stderr | No | |
| stdout | No | |
| notices | No | |
| omitted | No | |
| results | No | |
| exit_code | No | |
| sql_error | No | |
| timed_out | No | |
| elapsed_ms | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). | |
| level | No | New access level: "open", "public" or "private". | |
| revoke | No | User names whose access is taken away. |
Output Schema
| Name | Required | Description |
|---|---|---|
| level | Yes | open, public or private: the presentation's own level. |
| grants | No | |
| project_level | No | The level of its project, if any. |
| effective_level | No | The level that counts (the project's one when stricter). |
| pending_requests | No |
TDQS
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.
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.
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.
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.
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.
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 translationBIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | The presentation (its slug) -- or give "project". | |
| project | No | The project (its slug): its glossary counts for all its presentations. | |
| replace | No | Replace the whole glossary (default: add to it). | |
| glossary | Yes | {"<language>": {"<term, its forms>": "<translation>"}}. |
Output Schema
| Name | Required | Description |
|---|---|---|
| project | No | The project of the presentation, if any. |
| glossary | Yes | {"<language>": {"<term, its forms>": "<translation>"}}. |
| translator | No | Whether the site has a machine translator. |
| project_glossary | No | The glossary of that project (counts too). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | Yes | The language the texts are written in. | |
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). |
Output Schema
| Name | Required | Description |
|---|---|---|
| kept | No | Texts that were in the language already. |
| lang | Yes | |
| swapped | No | Texts whose translation became the text. |
| untranslated | No | Texts in neither language. |
| previous_lang | No | |
| untranslated_blocks | No | The first of those blocks. |
| missing_translations | No | 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. |
| missing_translations_count | No | How many texts are not translated yet. |
TDQS
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.
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.
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.
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.
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.
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 slideAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). | |
| notes | Yes | The notes, plain text (up to 20000 characters). | |
| slide_id | Yes | The id of a slide (stable, the "id" of the slide in the presentation). Its number (position) changes when slides are reordered. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | Yes | The notes now. |
| slide_id | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). |
Output Schema
| Name | Required | Description |
|---|---|---|
| translated | Yes | Translations made now. |
| missing_translations | No | 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. |
| missing_translations_count | No | How many texts are not translated yet. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). | |
| theme | No | Colour theme: the defaults of new slides and blocks. | |
| title | No | New title (at most 100 characters). | |
| database | No | 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. | |
| title_tr | No | The title in the other languages of the site: {"en": "..."} (the languages left out keep theirs). | |
| cover_slide | No | 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). | |
| description | No | New description; an empty string removes it. | |
| names_from_titles | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | No | The address people open in a browser. |
| lang | No | The language its texts are written in; "tr" holds the others. |
| slug | Yes | The address of the presentation: /movie/<slug>/. |
| owner | No | User name of the author. |
| theme | No | |
| title | Yes | |
| access | No | open, public or private. |
| slides | No | Number of slides. |
| project | No | The project it belongs to, or null. |
| renamed | No | Slides that got the name of their title. |
| version | No | Stamp of the content as it is now: give it back as "base_version" to change it only if nobody else did meanwhile. |
| can_edit | No | Whether you may change it. |
| database | No | Setup scripts of the databases of runnable code blocks (shown to the author only). |
| title_tr | No | The same text in the other languages of the site: {"en": "..."}. |
| languages | No | The languages of the site. |
| cover_slide | No | Id of the slide shown as its cover in the lists (null: an uploaded picture, or no slides). |
| description | No | |
| missing_translations | No | 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. |
| missing_translations_count | No | How many texts are not translated yet. |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| add | No | Slugs of presentations. | |
| grant | No | Give access to the whole project: [{"user": <user name>, "role": "view"|"edit"}]. | |
| order | No | Slugs of all the presentations of the project, in the new order. | |
| title | No | New title. | |
| access | No | Level of the project: "open", "public" or "private". | |
| remove | No | Slugs of presentations. | |
| revoke | No | User names whose access is taken away. | |
| project | Yes | The project's slug (its address: /project/<slug>/). | |
| description | No | New description. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | No | The address people open in a browser. |
| role | No | owner, edit, view or null. |
| slug | Yes | The address of the project: /project/<slug>/. |
| owner | No | |
| title | Yes | |
| access | No | open, public or private: inherited by its presentations. |
| grants | No | Who was given access (the owner sees it). |
| is_owner | No | |
| description | No | |
| presentations | No | Its presentations, in order. |
TDQS
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.
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.
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.
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.
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.
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").
| Name | Required | Description | Default |
|---|---|---|---|
| h | No | Canvas height in px (default 720). | |
| w | No | Canvas width in px (200-4000, default 1280). | |
| bg | No | Background colour, #rrggbb. | |
| fit | No | How the background picture fits. | |
| name | No | Slide name (at most 100 characters), in the language of the presentation. | |
| slug | Yes | The presentation's slug (its address: /movie/<slug>/). | |
| name_tr | No | The slide name in the other languages of the site: {"en": "..."}. | |
| objects | No | 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}. | |
| response | No | "brief" (default): only the ids, numbers and types of the slides and blocks; "full": every prop of every block too. | |
| slide_id | Yes | The id of a slide (stable, the "id" of the slide in the presentation). Its number (position) changes when slides are reordered. | |
| background | No | Background picture: the "src" of an uploaded picture; null removes it. | |
| transition | No | Entrance effect of this incoming slide (default: none). | none |
| base_version | No | 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. | |
| transition_duration | No | Animation duration in milliseconds (100-3000, default 500); not auto advance. Values outside the range are clamped. |
Output Schema
| Name | Required | Description |
|---|---|---|
| h | No | |
| w | No | |
| bg | No | |
| id | Yes | Stable id of the slide. |
| fit | No | |
| url | No | The address people open in a browser. |
| name | No | |
| notes | No | The speaker notes (for those who may edit; only when there are some). |
| number | Yes | 1-based position; changes when slides are reordered. |
| name_tr | No | The same text in the other languages of the site: {"en": "..."}. |
| objects | Yes | Blocks, bottom to top ("props" only in the full form). |
| version | No | Stamp of the content as it is now: give it back as "base_version" to change it only if nobody else did meanwhile. |
| background | No | The "src" of the background picture, or null. |
| transition | No | Entrance effect of this incoming slide. |
| layout_warnings | No | 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). |
| transition_duration | No | Animation milliseconds, not auto advance. |
| missing_translations | No | 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. |
| missing_translations_count | No | How many texts are not translated yet. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| data_base64 | Yes | The file, base64 (a data: URL prefix is allowed). |
Output Schema
| Name | Required | Description |
|---|---|---|
| h | No | |
| w | No | |
| src | Yes | Use it as "src" of an image block or background. |
| url | No |
TDQS
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.
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.
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.
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.
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.
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 IARead-onlyIdempotentInspect
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").
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| key | No | Name of the API key. |
| scope | Yes | read or write. |
| username | Yes |
TDQS
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.
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.
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.
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.
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.
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.
12 tool updates
- Changed
add_slide1 field changed- changed
Output schema / properties / objects / items / properties / type / descriptionPrevious value: -"text, shape, button, line, image or code."New value: +"text, shape, button, line, image, code or table."
- Changed
add_slides1 field changed- changed
Output schema / properties / slides / items / properties / objects / items / properties / type / descriptionPrevious value: -"text, shape, button, line, image or code."New value: +"text, shape, button, line, image, code or table."
- Added
check_code - Added
copy_slides - Changed
create_presentation1 field changed- changed
Output schema / properties / slides / items / properties / objects / items / properties / type / descriptionPrevious value: -"text, shape, button, line, image or code."New value: +"text, shape, button, line, image, code or table."
- Changed
edit_blocks1 field changed- changed
Output schema / properties / objects / items / properties / type / descriptionPrevious value: -"text, shape, button, line, image or code."New value: +"text, shape, button, line, image, code or table."
- Changed
edit_slides1 field changed- changed
Output schema / properties / slides / items / properties / objects / items / properties / type / descriptionPrevious value: -"text, shape, button, line, image or code."New value: +"text, shape, button, line, image, code or table."
- Changed
get_presentation1 field changed- changed
Output schema / properties / slides / items / properties / objects / items / properties / type / descriptionPrevious value: -"text, shape, button, line, image or code."New value: +"text, shape, button, line, image, code or table."
- Changed
get_slide1 field changed- changed
Output schema / properties / objects / items / properties / type / descriptionPrevious value: -"text, shape, button, line, image or code."New value: +"text, shape, button, line, image, code or table."
- Changed
get_slides1 field changed- changed
Output schema / properties / slides / items / properties / objects / items / properties / type / descriptionPrevious value: -"text, shape, button, line, image or code."New value: +"text, shape, button, line, image, code or table."
- Changed
import_presentation1 field changed- changed
Output schema / properties / slides / items / properties / objects / items / properties / type / descriptionPrevious value: -"text, shape, button, line, image or code."New value: +"text, shape, button, line, image, code or table."
- Changed
update_slide1 field changed- changed
Output schema / properties / objects / items / properties / type / descriptionPrevious value: -"text, shape, button, line, image or code."New value: +"text, shape, button, line, image, code or table."
25 tool updates
- Changed
add_slide2 fields changed- added
Output schema / properties / layout_warnings / items / properties / langAdded value: +{ + "description": "Only the text in this language has the problem.", + "type": "string" +} - added
Output schema / properties / missing_translations / items / properties / outdatedAdded value: +{ + "description": "There is a translation, written for an earlier text.", + "type": "boolean" +}
- Changed
add_slides2 fields changed- added
Output schema / properties / slides / items / properties / layout_warnings / items / properties / langAdded value: +{ + "description": "Only the text in this language has the problem.", + "type": "string" +} - added
Output schema / properties / slides / items / properties / missing_translations / items / properties / outdatedAdded value: +{ + "description": "There is a translation, written for an earlier text.", + "type": "boolean" +}
- Changed
answer_access_request2 fields changed- added
Output schema / properties / title / descriptionAdded value: +"Its title; null while you may not see it (a private one you asked for)." - changed
Output schema / properties / title / typePrevious value: -"string"New value: +[ + "string", + "null" +]
- Changed
check_layout1 field changed- added
Output schema / properties / warnings / items / properties / langAdded value: +{ + "description": "Only the text in this language has the problem.", + "type": "string" +}
- Changed
create_presentation3 fields changed- added
Output schema / properties / missing_translations / items / properties / outdatedAdded value: +{ + "description": "There is a translation, written for an earlier text.", + "type": "boolean" +} - added
Output schema / properties / slides / items / properties / layout_warnings / items / properties / langAdded value: +{ + "description": "Only the text in this language has the problem.", + "type": "string" +} - added
Output schema / properties / slides / items / properties / missing_translations / items / properties / outdatedAdded value: +{ + "description": "There is a translation, written for an earlier text.", + "type": "boolean" +}
- Changed
edit_blocks2 fields changed- added
Output schema / properties / layout_warnings / items / properties / langAdded value: +{ + "description": "Only the text in this language has the problem.", + "type": "string" +} - added
Output schema / properties / missing_translations / items / properties / outdatedAdded value: +{ + "description": "There is a translation, written for an earlier text.", + "type": "boolean" +}
- Changed
edit_slides4 fields changed- added
Output schema / properties / layout_warnings / items / properties / langAdded value: +{ + "description": "Only the text in this language has the problem.", + "type": "string" +} - added
Output schema / properties / missing_translations / items / properties / outdatedAdded value: +{ + "description": "There is a translation, written for an earlier text.", + "type": "boolean" +} - added
Output schema / properties / slides / items / properties / layout_warnings / items / properties / langAdded value: +{ + "description": "Only the text in this language has the problem.", + "type": "string" +} - added
Output schema / properties / slides / items / properties / missing_translations / items / properties / outdatedAdded value: +{ + "description": "There is a translation, written for an earlier text.", + "type": "boolean" +}
- Changed
get_access2 fields changed- added
Output schema / properties / pending_requests / items / properties / title / descriptionAdded value: +"Its title; null while you may not see it (a private one you asked for)." - changed
Output schema / properties / pending_requests / items / properties / title / typePrevious value: -"string"New value: +[ + "string", + "null" +]
- Changed
get_presentation3 fields changed- added
Output schema / properties / missing_translations / items / properties / outdatedAdded value: +{ + "description": "There is a translation, written for an earlier text.", + "type": "boolean" +} - added
Output schema / properties / slides / items / properties / layout_warnings / items / properties / langAdded value: +{ + "description": "Only the text in this language has the problem.", + "type": "string" +} - added
Output schema / properties / slides / items / properties / missing_translations / items / properties / outdatedAdded value: +{ + "description": "There is a translation, written for an earlier text.", + "type": "boolean" +}
- Changed
get_project1 field changed- added
Output schema / properties / presentations / items / properties / missing_translations / items / properties / outdatedAdded value: +{ + "description": "There is a translation, written for an earlier text.", + "type": "boolean" +}
- Changed
get_slide2 fields changed- added
Output schema / properties / layout_warnings / items / properties / langAdded value: +{ + "description": "Only the text in this language has the problem.", + "type": "string" +} - added
Output schema / properties / missing_translations / items / properties / outdatedAdded value: +{ + "description": "There is a translation, written for an earlier text.", + "type": "boolean" +}
- Changed
get_slides3 fields changed- added
Output schema / properties / missing_translations / items / properties / outdatedAdded value: +{ + "description": "There is a translation, written for an earlier text.", + "type": "boolean" +} - added
Output schema / properties / slides / items / properties / layout_warnings / items / properties / langAdded value: +{ + "description": "Only the text in this language has the problem.", + "type": "string" +} - added
Output schema / properties / slides / items / properties / missing_translations / items / properties / outdatedAdded value: +{ + "description": "There is a translation, written for an earlier text.", + "type": "boolean" +}
- Changed
import_presentation3 fields changed- added
Output schema / properties / missing_translations / items / properties / outdatedAdded value: +{ + "description": "There is a translation, written for an earlier text.", + "type": "boolean" +} - added
Output schema / properties / slides / items / properties / layout_warnings / items / properties / langAdded value: +{ + "description": "Only the text in this language has the problem.", + "type": "string" +} - added
Output schema / properties / slides / items / properties / missing_translations / items / properties / outdatedAdded value: +{ + "description": "There is a translation, written for an earlier text.", + "type": "boolean" +}
- Changed
list_access_requests2 fields changed- added
Output schema / properties / requests / items / properties / title / descriptionAdded value: +"Its title; null while you may not see it (a private one you asked for)." - changed
Output schema / properties / requests / items / properties / title / typePrevious value: -"string"New value: +[ + "string", + "null" +]
- Changed
list_presentations1 field changed- added
Output schema / properties / presentations / items / properties / missing_translations / items / properties / outdatedAdded value: +{ + "description": "There is a translation, written for an earlier text.", + "type": "boolean" +}
- Changed
preview_slides1 field changed- added
Output schema / properties / layout_warnings / items / properties / langAdded value: +{ + "description": "Only the text in this language has the problem.", + "type": "string" +}
- Changed
read_presentation1 field changed- added
Output schema / properties / missing_translations / items / properties / outdatedAdded value: +{ + "description": "There is a translation, written for an earlier text.", + "type": "boolean" +}
- Changed
replace_text1 field changed- added
Output schema / properties / layout_warnings / items / properties / langAdded value: +{ + "description": "Only the text in this language has the problem.", + "type": "string" +}
- Changed
request_access2 fields changed- added
Output schema / properties / title / descriptionAdded value: +"Its title; null while you may not see it (a private one you asked for)." - changed
Output schema / properties / title / typePrevious value: -"string"New value: +[ + "string", + "null" +]
- Changed
request_project_access2 fields changed- added
Output schema / properties / title / descriptionAdded value: +"Its title; null while you may not see it (a private one you asked for)." - changed
Output schema / properties / title / typePrevious value: -"string"New value: +[ + "string", + "null" +]
- Changed
set_access2 fields changed- added
Output schema / properties / pending_requests / items / properties / title / descriptionAdded value: +"Its title; null while you may not see it (a private one you asked for)." - changed
Output schema / properties / pending_requests / items / properties / title / typePrevious value: -"string"New value: +[ + "string", + "null" +]
- Changed
set_language1 field changed- added
Output schema / properties / missing_translations / items / properties / outdatedAdded value: +{ + "description": "There is a translation, written for an earlier text.", + "type": "boolean" +}
- Changed
translate_presentation1 field changed- added
Output schema / properties / missing_translations / items / properties / outdatedAdded value: +{ + "description": "There is a translation, written for an earlier text.", + "type": "boolean" +}
- Changed
update_presentation1 field changed- added
Output schema / properties / missing_translations / items / properties / outdatedAdded value: +{ + "description": "There is a translation, written for an earlier text.", + "type": "boolean" +}
- Changed
update_slide2 fields changed- added
Output schema / properties / layout_warnings / items / properties / langAdded value: +{ + "description": "Only the text in this language has the problem.", + "type": "string" +} - added
Output schema / properties / missing_translations / items / properties / outdatedAdded value: +{ + "description": "There is a translation, written for an earlier text.", + "type": "boolean" +}
15 tool updates
- Changed
add_comment1 field changed- added
Output schema / properties / slide_deletedAdded value: +{ + "description": "The slide of the note was deleted (the history has it).", + "type": "boolean" +}
- Changed
add_slide1 field changed- added
Output schema / properties / notesAdded value: +{ + "description": "The speaker notes (for those who may edit; only when there are some).", + "type": "string" +}
- Changed
add_slides1 field changed- added
Output schema / properties / slides / items / properties / notesAdded value: +{ + "description": "The speaker notes (for those who may edit; only when there are some).", + "type": "string" +}
- Changed
create_presentation2 fields changed- added
Output schema / properties / database_charsAdded 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" +} - added
Output schema / properties / slides / items / properties / notesAdded value: +{ + "description": "The speaker notes (for those who may edit; only when there are some).", + "type": "string" +}
- Changed
edit_blocks1 field changed- added
Output schema / properties / notesAdded value: +{ + "description": "The speaker notes (for those who may edit; only when there are some).", + "type": "string" +}
- Changed
edit_slides1 field changed- added
Output schema / properties / slides / items / properties / notesAdded value: +{ + "description": "The speaker notes (for those who may edit; only when there are some).", + "type": "string" +}
- Added
get_glossary - Changed
get_presentation2 fields changed- added
Output schema / properties / database_charsAdded 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" +} - added
Output schema / properties / slides / items / properties / notesAdded value: +{ + "description": "The speaker notes (for those who may edit; only when there are some).", + "type": "string" +}
- Changed
get_slide1 field changed- added
Output schema / properties / notesAdded value: +{ + "description": "The speaker notes (for those who may edit; only when there are some).", + "type": "string" +}
- Changed
get_slides2 fields changed- added
Output schema / properties / database_charsAdded 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" +} - added
Output schema / properties / slides / items / properties / notesAdded value: +{ + "description": "The speaker notes (for those who may edit; only when there are some).", + "type": "string" +}
- Changed
import_presentation2 fields changed- added
Output schema / properties / database_charsAdded 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" +} - added
Output schema / properties / slides / items / properties / notesAdded value: +{ + "description": "The speaker notes (for those who may edit; only when there are some).", + "type": "string" +}
- Changed
list_comments2 fields changed- added
Output schema / properties / comments / items / properties / replies / items / properties / slide_deletedAdded value: +{ + "description": "The slide of the note was deleted (the history has it).", + "type": "boolean" +} - added
Output schema / properties / comments / items / properties / slide_deletedAdded value: +{ + "description": "The slide of the note was deleted (the history has it).", + "type": "boolean" +}
- Added
set_glossary - Added
set_speaker_notes - Changed
update_slide1 field changed- added
Output schema / properties / notesAdded value: +{ + "description": "The speaker notes (for those who may edit; only when there are some).", + "type": "string" +}
3 tool updates
- Changed
create_presentation1 field changed- changed
Input schema / properties / lang / descriptionPrevious 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)."
- Added
set_language - Added
translate_presentation
6 tool updates
- Changed
check_layout1 field changed- added
Output schema / properties / measuredAdded value: +{ + "description": "The texts were measured in a browser (false: estimated).", + "type": "boolean" +}
- Changed
create_presentation1 field changed- added
Input schema / properties / accessAdded 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" +}
- Added
get_slides - Changed
import_presentation1 field changed- added
Input schema / properties / accessAdded 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" +}
- Added
name_slides_after_titles - Changed
update_presentation2 fields changed- added
Input schema / properties / names_from_titlesAdded 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" +} - added
Output schema / properties / renamedAdded 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" +}
18 tool updates
- Changed
add_slide4 fields changed- added
Output schema / properties / layout_warningsAdded 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" +} - changed
Output schema / properties / missing_translations / descriptionPrevious 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." - added
Output schema / properties / missing_translations_countAdded value: +{ + "description": "How many texts are not translated yet.", + "type": "integer" +} - added
Output schema / properties / versionAdded 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" +}
- Changed
add_slides4 fields changed- added
Output schema / properties / slides / items / properties / layout_warningsAdded 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" +} - changed
Output schema / properties / slides / items / properties / missing_translations / descriptionPrevious 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." - added
Output schema / properties / slides / items / properties / missing_translations_countAdded value: +{ + "description": "How many texts are not translated yet.", + "type": "integer" +} - added
Output schema / properties / slides / items / properties / versionAdded 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" +}
- Added
check_layout - Changed
create_presentation7 fields changed- changed
Output schema / properties / missing_translations / descriptionPrevious 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." - added
Output schema / properties / missing_translations_countAdded value: +{ + "description": "How many texts are not translated yet.", + "type": "integer" +} - added
Output schema / properties / slides / items / properties / layout_warningsAdded 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" +} - changed
Output schema / properties / slides / items / properties / missing_translations / descriptionPrevious 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." - added
Output schema / properties / slides / items / properties / missing_translations_countAdded value: +{ + "description": "How many texts are not translated yet.", + "type": "integer" +} - added
Output schema / properties / slides / items / properties / versionAdded 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" +} - added
Output schema / properties / versionAdded 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" +}
- Changed
delete_slide1 field changed- added
Input schema / properties / base_versionAdded 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" +}
- Changed
edit_blocks5 fields changed- added
Input schema / properties / base_versionAdded 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" +} - added
Output schema / properties / layout_warningsAdded 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" +} - changed
Output schema / properties / missing_translations / descriptionPrevious 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." - added
Output schema / properties / missing_translations_countAdded value: +{ + "description": "How many texts are not translated yet.", + "type": "integer" +} - added
Output schema / properties / versionAdded 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" +}
- Added
edit_slides - Added
export_presentation - Changed
get_presentation11 fields changed- added
Input schema / properties / from_numberAdded value: +{ + "description": "Only the slides from this number on (1-based).", + "type": "integer" +} - added
Input schema / properties / slide_idsAdded value: +{ + "description": "Only these slides (ids).", + "items": { + "type": "integer" + }, + "type": "array" +} - added
Input schema / properties / texts_onlyAdded value: +{ + "description": "Only the texts of the blocks (for reading, checking or translating), not their props.", + "type": "boolean" +} - added
Input schema / properties / to_numberAdded value: +{ + "description": "Only the slides up to this number (inclusive).", + "type": "integer" +} - changed
Output schema / properties / missing_translations / descriptionPrevious 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." - added
Output schema / properties / missing_translations_countAdded value: +{ + "description": "How many texts are not translated yet.", + "type": "integer" +} - added
Output schema / properties / slides / items / properties / layout_warningsAdded 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" +} - changed
Output schema / properties / slides / items / properties / missing_translations / descriptionPrevious 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." - added
Output schema / properties / slides / items / properties / missing_translations_countAdded value: +{ + "description": "How many texts are not translated yet.", + "type": "integer" +} - added
Output schema / properties / slides / items / properties / versionAdded 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" +} - added
Output schema / properties / versionAdded 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" +}
- Changed
get_project3 fields changed- changed
Output schema / properties / presentations / items / properties / missing_translations / descriptionPrevious 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." - added
Output schema / properties / presentations / items / properties / missing_translations_countAdded value: +{ + "description": "How many texts are not translated yet.", + "type": "integer" +} - added
Output schema / properties / presentations / items / properties / versionAdded 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" +}
- Changed
get_slide4 fields changed- added
Output schema / properties / layout_warningsAdded 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" +} - changed
Output schema / properties / missing_translations / descriptionPrevious 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." - added
Output schema / properties / missing_translations_countAdded value: +{ + "description": "How many texts are not translated yet.", + "type": "integer" +} - added
Output schema / properties / versionAdded 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" +}
- Changed
import_presentation13 fields changed- added
Input schema / properties / base_versionAdded value: +{ + "description": "With \"into\": the \"version\" of the presentation as you read it; refused (409) when it changed meanwhile.", + "type": "string" +} - added
Input schema / properties / intoAdded value: +{ + "description": "Slug of an existing presentation to update from the file (instead of creating a new one).", + "type": "string" +} - added
Input schema / properties / remove_extraAdded value: +{ + "description": "With \"into\": remove the slides of the presentation after the last slide of the file (default false).", + "type": "boolean" +} - added
Input schema / properties / renameAdded value: +{ + "description": "With \"into\": give the slides the names the file has (default false: they keep theirs).", + "type": "boolean" +} - added
Input schema / properties / slidesAdded value: +{ + "description": "With \"into\": only these slide numbers of the file (1-based); all by default.", + "items": { + "type": "integer" + }, + "type": "array" +} - changed
Output schema / properties / missing_translations / descriptionPrevious 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." - added
Output schema / properties / missing_translations_countAdded value: +{ + "description": "How many texts are not translated yet.", + "type": "integer" +} - added
Output schema / properties / slides / items / properties / layout_warningsAdded 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" +} - changed
Output schema / properties / slides / items / properties / missing_translations / descriptionPrevious 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." - added
Output schema / properties / slides / items / properties / missing_translations_countAdded value: +{ + "description": "How many texts are not translated yet.", + "type": "integer" +} - added
Output schema / properties / slides / items / properties / versionAdded 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" +} - added
Output schema / properties / updatedAdded 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" +} - added
Output schema / properties / versionAdded 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" +}
- Changed
list_presentations3 fields changed- changed
Output schema / properties / presentations / items / properties / missing_translations / descriptionPrevious 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." - added
Output schema / properties / presentations / items / properties / missing_translations_countAdded value: +{ + "description": "How many texts are not translated yet.", + "type": "integer" +} - added
Output schema / properties / presentations / items / properties / versionAdded 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" +}
- Added
preview_slides - Changed
read_presentation7 fields changed- added
Input schema / properties / from_numberAdded value: +{ + "description": "Only the slides from this number on (1-based).", + "type": "integer" +} - added
Input schema / properties / slide_idsAdded value: +{ + "description": "Only these slides (ids).", + "items": { + "type": "integer" + }, + "type": "array" +} - added
Input schema / properties / to_numberAdded value: +{ + "description": "Only the slides up to this number (inclusive).", + "type": "integer" +} - changed
Output schema / properties / missing_translations / descriptionPrevious 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." - added
Output schema / properties / missing_translations_countAdded value: +{ + "description": "How many texts are not translated yet.", + "type": "integer" +} - added
Output schema / properties / slides_totalAdded value: +{ + "description": "Slides of the whole presentation (a part may be shown).", + "type": "integer" +} - added
Output schema / properties / versionAdded 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" +}
- Added
replace_text - Changed
update_presentation3 fields changed- changed
Output schema / properties / missing_translations / descriptionPrevious 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." - added
Output schema / properties / missing_translations_countAdded value: +{ + "description": "How many texts are not translated yet.", + "type": "integer" +} - added
Output schema / properties / versionAdded 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" +}
- Changed
update_slide5 fields changed- added
Input schema / properties / base_versionAdded 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" +} - added
Output schema / properties / layout_warningsAdded 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" +} - changed
Output schema / properties / missing_translations / descriptionPrevious 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." - added
Output schema / properties / missing_translations_countAdded value: +{ + "description": "How many texts are not translated yet.", + "type": "integer" +} - added
Output schema / properties / versionAdded 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" +}
8 tool updates
- Changed
create_presentation3 fields changed- added
Input schema / properties / database / properties / clickhouseAdded value: +{ + "description": "ClickHouse SQL (statements separated by \";\") that creates and fills the database.", + "type": "string" +} - added
Output schema / properties / cover_slideAdded value: +{ + "description": "Id of the slide shown as its cover in the lists (null: an uploaded picture, or no slides).", + "type": [ + "integer", + "null" + ] +} - added
Output schema / properties / database / properties / clickhouseAdded value: +{ + "type": "string" +}
- Changed
get_presentation2 fields changed- added
Output schema / properties / cover_slideAdded value: +{ + "description": "Id of the slide shown as its cover in the lists (null: an uploaded picture, or no slides).", + "type": [ + "integer", + "null" + ] +} - added
Output schema / properties / database / properties / clickhouseAdded value: +{ + "type": "string" +}
- Changed
get_project1 field changed- added
Output schema / properties / presentations / items / properties / cover_slideAdded value: +{ + "description": "Id of the slide shown as its cover in the lists (null: an uploaded picture, or no slides).", + "type": [ + "integer", + "null" + ] +}
- Changed
import_presentation2 fields changed- added
Output schema / properties / cover_slideAdded value: +{ + "description": "Id of the slide shown as its cover in the lists (null: an uploaded picture, or no slides).", + "type": [ + "integer", + "null" + ] +} - added
Output schema / properties / database / properties / clickhouseAdded value: +{ + "type": "string" +}
- Changed
list_presentations1 field changed- added
Output schema / properties / presentations / items / properties / cover_slideAdded value: +{ + "description": "Id of the slide shown as its cover in the lists (null: an uploaded picture, or no slides).", + "type": [ + "integer", + "null" + ] +}
- Changed
read_presentation1 field changed- added
Output schema / properties / cover_slideAdded value: +{ + "description": "Id of the slide shown as its cover in the lists (null: an uploaded picture, or no slides).", + "type": [ + "integer", + "null" + ] +}
- Changed
run_code3 fields changed- changed
Input schema / properties / lang / enumPrevious value: -[ - "sql", - "mongodb", - "redis", - "python", - "bash" -]New value: +[ + "sql", + "mongodb", + "redis", + "clickhouse", + "python", + "bash" +] - changed
Input schema / properties / reset / descriptionPrevious 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." - changed
Output schema / descriptionPrevious 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\"."
- Changed
update_presentation4 fields changed- added
Input schema / properties / cover_slideAdded 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" + ] +} - added
Input schema / properties / database / properties / clickhouseAdded value: +{ + "description": "ClickHouse SQL (statements separated by \";\") that creates and fills the database.", + "type": "string" +} - added
Output schema / properties / cover_slideAdded value: +{ + "description": "Id of the slide shown as its cover in the lists (null: an uploaded picture, or no slides).", + "type": [ + "integer", + "null" + ] +} - added
Output schema / properties / database / properties / clickhouseAdded value: +{ + "type": "string" +}
8 tool updates
- Changed
add_slide4 fields changed- added
Input schema / properties / transitionAdded value: +{ + "default": "none", + "description": "Entrance effect of this incoming slide (default: none).", + "enum": [ + "none", + "fade", + "slide-left", + "slide-right", + "zoom" + ], + "type": "string" +} - added
Input schema / properties / transition_durationAdded value: +{ + "default": 500, + "description": "Animation duration in milliseconds (100-3000, default 500); not auto advance. Values outside the range are clamped.", + "type": "integer" +} - added
Output schema / properties / transitionAdded value: +{ + "description": "Entrance effect of this incoming slide.", + "enum": [ + "none", + "fade", + "slide-left", + "slide-right", + "zoom" + ], + "type": "string" +} - added
Output schema / properties / transition_durationAdded value: +{ + "description": "Animation milliseconds, not auto advance.", + "maximum": 3000, + "minimum": 100, + "type": "integer" +}
- Changed
add_slides4 fields changed- changed
Input schema / properties / slides / descriptionPrevious value: -"The slides: [{\"name\", \"w\", \"h\", \"bg\", \"fit\", \"background\", \"objects\"}]."New value: +"The slides: [{\"name\", \"w\", \"h\", \"bg\", \"fit\", \"transition\", \"transition_duration\", \"background\", \"objects\"}]." - added
Input schema / properties / slides / items / propertiesAdded 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" + } +} - added
Output schema / properties / slides / items / properties / transitionAdded value: +{ + "description": "Entrance effect of this incoming slide.", + "enum": [ + "none", + "fade", + "slide-left", + "slide-right", + "zoom" + ], + "type": "string" +} - added
Output schema / properties / slides / items / properties / transition_durationAdded value: +{ + "description": "Animation milliseconds, not auto advance.", + "maximum": 3000, + "minimum": 100, + "type": "integer" +}
- Changed
create_presentation3 fields changed- added
Input schema / properties / slides / items / propertiesAdded 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" + } +} - added
Output schema / properties / slides / items / properties / transitionAdded value: +{ + "description": "Entrance effect of this incoming slide.", + "enum": [ + "none", + "fade", + "slide-left", + "slide-right", + "zoom" + ], + "type": "string" +} - added
Output schema / properties / slides / items / properties / transition_durationAdded value: +{ + "description": "Animation milliseconds, not auto advance.", + "maximum": 3000, + "minimum": 100, + "type": "integer" +}
- Changed
edit_blocks2 fields changed- added
Output schema / properties / transitionAdded value: +{ + "description": "Entrance effect of this incoming slide.", + "enum": [ + "none", + "fade", + "slide-left", + "slide-right", + "zoom" + ], + "type": "string" +} - added
Output schema / properties / transition_durationAdded value: +{ + "description": "Animation milliseconds, not auto advance.", + "maximum": 3000, + "minimum": 100, + "type": "integer" +}
- Changed
get_presentation2 fields changed- added
Output schema / properties / slides / items / properties / transitionAdded value: +{ + "description": "Entrance effect of this incoming slide.", + "enum": [ + "none", + "fade", + "slide-left", + "slide-right", + "zoom" + ], + "type": "string" +} - added
Output schema / properties / slides / items / properties / transition_durationAdded value: +{ + "description": "Animation milliseconds, not auto advance.", + "maximum": 3000, + "minimum": 100, + "type": "integer" +}
- Changed
get_slide2 fields changed- added
Output schema / properties / transitionAdded value: +{ + "description": "Entrance effect of this incoming slide.", + "enum": [ + "none", + "fade", + "slide-left", + "slide-right", + "zoom" + ], + "type": "string" +} - added
Output schema / properties / transition_durationAdded value: +{ + "description": "Animation milliseconds, not auto advance.", + "maximum": 3000, + "minimum": 100, + "type": "integer" +}
- Changed
import_presentation2 fields changed- added
Output schema / properties / slides / items / properties / transitionAdded value: +{ + "description": "Entrance effect of this incoming slide.", + "enum": [ + "none", + "fade", + "slide-left", + "slide-right", + "zoom" + ], + "type": "string" +} - added
Output schema / properties / slides / items / properties / transition_durationAdded value: +{ + "description": "Animation milliseconds, not auto advance.", + "maximum": 3000, + "minimum": 100, + "type": "integer" +}
- Changed
update_slide4 fields changed- added
Input schema / properties / transitionAdded value: +{ + "default": "none", + "description": "Entrance effect of this incoming slide (default: none).", + "enum": [ + "none", + "fade", + "slide-left", + "slide-right", + "zoom" + ], + "type": "string" +} - added
Input schema / properties / transition_durationAdded value: +{ + "default": 500, + "description": "Animation duration in milliseconds (100-3000, default 500); not auto advance. Values outside the range are clamped.", + "type": "integer" +} - added
Output schema / properties / transitionAdded value: +{ + "description": "Entrance effect of this incoming slide.", + "enum": [ + "none", + "fade", + "slide-left", + "slide-right", + "zoom" + ], + "type": "string" +} - added
Output schema / properties / transition_durationAdded value: +{ + "description": "Animation milliseconds, not auto advance.", + "maximum": 3000, + "minimum": 100, + "type": "integer" +}
1 tool update
- Changed
get_format1 field changed- added
Output schema / properties / bordersAdded value: +{ + "type": "object" +}
22 tool updates
- Changed
add_slide4 fields changed- changed
Input schema / properties / name / descriptionPrevious value: -"Slide name (at most 100 characters)."New value: +"Slide name (at most 100 characters), in the language of the presentation." - added
Input schema / properties / name_trAdded value: +{ + "additionalProperties": { + "type": "string" + }, + "description": "The slide name in the other languages of the site: {\"en\": \"...\"}.", + "type": "object" +} - added
Output schema / properties / missing_translationsAdded 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" +} - added
Output schema / properties / name_trAdded value: +{ + "description": "The same text in the other languages of the site: {\"en\": \"...\"}.", + "type": "object" +}
- Changed
add_slides2 fields changed- added
Output schema / properties / slides / items / properties / missing_translationsAdded 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" +} - added
Output schema / properties / slides / items / properties / name_trAdded value: +{ + "description": "The same text in the other languages of the site: {\"en\": \"...\"}.", + "type": "object" +}
- Changed
answer_access_request3 fields changed- changed
Output schema / properties / presentation / descriptionPrevious value: -"Slug of the presentation."New value: +"Slug of the presentation (null: a project)." - changed
Output schema / properties / presentation / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Output schema / properties / projectAdded value: +{ + "description": "Slug of the project, for access to all of it.", + "type": [ + "string", + "null" + ] +}
- Changed
create_presentation8 fields changed- added
Input schema / properties / langAdded 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" +} - added
Input schema / properties / title_trAdded value: +{ + "additionalProperties": { + "type": "string" + }, + "description": "The title in the other languages of the site: {\"en\": \"...\"}.", + "type": "object" +} - added
Output schema / properties / langAdded value: +{ + "description": "The language its texts are written in; \"tr\" holds the others.", + "type": "string" +} - added
Output schema / properties / languagesAdded value: +{ + "description": "The languages of the site.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / missing_translationsAdded 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" +} - added
Output schema / properties / slides / items / properties / missing_translationsAdded 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" +} - added
Output schema / properties / slides / items / properties / name_trAdded value: +{ + "description": "The same text in the other languages of the site: {\"en\": \"...\"}.", + "type": "object" +} - added
Output schema / properties / title_trAdded value: +{ + "description": "The same text in the other languages of the site: {\"en\": \"...\"}.", + "type": "object" +}
- Changed
create_project2 fields changed- added
Output schema / properties / accessAdded value: +{ + "description": "open, public or private: inherited by its presentations.", + "type": "string" +} - added
Output schema / properties / grantsAdded 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" +}
- Changed
edit_blocks2 fields changed- added
Output schema / properties / missing_translationsAdded 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" +} - added
Output schema / properties / name_trAdded value: +{ + "description": "The same text in the other languages of the site: {\"en\": \"...\"}.", + "type": "object" +}
- Changed
get_access6 fields changed- added
Output schema / properties / effective_levelAdded value: +{ + "description": "The level that counts (the project's one when stricter).", + "type": "string" +} - changed
Output schema / properties / level / descriptionPrevious value: -"open, public or private."New value: +"open, public or private: the presentation's own level." - changed
Output schema / properties / pending_requests / items / properties / presentation / descriptionPrevious value: -"Slug of the presentation."New value: +"Slug of the presentation (null: a project)." - changed
Output schema / properties / pending_requests / items / properties / presentation / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Output schema / properties / pending_requests / items / properties / projectAdded value: +{ + "description": "Slug of the project, for access to all of it.", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / project_levelAdded value: +{ + "description": "The level of its project, if any.", + "type": [ + "string", + "null" + ] +}
- Changed
get_format1 field changed- added
Output schema / properties / languagesAdded value: +{ + "type": "object" +}
- Changed
get_presentation6 fields changed- added
Output schema / properties / langAdded value: +{ + "description": "The language its texts are written in; \"tr\" holds the others.", + "type": "string" +} - added
Output schema / properties / languagesAdded value: +{ + "description": "The languages of the site.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / missing_translationsAdded 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" +} - added
Output schema / properties / slides / items / properties / missing_translationsAdded 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" +} - added
Output schema / properties / slides / items / properties / name_trAdded value: +{ + "description": "The same text in the other languages of the site: {\"en\": \"...\"}.", + "type": "object" +} - added
Output schema / properties / title_trAdded value: +{ + "description": "The same text in the other languages of the site: {\"en\": \"...\"}.", + "type": "object" +}
- Changed
get_project6 fields changed- added
Output schema / properties / accessAdded value: +{ + "description": "open, public or private: inherited by its presentations.", + "type": "string" +} - added
Output schema / properties / grantsAdded 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" +} - added
Output schema / properties / presentations / items / properties / langAdded value: +{ + "description": "The language its texts are written in; \"tr\" holds the others.", + "type": "string" +} - added
Output schema / properties / presentations / items / properties / languagesAdded value: +{ + "description": "The languages of the site.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / presentations / items / properties / missing_translationsAdded 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" +} - added
Output schema / properties / presentations / items / properties / title_trAdded value: +{ + "description": "The same text in the other languages of the site: {\"en\": \"...\"}.", + "type": "object" +}
- Changed
get_slide2 fields changed- added
Output schema / properties / missing_translationsAdded 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" +} - added
Output schema / properties / name_trAdded value: +{ + "description": "The same text in the other languages of the site: {\"en\": \"...\"}.", + "type": "object" +}
- Changed
import_presentation6 fields changed- added
Output schema / properties / langAdded value: +{ + "description": "The language its texts are written in; \"tr\" holds the others.", + "type": "string" +} - added
Output schema / properties / languagesAdded value: +{ + "description": "The languages of the site.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / missing_translationsAdded 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" +} - added
Output schema / properties / slides / items / properties / missing_translationsAdded 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" +} - added
Output schema / properties / slides / items / properties / name_trAdded value: +{ + "description": "The same text in the other languages of the site: {\"en\": \"...\"}.", + "type": "object" +} - added
Output schema / properties / title_trAdded value: +{ + "description": "The same text in the other languages of the site: {\"en\": \"...\"}.", + "type": "object" +}
- Changed
list_access_requests3 fields changed- changed
Output schema / properties / requests / items / properties / presentation / descriptionPrevious value: -"Slug of the presentation."New value: +"Slug of the presentation (null: a project)." - changed
Output schema / properties / requests / items / properties / presentation / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Output schema / properties / requests / items / properties / projectAdded value: +{ + "description": "Slug of the project, for access to all of it.", + "type": [ + "string", + "null" + ] +}
- Changed
list_presentations4 fields changed- added
Output schema / properties / presentations / items / properties / langAdded value: +{ + "description": "The language its texts are written in; \"tr\" holds the others.", + "type": "string" +} - added
Output schema / properties / presentations / items / properties / languagesAdded value: +{ + "description": "The languages of the site.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / presentations / items / properties / missing_translationsAdded 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" +} - added
Output schema / properties / presentations / items / properties / title_trAdded value: +{ + "description": "The same text in the other languages of the site: {\"en\": \"...\"}.", + "type": "object" +}
- Changed
list_projects2 fields changed- added
Output schema / properties / projects / items / properties / accessAdded value: +{ + "description": "open, public or private: inherited by its presentations.", + "type": "string" +} - added
Output schema / properties / projects / items / properties / grantsAdded 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" +}
- Changed
read_presentation6 fields changed- added
Input schema / properties / langAdded 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" +} - added
Output schema / properties / langAdded value: +{ + "description": "The language its texts are written in; \"tr\" holds the others.", + "type": "string" +} - added
Output schema / properties / languagesAdded value: +{ + "description": "The languages of the site.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / missing_translationsAdded 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" +} - added
Output schema / properties / shown_langAdded value: +{ + "description": "The language of the texts shown.", + "type": "string" +} - added
Output schema / properties / title_trAdded value: +{ + "description": "The same text in the other languages of the site: {\"en\": \"...\"}.", + "type": "object" +}
- Changed
request_access3 fields changed- changed
Output schema / properties / presentation / descriptionPrevious value: -"Slug of the presentation."New value: +"Slug of the presentation (null: a project)." - changed
Output schema / properties / presentation / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Output schema / properties / projectAdded value: +{ + "description": "Slug of the project, for access to all of it.", + "type": [ + "string", + "null" + ] +}
- Added
request_project_access - Changed
set_access6 fields changed- added
Output schema / properties / effective_levelAdded value: +{ + "description": "The level that counts (the project's one when stricter).", + "type": "string" +} - changed
Output schema / properties / level / descriptionPrevious value: -"open, public or private."New value: +"open, public or private: the presentation's own level." - changed
Output schema / properties / pending_requests / items / properties / presentation / descriptionPrevious value: -"Slug of the presentation."New value: +"Slug of the presentation (null: a project)." - changed
Output schema / properties / pending_requests / items / properties / presentation / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Output schema / properties / pending_requests / items / properties / projectAdded value: +{ + "description": "Slug of the project, for access to all of it.", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / project_levelAdded value: +{ + "description": "The level of its project, if any.", + "type": [ + "string", + "null" + ] +}
- Changed
update_presentation5 fields changed- added
Input schema / properties / title_trAdded value: +{ + "additionalProperties": { + "type": "string" + }, + "description": "The title in the other languages of the site: {\"en\": \"...\"} (the languages left out keep theirs).", + "type": "object" +} - added
Output schema / properties / langAdded value: +{ + "description": "The language its texts are written in; \"tr\" holds the others.", + "type": "string" +} - added
Output schema / properties / languagesAdded value: +{ + "description": "The languages of the site.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / missing_translationsAdded 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" +} - added
Output schema / properties / title_trAdded value: +{ + "description": "The same text in the other languages of the site: {\"en\": \"...\"}.", + "type": "object" +}
- Changed
update_project5 fields changed- added
Input schema / properties / accessAdded value: +{ + "description": "Level of the project: \"open\", \"public\" or \"private\".", + "enum": [ + "open", + "public", + "private" + ], + "type": "string" +} - added
Input schema / properties / grantAdded value: +{ + "description": "Give access to the whole project: [{\"user\": <user name>, \"role\": \"view\"|\"edit\"}].", + "items": { + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / revokeAdded value: +{ + "description": "User names whose access is taken away.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / accessAdded value: +{ + "description": "open, public or private: inherited by its presentations.", + "type": "string" +} - added
Output schema / properties / grantsAdded 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" +}
- Changed
update_slide4 fields changed- changed
Input schema / properties / name / descriptionPrevious value: -"Slide name (at most 100 characters)."New value: +"Slide name (at most 100 characters), in the language of the presentation." - added
Input schema / properties / name_trAdded value: +{ + "additionalProperties": { + "type": "string" + }, + "description": "The slide name in the other languages of the site: {\"en\": \"...\"}.", + "type": "object" +} - added
Output schema / properties / missing_translationsAdded 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" +} - added
Output schema / properties / name_trAdded value: +{ + "description": "The same text in the other languages of the site: {\"en\": \"...\"}.", + "type": "object" +}
12 tool updates
- Changed
answer_access_request1 field changed- added
Input schema / properties / whole_projectAdded value: +{ + "description": "Give the access for the whole project the presentation is in (default false: this presentation only).", + "type": "boolean" +}
- Changed
create_presentation2 fields changed- added
Input schema / properties / projectAdded 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" +} - added
Output schema / properties / projectAdded value: +{ + "description": "The project it belongs to, or null.", + "properties": { + "slug": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": [ + "object", + "null" + ] +}
- Added
create_project - Added
delete_project - Changed
get_presentation1 field changed- added
Output schema / properties / projectAdded value: +{ + "description": "The project it belongs to, or null.", + "properties": { + "slug": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": [ + "object", + "null" + ] +}
- Added
get_project - Changed
import_presentation2 fields changed- added
Input schema / properties / projectAdded value: +{ + "description": "Slug of one of your projects to put the presentation in.", + "type": "string" +} - added
Output schema / properties / projectAdded value: +{ + "description": "The project it belongs to, or null.", + "properties": { + "slug": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": [ + "object", + "null" + ] +}
- Changed
list_presentations2 fields changed- added
Input schema / properties / projectAdded value: +{ + "description": "Only the presentations of this project (its slug), in its order; \"scope\" is then ignored.", + "type": "string" +} - added
Output schema / properties / presentations / items / properties / projectAdded value: +{ + "description": "The project it belongs to, or null.", + "properties": { + "slug": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": [ + "object", + "null" + ] +}
- Added
list_projects - Changed
read_presentation1 field changed- added
Output schema / properties / projectAdded value: +{ + "description": "The project it belongs to, or null.", + "properties": { + "slug": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": [ + "object", + "null" + ] +}
- Changed
update_presentation1 field changed- added
Output schema / properties / projectAdded value: +{ + "description": "The project it belongs to, or null.", + "properties": { + "slug": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": [ + "object", + "null" + ] +}
- Added
update_project
10 tool updates
- Changed
add_comment1 field changed- added
Input schema / properties / text / maxLengthAdded value: +4000
- Changed
add_slide6 fields changed- changed
Input schema / properties / name / descriptionPrevious value: -"Slide name (at most 30 characters)."New value: +"Slide name (at most 100 characters)." - added
Input schema / properties / name / maxLengthAdded value: +100 - added
Input schema / properties / responseAdded 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" +} - added
Output schema / descriptionAdded 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." - changed
Output schema / properties / objects / descriptionPrevious value: -"Blocks, bottom to top."New value: +"Blocks, bottom to top (\"props\" only in the full form)." - changed
Output schema / properties / objects / items / requiredPrevious value: -[ - "id", - "type", - "props" -]New value: +[ + "id", + "type" +]
- Added
add_slides - Changed
create_presentation5 fields changed- added
Input schema / properties / responseAdded 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" +} - added
Input schema / properties / title / maxLengthAdded value: +100 - added
Output schema / properties / slides / items / descriptionAdded 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." - changed
Output schema / properties / slides / items / properties / objects / descriptionPrevious value: -"Blocks, bottom to top."New value: +"Blocks, bottom to top (\"props\" only in the full form)." - changed
Output schema / properties / slides / items / properties / objects / items / requiredPrevious value: -[ - "id", - "type", - "props" -]New value: +[ + "id", + "type" +]
- Changed
edit_blocks4 fields changed- added
Input schema / properties / responseAdded 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" +} - added
Output schema / descriptionAdded 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." - changed
Output schema / properties / objects / descriptionPrevious value: -"Blocks, bottom to top."New value: +"Blocks, bottom to top (\"props\" only in the full form)." - changed
Output schema / properties / objects / items / requiredPrevious value: -[ - "id", - "type", - "props" -]New value: +[ + "id", + "type" +]
- Changed
get_presentation3 fields changed- added
Output schema / properties / slides / items / descriptionAdded 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." - changed
Output schema / properties / slides / items / properties / objects / descriptionPrevious value: -"Blocks, bottom to top."New value: +"Blocks, bottom to top (\"props\" only in the full form)." - changed
Output schema / properties / slides / items / properties / objects / items / requiredPrevious value: -[ - "id", - "type", - "props" -]New value: +[ + "id", + "type" +]
- Changed
get_slide3 fields changed- added
Output schema / descriptionAdded 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." - changed
Output schema / properties / objects / descriptionPrevious value: -"Blocks, bottom to top."New value: +"Blocks, bottom to top (\"props\" only in the full form)." - changed
Output schema / properties / objects / items / requiredPrevious value: -[ - "id", - "type", - "props" -]New value: +[ + "id", + "type" +]
- Added
import_presentation - Changed
update_presentation1 field changed- added
Input schema / properties / title / maxLengthAdded value: +100
- Changed
update_slide6 fields changed- changed
Input schema / properties / name / descriptionPrevious value: -"Slide name (at most 30 characters)."New value: +"Slide name (at most 100 characters)." - added
Input schema / properties / name / maxLengthAdded value: +100 - added
Input schema / properties / responseAdded 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" +} - added
Output schema / descriptionAdded 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." - changed
Output schema / properties / objects / descriptionPrevious value: -"Blocks, bottom to top."New value: +"Blocks, bottom to top (\"props\" only in the full form)." - changed
Output schema / properties / objects / items / requiredPrevious value: -[ - "id", - "type", - "props" -]New value: +[ + "id", + "type" +]
4 tool updates
- Changed
create_presentation2 fields changed- added
Input schema / properties / databaseAdded 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" +} - added
Output schema / properties / databaseAdded 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" +}
- Changed
get_presentation1 field changed- added
Output schema / properties / databaseAdded 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" +}
- Added
run_code - Changed
update_presentation2 fields changed- added
Input schema / properties / databaseAdded 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" +} - added
Output schema / properties / databaseAdded 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" +}
27 tool updates
- Changed
add_comment1 field changed- changed
Output 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" +}
- Changed
add_slide1 field changed- changed
Output 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" +}
- Changed
answer_access_request2 fields changed- added
Input schema / properties / approve / descriptionAdded value: +"true approves the request, false declines it." - changed
Output 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" +}
- Changed
create_presentation2 fields changed- added
Input schema / properties / description / descriptionAdded value: +"Description shown on the presentation page (optional)." - changed
Output 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" +}
- Changed
delete_comment1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "deleted": { + "description": "Id of the deleted note.", + "type": "integer" + } + }, + "required": [ + "deleted" + ], + "type": "object" +}
- Changed
delete_presentation1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "deleted": { + "description": "Slug of the deleted presentation.", + "type": "string" + } + }, + "required": [ + "deleted" + ], + "type": "object" +}
- Changed
delete_slide1 field changed- changed
Output 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" +}
- Changed
edit_blocks1 field changed- changed
Output 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" +}
- Changed
get_access1 field changed- changed
Output 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" +}
- Changed
get_format1 field changed- changed
Output 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" +}
- Changed
get_presentation1 field changed- changed
Output 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" +}
- Changed
get_slide1 field changed- changed
Output 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" +}
- Changed
get_version2 fields changed- added
Input schema / properties / format / descriptionAdded value: +"Result format: \"markdown\" (default) or \"json\" (the complete content)." - changed
Output 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" +}
- Changed
list_access_requests3 fields changed- added
Input schema / properties / direction / descriptionAdded value: +"\"incoming\" (default): requests to you; \"outgoing\": requests you sent." - added
Input schema / properties / include_decided / descriptionAdded value: +"Also return approved and declined requests." - changed
Output 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" +}
- Changed
list_comments2 fields changed- added
Input schema / properties / include_resolved / descriptionAdded value: +"Also return resolved threads (default: only open ones)." - changed
Output 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" +}
- Changed
list_history1 field changed- changed
Output 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" +}
- Changed
list_presentations2 fields changed- added
Input schema / properties / scope / descriptionAdded value: +"Which presentations: \"mine\" (default), \"shared\" with you, or \"open\" ones of anybody." - changed
Output 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" +}
- Changed
read_presentation2 fields changed- added
Input schema / properties / format / descriptionAdded value: +"Result format: \"markdown\" (default, compact) or \"json\" (structured)." - changed
Output 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" +}
- Changed
reorder_slides1 field changed- changed
Output 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" +}
- Changed
request_access1 field changed- changed
Output 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" +}
- Changed
resolve_comment1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "id": { + "type": "integer" + }, + "resolved": { + "type": "boolean" + } + }, + "required": [ + "id", + "resolved" + ], + "type": "object" +}
- Changed
restore_version1 field changed- changed
Output 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" +}
- Changed
set_access3 fields changed- added
Input schema / properties / level / descriptionAdded value: +"New access level: \"open\", \"public\" or \"private\"." - added
Input schema / properties / revoke / descriptionAdded value: +"User names whose access is taken away." - changed
Output 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" +}
- Changed
update_presentation4 fields changed- added
Input schema / properties / description / descriptionAdded value: +"New description; an empty string removes it." - added
Input schema / properties / theme / descriptionAdded value: +"Colour theme: the defaults of new slides and blocks." - added
Input schema / properties / title / descriptionAdded value: +"New title (at most 100 characters)." - changed
Output 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" +}
- Changed
update_slide1 field changed- changed
Output 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" +}
- Changed
upload_image1 field changed- changed
Output 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" +}
- Changed
whoami1 field changed- changed
Output 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" +}
27 tool updates
- First observed
add_comment - First observed
add_slide - First observed
answer_access_request - First observed
create_presentation - First observed
delete_comment - First observed
delete_presentation - First observed
delete_slide - First observed
edit_blocks - First observed
get_access - First observed
get_format - First observed
get_presentation - First observed
get_slide - First observed
get_version - First observed
list_access_requests - First observed
list_comments - First observed
list_history - First observed
list_presentations - First observed
read_presentation - First observed
reorder_slides - First observed
request_access - First observed
resolve_comment - First observed
restore_version - First observed
set_access - First observed
update_presentation - First observed
update_slide - First observed
upload_image - First observed
whoami
Publisher details
- Operator
- EaseWeb · Publisher source
- Operator website
- https://easeweb.host/
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://easeweb.host/docs/mcp/
- 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
Create, read, update and publish hosted SlideWeave presentations written in SlideLang.
Executable presentations: build, compute and share plixes, decks whose slides Python cells compute.
Create, edit, preview, and share Slides.com presentations. Requires a paid Slides.com account.
Draw diagrams, build HTML pages and write Markdown in a live editor the user sees.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceEnables creating and editing Figma-like 16:9 HTML slide decks through a visual canvas, with tools to open existing HTML, manage decks, and export slides as presentable HTML.-
- AlicenseNot gradedqualityBmaintenanceEnables 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 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables 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
- AlicenseNot gradedqualityBmaintenanceTurns 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 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.