EaseWeb
Server Details
Create, edit, read and review web presentations: slides, linked buttons, pictures, runnable code.
- Status
- Healthy
- Uptime
- 99.8% over 22 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
TDQS
Scored across 45 tools
Most tools target distinct resource+action pairs and the descriptions are unusually detailed. However, several clusters overlap: add_slide/add_slides, get_slide/get_slides/get_presentation, and update_slide/edit_blocks/edit_slides all touch adjacent territory, so an agent could hesitate between them.
Nearly all names follow a clean verb_noun pattern (create_presentation, delete_slide, list_comments, set_access). A few outliers like whoami, check_layout, and the verbose name_slides_after_titles break the pattern but remain readable and unambiguous.
45 tools is well above the 25+ threshold for 'too many' and exceeds what the domain needs. The singular/plural pairs (add_slide/add_slides, get_slide/get_slides) and the update_slide/edit_blocks/edit_slides trio are natural consolidation candidates.
Coverage is exceptional: full CRUD across presentations, slides, blocks, comments, projects and access, plus versions/history, translations, import/export, code execution, layout checking and previews. No obvious lifecycle gaps or dead ends.
Available Tools
45 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"). The owner of the presentation sees the note in the viewer; the thread is seen by the owner and by whoever started it.
| 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 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a non-read-only, non-destructive, non-idempotent write. The description adds genuinely beyond that by disclosing the visibility model: the owner sees slide/presentation notes in the viewer, while a thread is visible to the owner and the thread starter. It does not cover retry/duplication behavior or rate limits.
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, action-first, with the optional-parameter variants enumerated inline. The parenthetical quoted parameter names are a bit clunky and the second sentence is long, but nothing is redundant padding.
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 need not be explained, and 100% schema coverage handles parameter documentation. For a four-parameter write tool this is nearly complete; the remaining gap is the interaction between reply_to and slide_id and any 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 description coverage is 100%, so baseline is 3. The description re-frames slide_id versus reply_to in terms of target (slide note vs whole-presentation note vs thread answer), which adds some meaning, but it never resolves the important semantic ambiguity of whether reply_to and slide_id can or must be combined.
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+resource: leaving a note on a presentation/slide or replying to a thread, which is distinguishable from the sibling set (list_comments, delete_comment, resolve_comment). The only drag is terminology drift — it says "note" while the tool name and all siblings say "comment" — and it never explicitly names or excludes those siblings.
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 does outline the three usage modes (slide-level, presentation-level, thread reply) and the access precondition ("any presentation you can see"), which is useful context. But it stops short of stating when to reply instead of starting a new note, whether the modes are mutually exclusive, or any alternative tool to use instead.
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 | |
| 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 readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=false, so the safety profile is carried. The description adds the edit-permission prerequisite and notes that block props fall back to theme defaults indirectly, but its return-value sentence largely restates the 'response' parameter rather than disclosing new behavior 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?
Two tight sentences, front-loaded with the core action and placement behavior, with no filler. The inline quoted parameter names ('position', 'response') are the only mild density cost, so it stops short of 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?
For a 13-param mutation tool with nested block objects, the description covers the essentials an agent needs: placement semantics, optional inline block creation, permission requirement, and response verbosity. With a full schema and an output schema present, the remaining gaps (block-prop details, clamping rules) are acceptable.
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 every parameter is already documented in the schema; the description only echoes 'position (1-based)' and the optional-blocks behavior without adding syntax or constraints the schema lacks. Baseline 3 is appropriate when the schema does the heavy lifting.
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 clear verb+resource ('Add a slide to a presentation') and adds scope qualifiers: edit permission, placement at end or at a 1-based position, and optional inline blocks. It is distinguishable from add_slides and edit_slides by implication ('a slide' vs bulk edit), but it never names the sibling that handles the batch case.
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 placement and inline-blocks options, and the 'presentation you may edit' phrasing hints at a permission prerequisite. It offers no explicit when-to-use or when-not-to-use guidance against add_slides (bulk add) or edit_slides (modify existing), which are the natural alternatives an agent must choose between.
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 cover the safety profile (non-readOnly, non-destructive, non-idempotent), so the bar is lower. The description still adds real behavioral context: the return shape (new slide ids, or full props when "response" is "full") and the non-obvious fact that slide links are resolved against post-insertion numbering. It does not state failure modes or what happens on partial insertion.
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 verb and scope, and every sentence carries information. The inline JSON-ish snippets mirror the schema and make it slightly harder to read than plain prose, 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?
For a 4-parameter mutation tool with an output schema, the description covers insertion position, the response verbosity modes, and cross-slide link resolution. Return values largely live in the output schema, so it is close to complete; only error/edge-case behavior is unaddressed.
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 goes beyond the schema by explaining the self-referential link semantics ({"kind": "slide", "slide_number": N} counts slides as they are after insertion), which is the one parameter behavior the schema does not convey. It also restates the slide object's field list, which is redundant 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?
States a specific verb+resource ("Add several slides at once to a presentation") and names the scope of the operation (at end or from "position"). It implicitly differentiates from the sibling add_slide via "several slides at once", but never names the single-slide alternative, so an agent must infer the routing.
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 batch framing rather than stated: an agent can infer this is for multiple slides, but there is no explicit when-to-use/when-not or named alternative versus add_slide/edit_slides. The phrase "a presentation you may edit" does at least signal a permission prerequisite.
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 | |
| 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, destructiveHint=false, and idempotentHint=false, so the safety profile is covered. The description adds useful effect semantics (role alters what is granted; whole_project extends the grant), but says nothing about permissions required, notifications, or 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 front-loaded sentences: the core action first, then parameter clarifications. Efficient, though the parenthetical definitions are slightly redundant with schema 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?
With an output schema present, return values need no explanation, and all parameters are covered by the schema. The only gap is that the description does not point to list_access_requests for obtaining a request_id, which an agent must supply.
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 are already documented, including the role enum and the whole_project default. The description restates role and whole_project semantics rather than adding format or edge-case detail, 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 states a specific action (approve or decline) on a specific resource (a request for access to your presentations or projects). An agent can distinguish this from siblings like set_access, request_access, and list_access_requests without opening any 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?
Usage is implied by the name and the mutation semantics, but the description never says when to use this versus alternatives such as set_access (direct access changes) or list_access_requests (finding a request_id). No prerequisites or workflow context are given.
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 lookARead-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"). 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 readOnly, idempotent, non-destructive, closed-world, so safety is covered. The description goes well beyond that: it explains the server-side browser measurement versus font-width estimation ('measured': true), the visible-content-only rule where text on a block without fill/border can spill into padding, and the cross-tool behavior that mutating operations return layout_warnings. That is meaningful behavioral context; only the exact response shape is left 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?
The purpose is front-loaded, but the body is a single dense paragraph with stacked parentheticals and long clauses ('The changing operations add the (estimated) warnings of the slides they changed to their answer'), which makes it harder to scan. Every element is informative, but the structure could be tightened into discrete points.
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 the description fills in the diagnostic semantics (warning categories, measurement method, visibility caveat) an agent needs to interpret results. The main remaining gap is guidance on when to invoke it versus preview/get siblings, which is a usage rather than completeness issue.
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 slug, slide_ids, from_number and to_number are already documented in the schema. The description adds nothing about the selector parameters, which is acceptable given full coverage, 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 states a specific verb-ish purpose (reporting warnings about how slides look) and enumerates the exact conditions it detects: overflow, cut/outside, overlap, with the quoted keywords an agent would see in output. It clearly separates this analysis tool from mutation siblings. It stops short of naming a sibling such as preview_slides or get_slides to route the agent, so it is clear but not fully differentiated.
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?
Implicit usage is conveyed: check layout to learn about text/code that overflows, is clipped, or overlaps. It also hints that changing operations already append layout_warnings, which tells the agent it may not need a separate call. However, there is no explicit when-to-use / when-not-to-use statement or named alternative, leaving the routing to inference.
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 | |
| 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 declare a non-destructive, non-idempotent, closed-world write. The description goes well beyond that by disclosing return behavior (new presentation with slide/block ids, full props with 'response': 'full'), the eager multi-language sync model, and that the answer reports 'missing_translations'. It lacks permission/auth context, hence not 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?
Front-loaded with the core purpose, then structured detail on the slides list, multilingual requirement, and return format. Information-dense with little waste, though several sentences are run-ons that slow parsing.
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 objects and an output schema, the description covers the essential mental model: structure of slides/blocks, the multilingual obligation, and what the response contains. It is complete enough to call correctly, though explicit 'when to prefer over add_slide' routing is 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 per-parameter baseline is 3, but the description adds cross-parameter semantics the schema does not: how slide objects link via {"kind": "slide", "slide_number": N}, and how lang, title_tr, name_tr, and per-block 'tr' must all be supplied together. This relational guidance is genuinely value-adding.
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') and clarifies the scope with 'empty or complete in one call', which distinguishes it from the incremental siblings add_slide/add_slides and from update_presentation. An agent can identify the creation path 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 phrase 'empty or complete in one call' implies this tool subsumes slide creation, but it never explicitly states when to use it versus add_slide, add_slides, or import_presentation. Usage is implied rather than spelled out, and no exclusions or prerequisites are given.
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 | |
| 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?
Beyond the annotations (readOnlyHint=false, idempotentHint=false, destructiveHint=false), the description discloses meaningful behavior: update only alters the given props, props a block type lacks are skipped, added blocks land on top unless at_bottom is set, and response defaults to brief. It stops short of covering permissions/auth or the semantics of the destructive 'delete' path.
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 idea in the first clause, then breaks add/update/delete into compact labeled segments. Dense and example-driven but every sentence carries operational detail; nothing 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 an 8-parameter tool with multi-shape params, the description covers the operation semantics and default behaviors well, and the output schema (present) handles return values. The main residual gap is the absence of routing guidance versus sibling edit/slide-mutation tools.
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 already 100% (baseline 3), and the description adds real meaning on top: it details the three update shapes (single id, ids list, and the 'inside' card form) and explains that 'inside' covers the card background block plus every block within its rectangle. That 'inside' semantics is not conveyed by the schema description 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?
The description states a specific verb+resource scope: 'Change some blocks of a slide and leave the others alone, in one step', and enumerates the three operations (add/update/delete) it supports. The 'blocks' focus clearly distinguishes it from siblings like edit_slides, update_slide, and replace_text without needing to open any 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?
It implies when to use it ('leave the others alone, in one step' = a surgical partial edit) but never names an alternative tool or states a when-not condition. With siblings edit_slides, update_slide, and replace_text all in play, the agent must infer which to pick.
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?
Goes well beyond the annotations by disclosing atomicity ('Nothing is changed when one item is wrong'), optimistic-concurrency behavior ('or its slide changed meanwhile'), and the version-history effect. These are non-obvious traits not derivable from readOnlyHint/destructiveHint, and they do not conflict with destructiveHint=false since deletes are recoverable through the created version.
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 one-step value proposition and otherwise dense with essential semantics; there is some packing of three operations into a single sentence, 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?
A high-complexity batch mutation tool whose gotchas (atomicity, concurrency check, history version, response verbosity) are all covered; return values are further backed by an output schema, so nothing critical 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?
The schema types `edits.items` only as a generic object, and the description compensates fully by spelling out the item keys (slide_id, add, update, delete, at_bottom, base_version) and the semantics of add placement, update targeting (id/ids/inside), and delete. Without it, the array would be opaque.
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+scope: 'Change blocks on many slides in one step (and one version in the history)'. The batch scope implicitly distinguishes it from edit_blocks/update_slide, but no sibling is named explicitly, so an agent must infer that edit_blocks is the single-slide variant.
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 'in one step' phrasing implies this is the batch alternative to single-slide editing and surfaces the versioning advantage, but there is no explicit when-to-use/when-not statement or named alternative among the many sibling write tools (edit_blocks, update_slide, add_slide, reorder_slides).
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 settingsCRead-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 readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so the safety profile is covered. The description adds genuinely non-obvious domain behavior: effective_level inheritance where a presentation in a project inherits the project's level when that one is stricter. That inheritance rule is real value beyond annotations. However it doesn't clarify whether output is a snapshot, or that pending requests are included read-only (vs. the actionable list elsewhere).
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 sentence that is really a field inventory, and it is not front-loaded with the action. It spends its length enumerating return-value fields (which an output schema already covers) rather than stating what the tool does or when to use it.
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 needn't be explained in prose; the field enumeration is largely redundant with that schema. The inheritance rule is a useful addition, but the definition still lacks a plain purpose statement and any routing versus siblings, leaving the agent to infer when to call it.
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 fully documented in the schema as the presentation's address. The description adds no parameter meaning beyond what the schema provides, which is the baseline-3 case.
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 the fields of the access settings object (own level, effective level, who has access, pending requests) but never states the action plainly: that it retrieves/returns the access settings for a presentation. There is no leading verb like 'Get' or 'Return'. The agent can infer it's a read from the name and annotations, but the sentence itself is a content list rather than a purpose 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?
No guidance on when to use this vs. siblings like list_access_requests, whoami, request_access, or set_access. An agent cannot tell from the description whether pending requests returned here overlap with list_access_requests, or that set_access is the mutation counterpart. Usage must be inferred entirely.
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_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 | |
| 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 carry the read-only/idempotent safety profile, and the description adds genuinely useful behavior: the size warning (a 30-slide deck is a few hundred thousand characters), how to page with from_number/to_number or slide_ids, what texts_only returns, and that each slide's 'version' must be passed as base_version on edits. It stops short of describing return envelope or link-resolution structure in depth.
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 front-loaded around the core return shape and then the paging advice, with zero filler sentences. The heavy parentheticals and quotation marks make it dense, but each sentence carries information an agent 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?
With an output schema present, the description needn't enumerate return values, and it still covers the practical concerns an agent faces: paging, size, texts_only, can_edit, and version/base_version coupling. It leaves the sibling-routing question open, which is the main missing piece.
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, and the description goes beyond the schema by explaining the intent behind texts_only ('only the words of the blocks (html, tr, code), no geometry') and the from/to_number paging pattern. It slightly blurs base_version (an output field consumed by edit tools) into this tool's surface, but the extra semantics are real.
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 specific verb+resource and scope: it returns every slide and every block (ids and complete props) in playback order, and frames it as 'for editing'. It implies a distinction from single-slide readers like get_slide, but never names a sibling, so the 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?
It tells the agent to use the returned ids to edit slides and blocks and advises reading large presentations in parts, which implies the workflow. However it never states when to prefer this over get_slide, get_slides, or read_presentation, so the routing among closely-named siblings is unaddressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectGet a projectCRead-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 declare readOnlyHint=true, idempotentHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is covered structurally. The description adds that only visible projects and presentations are returned and that presentations come in order, which is genuine extra context, but it says nothing about error/not-found behavior for a slug the caller cannot see.
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, but the parenthetical '(the ones you can see)' interrupts an already fragmentary sentence and there is no front-loaded statement of what the tool does. Brevity here reads as under-specification rather than efficient 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?
With an output schema present, return values need not be explained, yet the description spends its only sentence on return composition. Annotations cover safety. For a low-complexity single-parameter read the description is minimally sufficient, but it never states the fundamental purpose or when to reach for it.
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 'project' parameter has 100% schema description coverage, including the slug format '/project/<slug>/'. The description adds no parameter-level meaning, so the schema-only 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 is a noun phrase with no verb, so the action (fetch/retrieve one project) is only implied by the name 'get_project'. It does add return-content information ('with its presentations ... in order'), which goes slightly beyond a tautology, but it never distinguishes this tool from 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?
There is no statement of when to use this tool versus get_presentation, list_projects, or get_slide. The phrase 'the ones you can see' hints at a permission scope but is not framed as usage guidance, so an agent gets no routing help.
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 | |
| 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 non-openWorld, so the safety profile is fully covered. The description adds modest value by explaining that the returned slide includes all blocks with ids and complete props, but says nothing about visibility/permission constraints or pagination that a 'can see' qualifier hints at.
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 that efficiently conveys scope and return content with no filler. It is arguably terse, but 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 an output schema covering return values and annotations covering safety, the description needn't explain those. For a simple two-param read tool it is close to complete, but given the crowded sibling set it should have clarified when to prefer this over get_presentation/read_presentation.
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%; both slug and slide_id are well documented (including the stable-id-vs-position caveat). The description adds nothing beyond the schema, so the 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?
Names a specific verb and resource (get one slide) plus what it returns ('all of its blocks (ids and complete props)'), so the agent knows exactly what it fetches. However, it does not distinguish itself from close siblings like get_presentation, read_presentation, or preview_slides, leaving the 'one slide vs whole deck' boundary implicit.
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 when-to-use guidance, no prerequisites, and no mention of alternatives. The presence of get_presentation, read_presentation, update_slide, and preview_slides among siblings makes routing ambiguous, and the description offers nothing to resolve it.
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 | |
| 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 safety profile is covered. The description adds real behavioral context beyond that: the per-slide 'version' should be passed back as 'base_version' when changing a slide, and the response carries the presentation 'version' and 'slides_total' — meaningful for optimistic-concurrency editing.
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 what is returned, then parameter and version semantics. It is dense and reads as one long dash-separated sentence, but nearly every clause carries information an agent needs; little 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 document return values, yet it usefully flags version and slides_total. All five parameters are covered and the editing/version workflow is explained, leaving only alternative-tool routing unaddressed.
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 meaning the schema does not: from_number/to_number are 1-based and inclusive, and texts_only yields html/tr/code block text with 'no geometry', clarifying what is dropped. That is genuine added value over 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?
States a specific verb+resource (get slides) plus scope: a subset of a larger presentation with blocks containing ids and complete props. The partial-retrieval framing implicitly contrasts with whole-presentation reads, but no sibling (get_slide, read_presentation, preview_slides) is named, so 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?
It does give a use-case cue for texts_only ('for reading, checking or translating') and explains the numbering/ids selection, which is useful. However there is no explicit when-to-use-vs-alternatives guidance — nothing tells the agent when to pick this over get_slide or read_presentation.
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 | |
| 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 only cover the safety profile (readOnly=false, destructive=false, idempotent=false, openWorld=false). The description goes well beyond: it discloses the returned 'warnings', the brief/full response distinction, the slide-N replacement semantics that preserve id/links/notes/history, preservation of translations, title/theme/slide-name/script retention, and a 409 refusal on version conflict. This is unusually rich behavioral context.
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 dense paragraphs, front-loaded with the create path before the 'into' update path, which is the right ordering. Almost every clause carries information; length is justified by 11 parameters and two distinct modes, though it could be tightened slightly.
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 key output cues (ids unless 'full', warnings). For an 11-parameter import tool with an update mode, it covers both modes, edge cases, and the version-conflict guard, leaving nothing an agent needs 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 coverage is 100%, so the per-parameter baseline is 3. The description adds genuine cross-parameter meaning beyond the schema: how 'into' interacts with 'slides' (slide N replaces slide N, file slides after the last are added), what 'base_version' guards against (409), and what 'response' changes. It does not re-explain every field, but the interaction semantics are real added 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?
States a specific verb+resource (create a presentation) constrained to two file formats (.pptx, .zip as exported by the site), and enumerates what becomes editable (slides, texts, shapes, pictures, backgrounds, links). It is clearly distinguished from a blank-create sibling because it is scoped to file import, and it names the second mode ('into') without ambiguity.
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 clearly explains the two usage modes: no 'into' creates a new presentation, and with 'into' the file updates an existing one. Context is strong, but no alternative sibling (e.g. create_presentation or upload_image) is named as a 'when not to use this' option, so the routing guidance stops short of explicit exclusivity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_access_requestsAccess requestsCRead-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 readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds one genuinely useful behavioral fact beyond that: by default only pending requests are returned unless include_decided is set. It says nothing about ordering, limits, or pagination.
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, front-loaded sentences with no filler. Slightly awkward quoting and punctuation, but every clause carries information and nothing is 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?
An output schema exists so return values need no explanation, and annotations carry the safety profile. However, for a list tool sitting among 40 siblings with closely related request/access tools, the description omits the basic purpose statement and any routing, leaving the definition only minimally 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%, and the description essentially paraphrases the schema text for both parameters ("incoming" default, include_decided behavior) rather than adding format or edge-case meaning. Baseline 3 is appropriate when the schema already does this work.
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 that this tool lists access requests in a sentence of its own; it jumps straight into the meaning of the "direction" parameter values. The tool name carries the actual purpose, and the description only clarifies scope (incoming vs outgoing). It is decipherable but the verb+resource statement is implied rather than stated, and no sibling (e.g. get_access, request_access) is distinguished.
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 mention of alternatives. An agent must infer from context whether to call this versus get_access, request_access, or answer_access_request. The "default" note for incoming is a small hint but not routing guidance.
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. The owner sees every note; anybody else sees the threads they started (and the replies to them). 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 readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds genuinely non-obvious behavior beyond the annotations: per-user visibility scoping and the default that resolved threads are excluded unless include_resolved is set.
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 no filler and the core resource description front-loaded. The final sentence is telegraphic but still readable and earns its place by stating the default filter.
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-value details need not be described, and the description covers scope, visibility, and default filtering adequately for a three-parameter read tool. Nothing essential to correct invocation appears 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 a baseline of 3 applies. The description goes slightly beyond the schema by clarifying the default filtering semantics of include_resolved ("Without include_resolved only open threads"), which reinforces the meaning of that parameter rather than merely restating it.
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?
Describes the resource as notes on a presentation returned as threads with replies, which is specific enough to distinguish it from siblings like add_comment, delete_comment, and resolve_comment. The verb is only implied by the title ("Read the notes") rather than stated in the description, but the resource scope is 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 who sees what (owner sees every note, others see only their own threads) and the default filtering of resolved threads, which is useful context for deciding relevance. However, it never explicitly routes the agent away from alternatives such as get_slide or read_presentation, so usage 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.
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 presentationsARead-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 readOnlyHint, idempotentHint, and destructiveHint=false, lowering the bar. The description adds useful access semantics beyond that – notably that 'open' presentations may be read and edited by any signed-in person or agent, and that each record exposes an editability flag and access level, which helps the agent reason about permissions.
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 scope definitions the agent needs first, then the field inventory. It is appropriately sized, though the field-list sentence reads as a run-on inventory rather than clearly separated clauses.
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 field enumeration is partly redundant, but the access-level/editability semantics and scope meanings round out the picture. Nothing critical for a filtered, read-only list 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 description coverage is 100%, so both parameters (scope, project) are fully documented in the schema, including the note that project overrides scope. The description largely restates the scope enum without adding syntax or precedence detail beyond what the schema already provides, 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+resource ('List presentations') and immediately defines the three scopes it can return, so an agent knows exactly what the tool yields. It doesn't explicitly contrast itself with get_presentation or the other list_* siblings, but the resource noun is distinctive enough to avoid confusion.
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 scope definitions tell the agent which filter to pick and which is default ('mine' default, 'shared' = granted access, 'open' = anyone can read/edit). There's no explicit 'use this instead of X' routing to get_presentation, but the when-to-use context is clear from the scope semantics.
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?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, non-open-world), so the bar is lower. The description adds real context: rendering is done by a server-side browser, there is a hard 6-slide cap per call, selection prefers the first ids/ranges, and layout_warnings are returned from the same render.
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 purpose, then constraints and parameter behavior. Dense but every sentence carries information; no filler or restatement of the name.
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 covers return values, yet the description still usefully notes that layout_warnings accompany the pictures. For a read-only 6-parameter tool with full schema coverage and an output schema, this is complete enough to call 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 3 is the baseline, but the description goes further by explaining the precedence between slide_ids and from_number..to_number, the slide-1 default, and the meaning of width in px. This interaction logic is not captured in the per-parameter 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?
States a specific verb+resource (render PNG pictures of slides exactly as viewers see them) and the reason it exists (check text fits blocks, blocks don't overlap). An agent can distinguish this from siblings like check_layout or get_slide without opening any 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?
Clearly frames the use case (visually verifying layout correctness) and gives an operational constraint (max 6 slides per call). It does not, however, explicitly name the alternative check_layout tool or state when to prefer a programmatic check over a visual preview.
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 declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuine behavioral value by describing the nature of the returned content (person-like slide-by-slide reading, image descriptions, link destinations, and the 'card' aggregation concept), which goes beyond the annotation set.
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 appropriately sized for a rich read tool. The parenthetical defining a 'card' is slightly tangential but earns its place by explaining a json output entry type.
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 enumerate return values, yet it still conveys the shape of the content and the format trade-off. Combined with complete annotations and full schema coverage, an agent has enough to invoke it correctly; only sibling disambiguation 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% and every parameter (lang, slug, format, slide_ids, from_number, to_number) is documented in the schema itself. The description only restates the markdown-vs-json format distinction and the card concept, adding no syntax or behavioral detail beyond the structured fields, 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 states a specific verb (read) and resource (presentation) and details exactly what 'reading' yields: slide-by-slide text in reading order, picture descriptions, code, and link targets. It is clear and concrete, but never names the obvious competing siblings (get_presentation, preview_slides, get_slide, export_presentation), so an agent cannot tell from the description alone why it should prefer this tool.
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 an access precondition ('any presentation you can see (not private, or shared with you)'), which is useful scoping, but there is no explicit when-to-use-vs-alternative guidance despite several overlapping read tools in the sibling list. Usage 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.
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?
Despite annotations covering the safety profile, the description adds substantial non-obvious behavior: formatting is preserved, phrases split by formatting are not matched, {{slide:N}} references are immune to replacement, and dry_run changes nothing. The extraction-by-formatting caveat and reference-number caveat are exactly the kind of hidden traits that prevent misuse.
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 in the first clause, then productive caveats follow. It is dense with quoted parameter names and parentheticals, which costs a little readability, but every sentence carries 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?
For a 13-parameter mutation tool with 100% schema coverage, full annotations, and an output schema, the description fills the remaining gaps: return summary ('how many were replaced on which slides') and the tricky matching invariants. Nothing an agent needs to invoke 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%, so the baseline is 3, but the description adds semantics the schema lacks, notably that regex mode allows \1 backreferences in the replacement and that langs defaults to all languages. This elevates it slightly above the schema-only baseline.
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 precise verb (find and replace) plus the exact scope: text/shape/button blocks, slide names, and code blocks within a whole presentation in one step. This clearly separates it from the per-block/per-slide editors like edit_blocks and 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?
It conveys context clearly (whole-presentation bulk replace, dry_run to only count, regex mode) and even states when matching will fail (formatting-split phrases, {{slide:N}} references). It stops short of explicitly naming alternative tools for narrower edits, so not a full 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 | |
| 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 only declare the generic read/write profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false); the description adds the substantially more useful behavioral facts: the author approves or declines out-of-band, the granted access attaches to the account rather than the session, and a repeat call updates the pending request rather than erroring. That last point is consistent with idempotentHint=false.
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 purpose, then mechanics, then the account-scoping and re-ask behavior. Nothing is padding, though the role recap in sentence one mildly duplicates the schema's enum descriptions.
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 need not be described, and the description covers the async approval loop and the account-wide effect of a granted request. It omits edge cases such as already holding the requested role or requesting access to a slug that does not exist, which keeps it from a 5.
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, role and message, including the enum glosses. The description restates the role semantics ("view" to read, "edit" to change) in prose but adds no format, constraint, or syntax beyond what the schema carries; 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 and resource (ask the author of a presentation for access) plus the two access levels it can request. It is clearly distinguishable from the sibling request_project_access, which targets a different resource, so an agent can select it without opening any 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?
Explains the condition that selects each role value ("view" to read a private one, "edit" to change one that is not open), which is genuine when-to-use guidance. It does not name alternatives such as get_access or request_project_access, nor say what to do if access already exists, so it stops 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_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 | |
| 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 cover the safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false), and the description adds genuinely non-obvious behavior: the grant is request-based (an author must approve) and, once approved, persists to presentations added later. It does not say how the request is surfaced to the author or what happens while it is pending, which keeps it below 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 the action and target, then the role semantics, then the scope-of-approval consequence. No filler, no restatement of the title, and every clause carries information an agent 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?
With an output schema present, return values need not be described, and the description covers the action, both parameter effects, and the durable scope of the grant. It stops short of stating that access is not immediate (pending author approval) or how the requester learns of the outcome, which a request-style tool with idempotentHint=false would ideally clarify.
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 meaning beyond the enum labels: "view" grants read of private presentations rather than mere metadata visibility, and the role applies project-wide rather than to a single item. It says nothing about the optional message parameter, but the schema already documents it.
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 (ask the project's author for access) and defines the scope of what is being requested, including that it covers every presentation of the project. It implicitly contrasts with the sibling request_access (per-presentation) via "access to all of it" and "counts for every presentation", but never names that sibling, so the differentiation is inference 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?
The description explains what the two roles mean and what approval grants (including future presentations), which implies when each role is appropriate. However, it gives no explicit when-to-use guidance relative to request_access, get_access, or set_access, and no preconditions such as needing to know the project slug or that a human must approve.
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 readOnly=false, destructive=false and idempotent=false, so the safety profile is covered. The description adds real behavioral context beyond that: 'open' makes the history keep every change, 'public' separates read from edit rights, and 'revoke' strips usernames of access. It still omits prerequisites (e.g. owner-only) and 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?
One front-loaded sentence that leads with the verb and resource before drilling into the level semantics. The quote-and-dash formatting is slightly dense but every clause carries information; 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, return values need not be described, and annotations cover the safety profile. The description covers purpose and all three parameters, though it leaves prerequisites and the interaction between setting a level and pre-existing grants unaddressed.
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: the schema only labels the enum values, while the description spells out who can read/edit under each level and the history side effect. This is useful semantic elaboration beyond the structured fields.
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', so the agent knows this is the mutator for presentation access. It does not explicitly contrast itself with siblings like get_access or request_access, but the verb+resource is 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?
The description never says when to use this tool versus alternatives such as get_access (read), request_access (ask for access) or answer_access_request. The level explanations describe parameter values, not tool-selection guidance, so an agent gets no routing help from the text.
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 disclose readOnly=false, destructive=false and idempotent=false, and the description goes well beyond them. It explains exactly what happens to existing texts: translations are swapped, already-correct texts stay, and untranslated ones are listed. It also notes that counts and remaining translations are returned, giving strong behavioral context 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?
The description is front-loaded with the trigger condition and then explains the effects in a logical sequence. It is somewhat verbose and contains a parenthetical example that lengthens it, but every sentence contributes useful semantics for a complex mutation. It avoids repetition and unnecessary 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?
An output schema exists, so the description need not detail return values, though it briefly mentions counts and untranslated items. Given the mutation's complexity, it covers what is changed and when to use it. The main remaining gap is that it does not reference the related translate_presentation sibling or other alternatives.
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 both parameters have descriptions in the schema. The description adds little parameter-level detail beyond what the schema already provides, so the baseline for high coverage is appropriate. It does not, for example, clarify slug format or the lang enum 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 states a specific verb and resource: declaring/repairing the language of a presentation's texts, slide names and title. It clearly distinguishes the operation from a simple metadata update by explaining the translation-swapping behavior. It does not explicitly name sibling tools such as translate_presentation, so sibling differentiation is helpful but not 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 gives a clear condition for use: 'when the site guessed it wrong.' That is a concrete trigger and implies the tool is for correcting an incorrect language guess rather than general translation. It does not name an alternative or state when not to use it, so it falls just short of full routing guidance.
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?
Adds substantial behavior beyond the annotations: human/agent-authored translations are preserved while stale machine translations are regenerated, and the tool returns a count and answers 503 when no translator exists. This discloses what is mutated, what is protected, and error behavior, all consistent with the write/non-idempotent 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?
Front-loads the core purpose and then adds preservation, timing, and error facts, each earning its place. It is somewhat dense and run-on but contains 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, return values need not be explained, and the description already notes it 'says how many.' Combined with mutation scope, preservation rules, automatic-vs-manual timing, and the 503 condition, nothing an agent needs 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?
Only one parameter with 100% schema coverage; the schema already documents the slug fully (its address /movie/<slug>/). The description adds no syntax or format detail beyond that, 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?
States a specific verb ('fill in, by machine translation') and precisely scopes the resource: title, slide names, and text/shape/button block texts of a presentation. No sibling tool performs translation, and the description makes clear it targets untranslated texts only, so an agent can distinguish it immediately.
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 clear context for when to invoke: the site already does this automatically a few seconds after every change, so calling this tool means 'do it now.' That implicitly guides the agent toward manual use, though it never states an explicit when-not condition or names an alternative tool.
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?
Goes well beyond the annotations (readOnlyHint=false, idempotentHint=false, destructiveHint=false) by disclosing non-obvious semantics: the theme only affects new slides/blocks and not existing ones, the slug never changes, omitted languages keep their scripts, and an empty string removes a script. It also surfaces the permission model (author-only for database scripts, edit rights otherwise).
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 tight sentences, front-loaded with the full set of changeable fields, followed only by two genuinely informative clarifications about theme scope and slug immutability. No filler or repetition.
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 8-parameter mutation tool with nested objects, an output schema, and 100% schema coverage, the description covers the important behaviors and constraints. It omits mention of title_tr and names_from_titles, but those are fully documented in the schema, so the gap 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 description coverage is 100% and the schema already explains each field in depth (theme defaults, per-language database scripts, empty-string removal, cover_slide null meaning). The description's theme and slug notes largely restate what the schema says, so it adds little parameter-level meaning beyond the baseline.
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 (change) plus the exact resources it mutates: title, description, theme, cover, and database setup scripts of a presentation. This clearly separates it from update_slide, edit_slides, edit_blocks, and update_project without the agent needing to open 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 a real precondition — the presentation must be one 'you may edit', and the database scripts are changeable by 'its author only' — which tells the agent when the call will succeed. It does not, however, name alternatives or say when not to use this tool (e.g. versus name_slides_after_titles, which overlaps the names_from_titles parameter).
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 | |
| 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 is genuinely informative: it discloses that omitted blocks are deleted and that id-bearing blocks are merged, which is exactly the kind of risk context that matters. However, it explicitly declares deletion of existing blocks while the annotations set destructiveHint=false, which per the MCP spec means 'only additive updates'. That is a direct inconsistency between the documented behavior and the structured safety hint, so the highest transparency marks cannot be given.
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 verb and the affected surface, then the one non-obvious rule (objects replacement) emphasized in caps. The em-dash aside is dense but every clause removes a genuine ambiguity; nothing is padding.
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 14-parameter mutation tool with nested objects and an output schema, the description covers the riskiest gaps (block replacement semantics, response verbosity) while correctly leaving scalar parameters to the exhaustive schema. It does not note the absence of an undo path or permission requirements, which keeps it short of a 5.
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, and the description earns above that by adding semantics the schema does not carry: the id-based merge, add, and delete rules for objects and the brief/full response switch. It adds real meaning on the one parameter (objects) whose behavior is most easily misused.
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 then enumerates the exact attributes under its control: name, size, background colour/picture, entrance transition, and the full block list. It is clear and scoped, but it never names a sibling (e.g. edit_blocks, edit_slides, update_presentation), so the agent gets no explicit routing help for the overlapping update tools.
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 explains one important usage condition -- that the objects parameter triggers whole-list replacement -- and hints at the response mode, but it never states when to prefer this tool over edit_blocks/edit_slides or what prerequisites exist. Usage 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.
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.
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
- PlixlabOAuthcom.plixlab
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.
List, share, upload, and manage Slideless HTML presentations from any MCP host.
Create narrated presentations from HTML, poll build status, list them, read one back as text.
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.3 npmMIT
- AlicenseNot gradedqualityAmaintenanceTurns 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.417 npmMIT
- AlicenseNot gradedqualityDmaintenancePublish and manage shareable HTML/Markdown pages with access control and comments via MCP clients.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.