AIOProductOS Studio
OfficialAIOProductOS Studio lets your AI assistant act as a product videographer, recording scripted, polished walkthroughs of your web app and producing share-ready marketing videos and screenshots — all locally, with no uploads.
Core capabilities:
Start/Stop Recording: Launch a themed browser session with custom colors, fonts, viewport, and logged-in state (
studio_start). Hide cookie banners, chat widgets, or dev overlays. Finish by exporting to MP4/GIF with optional voice-over, background music, and subtitles (studio_finish), or abandon cleanly (studio_cancel).Navigation: Go to any URL behind a styled transition card — no loading flashes or half-hydrated pages on tape (
studio_goto).User Interaction: Simulate smooth cursor glides and clicks (
studio_click), human-paced keystroke typing (studio_type), and cubic-eased scrolling (studio_scroll).Visual Storytelling: Add bottom-left storyline captions (
studio_caption), spoken voice-over without on-screen text (studio_narrate), accent-ring highlights with optional labels (studio_highlight), and cinematic zoom punch-ins (studio_zoom).Holding Shots: Pause on a frame with subtle micro-drift to keep flow after captions or zooms (
studio_hold).End Cards: Display a customizable closing card with title, subtitle, and CTA URL (
studio_end_card).Screenshots: Capture high-DPI 2× PNG screenshots of the viewport, a specific element, or the full page at any point (
studio_screenshot).
What you can produce:
Demo videos and product walkthroughs
Changelog GIFs and launch clips
Explainer videos with captions and voice-over
Hero screenshots and marketing PNGs
Social-ready vertical/square crops (9:16, 1:1 for Reels/TikTok/feed)
AIOProductOS Studio · MCP
Your AI teammate becomes your product videographer. Studio is an MCP server that records scripted walkthroughs of your own web app — a visible cursor that glides to every click, camera punch-ins, highlight callouts, storyline captions, designed scene transitions — and takes marketing-grade screenshots. Tell your AI host what story to shoot; get back a share-ready MP4.
The videos PMs hate making — demo clips, explainers, changelog GIFs, launch screenshots — become one prompt.
Free · MIT · runs 100% locally (your browser, your URLs, your logged-in session — nothing is uploaded anywhere). By AIOProductOS, built from the same pipeline we use for our own launch videos.
Install
# Claude Code
claude mcp add studio -- npx -y @aioproductoscom/mcp-studio
# Cursor / Codex — .mcp.json
{ "mcpServers": { "studio": { "command": "npx", "args": ["-y", "@aioproductoscom/mcp-studio"] } } }Requirements: Node 18+, Playwright Chromium (npx playwright install chromium,
one-time), and ffmpeg on PATH for MP4/GIF export (brew install ffmpeg — without
it you still get the raw WebM).
Related MCP server: autodemo
Use
Then just direct the film:
"Record a 30-second walkthrough of https://app.example.com — theme it to our brand (#0d1117 bg, #f97316 accent), open on the dashboard with the title 'Meet Example', caption the three key features, zoom in on the analytics chart, and end with 'Start free · example.com'. Also grab a hero screenshot."
Your host runs the shoot tool by tool; files land in ./studio-output/.
The tools
Tool | What it does |
| open a themed recording browser (viewport, brand colors, logged-in state) |
| navigate behind a designed title card — no loading flashes on tape |
| cursor glides to the target; typing is human-paced |
| cubic-eased scroll, never a jump cut |
| bottom-left storyline caption (the "voiceover" in text) |
| spoken voice-over with NO on-screen caption; holds the shot under the line |
| accent ring + label callout around any element or visible text |
| smooth camera punch-in on a metric, button, or result |
| hold the shot (micro-drift keeps frames flowing) |
| closing glass card: title, subtitle, CTA URL |
| high-DPI PNG of the frame, an element, or the full page |
| stop, auto-remove dark frames, export MP4 (+ optional GIF) |
| abandon the take |
Recording logged-in areas
Studio never sees your credentials. Save a Playwright storageState
once (npx playwright codegen --save-storage=auth.json https://app.example.com),
then pass storage_state_path: "auth.json" to studio_start.
Keeping junk off the tape
Cookie banner? Pass your consent cookie via
cookiesso it never mounts.Chat bubble / dev overlay? List selectors in
hide_selectors— hidden from frame 1.Wrong flash color on page loads? Set
theme.bgto your app's real background.
Why it looks good (the hard-won part)
No white flash on page commits (the theme background paints before any page CSS), no black frames (navigations hide behind designed title cards, and residual dark frames are detected and cut deterministically with ffmpeg), no stutter (every camera move is compositor-friendly easing), and action that reads on camera (a visible cursor glides to every target before it acts).
Links
Website: aioproductos.com
The product behind it: AIOProductOS — the product OS that joins feedback, revenue, work, and code on one customer record. Studio is free; it's how our own launch videos get made.
Our other MCPs:
@aioproductoscom/mcp(the workspace connector) ·@aioproductoscom/mcp-agent(assignable coding teammate)Support: office@aioproductos.com — a human founder answers every email.
MIT © AIOProductOS Inc.
Available Tools
14 toolsstudio_cancelA
Abandon the current recording session: closes the browser and discards the tape. Nothing is written except screenshots already saved. Safe to call when no session is active (no-op).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description fully covers behavior: idempotent (no-op), destructive (discards tape), but only screenshots preserved. Excellent 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?
Three front-loaded sentences, no wasted words. Every sentence adds value.
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?
Fully sufficient for a parameterless tool with no output schema. Covers purpose, effect, safety, and idempotency.
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 has 0 parameters with 100% coverage. Baseline 3 applies; no additional parameter info needed.
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?
Clearly states 'Abandon the current recording session' with specific verb and resource, and explains consequences (closes browser, discards tape). Distinguishes from sibling tools like studio_start or studio_finish.
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: safe to call when no session active (no-op). Does not explicitly contrast with siblings like studio_finish, but usage is well implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
studio_captionA
Show (or replace) the bottom-left storyline caption — an eyebrow kicker plus one sentence that narrates the current beat. Keep it under ~12 words and leave it up 2–4s (studio_hold) so it reads. Pass clear=true to fade it out before a scene change. The caption_text is ALSO recorded as the voice-over script: if you call studio_finish with voiceover:true it's spoken aloud (locally) timed to this moment — write captions as speakable sentences. Set no_voice:true for a caption you want on screen but NOT narrated.
| Name | Required | Description | Default |
|---|---|---|---|
| clear | No | Fade the caption out instead of showing one. | |
| eyebrow | No | Small uppercase kicker, e.g. 'STEP 1' or the feature name. | |
| no_voice | No | Show the caption but exclude it from the voice-over track (optional). | |
| caption_text | No | One narrating sentence (keep it short — it's on screen and, with voiceover:true, spoken). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It discloses that caption_text is also recorded as voice-over script, that clear fades out the caption, and that no_voice excludes from narration. It does not fully clarify whether multiple calls stack or replace, but the phrase 'show (or replace)' implies replacement. Minor gaps exist but overall transparent.
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 main purpose and is reasonably concise. Every sentence adds value, but it could be slightly streamlined without losing information. Slight verbosity around the voice-over explanation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (4 parameters, no output schema, no annotations), the description covers the tool's behavior, constraints, and relationships to studio_hold and studio_finish. It does not discuss return values or errors, but for a UI caption tool this is acceptable. Overall 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 coverage is 100%, yet the description adds significant meaning: explains that caption_text doubles as voice-over script, describes eyebrow as 'small uppercase kicker', and clarifies that clear fades out and no_voice excludes from narration. This goes far beyond the schema descriptions.
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 clearly states the tool's function: 'show (or replace) the bottom-left storyline caption'. It specifies the resource (storyline caption) and action (show/replace), and distinguishes from sibling tools by mentioning the voice-over relationship and alternative usage via no_voice.
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?
Explicitly describes when to use the tool (narrate the current beat), constraints (under ~12 words, leave up 2-4s using studio_hold), and specific cases like clearing captions with clear=true or suppressing narration with no_voice=true. It also ties to studio_finish for voice-over, giving clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
studio_clickA
Glide the visible cursor to a target and click it, slow enough to read as a deliberate action on camera. Use for every button / link / menu interaction in the walkthrough. Precondition: the target must be on screen — studio_goto or studio_scroll to it first if it isn't. Prefer a stable CSS selector; fall back to visible text. After clicking it waits for the page to settle and re-applies the theme overlays, so the next beat is on a hydrated page. Returns 'clicked ', or errors 'target not visible' — then take a studio_screenshot and pick a better target.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | CSS selector (preferred, e.g. '[data-testid=save]' or 'nav a.pricing') or the exact visible text of the element. Must resolve to one visible element. | |
| settle_ms | No | Pause after the cursor arrives, before the click fires, in milliseconds. Optional; default 360. Raise (e.g. 600) for a more deliberate beat. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so description carries full burden. It discloses the deliberate slow glide, post-click waiting for page settle, re-application of theme overlays, and return values/error messages. No hidden destructive behavior is omitted.
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?
Four dense sentences, each earning its place. Core action is first, followed by usage guidance, preconditions, selector strategy, and post-click behavior. 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?
Despite no output schema or annotations, the description covers all critical aspects: return values, error conditions, post-click behavior, and parameter details. It also suggests adjacent tools for preconditions, completing the contextual 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?
Schema coverage is 100%, baseline 3, but description adds significant value: explains target can be CSS selector or visible text with examples, and for settle_ms gives default, allowed values, and purpose ('more deliberate beat'). This exceeds baseline expectations.
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 clearly states the tool's action: 'Glide the visible cursor to a target and click it' for walkthroughs. It distinguishes from sibling tools by specifying the deliberate slow motion and on-camera context.
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?
Explicitly says 'Use for every button/link/menu interaction in the walkthrough.' Provides preconditions (target must be on screen, use studio_goto/studio_scroll first) and fallback strategy (CSS selector preferred, visible text as fallback). Also instructs on error handling: take screenshot and pick better target.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
studio_end_cardA
Show the closing card — a centred glass card over the (still visible) product: title, optional subtitle and URL. The classic outro: what they saw + where to get it. Hold ~2.5s after this, then studio_finish.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Call-to-action URL shown beneath the title, e.g. 'aioproductos.com'. Optional; shown as text, not a live link. | |
| title | Yes | Big closing line — the product name or the one-line takeaway. Required. Example: 'AIOProductOS'. | |
| subtitle | No | One supporting line under the title, e.g. a tagline. Optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully carries the burden. It details visual behavior (centred glass card over still visible product), timing (~2.5s hold), and clarifies that the URL is shown as text, not a live link. This provides adequate transparency for the agent to understand the effect.
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 two sentences long with no wasted words. It front-loads the purpose ('Show the closing card') and immediately follows with visual and functional details. Every sentence 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?
For a simple UI tool with 3 parameters and no output schema, the description covers the visual output, behavior, and integration with studio_finish. It does not mention error scenarios or edge cases, but for typical use, it is sufficiently 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 coverage is 100%, but the description adds value beyond the schema: it clarifies that the subtitle is 'one supporting line under the title', the title is 'the big closing line', and the URL is displayed as text, not a link. These details enrich the schema descriptions.
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 clearly states the tool shows a closing card with a title, optional subtitle, and URL, placed as a centred glass card over the visible product. It distinguishes itself by specifying it is 'the classic outro' and explicitly mentions the subsequent step (studio_finish), differentiating it from siblings like studio_caption or studio_highlight.
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 provides a clear usage hint: 'Hold ~2.5s after this, then studio_finish', indicating this tool should be used before studio_finish as the closing step. It does not explicitly state when not to use or mention alternatives, but the context of a sequence makes the guidance sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
studio_finishA
Stop recording and produce the final files: closes the browser, strips residual dark frames (ffmpeg blackdetect → trim), transcodes to a share-ready MP4 (H.264, faststart), then — optionally — narrates the caption lines with a LOCAL voice (no cloud/keys), lays down a music bed, writes/burns subtitles, and exports vertical/square social crops, plus a GIF. Voice-over timing is auto-corrected for the frames the deblack step removed. Returns every produced file with size + duration. Without ffmpeg you still get the raw WebM.
| Name | Required | Description | Default |
|---|---|---|---|
| gif | No | Also export a compact GIF (optional; default false). | |
| name | Yes | Base file name for the video (without extension), e.g. 'onboarding-walkthrough'. | |
| music | No | Path to a local audio file for a background music bed, looped and ducked under the voice-over (optional). | |
| voice | No | System voice name (optional), e.g. macOS 'Samantha' or 'Daniel'; falls back to the OS default voice. | |
| aspects | No | Extra social crops to export beside the 16:9 master, e.g. ['9:16','1:1'] for Reels/TikTok/feed. Padded with the theme background. | |
| subtitles | No | 'srt' writes a sidecar .srt from the caption lines; 'burn' also renders them into the picture (muted-autoplay social); 'none' (default). | |
| voiceover | No | Narrate the caption / studio_narrate lines with a local, offline voice (macOS say · piper · espeak-ng). No account, no API key. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and excels. It discloses all important behaviors: closes the browser, strips dark frames, transcodes, local voice narration, music bed, subtitles, social crops, GIF generation, auto-correction of voice timing, and return of file info. This is very transparent.
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 appropriately sized for a complex tool with many features. It front-loads the core purpose and then expands. While lengthy, every sentence adds value. Could be slightly more concise, but highly efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (7 parameters, no output schema, no annotations), the description is remarkably complete. It covers the entire workflow, fallback case, and return value details. Nothing essential 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 baseline is 3. The tool description adds workflow context but does not add meaning beyond what the parameter descriptions already provide. No additional parameter details are given in the main description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb (Stop recording and produce) and clearly identifies the resource (final files). It lists the major actions (closes browser, strips frames, transcodes, voice-over, subtitles, crops, GIF) and distinguishes from sibling tools like studio_start and studio_caption by being the finishing 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?
The description implicitly indicates when to use (after recording, to finalize) and provides a fallback scenario ('Without ffmpeg you still get the raw WebM'). However, it does not explicitly exclude alternative tools or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
studio_gotoA
Navigate to a URL behind a designed transition card (eyebrow + big title on the theme background) — the viewer never sees a loading flash or half-hydrated page. Use for the opening shot AND every surface change; give each a short title so the cut reads as a chapter. Waits for real content (network settle + optional wait_for selector + skeleton loaders cleared) before lifting the card.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Absolute URL to navigate to, including scheme. Example: 'https://app.example.com/dashboard'. | |
| title | No | Big title on the transition card — usually the surface name. Optional but recommended so each cut reads as a chapter. | |
| eyebrow | No | Small uppercase kicker on the transition card, e.g. 'DASHBOARD'. Optional. | |
| dwell_ms | No | Minimum time the card stays up so the title reads, in milliseconds. Optional; default 1200. | |
| wait_for | No | CSS selector that must be visible before the card lifts (on top of network-settle + skeleton clearing). Optional; use it when the real content is gated behind a spinner. Example: '[data-loaded=true]'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It details that the tool waits for network settle, optional wait_for selector, and skeleton loaders before lifting the card, which is good behavioral transparency. It does not mention auth or rate limits, but these are less critical for a navigation 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 a single paragraph but well-structured, front-loading the purpose, then usage, then behavior. It is concise yet informative, though could be slightly tighter.
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 5 parameters, one required, and no output schema, the description covers the tool's behavior (transition card, waiting conditions) well. It omits return values but that's acceptable without an output schema. The context is sufficient for an agent to use the tool 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 description adds minimal value beyond the schema. For example, it adds 'usually the surface name' for title and example 'DASHBOARD' for eyebrow, but these are marginal. Baseline 3 is appropriate given high schema 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?
The description clearly states the tool navigates to a URL with a transition card to avoid loading flash. It distinguishes from sibling tools like studio_click (click action) and studio_narrate, etc., making the purpose specific and 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 advises using this for 'the opening shot AND every surface change', giving clear context for when to invoke it. However, it does not explicitly state when not to use it or compare with alternatives like studio_click for navigation, slightly limiting the guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
studio_highlightA
Draw an accent ring around a target (CSS selector or visible text), optionally with a label card beside it — the 'look here' callout. Side effects: scrolls the target into view, then overlays a ring (and card) in the theme accent; rings stack until cleared. Returns 'highlighted ' when the element is found, or errors 'target not found: ' when it isn't — retry with a studio_screenshot to pick a better target. Always call with clear=true before you navigate, zoom, or ring a different element, so stale rings don't linger on the next shot.
| Name | Required | Description | Default |
|---|---|---|---|
| clear | No | true removes ALL current rings/labels and ignores the other fields. Default false (draw a new one). | |
| label | No | Text of the label card shown beside the ring. Optional — omit for a ring with no card. Ignored when clear=true. | |
| target | No | CSS selector or exact visible text of the element to ring. Required unless clear=true. Example: '.metric-card' or 'Monthly revenue'. | |
| eyebrow | No | Small uppercase kicker on the label card, e.g. 'RESULT'. Optional; ignored when clear=true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses side effects: scrolling into view, overlaying rings, stacking until cleared. Also describes return values for success and failure, and advises retrying with studio_screenshot. No contradictions.
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 paragraph with front-loaded purpose. Every sentence is informative and necessary—no fluff. It efficiently covers behavior, usage, and return values.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and 4 parameters without nesting, the description covers all needed details: side effects, error handling, best practices, and parameter semantics. No apparent gaps.
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 already provides descriptions for all 4 parameters (100% coverage). The description adds value by explaining the interaction between clear and other parameters, giving example values like '.metric-card' or 'Monthly revenue', and clarifying that label and eyebrow are optional. This goes beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly defines the tool as drawing an accent ring around a target (CSS selector or visible text) with an optional label card. It distinguishes itself from sibling tools like studio_screenshot or studio_click by explicitly calling it a 'look here' callout.
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 explicit guidance to call clear=true before navigation, zoom, or changing target to avoid stale rings. Mentions retrying with studio_screenshot on error. However, it does not explicitly compare with sibling tools like studio_cancel for clearing rings, nor state when not to use this tool beyond the clear advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
studio_holdA
Hold the shot for a moment — glides to a target (optional) and keeps micro-drift so the recorder keeps emitting frames (a dead-static hold gets its tail frames dropped). Use after captions, highlights, and zooms: 2000–3000ms is a good beat.
| Name | Required | Description | Default |
|---|---|---|---|
| ms | No | Hold duration in milliseconds. Optional; default 2200. A good beat after a caption/highlight/zoom is 2000–3000. | |
| target | No | CSS selector or visible text to glide the cursor to and rest on. Optional — omit to hold in place. Example: '.cta-button'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the key behavior: gliding to an optional target and keeping micro-drift to avoid dead-static hold frame drops. Does not cover all edge cases but provides critical insight.
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, no wasted words. Front-loads the action and purpose, then adds usage guidance. Each sentence 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?
No output schema exists, but for a simple hold tool the description covers purpose, usage context, parameter details, and a behavioral nuance (micro-drift). Missing some edge cases but adequate for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds context: explains that 'target' is optional and gives an example, and clarifies that 'ms' has a default of 2200 with a suggested range. Adds value beyond 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 clearly states the tool's action ('Hold the shot') and resource, distinguishing it from siblings like studio_click or studio_scroll by focusing on pausing with micro-drift to keep tail frames.
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?
Explicitly recommends usage after captions, highlights, and zooms, and suggests a typical duration (2000–3000ms). Does not explicitly mention when not to use or alternatives, but context from sibling tools implies them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
studio_narrateA
Record a line of voice-over WITHOUT putting a caption on screen — narration spoken over the action. The line is synthesized locally at studio_finish (needs voiceover:true). Holds the shot afterward so there's footage under the line; set hold_ms to roughly the length of the sentence when spoken (~400ms/word).
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | The sentence to narrate (spoken, not shown on screen). | |
| hold_ms | No | Hold the shot after recording the line so footage covers it (optional; default 2600). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description provides key behavioral traits: the line is synthesized at studio_finish, it holds the shot, and hold_ms controls duration. This adds value beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff. The main action is front-loaded, and every clause adds necessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with 2 parameters and no output schema, the description covers core behavior, duration guidance, and dependency on studio_finish. Minor omission: no mention of errors or audio limits, but 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 coverage is 100%, and the description adds nuance: 'spoken, not shown' for line and guidance for hold_ms based on word rate. This enriches the schema's documentation.
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 clearly states it records voice-over without a caption, distinguishing it from sibling tools like studio_caption. The verb 'Record' and resource 'voice-over' are specific.
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 when to use (before studio_finish with voiceover:true) and how to set hold_ms based on sentence length. However, it doesn't explicitly mention when not to use, though the sibling list implies alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
studio_screenshotA
Take a high-DPI (2x) screenshot of the current frame and save it as a PNG in the output directory. Works any time during a session — element-only via selector, or full_page for the whole scroll height. Returns the file path. Clear captions/rings first unless you want them in the shot.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | File name without extension; slugified to lowercase-dashes. e.g. 'dashboard-hero' → dashboard-hero.png in the output dir. Reused names overwrite. | |
| selector | No | Capture just this element (CSS selector) instead of the viewport. Optional. When set, full_page is ignored. | |
| full_page | No | true captures the entire scroll height, not just the visible viewport. Optional; default false. Ignored when selector is set. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses high-DPI (2x), PNG format, output directory, file path return, and effect of captions/rings. No annotations provided, so description carries full burden and does well.
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?
Four sentences, no fluff, front-loaded main action. Every sentence adds value.
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 purpose, modes, return value, and a caveat. Missing details on error handling or overwrite behavior, but sufficient for basic use.
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% with clear descriptions for all three parameters. Description restates the modes but adds no new information 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?
Clearly states verb 'Take a screenshot', resource 'current frame', output format 'PNG', and high-DPI detail. Uniquely identifiable among sibling 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?
Provides context of when it works ('any time during a session') and two modes (element-only or full_page). Includes a preparatory note about clearing captions. No explicit exclusions needed as no sibling overlaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
studio_scrollA
Cubic-eased scroll to an absolute Y offset or until a target element is in view — never a jump cut. Use between story beats to bring the next area on camera. Side effect: changes only the page scroll position (no click, no navigation). Pass exactly ONE of to_y or to_target. Returns 'scrolled' on completion. To reveal an off-screen element before studio_click or studio_highlight, scroll to it first.
| Name | Required | Description | Default |
|---|---|---|---|
| to_y | No | Absolute vertical offset from the top of the page, in pixels (≥0). Use this OR to_target, not both. Example: 1200. | |
| to_target | No | CSS selector to bring into view (scrolled toward center). Use this OR to_y. Example: '#pricing' or 'section.features'. | |
| duration_ms | No | Scroll animation length in milliseconds. Optional; default 1300. Larger = calmer, slower glide (e.g. 2000); smaller = snappier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description discloses smooth scrolling (never a jump cut), side effect (only page scroll position, no click/navigation), and return value ('scrolled' on completion). Fully transparent.
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 core action, each sentence provides essential information without redundancy. Very concise and well-structured.
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?
Despite no output schema, the description covers all necessary aspects: parameters, behavior, side effects, return value, and usage context. Complete for a scroll tool with clear, thorough guidance.
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% with parameter descriptions. The description adds value by specifying mutual exclusivity of to_y and to_target, and explicitly states the default duration of 1300 ms, enhancing understanding 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 clearly states the tool scrolls with cubic easing to a Y offset or target element, never with a jump cut. It distinguishes from siblings by emphasizing it's purely scroll, no click or navigation, and is used between story beats.
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?
Explicitly says 'Use between story beats to bring the next area on camera' and advises to scroll before studio_click or studio_highlight to reveal off-screen elements. Provides clear context and suggests alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
studio_startA
Start a recording session: launches a themed headless browser and begins capturing video. Returns the session config and the output directory. One session at a time — studio_finish or studio_cancel ends it. Set theme to the PRODUCT'S brand (bg = its app background — wrong bg causes visible flashes on page loads); use storage_state_path (a Playwright storageState JSON) to record logged-in areas without sharing credentials; list chat widgets / dev overlays / consent banners in hide_selectors so they never appear on tape.
| Name | Required | Description | Default |
|---|---|---|---|
| theme | No | Visual theme for overlays/transitions — use the recorded product's brand. | |
| width | No | Viewport width in px (optional; default 1280). | |
| height | No | Viewport height in px (optional; default 720). | |
| cookies | No | Cookies to pre-set, e.g. your consent cookie so banners never mount (optional). | |
| show_cursor | No | Visible on-screen cursor that glides to targets (default true). | |
| color_scheme | No | prefers-color-scheme for the page (default dark). | |
| hide_selectors | No | CSS selectors to hide from frame 1 (chat bubbles, cookie banners, dev overlays). | |
| storage_state_path | No | Path to a Playwright storageState JSON for logged-in recording (optional). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It details the behavior: launches a headless browser, captures video, returns config and output directory. It also warns about incorrect background causing flashes and explains the purpose of storage_state_path for credential-free recording.
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 paragraph that efficiently conveys purpose, constraints, and parameter guidance. It is front-loaded with the primary action and then adds details, though it could benefit from slight structural separation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the tool (8 parameters, nested theme object, no output schema), the description covers all essential aspects: return value, single-session constraint, parameter usage tips, and important caveats. It feels complete for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds significant meaning beyond the schema. For example, it explains that theme.bg should match the app background to avoid flashes, and that hide_selectors removes UI elements. It provides practical guidance for using storage_state_path and cookies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair: 'Start a recording session'. It clearly distinguishes from siblings like studio_finish and studio_cancel by stating that one session is active at a time.
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?
Explicitly states that only one session can run and must be ended with studio_finish or studio_cancel. Provides context for when to use parameters like theme and hide_selectors, but does not explicitly list when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
studio_typeA
Glide to an input and type text at a human pace (keystroke by keystroke — it reads as real usage, not a paste). Use realistic demo content; whatever you type is on tape.
| Name | Required | Description | Default |
|---|---|---|---|
| delay_ms | No | Per-keystroke delay in milliseconds. Optional; default 45. Lower = faster typing (e.g. 25); higher = more deliberate. | |
| selector | Yes | CSS selector of the input, textarea, or contenteditable to type into, e.g. 'input[name=email]'. Must be focusable and visible. | |
| input_text | Yes | The literal text to type; it appears on tape keystroke by keystroke, so use realistic demo content (never real secrets). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It discloses that typing is keystroke-by-keystroke (not a paste) and that input appears on tape, implying recording. However, it does not detail error handling or idempotency, which is acceptable for a straightforward typing 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?
Two concise sentences that immediately convey the tool's action and key behavioral nuances. Front-loaded with the verb 'glide to an input and type'—no wasted 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?
For a typing tool with full schema coverage and no output schema, the description plus schema provide sufficient context. The behavior (keystroke-by-keystroke, recording awareness) is adequately described, though absence of return value mention is 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 coverage is 100% with descriptions for all three parameters. The description adds marginal value by suggesting 'demo content' for input_text and implying human pace for delay_ms, but does not significantly enhance understanding 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 clearly states the tool's action: typing text at a human pace keystroke by keystroke, distinguishing from pasting. The verb 'type' and resource 'input' are specific, and the context of studio tools makes differentiation from siblings natural.
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 provides context (use realistic demo content, aware of recording) but does not explicitly state when to use this tool vs. alternatives. No exclusions or when-not-to-use guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
studio_zoomA
Camera punch-in: smoothly zoom the page toward a target (CSS selector or visible text) — the money shot for a metric, button, or result. Captions stay screen-fixed; the content scales under them. ALWAYS studio_zoom with reset=true before navigating or showing the end card, or the next scene inherits the zoom.
| Name | Required | Description | Default |
|---|---|---|---|
| reset | No | true eases the camera back to 1:1 (call before navigating or showing the end card, or the next scene inherits the zoom). Ignores target/zoom_scale. Default false. | |
| target | No | CSS selector or visible text to punch in on (centered). Required unless reset=true. Example: '.big-number' or 'Sign up'. | |
| zoom_scale | No | Zoom factor (>1). Optional; default 1.7. Keep ≤2.2 — beyond that the page pixelates. Ignored when reset=true. | |
| duration_ms | No | Zoom animation length in milliseconds. Optional; default 1100. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description reveals key behaviors: captions stay screen-fixed while content scales, and failure to reset causes the zoom to persist. This adds significant context beyond the input schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences pack the core action and the critical usage rule without superfluous words. Front-loaded with the main verb and resource.
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 zoom tool with no output schema, the description covers the action, special behavior (captions fixed), and the essential reset requirement. It is sufficiently complete for an agent to use 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 covers all 4 parameters with descriptions. The description reinforces the importance of 'reset' and the default for 'zoom_scale', but doesn't add new meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Camera punch-in: smoothly zoom the page toward a target (CSS selector or visible text)'. It uses specific verb and resource, and the unique zooming action distinguishes it from sibling tools like studio_click or studio_highlight.
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?
Explicit guidelines are given: 'ALWAYS studio_zoom with reset=true before navigating or showing the end card, or the next scene inherits the zoom.' This tells when to use the tool and when not to (i.e., without reset before navigation).
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. Dates show when Glama detected each change.
12 tool updates
v0.1.3- Changed
studio_caption2 fields changed- changed
Input schema / properties / caption_text / descriptionPrevious value: -"One narrating sentence (keep it short — it's on screen)."New value: +"One narrating sentence (keep it short — it's on screen and, with voiceover:true, spoken)." - added
Input schema / properties / no_voiceAdded value: +{ + "description": "Show the caption but exclude it from the voice-over track (optional).", + "type": "boolean" +}
- Changed
studio_click4 fields changed- changed
Input schema / properties / settle_ms / descriptionPrevious value: -"Pause after the glide before clicking (optional; default 360)."New value: +"Pause after the cursor arrives, before the click fires, in milliseconds. Optional; default 360. Raise (e.g. 600) for a more deliberate beat." - added
Input schema / properties / settle_ms / minimumAdded value: +0 - changed
Input schema / properties / settle_ms / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / target / descriptionPrevious value: -"CSS selector, or visible text of the element to click."New value: +"CSS selector (preferred, e.g. '[data-testid=save]' or 'nav a.pricing') or the exact visible text of the element. Must resolve to one visible element."
- Changed
studio_end_card3 fields changed- changed
Input schema / properties / subtitle / descriptionPrevious value: -"One supporting line (optional)."New value: +"One supporting line under the title, e.g. a tagline. Optional." - changed
Input schema / properties / title / descriptionPrevious value: -"Big closing line, e.g. the product name or the takeaway."New value: +"Big closing line — the product name or the one-line takeaway. Required. Example: 'AIOProductOS'." - changed
Input schema / properties / url / descriptionPrevious value: -"Call-to-action URL shown under the title (optional)."New value: +"Call-to-action URL shown beneath the title, e.g. 'aioproductos.com'. Optional; shown as text, not a live link."
- Changed
studio_finish5 fields changed- added
Input schema / properties / aspectsAdded value: +{ + "description": "Extra social crops to export beside the 16:9 master, e.g. ['9:16','1:1'] for Reels/TikTok/feed. Padded with the theme background.", + "items": { + "enum": [ + "9:16", + "1:1" + ], + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / musicAdded value: +{ + "description": "Path to a local audio file for a background music bed, looped and ducked under the voice-over (optional).", + "type": "string" +} - added
Input schema / properties / subtitlesAdded value: +{ + "description": "'srt' writes a sidecar .srt from the caption lines; 'burn' also renders them into the picture (muted-autoplay social); 'none' (default).", + "enum": [ + "none", + "srt", + "burn" + ], + "type": "string" +} - added
Input schema / properties / voiceAdded value: +{ + "description": "System voice name (optional), e.g. macOS 'Samantha' or 'Daniel'; falls back to the OS default voice.", + "type": "string" +} - added
Input schema / properties / voiceoverAdded value: +{ + "description": "Narrate the caption / studio_narrate lines with a local, offline voice (macOS say · piper · espeak-ng). No account, no API key. Default false.", + "type": "boolean" +}
- Changed
studio_goto8 fields changed- changed
Input schema / properties / dwell_ms / descriptionPrevious value: -"Minimum time the card stays up so the title reads (optional; default 1200)."New value: +"Minimum time the card stays up so the title reads, in milliseconds. Optional; default 1200." - added
Input schema / properties / dwell_ms / exclusiveMinimumAdded value: +0 - changed
Input schema / properties / dwell_ms / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / eyebrow / descriptionPrevious value: -"Small uppercase kicker on the transition card (optional)."New value: +"Small uppercase kicker on the transition card, e.g. 'DASHBOARD'. Optional." - changed
Input schema / properties / title / descriptionPrevious value: -"Big title on the transition card, e.g. the surface name (optional)."New value: +"Big title on the transition card — usually the surface name. Optional but recommended so each cut reads as a chapter." - changed
Input schema / properties / url / descriptionPrevious value: -"Absolute URL to navigate to."New value: +"Absolute URL to navigate to, including scheme. Example: 'https://app.example.com/dashboard'." - added
Input schema / properties / url / formatAdded value: +"uri" - changed
Input schema / properties / wait_for / descriptionPrevious value: -"CSS selector that must be visible before the card lifts (optional)."New value: +"CSS selector that must be visible before the card lifts (on top of network-settle + skeleton clearing). Optional; use it when the real content is gated behind a spinner. Example: '[data-loaded=true]'."
- Changed
studio_highlight4 fields changed- changed
Input schema / properties / clear / descriptionPrevious value: -"Remove all rings/labels instead of adding one."New value: +"true removes ALL current rings/labels and ignores the other fields. Default false (draw a new one)." - changed
Input schema / properties / eyebrow / descriptionPrevious value: -"Small kicker on the label card (optional)."New value: +"Small uppercase kicker on the label card, e.g. 'RESULT'. Optional; ignored when clear=true." - changed
Input schema / properties / label / descriptionPrevious value: -"Label card text beside the ring (optional; ring-only without it)."New value: +"Text of the label card shown beside the ring. Optional — omit for a ring with no card. Ignored when clear=true." - changed
Input schema / properties / target / descriptionPrevious value: -"CSS selector, or visible text, of the element to ring."New value: +"CSS selector or exact visible text of the element to ring. Required unless clear=true. Example: '.metric-card' or 'Monthly revenue'."
- Changed
studio_hold4 fields changed- changed
Input schema / properties / ms / descriptionPrevious value: -"Hold duration in ms (optional; default 2200)."New value: +"Hold duration in milliseconds. Optional; default 2200. A good beat after a caption/highlight/zoom is 2000–3000." - added
Input schema / properties / ms / exclusiveMinimumAdded value: +0 - changed
Input schema / properties / ms / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / target / descriptionPrevious value: -"CSS selector or visible text to rest the cursor on (optional)."New value: +"CSS selector or visible text to glide the cursor to and rest on. Optional — omit to hold in place. Example: '.cta-button'."
- Added
studio_narrate - Changed
studio_screenshot3 fields changed- changed
Input schema / properties / full_page / descriptionPrevious value: -"Capture the full scroll height (optional; default false)."New value: +"true captures the entire scroll height, not just the visible viewport. Optional; default false. Ignored when selector is set." - changed
Input schema / properties / name / descriptionPrevious value: -"File name (without extension), e.g. 'dashboard-hero'."New value: +"File name without extension; slugified to lowercase-dashes. e.g. 'dashboard-hero' → dashboard-hero.png in the output dir. Reused names overwrite." - changed
Input schema / properties / selector / descriptionPrevious value: -"Capture just this element (optional)."New value: +"Capture just this element (CSS selector) instead of the viewport. Optional. When set, full_page is ignored."
- Changed
studio_scroll6 fields changed- changed
Input schema / properties / duration_ms / descriptionPrevious value: -"Scroll duration (optional; default 1300)."New value: +"Scroll animation length in milliseconds. Optional; default 1300. Larger = calmer, slower glide (e.g. 2000); smaller = snappier." - added
Input schema / properties / duration_ms / exclusiveMinimumAdded value: +0 - changed
Input schema / properties / duration_ms / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / to_target / descriptionPrevious value: -"CSS selector to scroll into view (use this OR to_y)."New value: +"CSS selector to bring into view (scrolled toward center). Use this OR to_y. Example: '#pricing' or 'section.features'." - changed
Input schema / properties / to_y / descriptionPrevious value: -"Absolute Y position in px (use this OR to_target)."New value: +"Absolute vertical offset from the top of the page, in pixels (≥0). Use this OR to_target, not both. Example: 1200." - added
Input schema / properties / to_y / minimumAdded value: +0
- Changed
studio_type5 fields changed- changed
Input schema / properties / delay_ms / descriptionPrevious value: -"Per-keystroke delay (optional; default 45)."New value: +"Per-keystroke delay in milliseconds. Optional; default 45. Lower = faster typing (e.g. 25); higher = more deliberate." - added
Input schema / properties / delay_ms / minimumAdded value: +0 - changed
Input schema / properties / delay_ms / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / input_text / descriptionPrevious value: -"Text to type."New value: +"The literal text to type; it appears on tape keystroke by keystroke, so use realistic demo content (never real secrets)." - changed
Input schema / properties / selector / descriptionPrevious value: -"CSS selector of the input/textarea/contenteditable."New value: +"CSS selector of the input, textarea, or contenteditable to type into, e.g. 'input[name=email]'. Must be focusable and visible."
- Changed
studio_zoom8 fields changed- changed
Input schema / properties / duration_ms / descriptionPrevious value: -"Zoom duration (optional; default 1100)."New value: +"Zoom animation length in milliseconds. Optional; default 1100." - added
Input schema / properties / duration_ms / exclusiveMinimumAdded value: +0 - changed
Input schema / properties / duration_ms / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / reset / descriptionPrevious value: -"Ease the camera back to 1:1 instead of zooming."New value: +"true eases the camera back to 1:1 (call before navigating or showing the end card, or the next scene inherits the zoom). Ignores target/zoom_scale. Default false." - changed
Input schema / properties / target / descriptionPrevious value: -"CSS selector, or visible text, to punch in on."New value: +"CSS selector or visible text to punch in on (centered). Required unless reset=true. Example: '.big-number' or 'Sign up'." - changed
Input schema / properties / zoom_scale / descriptionPrevious value: -"Zoom factor (optional; default 1.7; keep ≤2.2)."New value: +"Zoom factor (>1). Optional; default 1.7. Keep ≤2.2 — beyond that the page pixelates. Ignored when reset=true." - added
Input schema / properties / zoom_scale / maximumAdded value: +2.2 - added
Input schema / properties / zoom_scale / minimumAdded value: +1
13 tool updates
v0.1.0- First observed
studio_cancel - First observed
studio_caption - First observed
studio_click - First observed
studio_end_card - First observed
studio_finish - First observed
studio_goto - First observed
studio_highlight - First observed
studio_hold - First observed
studio_screenshot - First observed
studio_scroll - First observed
studio_start - First observed
studio_type - First observed
studio_zoom
TDQS
Each tool serves a unique, clearly defined function in the recording workflow (start, navigate, click, type, scroll, zoom, highlight, caption, narrate, hold, screenshot, end card, cancel, finish). There is no ambiguity or overlap.
All tools follow a consistent 'studio_verb' pattern (e.g., studio_start, studio_click, studio_finish). The naming is uniform and predictable.
14 tools cover the full range of operations needed for recording a product walkthrough—from session control to interactions, media capture, and final output—without being excessive or sparse.
The tool surface provides a complete lifecycle: session management, navigation, interaction, visual cues, voiceover, screenshots, and finalization. All essential operations are present, including edge-case handling like cancellation.
Maintenance
Related MCP Connectors
Turn a product URL into a narrated cinematic demo video, launch video, or deck.
Generate images, GIFs, and PDFs from HTML, URLs, or templates — from your AI agent.
Comment on AI-generated webpages; feedback flows back to your coding agent. Free, MIT, local-first.
Screen recording & video platform: search, share, transcribe, translate videos & AI meeting notes
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI coding agents to capture screen and voice recordings, extract timestamped frames, and receive structured Markdown reports with context for bug fixing and UI feedback.1218MIT
- AlicenseNot gradedqualityAmaintenanceMCP server that turns any running web app into demo videos, interactive walkthroughs, and marketing captures via one command. Enables AI agents to show their work with regenerated demos on every PR.173MIT
- AlicenseNot gradedqualityBmaintenanceEnables users to create subtitled tutorial videos by scripting browser interactions with Playwright, outputting MP4 with burned-in captions and SRT file.103MIT

AIOProductOSofficial
AlicenseAqualityAmaintenanceProduct management over a shared product spine — link customer feedback and insights to features, tasks, sprints and releases, then read closed-loop analytics (customer 360, funnels, retention, NRR) on the same records. Local stdio server via npx @aioproductoscom/mcp; also a 38-tool hosted remote (OAuth 2.1).71MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/AIOProductOS/studio-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server