Skip to main content
Glama

Create narrated presentation

create_presentation
Destructive

Generate a narrated presentation from an html-presentation/v1 document. BEFORE authoring, call get_presentation_spec and follow it exactly — slides without its narration markup publish SILENT. Returns a presentationId and the watch URL. Narration runs in the background and the inline player tracks it on its own, so reply to the user as soon as this returns and do not call get_presentation_status unless the user asks whether it is done.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
slugNoURL slug; defaults to a slugified title.
audioNoOptional. One entry per slide YOU narrated, from the JSON `bisque-voice` prints — word timings, duration, size and digest. Send it and your audio is used (free, unlimited, any OS); leave it out and the server narrates. The response says how many slides speak, and names any that published silent.
titleNoDisplay title for the watch page and listings. Omit to use the title parsed from the document.
assetsNoFiles the document references relative to itself — fonts, images, Lottie/Rive animations, sound-effect audio, video clips. The SERVER fetches each https url at create time and stores it in the bundle, so reference `assets/...` paths in your HTML and list the sources here instead of inlining base64. 10MB per asset, 30MB total.
dryRunNoSandbox: run every check a real create runs (format, slug and org conflicts, tier cap, credit preflight) and write nothing. The reply has status "validated" and the webUrl a real create would publish at. Use it to test an integration without touching the channel.
handleNoPublish under a specific channel handle you own.
voiceIdNoNarration voice. ElevenLabs: a bare id or cloud:<id>. Self-hosted Kokoro: kokoro:<id> (e.g. kokoro:af_heart); local:<id> is accepted as a synonym. Omit to use the voice saved on the account (bisque.cloud/account), falling back to the server default.
designMdNoDesign frontmatter mapped to theme tokens.
madeWithNoCredit the models that made this: the model you are running as, and the narration engine or voice service if you know it — e.g. ["Claude Opus 5", "Kokoro af_heart"]. Shown to viewers in the watch page's ⋯ menu. Send it on every create; omitting it keeps whatever a previous publish recorded.
contextMdNoShared-with-viewer context.md.
indexHtmlYesFull html-presentation/v1 document (the presentation-format meta gate applies).
visibilityNounlisted (the default) is shareable by link and plays in chat-embedded players; private requires the owner to sign in, so an inline chat player shows a sign-in wall instead of playing — choose private only when the user asked for it.unlisted
speechSpeedNoNarration speed multiplier passed to the voice. Omit for the server default.
presentationIdNoStable id for idempotent re-creates; defaults to slug-<hash(userId:slug)>.
voiceStabilityNoVoice stability setting passed to the narration engine. Omit for the server default.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
statusYesready = nothing needed narration; queued = narration runs in the background — poll get_presentation_status.
webUrlYesShareable watch URL (live once status is ready).
narrationYes
statusUrlYes
presentationIdYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / audio
      Added value: +{
      +  "description": "Optional. One entry per slide YOU narrated, from the JSON `bisque-voice` prints — word timings, duration, size and digest. Send it and your audio is used (free, unlimited, any OS); leave it out and the server narrates. The response says how many slides speak, and names any that published silent.",
      +  "items": {
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  2. Changed1 schema field changed
    • addedInput schema / properties / madeWith
      Added value: +{
      +  "description": "Credit the models that made this: the model you are running as, and the narration engine or voice service if you know it — e.g. [\"Claude Opus 5\", \"Kokoro af_heart\"]. Shown to viewers in the watch page's ⋯ menu. Send it on every create; omitting it keeps whatever a previous publish recorded.",
      +  "items": {
      +    "maxLength": 80,
      +    "type": "string"
      +  },
      +  "maxItems": 8,
      +  "type": "array"
      +}
  3. Changed3 schema fields changed
    • addedInput schema / properties / speechSpeed / description
      Added value: +"Narration speed multiplier passed to the voice. Omit for the server default."
    • addedInput schema / properties / title / description
      Added value: +"Display title for the watch page and listings. Omit to use the title parsed from the document."
    • addedInput schema / properties / voiceStability / description
      Added value: +"Voice stability setting passed to the narration engine. Omit for the server default."
  4. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is known. The description adds genuinely useful behavior beyond that: narration runs in the background and tracks itself, the silent-publish failure mode when the spec is ignored, and the expected response timing ('reply to the user as soon as this returns'). No contradiction with annotations. Slightly more could be said about the idempotency nuance hinted at by presentationId, but the disclosure is strong.

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

Conciseness4/5

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

Three sentences, each earning its place: purpose in the first, the critical precondition in the second, async behavior and response guidance in the third. Dense but well-ordered and front-loaded. Loses a point only because the packed second/third sentences could be marginally clearer with line breaks.

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

Completeness4/5

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

For a 15-parameter tool with a rich schema and an output schema present, the description addresses the real confusion points: the spec prerequisite, the status-polling temptation (get_presentation_status sibling), and the silent-publish failure mode. It doesn't enumerate return fields, but the output schema covers that, so nothing essential for correct invocation is missing.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description references the input document format (html-presentation/v1) and implies the spec precondition, but doesn't add parameter-level meaning beyond what the schema already documents in detail. This is acceptable given the schema carries the heavy lifting.

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

Purpose5/5

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

The description states a specific verb and resource — 'Generate a narrated presentation from an html-presentation/v1 document' — with the input format named explicitly. It distinguishes from siblings like publish_narrated_presentation (publishing vs creating) and get_presentation_status (checking vs creating), so an agent can pick it without opening schemas.

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

Usage Guidelines5/5

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

Provides explicit sequencing: 'BEFORE authoring, call get_presentation_spec and follow it exactly' — a hard precondition with a concrete failure consequence ('publish SILENT'). It also names the alternative it should NOT call ('do not call get_presentation_status unless the user asks whether it is done'), giving both when-to and when-not-to guidance.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources