Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Changed the definition of "audit_script"
⟨70 unchanged words⟩ a published video, or to check grammar.A free result is released byAn email,soisaskoptional: theuserresultforcomesanbackaddressinratherthethanconversationguessingeitherone.way. This is a text-only check of an unrecorded ⟨29 unchanged words⟩
⟨26 unchanged words⟩ :"string"},"email":{"description":"WhereOptional. Only when thefreeuser gave an address and wants the resultislinksent.by email: Prepublish storesthis addressit with the audit, emails the result link ⟨11 unchanged words⟩ about the audit that include an unsubscribe link.Required forLeaveeveryitanonymousoutaudit:otherwise; thebackend rejects theauditrequestruns without it.Ask the user; never
Changed the definition of "audit_hook", "check_authenticity", "get_audit" and 2 more
⟨10 unchanged words⟩ 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 ⟨72 unchanged words⟩
{"destructiveHint":false,"openWorldHint":truefalse,"readOnlyHint":false}
Changed the definition of "audit_hook", "audit_script", "check_authenticity" and 2 more
{"destructiveHint":false,"openWorldHint":true,"readOnlyHint":false}
⟨28 unchanged words⟩ 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 ⟨120 unchanged words⟩
Changed the definition of "audit_hook", "audit_script", "check_authenticity" and 3 more
⟨16 unchanged words⟩ is used. 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.","format":"email","type":"string ⟨42 unchanged words⟩
before
—after
{"properties":{"hook":{"description":"The hook evaluation.","properties":{"created_at":{"description":"When the evaluation was produced.","type":"string"},"evaluation_id":{"description":"Prepublish id for this hook evaluation.","type":"string"},"grade":{"description":"Letter grade for the opening.","type":"string"},"hook_text":{"description":"The opening lines that were scored, echoed back.","type":"string"},"model_used":{"description":"Which model produced this evaluation.","type":"string"},"niche":{"description":"The niche the hook was compared against, when one was supplied.","type":"string"},"one_sentence_verdict":{"description":"The single-sentence read on the hook.","type":"string"},"overall_score":{"description":"Score for the opening as a whole.","type":"integer"},"rewrites":{"description":"Alternative openings, each with its style and why that version works.","items":{"type":"object"},"type":"array"},"sentences":{"description":"Per-sentence breakdown: the quote, its attention pull, its curiosity gap, how far off the payoff sits, and a note.","items":{"type":"object"},"type":"array"},"top_issues":{"description":"The problems worth fixing first, each with a headline, the quote it applies to, and why it costs attention.","items":{"type":"object"},"type":"array"}},"type":"object"},"notice":{"description":"The scope limit that accompanies every Prepublish result. Repeat it to the user rather than dropping it.","type":"string"}},"required":["notice","hook"],"type":"object"}Changed the definition of "audit_script"
⟨32 unchanged words⟩ result is sent. Required for every anonymous audit—: the backend rejects the request without it. Ask ⟨87 unchanged words⟩
Certificate recorded, valid to 2026-12-09
Authorization not required
Changed the definition of "audit_script", "get_audit" and "script_runtime"
RunPrePublish'sPrepublish's full audit on a YouTube script the user ⟨122 unchanged words⟩
Collect aPrePublishPrepublish audit by id
First tool surface recorded: 6 tools (server version 1.0.0)
Showing the latest 9 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
{"destructiveHint":false,"openWorldHint":false,"readOnlyHint":true}
{"destructiveHint":false,"openWorldHint":truefalse,"readOnlyHint":false}
{"destructiveHint":false,"openWorldHint":false,"readOnlyHint":true}
{"destructiveHint":false,"openWorldHint":true,"readOnlyHint":false}
{"properties":{"analysis":{"description":"The auditas Prepublish returned it,at whatever state it hasreached.reached:Readread its \"status\" field:first, because an audit thatishas notyetsettledhascarries no scores. Once settled it carries the projected report described on audit_script, and an audit that failed carries its error_message.","type":"object"},"analysis_id":{ ⟨48 unchanged words⟩
{"openWorldHint":truefalse,"readOnlyHint":true}
{"destructiveHint":false,"openWorldHint":true,"readOnlyHint":false}
⟨45 unchanged words⟩ 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.","format":"email","type":"string ⟨78 unchanged words⟩
before
—after
{"properties":{"analysis":{"description":"The settled audit as Prepublish returned it: status, overall, hook, structure and pacing scores, the attention-risk map, improvements and, where the plan allows, rewrites. Absent while the audit is still running.","type":"object"},"analysis_id":{"description":"Prepublish id for this audit. Pass it to get_audit to re-read the result later.","type":"string"},"next_step":{"description":"Present only when the audit is still running: what to do to collect it.","type":"string"},"notice":{"description":"The scope limit that accompanies every Prepublish result. Repeat it to the user rather than dropping it.","type":"string"},"open_in_browser":{"description":"Permalink to the same audit on prepublish.ai.","type":"string"},"status":{"description":"Present only when the audit had not settled inside this call; the value is \"running\".","type":"string"}},"required":["notice","analysis_id","open_in_browser"],"type":"object"}before
—after
{"properties":{"authenticity":{"description":"The inauthentic-content read on this script.","properties":{"analysis_id":{"description":"Prepublish id for this check.","type":"string"},"created_at":{"description":"When the check was produced.","type":"string"},"heuristic_report":{"description":"The deterministic layer behind the score, passed through as the backend produced it."},"override_note":{"description":"Present when the banded result was overridden, explaining why.","type":"string"},"remediation":{"description":"What to change, each with the current passage, the fix, and why it matters.","items":{"type":"object"},"type":"array"},"risk_level":{"description":"Banded risk level behind the score.","type":"string"},"score":{"description":"Authenticity score for the script.","type":"integer"},"signals":{"description":"Each signal that fired, with its name, severity, reasoning and the quote that triggered it.","items":{"type":"object"},"type":"array"},"verdict":{"description":"The short verdict in words.","type":"string"}},"type":"object"},"notice":{"description":"The scope limit that accompanies every Prepublish result. Repeat it to the user rather than dropping it.","type":"string"}},"required":["notice","authenticity"],"type":"object"}before
—after
{"properties":{"analysis":{"description":"The audit as Prepublish returned it, at whatever state it has reached. Read its \"status\" field: an audit that is not yet settled has no scores.","type":"object"},"analysis_id":{"description":"The id that was requested, echoed back.","type":"string"},"notice":{"description":"The scope limit that accompanies every Prepublish result. Repeat it to the user rather than dropping it.","type":"string"},"open_in_browser":{"description":"Permalink to the same audit on prepublish.ai.","type":"string"}},"required":["notice","analysis_id","open_in_browser"],"type":"object"}before
—after
{"properties":{"note":{"description":"Says which parts of the result are paid-only, so a locked field is not read as a clean pass.","type":"string"},"notice":{"description":"The scope limit that accompanies every Prepublish result. Repeat it to the user rather than dropping it.","type":"string"},"policy_preflight":{"description":"The policy read on this script.","properties":{"cached":{"description":"True when this exact script and title had already been checked and the stored result was replayed.","type":"boolean"},"created_at":{"description":"When the pre-flight was produced.","type":"string"},"preflight":{"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.","type":"object"},"preflight_id":{"description":"Prepublish id for this pre-flight.","type":"string"},"title":{"description":"The title that was checked, when one was supplied.","type":"string"}},"type":"object"}},"required":["notice","policy_preflight","note"],"type":"object"}before
—after
{"properties":{"caveat":{"description":"What this arithmetic excludes. Repeat it rather than presenting a single number.","type":"string"},"runtime_minutes":{"description":"Spoken runtime in minutes at each rate. Present when script_text or word_count was given.","properties":{"fast":{"description":"Runtime at the fast rate.","type":"number"},"median":{"description":"Runtime at the median rate.","type":"number"},"slow":{"description":"Runtime at the slow rate.","type":"number"}},"required":["fast","median","slow"],"type":"object"},"source":{"description":"Where the rates come from, with the published write-up.","type":"string"},"speaking_rates_words_per_minute":{"description":"The measured rates used, in words per minute: slow is the 25th percentile, median the 50th, fast the 75th.","properties":{"fast":{"description":"75th percentile speaking rate.","type":"number"},"median":{"description":"Median speaking rate.","type":"number"},"slow":{"description":"25th percentile speaking rate.","type":"number"}},"required":["fast","median","slow"],"type":"object"},"target_minutes":{"description":"The target runtime asked for, echoed back. Present when target_minutes was given.","type":"number"},"word_budget":{"description":"Words needed to fill the target at each rate. Present when target_minutes was given.","properties":{"fast":{"description":"Word budget at the fast rate.","type":"integer"},"median":{"description":"Word budget at the median rate.","type":"integer"},"slow":{"description":"Word budget at the slow rate.","type":"integer"}},"required":["fast","median","slow"],"type":"object"},"word_count":{"description":"Words counted or supplied. Present when script_text or word_count was given.","type":"integer"}},"required":["speaking_rates_words_per_minute","source","caveat"],"type":"object"}⟨18 unchanged words⟩ back into a word budget. Rates come fromPrePublish'sPrepublish's own measurement of 349 videos: 25th percentile ⟨47 unchanged words⟩