Universal MCP Server for Pictory.ai. Controls text-to-video storyboard rendering, long-video transcription into viral short clips, stock and AI asset discovery, template management, and cloud integrations.
Both tools have verbose, multi-action descriptions that violate single-responsibility principle. Schemas are present but lack proper JSON Schema structure with explicit type definitions and constraints. Parameters are documented but descriptions are generic. No enum constraints for action parameters despite known valid values. Error handling returns raw API errors without recovery guidance. Tool names do not follow verb_noun convention (pictory_video, pictory_transcribe are nouns). Output schemas are not documented. No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Composition violates pattern:tool, each tool bundles 4-7 unrelated actions.
Transcribe long-form videos/podcasts and automatically extract viral short clips (Shorts/Reels/TikToks). Supported Actions: - 'create_transcription': Submit a video/audio URL for speech-to-text transcription (POST /v2/transcription). - 'get_transcription_job': Fetch the status, transcript, and word timestamps of a transcription job (GET /v1/jobs/{job_id}). - 'generate_highlights': Automatically generate engaging 30-60s short clips from a completed transcription (POST /v2/transcription/highlights). - 'generate_highlights_from_transcript': Generate viral highlights using custom user-supplied transcript text (POST /v2/transcription/highlights/custom).
Create, render, preview, and patch Pictory videos. Supported Actions: - 'render_storyboard': Render a full video from a storyboard or script payload (POST /v2/video/storyboard/render). - 'create_preview': Create a preview job to review storyboard scenes before spending render credits (POST /v2/video/storyboard). - 'render_from_preview': Render final video from an existing storyboard preview job (PUT /v2/video/render/{job_id}). - 'render_with_modifications': Render final video from modified storyboard preview elements (POST /v2/video/render). - 'update_elements': Surgically edit scenes, text, shapes, or visuals in an existing storyboard (PUT /v2/storyboard/{job_id}/elements). - 'render_project': Render a video directly from an existing saved Pictory project (POST /v2/projects/{project_id}/render). - 'poll_job': Check the status, progress percentage, error codes, and video download URL of a job (GET /v1/jobs/{job_id}).
Tool names are nouns, not verb_noun. 'pictory_video' and 'pictory_transcribe' do not start with action verbs (create_, render_, get_, update_). LLMs cannot infer intent from the name alone.
Each tool bundles 4-7 unrelated actions (render_storyboard, create_preview, poll_job, etc.) into a single tool. This violates single-responsibility principle. Should split into separate tools: create_video_preview, render_video, poll_video_job, update_video_elements, etc.
Action parameter lacks enum constraint. Valid values are hardcoded in docstring but not declared as enum in schema. LLMs will hallucinate invalid actions. Should declare: action: {type: 'string', enum: ['render_storyboard', 'create_preview', ...]}
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 41 | <=2025-11-25 | v2 |
Output schema not documented. Tools return {success, data, error} but LLMs do not know what fields 'data' contains. Should document: 'Returns {success: bool, data: {job_id, status, progress_percent, video_url, ...}, error: string}'
Error handling returns raw API errors without recovery guidance. 'PictoryAPIError' responses do not tell LLM what to do next. Should return: 'Job not found. Check job_id or call poll_job with a valid ID from a recent render.'