Bisque Presentations
REMOTE · BISQUE.CLOUD · SCANNED SEP 27
Create narrated presentations from HTML, poll build status, list them, read one back as text.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security89
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token. View diagnostics → Pass
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
- The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents. View diagnostics → Partial
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability78
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 4579 tokens (~218/item across 21 items; 19 tools + 2 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management90
- Stability observed for 27 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage99
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 97% of tool parameters carry a description.Partial
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 21 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
- Supports UI / widget rendering.Pass
How do I install the Bisque Presentations MCP server?
Bisque Presentations is a hosted endpoint at https://bisque.cloud/presentations/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · bisque.cloud
claude mcp add --transport http cloud-bisque-presentations 'https://bisque.cloud/presentations/mcp'
{
"mcpServers": {
"cloud-bisque-presentations": {
"url": "https://bisque.cloud/presentations/mcp"
}
}
} {
"servers": {
"cloud-bisque-presentations": {
"type": "http",
"url": "https://bisque.cloud/presentations/mcp"
}
}
} [mcp_servers.cloud-bisque-presentations] url = "https://bisque.cloud/presentations/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"cloud-bisque-presentations": {
"type": "remote",
"url": "https://bisque.cloud/presentations/mcp",
"enabled": true
}
}
} openclaw mcp add cloud-bisque-presentations --url 'https://bisque.cloud/presentations/mcp' --transport streamable-http
mcp_servers:
cloud-bisque-presentations:
url: "https://bisque.cloud/presentations/mcp" {
"McpServers": {
"cloud-bisque-presentations": {
"Transport": "http",
"Url": "https://bisque.cloud/presentations/mcp"
}
}
} assistant mcp add cloud-bisque-presentations -t streamable-http -u 'https://bisque.cloud/presentations/mcp'
{
"mcpServers": {
"cloud-bisque-presentations": {
"type": "http",
"url": "https://bisque.cloud/presentations/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 26 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.
- 25 Sept 26 −1
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 24 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 77 to 80. That category is still filling its 30-day observation window: 23 days of observed history at the previous scan, 24 at this one. The score rises as the window fills, whether or not the server changes.
- 23 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 73 to 77. That category is still filling its 30-day observation window: 22 days of observed history at the previous scan, 23 at this one. The score rises as the window fills, whether or not the server changes. Other categories moved too: Endpoint Security rose 2.
- 22 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 70 to 73. That category is still filling its 30-day observation window: 21 days of observed history at the previous scan, 22 at this one. The score rises as the window fills, whether or not the server changes.
- 20 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 63 to 67. That category is still filling its 30-day observation window: 19 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.
- 17 Sept 26 +1
- Tool “create_artifact” rewrote its description, which is the text the model reads security
- Tool “update_artifact” rewrote its description, which is the text the model reads security
- “create_artifact” added an optional parameter “capabilities” cosmetic
- “create_artifact” added an optional parameter “state” cosmetic
- “update_artifact” added an optional parameter “capabilities” cosmetic
- “update_artifact” added an optional parameter “state” cosmetic
- 16 Sept 26 −1
No change was recorded against any check on this day. Endpoint Security went from 91 to 89. Other categories moved too: Stability & Change Management rose 3.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 27 Sept 2026 · Probed https://bisque.cloud/presentations/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=bisque.cloud | CN=WR3,O=Google Trust Services,C=US | 30 Aug 2026 | 28 Nov 2026 | RSA 2048 | SHA256-RSA | 58f927c3bc4d17a30a64e579ec2539d7 |
| SANs: bisque.cloud, *.bisque.cloud | ||||||
| CN=WR3,O=Google Trust Services,C=US (CA) | CN=GTS Root R1,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | RSA 2048 | SHA256-RSA | 7ff005a91568d63abc22861684aa4b5a |
| CN=GTS Root R1,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 19 Jun 2020 | 28 Jan 2028 | RSA 4096 | SHA256-RSA | 77bd0d6cdb36f91aea210fc4f058d30d |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of bisque.cloud. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| cloud. | present | 7041 | 13 | Verified |
| bisque.cloud. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication Enforced and verified
The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.
| Result | Enforced and verified |
|---|---|
| Enforced | On tool calls |
| HTTP status | 200 |
WWW-Authenticate challenge Bearer resource_metadata="https://bisque.cloud/.well-known/oauth-protected-resource/presentations/mcp", error="invalid_token"
Bearer resource_metadata="https://bisque.cloud/.well-known/oauth-protected-resource/presentations/mcp", error="invalid_token" Protected resource metadata
| Document | https://bisque.cloud/.well-known/oauth-protected-resource/presentations/mcp |
|---|---|
| Retrieved | Yes |
| Resource | https://bisque.cloud/presentations/mcp |
| Authorisation server | https://bisque.cloud |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://bisque.cloud/presentations/mcp | Verified | 200 | |
| http (plaintext) | http://bisque.cloud/presentations/mcp | HTTPS enforced | 301 | https://bisque.cloud:443/presentations/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
create_artifact Create an Artifact ~651
Publish an HTML page or a Markdown document as a Bisque Artifact: a persistent, versioned page at a stable URL that people can open, comment on, and that you can update later with update_artifact. Pass the whole document as content. The call waits for the page to be ready and returns its URL. It is private to you unless you pass audience or share_with. A page that should remember what people do on it (a checklist, a poll, a sign-up sheet) declares capabilities ['state.read','state.write'] and, when some paths need different access, state.rules; it then reads and writes JSON documents through window.bisque.state. For a narrated presentation use create_presentation instead.
| Name | Type | Req | Description |
|---|---|---|---|
| audience | string | – | Who can open the link. owner: only you. users: the people in share_with. public: anyone with the link. |
| capabilities | array | – | What the page may do at run time. state.read and state.write give it JSON documents at window.bisque.state (get, patch, list, subscribe); viewer.identity tells it who is viewing (window.bisque.viewer… |
| content | string | yes | The full document. For html: a complete page (styles and scripts inline; it runs in a sandboxed frame with no network). For markdown: the Markdown source. |
| description | string | – | One sentence saying what the page is; shown in listings. |
| icon | string | – | An emoji that stands for the page, e.g. 📊. The tab and Home Screen show icon_image, not this. |
| icon_image | string | – | The page's own icon: the favicon in the browser tab and the icon a phone puts on its Home Screen. A data URL: an SVG (data:image/svg+xml,<svg …>) or a base64 PNG, JPEG, WebP, or GIF, at most 512 KB,… |
| listed | boolean | – | Show it in listings (the org library, public discovery) rather than link-only. Default false. |
| share_with | array | – | People to grant access by email (or uid), with a role. [{ "email": "ana@acme.com", "role": "viewer" }]. viewer opens it; editor can also publish new content. Implies audience "users" when audience is… |
| state | object | – | Who may read and write which paths of the page's data, by the minimum role: viewer (can open), contributor (a data grant, separate from editing the page), owner. Absent means: everyone who can open r… |
| title | string | yes | A short name, the way a document or app is named. |
| type | string | – | Default html. |
| Name | Type | Req | Description |
|---|---|---|---|
| artifact_id | string | yes | – |
| audience_mode | string | yes | Who can open it: owner, users, org, or public. |
| created_at | string | – | – |
| description | string | – | – |
| discoverability | string | yes | – |
| group_id | string | – | – |
| icon | string | – | – |
| icon_image_url | string|null | – | The page icon set with icon_image; null for the Bisque icon. |
| latest_version_id | string | – | – |
| organization_id | string | – | – |
| publication_error | object|null | – | – |
| publication_status | string | yes | ready means the URL serves this content now. queued or processing means it is still being prepared; call get_artifact to check. failed carries publication_error. |
| published_version_id | string|null | yes | The Version viewers see; null until a publication is ready. |
| title | string | yes | – |
| type | string | yes | – |
| updated_at | string | – | – |
| url | string | yes | The viewer page. |
| version_id | string | yes | The Version this call authored. |
| version_number | integer | – | – |
| viewer_version_mode | string | – | – |
No examples provided.
create_artifact_thread Start a comment thread on an Artifact ~203
Leave a new comment thread on one of your Artifacts, as the agent. Without an anchor the thread is a general comment on the page. The thread is activated from the start, so you can reply to it and resolve it later. Mention a person with @[Name](mention:uid) using ids from the Artifact's mentionables.
| Name | Type | Req | Description |
|---|---|---|---|
| anchor | object | – | Optional pin. { kind: "page", slideId, slideIndex, timeSec } for a slide or time; { kind: "element", selector, xFrac, yFrac, snapshot: { tag, text }, slideId, slideIndex, cueTarget, timeSec } for an… |
| artifact_id | string | yes | The Artifact id (art_…). |
| body | string | yes | Markdown subset: bold, italic, code, links, lists. |
| Name | Type | Req | Description |
|---|---|---|---|
| agent_activated | boolean | yes | True once someone mentioned the agent; only then may the agent reply or resolve. |
| anchor | object | yes | Where the thread is pinned: kind element (selector, snapshot, slide), text (quote), or page. |
| artifact_id | string | yes | – |
| created_at | string | yes | – |
| created_by | object | yes | Who wrote it: { kind: "user", uid, name, handle, avatarUrl } or { kind: "agent", principal, name, via }. |
| last_message_at | string | yes | – |
| mentions | array | – | – |
| message_count | integer | yes | – |
| messages | array | yes | – |
| participants | array | – | – |
| preview | string | yes | – |
| resolved_at | string|null | – | – |
| root_message_id | string | – | – |
| status | string | yes | – |
| thread_id | string | yes | – |
| updated_at | string | – | – |
| version_id | string | – | – |
| version_number | integer | yes | – |
No examples provided.
create_presentation Create narrated presentation ~714
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.
| Name | Type | Req | Description |
|---|---|---|---|
| assets | array | – | Files 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… |
| audio | array | – | 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 t… |
| contextMd | string | – | Shared-with-viewer context.md. |
| designMd | string | – | Design frontmatter mapped to theme tokens. |
| dryRun | boolean | – | Sandbox: 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… |
| handle | string | – | Publish under a specific channel handle you own. |
| indexHtml | string | yes | Full html-presentation/v1 document (the presentation-format meta gate applies). |
| madeWith | array | – | 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 pag… |
| presentationId | string | – | Stable id for idempotent re-creates; defaults to slug-<hash(userId:slug)>. |
| slug | string | – | URL slug; defaults to a slugified title. |
| speechSpeed | number | – | Narration speed multiplier passed to the voice. Omit for the server default. |
| title | string | – | Display title for the watch page and listings. Omit to use the title parsed from the document. |
| visibility | string | – | unlisted (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 privat… |
| voiceId | string | – | Narration 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.c… |
| voiceStability | number | – | Voice stability setting passed to the narration engine. Omit for the server default. |
| Name | Type | Req | Description |
|---|---|---|---|
| narration | object | yes | – |
| presentationId | string | yes | – |
| status | string | yes | ready = nothing needed narration; queued = narration runs in the background — poll get_presentation_status. |
| statusUrl | string | yes | – |
| webUrl | string | yes | Shareable watch URL (live once status is ready). |
No examples provided.
delete_artifact Delete an Artifact ~45
Delete an Artifact you own. Its URL stops working for everyone. Confirm with the user before calling this.
| Name | Type | Req | Description |
|---|---|---|---|
| artifact_id | string | yes | The Artifact id (art_…). |
| Name | Type | Req | Description |
|---|---|---|---|
| already_deleted | boolean | – | – |
| artifact_id | string | yes | – |
| deleted | boolean | yes | – |
No examples provided.
get_artifact Get an Artifact ~57
Read one Artifact: title, who can open it, the Version viewers see (published_version_id, null while a publication is still being prepared), and its URL.
| Name | Type | Req | Description |
|---|---|---|---|
| artifact_id | string | yes | The Artifact id (art_…). |
| Name | Type | Req | Description |
|---|---|---|---|
| artifact_id | string | yes | – |
| audience_mode | string | yes | Who can open it: owner, users, org, or public. |
| created_at | string | – | – |
| description | string | – | – |
| discoverability | string | yes | – |
| group_id | string | – | – |
| icon | string | – | – |
| icon_image_url | string|null | – | The page icon set with icon_image; null for the Bisque icon. |
| latest_version_id | string | – | – |
| organization_id | string | – | – |
| published_version_id | string|null | yes | The Version viewers see; null until a publication is ready. |
| title | string | yes | – |
| type | string | yes | – |
| updated_at | string | – | – |
| url | string | yes | The viewer page. |
| viewer_version_mode | string | – | – |
No examples provided.
get_artifact_thread Get an Artifact comment thread ~81
Read one comment thread on an Artifact with every message, oldest first. Mentions in a body look like @[Name](mention:uid); a mention of the agent is @[Agent](mention:agent).
| Name | Type | Req | Description |
|---|---|---|---|
| artifact_id | string | yes | The Artifact id (art_…). |
| thread_id | string | yes | The thread id (thr_…). |
| Name | Type | Req | Description |
|---|---|---|---|
| agent_activated | boolean | yes | True once someone mentioned the agent; only then may the agent reply or resolve. |
| anchor | object | yes | Where the thread is pinned: kind element (selector, snapshot, slide), text (quote), or page. |
| artifact_id | string | yes | – |
| created_at | string | yes | – |
| created_by | object | yes | Who wrote it: { kind: "user", uid, name, handle, avatarUrl } or { kind: "agent", principal, name, via }. |
| last_message_at | string | yes | – |
| mentions | array | – | – |
| message_count | integer | yes | – |
| messages | array | yes | – |
| participants | array | – | – |
| preview | string | yes | – |
| resolved_at | string|null | – | – |
| root_message_id | string | – | – |
| status | string | yes | – |
| thread_id | string | yes | – |
| updated_at | string | – | – |
| version_id | string | – | – |
| version_number | integer | yes | – |
No examples provided.
get_presentation_analytics Get presentation analytics ~81
Watch analytics for one of your presentations: views, likes, completion rate, per-slide retention funnel, traffic sources, distinct signed-in/anonymous viewers, and organization email domains (personal providers filtered). Lets an agent read how its own published briefings performed.
| Name | Type | Req | Description |
|---|---|---|---|
| presentationId | string | yes | The presentationId whose view counts and survey responses you want. |
| Name | Type | Req | Description |
|---|---|---|---|
| anonViewers | integer | yes | – |
| completedCount | integer | yes | – |
| completionRate | number|null | yes | completedCount / viewCount, 0..1; null when no views. |
| likeCount | integer | yes | – |
| orgDomains | array | yes | Organization email domains of signed-in viewers (personal providers filtered), sorted desc. |
| presentationId | string | yes | – |
| slideReach | array | yes | Retention funnel ordered by slide index. |
| slug | string | yes | – |
| sources | object | yes | Traffic source → view count. |
| title | string | yes | – |
| uniqueViewers | integer | yes | Distinct signed-in viewers. |
| viewCount | integer | yes | – |
| webUrl | string | – | – |
No examples provided.
get_presentation_context Load a presentation into context ~183
Load any shared Bisque presentation for reading: its metadata, the full per-slide narration transcript with timestamps, and the context.md file its author shipped for agents (extra background the slides summarize). Target it by watch URL (https://bisque.today/p/{handle}/{slug}) or by handle + slug — it does not have to be yours. Use this to read, summarize, cite, or answer questions about a presentation: ground your answers in the returned transcript and context, and cite slides as [slide N].
| Name | Type | Req | Description |
|---|---|---|---|
| handle | string | – | Channel handle (leading @ allowed). |
| slug | string | – | URL slug, the last path segment of the watch URL. Use with handle, or pass url instead. |
| url | string | – | Watch URL, e.g. https://bisque.today/p/{handle}/{slug}. Provide this OR handle + slug. |
| Name | Type | Req | Description |
|---|---|---|---|
| contextMd | string|null | yes | The bundle's context.md (shared agent-facing background); null when the presentation ships none. |
| contextTruncated | boolean | yes | – |
| description | string|null | – | – |
| handle | string | yes | – |
| presentationId | string | yes | – |
| publishedAt | string|null | – | ISO 8601, null when unknown. |
| slug | string | yes | – |
| title | string | yes | – |
| transcript | array | yes | Per-slide narration, ordered by slide index. |
| transcriptTruncatedSlides | integer | yes | Content slides the size-capped transcript dropped; 0 = complete. |
| visibility | string | yes | – |
| webUrl | string | yes | – |
No examples provided.
get_presentation_spec Get the authoring spec ~60
Fetch the html-presentation/v1 authoring contract: document structure, the dual landscape/vertical layout rule, and the narration markup that makes slides speak. Call this BEFORE authoring for create_presentation — documents written without it publish with missing audio.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| format | string | yes | – |
| spec | string | yes | The full authoring recipe + format contract, markdown. |
No examples provided.
get_presentation_status Get presentation status ~45
Fetch the build state and result URL for a presentationId.
| Name | Type | Req | Description |
|---|---|---|---|
| presentationId | string | yes | The presentationId returned by create_presentation or publish_narrated_presentation. |
| Name | Type | Req | Description |
|---|---|---|---|
| narration | object | – | Narration progress: status (complete | partial | failed | …) and per-slide errors when partial/failed. |
| presentationId | string | yes | – |
| publishStatus | string | yes | – |
| ready | boolean | yes | True once the presentation is viewable. |
| visibility | string | – | – |
| webUrl | string | – | Shareable watch URL. |
No examples provided.
list_artifact_threads List Artifact comment threads ~153
List the comment threads people left on one of your Artifacts, newest activity first. Pass activated_only: true to get only the threads where someone mentioned the agent, which are the ones you may reply to and resolve. Each thread carries its anchor (what it is pinned to), the version it was left on, a preview, and agent_activated.
| Name | Type | Req | Description |
|---|---|---|---|
| activated_only | boolean | – | Only threads where the agent was mentioned. |
| after | string | – | RFC 3339 date-time; only threads with activity after it. |
| artifact_id | string | yes | The Artifact id (art_…). |
| cursor | string | – | next_cursor from a prior page. |
| status | string | – | Default open. |
| Name | Type | Req | Description |
|---|---|---|---|
| artifact_id | string | yes | – |
| items | array | yes | – |
| next_cursor | string|null | yes | – |
No examples provided.
list_artifacts List your Artifacts ~98
List Artifacts you own (scope owned, the default), ones shared with you (shared), or both (all), newest first. Each item carries its id, title, who can open it, and its URL.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from a prior page. |
| limit | integer | – | Page size, default 25. |
| scope | string | – | Default owned. |
| type | string | – | Only this type. |
| Name | Type | Req | Description |
|---|---|---|---|
| items | array | yes | – |
| next_cursor | string|null | yes | – |
No examples provided.
list_presentations List your presentations ~144
List the authenticated user's presentations, newest first. One call returns at most `limit` of them. A non-null `nextCursor` in the response means more presentations remain: call again with `cursor` set to that value to get the page after this one, and keep going until `nextCursor` is null.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | The `nextCursor` from a previous call, to read the page after that one. Omit it to start at the newest presentation. |
| limit | integer | – | Maximum number of presentations to return per page. |
| visibility | string | – | Return only presentations with this visibility. Omit to return every one of them. |
| Name | Type | Req | Description |
|---|---|---|---|
| nextCursor | string|null | yes | Pass this back as `cursor` for the next page. Null when this page is the last one. |
| presentations | array | yes | Newest first. |
No examples provided.
publish_narrated_presentation Deprecated — use create_presentation with `audio` ~821
DEPRECATED: call create_presentation with an `audio` array instead — it is the same thing in one call, and the slides are viewable while the narration lands. Publish an html-presentation/v1 document using audio YOU synthesized locally (e.g. with `bisque-voice`) — free, unlimited, and works on macOS, Linux and Windows. Send each narrated slide's word timings and MP3 metadata; the server assembles presentation.json (recomputing cues from your narration markers) and returns one upload URL per MP3. Then PUT each file and POST the returned completeUrl with the returned `files` array. RE-PUBLISHING: `audio` is optional — any narrated slide you omit reuses the audio from the last publish whenever its narration text and speechSpeed are unchanged, so an HTML-only edit needs no synthesis at all. The response reports `reused`, `synthesized`, and `staleSlides` (narrated slides whose text changed and have no audio — synthesize exactly those and publish again). Use create_presentation instead to have the server narrate.
| Name | Type | Req | Description |
|---|---|---|---|
| assets | array | – | Files the document references relative to itself — fonts, images, SVG, Lottie, Rive, bundled audio cues. html-presentation/v1 requires these to be self-hosted, so a presentation that renders locally… |
| audio | array | – | One entry per slide you synthesized, from the JSON `bisque-voice` prints on stdout. `words`, `durationMs`, `size` and `hash` map across verbatim. Optional: omit a slide (or the whole array) and its a… |
| contextMd | string | – | Shared-with-viewer context.md. |
| designMd | string | – | Design frontmatter mapped to theme tokens. |
| handle | string | – | Publish under a specific channel handle you own. |
| indexHtml | string | yes | Full html-presentation/v1 document (the presentation-format meta gate applies). |
| madeWith | array | – | Credit the models that made this: the model you are running as, and the engine that synthesized the audio you are uploading — e.g. ["Claude Opus 5", "Kokoro af_heart"]. Shown to viewers in the watch… |
| presentationId | string | – | Stable id for idempotent re-publishes; defaults to slug-<hash(userId:slug)>. |
| slug | string | – | URL slug; defaults to a slugified title. |
| speechSpeed | number | – | Must match the speed you synthesized at — it is part of the audio cache key, so changing it on a re-publish makes every slide stale instead of carrying forward. |
| title | string | – | Display title for the watch page and listings. Omit to use the title parsed from the document. |
| visibility | string | – | unlisted (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 privat… |
| voiceId | string | – | Records what actually spoke, e.g. kokoro:af_heart for a locally synthesized Kokoro voice. No audio is generated server-side. |
| voiceStability | number | – | Records the stability setting you synthesized at. No audio is generated server-side. |
| Name | Type | Req | Description |
|---|---|---|---|
| completeUrl | string | yes | POST here after every PUT, echoing `files` back verbatim. |
| files | array | yes | Echo back verbatim as the complete call's `files`. |
| presentationId | string | yes | – |
| publishId | string | yes | – |
| reused | array | yes | Slide keys whose audio carried forward — no upload. |
| staleSlides | array | yes | Narrated slide keys that will publish SILENT — synthesize exactly these and publish again. |
| synthesized | array | yes | Slide keys this request supplied audio for. |
| uploadUrls | array | yes | One pre-signed PUT per file to upload. |
| warnings | array | yes | – |
| webUrl | string | yes | Shareable watch URL. |
No examples provided.
reply_to_artifact_thread Reply in an Artifact comment thread ~95
Post a reply in a comment thread as the agent. Allowed only on activated threads (agent_activated true): someone mentioned the agent, or the agent started the thread. People see it as "Agent · via <your name>".
| Name | Type | Req | Description |
|---|---|---|---|
| artifact_id | string | yes | The Artifact id (art_…). |
| body | string | yes | – |
| thread_id | string | yes | The thread id (thr_…). |
| Name | Type | Req | Description |
|---|---|---|---|
| artifact_id | string | – | – |
| attachments | array | – | – |
| author | object | yes | Who wrote it: { kind: "user", uid, name, handle, avatarUrl } or { kind: "agent", principal, name, via }. |
| body | string | yes | – |
| created_at | string | yes | – |
| edited_at | string|null | – | – |
| mentions | array | – | – |
| message_id | string | yes | – |
| reactions | object | – | – |
| thread_id | string | yes | – |
No examples provided.
resolve_artifact_thread Resolve or reopen an Artifact comment thread ~100
Mark a comment thread resolved (resolved: true) or reopen it (resolved: false), as the agent. Allowed only on activated threads. Resolve after you have addressed the comment, usually after republishing the Artifact; reply first so the person can see what changed.
| Name | Type | Req | Description |
|---|---|---|---|
| artifact_id | string | yes | The Artifact id (art_…). |
| resolved | boolean | yes | – |
| thread_id | string | yes | The thread id (thr_…). |
| Name | Type | Req | Description |
|---|---|---|---|
| agent_activated | boolean | yes | True once someone mentioned the agent; only then may the agent reply or resolve. |
| anchor | object | yes | Where the thread is pinned: kind element (selector, snapshot, slide), text (quote), or page. |
| artifact_id | string | yes | – |
| created_at | string | yes | – |
| created_by | object | yes | Who wrote it: { kind: "user", uid, name, handle, avatarUrl } or { kind: "agent", principal, name, via }. |
| last_message_at | string | yes | – |
| mentions | array | – | – |
| message_count | integer | yes | – |
| participants | array | – | – |
| preview | string | yes | – |
| resolved_at | string|null | – | – |
| root_message_id | string | – | – |
| status | string | yes | – |
| thread_id | string | yes | – |
| updated_at | string | – | – |
| version_id | string | – | – |
| version_number | integer | yes | – |
No examples provided.
share_artifact Share an Artifact ~233
Set who can open an Artifact you own. audience picks the rule; share_with is the complete list of named people (it replaces the previous list; omit it to keep the current one). Going public deletes every comment thread, so a public change on an Artifact with threads is refused unless delete_threads is true. Returns the URL to send.
| Name | Type | Req | Description |
|---|---|---|---|
| artifact_id | string | yes | The Artifact id (art_…). |
| audience | string | yes | Who can open the link. owner: only you. users: the people in share_with. public: anyone with the link. |
| delete_threads | boolean | – | Allow going public on an Artifact that has comment threads, deleting them. |
| listed | boolean | – | Show it in listings (the org library, public discovery) rather than link-only. Default false. |
| share_with | array | – | People to grant access by email (or uid), with a role. [{ "email": "ana@acme.com", "role": "viewer" }]. viewer opens it; editor can also publish new content. Implies audience "users" when audience is… |
| Name | Type | Req | Description |
|---|---|---|---|
| artifact_id | string | yes | – |
| audience_mode | string | yes | – |
| discoverability | string | yes | – |
| external_sharing_allowed | boolean | – | – |
| grants | array | yes | – |
| public_sharing_allowed | boolean | – | – |
| url | string | yes | – |
No examples provided.
update_artifact Update an Artifact ~432
Change an Artifact you own or edit. Pass content to publish a new Version of the page at the same URL (the whole document, not a diff; earlier Versions stay in the history). Pass title, description, icon, or icon_image to change those. Any combination in one call. With content the call waits for the new Version to be live before returning. The new Version keeps the base Version's capabilities and state rules unless you pass capabilities or state.
| Name | Type | Req | Description |
|---|---|---|---|
| artifact_id | string | yes | The Artifact id (art_…). |
| capabilities | array | – | What the page may do at run time. state.read and state.write give it JSON documents at window.bisque.state (get, patch, list, subscribe); viewer.identity tells it who is viewing (window.bisque.viewer… |
| content | string | – | The complete new document, same type as before. |
| description | string|null | – | null clears it. |
| icon | string|null | – | null clears it. |
| icon_image | string|null | – | The page's own icon: the favicon in the browser tab and the icon a phone puts on its Home Screen. A data URL: an SVG (data:image/svg+xml,<svg …>) or a base64 PNG, JPEG, WebP, or GIF, at most 512 KB,… |
| state | object | – | Who may read and write which paths of the page's data, by the minimum role: viewer (can open), contributor (a data grant, separate from editing the page), owner. Absent means: everyone who can open r… |
| title | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| artifact_id | string | yes | – |
| audience_mode | string | yes | Who can open it: owner, users, org, or public. |
| created_at | string | – | – |
| description | string | – | – |
| discoverability | string | yes | – |
| group_id | string | – | – |
| icon | string | – | – |
| icon_image_url | string|null | – | The page icon set with icon_image; null for the Bisque icon. |
| latest_version_id | string | – | – |
| organization_id | string | – | – |
| publication_error | object|null | – | – |
| publication_status | string | – | ready means the URL serves this content now. queued or processing means it is still being prepared; call get_artifact to check. failed carries publication_error. |
| published_version_id | string|null | yes | The Version viewers see; null until a publication is ready. |
| title | string | yes | – |
| type | string | yes | – |
| updated_at | string | – | – |
| url | string | yes | The viewer page. |
| version_id | string | – | The Version this call authored. |
| version_number | integer | – | – |
| viewer_version_mode | string | – | – |
No examples provided.
update_channel Update channel ~147
Update one of your channels. Set the description — the line a stranger reads in a search result or a link unfurl, at most 160 characters, empty to clear it and go back to naming the newest presentations. Set the avatar from an image URL, which is fetched, center-cropped square and resized. Pass either or both. Omit handle to use your default channel.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | What the channel publishes, in the owner's words. Empty clears it. |
| handle | string | – | Which of your channel handles to update; defaults to your default username. |
| image_url | string | – | https URL of the avatar image (any common format, ≤10 MB). |
| Name | Type | Req | Description |
|---|---|---|---|
| channelUrl | string | yes | Public channel page carrying the update. |
| description | string|null | – | The stored line, or null when the write cleared it. |
| failed | array | – | Fields that did not apply, each with the reason. A field listed here left the channel unchanged; the ones in updated still took effect. |
| handle | string | yes | – |
| updated | array | yes | Field names that were written. |
No examples provided.
What is the Bisque Presentations MCP server?
Bisque Presentations is an MCP server listed in the public MCP registry as cloud.bisque/presentations. Create narrated presentations from HTML, poll build status, list them, read one back as text. This page covers its hosted endpoint (https://bisque.cloud/presentations/mcp).
Is the Bisque Presentations MCP server safe to use?
Bisque Presentations scores 90 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Bisque Presentations MCP server expose?
Bisque Presentations exposes 19 tools: get_presentation_spec, create_presentation, publish_narrated_presentation, get_presentation_status, list_presentations, and 14 more. Their descriptions and schemas cost roughly 4,343 tokens of context every time the server is loaded.
Does the Bisque Presentations MCP server require authentication?
Yes. Bisque Presentations asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.
Is the Bisque Presentations MCP server still maintained?
Bisque Presentations is still listed as active in the MCP registry. We last reached this channel on 27 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.