PrePublish - YouTube script QA
Was dieses MCP kann
Reviews YouTube scripts for hooks, pacing, audience drop-off risks, and suggested rewrites.
Tools
Eingabeschema
{'type': 'object', 'required': ['hook_text'], 'properties': {'email': {'type': 'string', 'format': 'email', 'description': 'Only needed once the free anonymous hook check for the day is used. Prepublish stores this address and may send a short series of follow-up emails about the check that include an unsubscribe link. Ask the user; never invent it. When the caller is authenticated with a Prepublish API key the result comes back in the conversation instead, so do not ask for an address in that case.'}, 'niche': {'type': 'string', 'description': 'Channel niche, only if the user said it. Sharpens the comparison.'}, 'hook_text': {'type': 'string', 'maxLength': 5000, 'minLength': 10, 'description': 'The opening lines exactly as written, ideally the first 15 to 30 seconds of speech.'}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'required': ['notice', 'hook'], 'properties': {'hook': {'type': 'object', 'properties': {'grade': {'type': 'string', 'description': 'Letter grade for the opening.'}, 'niche': {'type': 'string', 'description': 'The niche the hook was compared against, when one was supplied.'}, 'rewrites': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Alternative openings, each with its style and why that version works.'}, 'hook_text': {'type': 'string', 'description': 'The opening lines that were scored, echoed back.'}, 'sentences': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Per-sentence breakdown: the quote, its attention pull, its curiosity gap, how far off the payoff sits, and a note.'}, 'created_at': {'type': 'string', 'description': 'When the evaluation was produced.'}, 'model_used': {'type': 'string', 'description': 'Which model produced this evaluation.'}, 'top_issues': {'type': 'array', 'items': {'type': 'object'}, 'description': 'The problems worth fixing first, each with a headline, the quote it applies to, and why it costs attention.'}, 'evaluation_id': {'type': 'string', 'description': 'Prepublish id for this hook evaluation.'}, 'overall_score': {'type': 'integer', 'description': 'Score for the opening as a whole.'}, 'one_sentence_verdict': {'type': 'string', 'description': 'The single-sentence read on the hook.'}}, 'description': 'The hook evaluation.'}, 'notice': {'type': 'string', 'description': 'The scope limit that accompanies every Prepublish result. Repeat it to the user rather than dropping it.'}}}
Eingabeschema
{'type': 'object', 'required': ['video_title', 'script_text'], 'properties': {'email': {'type': 'string', 'format': 'email', 'description': 'Where the free result is sent. Prepublish stores this address with the audit, emails the result link to it, and may send a short series of follow-up emails about the audit that include an unsubscribe link. Required for every anonymous audit: the backend rejects the request without it. Ask the user; never invent it. When the caller is authenticated with a Prepublish API key the result comes back in the conversation instead, so do not ask for an address in that case.'}, 'audience': {'type': 'string', 'description': 'Target audience, only if the user said it.'}, 'category': {'type': 'string', 'description': 'Video category, only if the user said it.'}, 'script_text': {'type': 'string', 'maxLength': 250000, 'minLength': 50, 'description': 'The script text as the user wrote it. Paste it verbatim; do not rewrite, summarise or clean it first.'}, 'video_title': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'The title the user plans to publish under. The audit checks whether the script delivers this promise.'}, 'video_duration_seconds': {'type': 'integer', 'minimum': 1, 'description': 'Intended runtime in seconds, only if the user stated one. Used for pacing; never assumed.'}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'required': ['notice', 'analysis_id', 'open_in_browser'], 'properties': {'notice': {'type': 'string', 'description': 'The scope limit that accompanies every Prepublish result. Repeat it to the user rather than dropping it.'}, 'status': {'type': 'string', 'description': 'Present only when the audit had not settled inside this call; the value is "running".'}, 'analysis': {'type': 'object', 'description': 'The settled audit: status (and error_message when it failed), video_title, overall_score with hook_score, structure_score and pacing_score, ready_to_record, one_key_improvement, score_explanations, the attention_map (position_pct, hold_index, note, sentiment), the improvements in priority order (priority, category, title, location, original_quote and, for the passages on this plan, improved and why), locked_count, and policy_preflight. The script text itself and internal bookkeeping are not included. Absent while the audit is still running.'}, 'next_step': {'type': 'string', 'description': 'Present only when the audit is still running: what to do to collect it.'}, 'analysis_id': {'type': 'string', 'description': 'Prepublish id for this audit. Pass it to get_audit to re-read the result later.'}, 'open_in_browser': {'type': 'string', 'description': 'Permalink to the same audit on prepublish.ai.'}}}
Eingabeschema
{'type': 'object', 'required': ['video_title', 'script_text'], 'properties': {'script_text': {'type': 'string', 'maxLength': 250000, 'minLength': 50, 'description': 'The script text as the user wrote it. Paste it verbatim; do not rewrite, summarise or clean it first.'}, 'video_title': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'The planned title.'}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'required': ['notice', 'authenticity'], 'properties': {'notice': {'type': 'string', 'description': 'The scope limit that accompanies every Prepublish result. Repeat it to the user rather than dropping it.'}, 'authenticity': {'type': 'object', 'properties': {'score': {'type': 'integer', 'description': 'Authenticity score for the script.'}, 'signals': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Each signal that fired, with its name, severity, reasoning and the quote that triggered it.'}, 'verdict': {'type': 'string', 'description': 'The short verdict in words.'}, 'created_at': {'type': 'string', 'description': 'When the check was produced.'}, 'risk_level': {'type': 'string', 'description': 'Banded risk level behind the score.'}, 'analysis_id': {'type': 'string', 'description': 'Prepublish id for this check.'}, 'remediation': {'type': 'array', 'items': {'type': 'object'}, 'description': 'What to change, each with the current passage, the fix, and why it matters.'}, 'override_note': {'type': 'string', 'description': 'Present when the banded result was overridden, explaining why.'}, 'heuristic_report': {'description': 'The deterministic layer behind the score, passed through as the backend produced it.'}}, 'description': 'The inauthentic-content read on this script.'}}}
Eingabeschema
{'type': 'object', 'required': ['analysis_id'], 'properties': {'analysis_id': {'type': 'string', 'minLength': 1, 'description': 'The analysis_id returned by audit_script.'}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'required': ['notice', 'analysis_id', 'open_in_browser'], 'properties': {'notice': {'type': 'string', 'description': 'The scope limit that accompanies every Prepublish result. Repeat it to the user rather than dropping it.'}, 'analysis': {'type': 'object', 'description': 'The audit at whatever state it has reached: read its "status" field first, because an audit that has not settled carries no scores. Once settled it carries the projected report described on audit_script, and an audit that failed carries its error_message.'}, 'analysis_id': {'type': 'string', 'description': 'The id that was requested, echoed back.'}, 'open_in_browser': {'type': 'string', 'description': 'Permalink to the same audit on prepublish.ai.'}}}
Eingabeschema
{'type': 'object', 'required': ['script'], 'properties': {'title': {'type': 'string', 'maxLength': 255, 'description': 'The planned title, if the user has one. Titles are checked too.'}, 'script': {'type': 'string', 'maxLength': 250000, 'minLength': 200, 'description': 'The script text as written, at least 200 characters. Below that there is not enough context for a policy read.'}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'required': ['notice', 'policy_preflight', 'note'], 'properties': {'note': {'type': 'string', 'description': 'Says which parts of the result are paid-only, so a locked field is not read as a clean pass.'}, 'notice': {'type': 'string', 'description': 'The scope limit that accompanies every Prepublish result. Repeat it to the user rather than dropping it.'}, 'policy_preflight': {'type': 'object', 'properties': {'title': {'type': 'string', 'description': 'The title that was checked, when one was supplied.'}, 'cached': {'type': 'boolean', 'description': 'True when this exact script and title had already been checked and the stored result was replayed.'}, 'preflight': {'type': 'object', 'description': 'The result itself: a verdict of "no_matches", "review_suggested" or "high_matches", the flags, counts_by_category, total_flags, whether the passages are locked, the rubric version it was scored against, the full category rubric with its citations, and the scope statement that must be shown with it.'}, 'created_at': {'type': 'string', 'description': 'When the pre-flight was produced.'}, 'preflight_id': {'type': 'string', 'description': 'Prepublish id for this pre-flight.'}}, 'description': 'The policy read on this script.'}}}
Eingabeschema
{'type': 'object', 'properties': {'word_count': {'type': 'integer', 'minimum': 1, 'description': 'A word count, if the user already knows it.'}, 'script_text': {'type': 'string', 'description': 'A script to count. Provide this or word_count or target_minutes.'}, 'target_minutes': {'type': 'number', 'minimum': 0.1, 'description': 'A target runtime in minutes, to convert into a word budget.'}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'required': ['speaking_rates_words_per_minute', 'source', 'caveat'], 'properties': {'caveat': {'type': 'string', 'description': 'What this arithmetic excludes. Repeat it rather than presenting a single number.'}, 'source': {'type': 'string', 'description': 'Where the rates come from, with the published write-up.'}, 'word_count': {'type': 'integer', 'description': 'Words counted or supplied. Present when script_text or word_count was given.'}, 'word_budget': {'type': 'object', 'required': ['fast', 'median', 'slow'], 'properties': {'fast': {'type': 'integer', 'description': 'Word budget at the fast rate.'}, 'slow': {'type': 'integer', 'description': 'Word budget at the slow rate.'}, 'median': {'type': 'integer', 'description': 'Word budget at the median rate.'}}, 'description': 'Words needed to fill the target at each rate. Present when target_minutes was given.'}, 'target_minutes': {'type': 'number', 'description': 'The target runtime asked for, echoed back. Present when target_minutes was given.'}, 'runtime_minutes': {'type': 'object', 'required': ['fast', 'median', 'slow'], 'properties': {'fast': {'type': 'number', 'description': 'Runtime at the fast rate.'}, 'slow': {'type': 'number', 'description': 'Runtime at the slow rate.'}, 'median': {'type': 'number', 'description': 'Runtime at the median rate.'}}, 'description': 'Spoken runtime in minutes at each rate. Present when script_text or word_count was given.'}, 'speaking_rates_words_per_minute': {'type': 'object', 'required': ['fast', 'median', 'slow'], 'properties': {'fast': {'type': 'number', 'description': '75th percentile speaking rate.'}, 'slow': {'type': 'number', 'description': '25th percentile speaking rate.'}, 'median': {'type': 'number', 'description': 'Median speaking rate.'}}, 'description': 'The measured rates used, in words per minute: slow is the 25th percentile, median the 50th, fast the 75th.'}}}
Letzte Tool-Änderungen
Ähnliche MCP-Server
Andreax
Offers pay-per-call AI services for inference, agent and workflow design, OCR and transcription, code generation and review, clas…
Social Fetch
Retrieves public content and metadata from social networks, music services, Facebook Marketplace, events, profiles, posts, commen…
Hermoso
Supports ad research, competitor analysis, video and static ad creation, campaign policy checks, content publishing, and performa…
ElevenLabs
Manages ElevenLabs speech, voices, pronunciation dictionaries, podcasts, dubbing, audio projects, workspaces, and related media r…
John's Essentials
Analyzes and converts documents, images, audio, video, archives, data files, and other media formats, with PDF chat and file insp…
MiOffice — AI-Powered Workspace Studio
Provides browser-based tools for processing PDFs, images, video, and audio, including generation, enhancement, conversion, transc…
BlitzReels Video Editor
Creates and edits short-form videos, including timelines, captions, transitions, AI-generated visuals, music, voiceovers, sound e…
Heista
Analyzes video advertising, builds brand intelligence profiles, researches markets, and generates advertising scripts and creativ…