MCP server for automated demo recording with video, documentation, and screenshot generation
demosmith-mcp provides 20 well-structured tools with explicit Zod schemas and descriptions. Most tools follow verb_noun naming (demosmith_start, demosmith_click, demosmith_fill) and include actionable descriptions (10 - 200 chars). However, several issues reduce the score: (1) descriptions for many tools are minimal or vague (e.g., demosmith_status: 'Get the status...', under 50 chars); (2) no documented output schemas, the code shows input validation but does not specify what each tool returns, forcing LLMs to infer structure; (3) error handling logic is not visible in the sample code, so recovery guidance cannot be verified; (4) parameters like 'type' in demosmith_wait and 'type' in demosmith_assert lack constraint clarity (enum vs free-form); (5) no security or permission-gating patterns visible for sensitive tools like demosmith_upload (file upload) and demosmith_start (browser automation with file system access). The Zod-to-JSON-Schema conversion is sound, but the underlying schemas themselves lack depth (e.g., no minLength, maxLength, pattern, or enum constraints visible for most params). This is a solid mid-range implementation that works but needs refinement for production readiness.
Verify a condition (text, visibility, URL, value, etc.). Records the result as a step in the demo.
Click an element. Supports ref from snapshot (e.g., "1"), text matching (e.g., "text:Submit"), or other selectors.
Close a browser tab by its page ID.
Drag an element from one location to another. Records this as a step in the demo.
End the current demo session. Closes the browser and generates all deliverables (video, guide, screenshots).
Fill a text input. Supports ref from snapshot or text-based selectors like "label:Email" or "placeholder:Enter name".
Hover over an element to trigger tooltips or dropdown menus. Records this as a step in the demo.
No output schemas documented. The code validates input via Zod but provides no specification of what each tool returns. LLMs cannot infer downstream data structures, forcing them to guess field names and types. This breaks tool composition and increases hallucination risk.
Vague and minimal descriptions on discovery and utility tools. Examples: demosmith_status (45 chars), demosmith_snapshot (90 chars), demosmith_new_tab (55 chars). These lack guidance on when to use them instead of alternatives or what they enable. Rubric baseline is 194 chars for avg tool description; these fall short.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
List all open browser tabs with their URLs and titles.
Navigate to a URL. Records this as a step in the demo.
Open a new browser tab, optionally navigating to a URL.
Press a key or key combination (e.g., "Enter", "Tab", "Control+A"). Records this as a step in the demo.
Take a manual screenshot. Records this as a step in the demo.
Scroll the page or scroll an element into view. Records this as a step in the demo.
Select an option from a dropdown by ref (from snapshot). Records this as a step in the demo.
Get an accessibility tree snapshot of the current page. Use this to find element refs for click/fill/select actions.
Start a new demo recording session. Opens a browser and navigates to the starting URL.
Get the status of the current demo session, including progress and step count.
Switch to a different browser tab by its page ID.
Upload a file to a file input element. Records this as a step in the demo.
Wait for a page load condition. Records this as a step in the demo.
Parameters with ambiguous type constraints. demosmith_wait 'type' and demosmith_assert 'type' accept free-form strings ('timeout', 'selector', 'navigation', 'text', 'visibility', 'url', etc.) but lack enum declarations in the visible schema. LLMs will hallucinate invalid type values. Also, demosmith_scroll 'direction' uses enum but others do not, inconsistent constraint formalism.
No error handling or recovery guidance visible in sample code. Tools like demosmith_upload (file paths), demosmith_fill (text inputs), and demosmith_click (element selection) can fail for many reasons (file not found, element not found, selector ambiguous), but no indication of how to detect, classify, or recover from these failures.
Security and permission concerns not addressed. demosmith_start and demosmith_upload grant significant privileges (browser automation, filesystem access, screen recording). No visible permission checks, audit trails, or rate limiting. Agents could be tricked into recording sensitive screens or uploading arbitrary files.
No output field documentation. Even if snapshot returns an 'accessibility tree', the schema should specify: what fields does each node contain? Are refs numeric or string? This forces LLMs to re-discover the structure on each call or make incorrect assumptions.
Parameter descriptions lack format guidance. Examples: demosmith_start 'outputDir' (no format, path separator OS-dependent), demosmith_wait 'timeout' (no min/max range), demosmith_upload 'filePath' (no validation rules, absolute vs relative? URL-encoded?). Rubric requires 'format, range, and allowed values directly in description'.