Skip to main content
Glama

Narracore Screenplay Formatter

Server Details

Screenplay, film and story toolkit over MCP: PDF formatting, stats, diagnosis, video prompts.

Ownership verified
Status
Healthy
Uptime
99.8% over 42 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
xiaoanran0602-pixel/narracore-mcp-public
GitHub Stars
0
Server Listing
Narracore Screenplay Formatter

TDQS

A4.2/5.0

Scored across 15 tools

Disambiguation4/5

Most tools have clearly distinct verb+resource purposes, but several screenplay-processing tools share the same input surface and credit bundle, so analyze_screenplay vs diagnose_scenes and format_screenplay vs render_bilingual_pdf require careful description reading. Film validation vs compilation is also a boundary an agent could misselect without understanding the protocol.

Naming Consistency5/5

All tools follow a consistent snake_case verb_noun pattern: format_screenplay, analyze_screenplay, validate_film_breakdown, compile_film_breakdown, prepare_story_window, render_story_handoff, etc. The naming is predictable and readable throughout.

Tool Count4/5

15 tools is at the upper end of the recommended range but still reasonable; each tool appears to have a distinct role. However, the set spans screenplay formatting, film analysis, and story continuity, making it heavier and broader than the server name suggests.

Completeness5/5

The screenplay surface covers formatting, validation, statistics, scene diagnosis, Fountain conversion, bilingual PDF rendering, and video-prompt generation plus quality checks. The film and story protocol tools also cover their respective lifecycles from contract/planning through validation, compilation, absorption, and handoff.

Available Tools

15 tools
absorb_story_windowAbsorb window extraction (charged)AInspect

CHARGED (1 credit per story project per 24h; any validation failure is never charged, absorbed-window repeats are free no-ops). Merge YOUR extraction of a prepared window: selectors must quote/anchor exact unit text (server pulls canon verbatim; client canon_text is rejected) and the returned canon_patch must be tail-hash-verified by the client before applying. YOU decide what the story means; the server only verifies anchors and patch safety, not truth. 失败不收费、同项目 24h 只扣一次;AI 提炼、服务端核验锚点与补丁安全,不判断真伪。

NameRequiredDescriptionDefault
stateNo
unitsYes
extractionYes
request_idNoIdempotency key (optional; same request_id never double-charges)
license_keyNoLicense key NRC-XXXX-XXXX-XXXX-XXXX (optional — one free analysis per day works without one)

Output Schema

NameRequiredDescription
okYes
toolNo
no_opNo
stateNo
reasonNo
creditsNo
messageNo
recoveryNo
conflictsNo
request_idNo
canon_patchNo
diagnosticsNo
fingerprintNo
contract_versionNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing the cost model (1 credit per story project per 24h), that validation failures are never charged, that repeats of an absorbed window are free no-ops, and that the client is responsible for hash-verifying the patch. It does not describe what canon state is actually mutated (supersede/archive effects live only in the schema). The 'repeats are free no-ops' phrasing sits in mild tension with idempotentHint=false, but this reads as a specific carve-out rather than a direct contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The English text is front-loaded with the charging rule and then moves to mechanics and responsibility, which is sensible ordering. But it is a dense run-on with stacked parentheticals, and the full Chinese restatement duplicates the same content rather than adding information, so not every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a charged, deeply nested mutation tool with an output schema, the description supplies the crucial pieces an agent needs: cost/retry semantics, the anchoring contract, and the client-side verification obligation. Missing only the explicit upstream dependency (prepared window) and a hint of what state transitions the call performs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 40% schema description coverage, the description carries real weight: it explains that quote/anchor selectors must be verbatim unit text (the schema only says quote is a non-empty string) and that client canon_text is rejected, which governs canon_segments and bible_ops.sources. It leaves state, units, window_fp, base_state_hash and story_merge unexplained, so compensation is partial rather than complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: merging the caller's own extraction of a prepared window into canonical state, with a clear division of labor ("YOU decide what the story means; the server only verifies anchors and patch safety"). It distinguishes itself from the prepare step implicitly via "a prepared window" but never names prepare_story_window or render_story_handoff, so differentiation relies on inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete operating context: selectors must quote/anchor exact unit text, client-supplied canon_text is rejected, and the returned canon_patch must be tail-hash-verified before applying. However, it never states the prerequisite (a window prepared by prepare_story_window) or when to prefer a sibling, so the routing guidance stays implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_screenplayScreenplay statisticsAInspect

Deterministic screenplay statistics from the Narracore analyzer (analyzer_version 1.0, same rules as narracore.cn): a scene list with structured scene headings (scene number / location / time of day / INT-EXT parsed from each heading), per-scene word count, dialogue ratio and action density, a character table (cue count, scenes present, dialogue lines, dialogue chars, share of dialogue), and totals.genko_yoshi manuscript-sheet counts for Japanese competitions (400-character 20×20, 200-character 20×10, Kido-style 20×40 — always confirm the current rules of the competition you are entering). Accepts the same inputs as format_screenplay (input_format="text" or "blocks") — pass the SAME screenplay to both tools: one credit covers one screenplay for 24 hours across the screenplay tools (format / analyze / diagnose / convert / video prompts). When chaining tools, pass back the blocks you received (structured), not the formatted plain text. Failed calls are never charged; retrying the same request_id never double-charges. 剧本确定性统计:场景清单(结构化场景头)、逐场字数/对白占比/动作密度、角色戏份表、日式稿纸枚数三口径;同一份剧本 24 小时内多工具只扣一次。

NameRequiredDescriptionDefault
textNoRaw screenplay text (required when input_format="text")
blocksNoTyped blocks (required when input_format="blocks")
request_idNoIdempotency key (optional)
license_keyNoLicense key NRC-XXXX-XXXX-XXXX-XXXX (optional — free daily quota works without one)
input_formatNotext (default): line-based screenplay text. blocks: typed blocks (e.g. the blocks returned by format_screenplay).

Output Schema

NameRequiredDescription
okYes
toolNo
stateNo
reasonNo
scenesNo
totalsNo
creditsNo
messageNo
recoveryNo
conflictsNo
next_stepNo
charactersNo
request_idNo
diagnosticsNo
next_actionsNo
analyzer_versionNo
contract_versionNo
validation_statusNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond annotations: analyzer/version determinism tied to a specific rule set, a credit model (one credit covers one screenplay for 24h across five tools), no charge on failed calls, and request_id-based idempotent billing. This resolves the apparent tension with idempotentHint=false by clarifying that only billing is idempotent, not output state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The capability statement is front-loaded and the billing/chaining rules are packed into dense but useful sentences. It runs long and the trailing Chinese sentence largely restates the English content, which adds length without new information for a single-language reader.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values need no prose explanation, and the description still names the main result sections. Combined with billing, determinism, and chaining guidance, an agent has everything needed to call this correctly alongside format_screenplay.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description adds meaning on top by explaining that input_format='blocks' is meant to receive blocks returned by a sibling tool and that plain formatted text should not be re-fed during chaining. It does not elaborate on text vs blocks parsing tradeoffs or the license_key/request_id parameters, which the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (deterministic screenplay statistics) and enumerates concrete outputs: scene list with parsed headings, per-scene word count, dialogue ratio, action density, character table, genko_yoshi counts. It also names a sibling (format_screenplay) whose inputs it shares, so an agent can place it in the tool family without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operating context: pass the same screenplay used with format_screenplay, and when chaining, pass back blocks (structured) rather than formatted text. It does not, however, specify when to prefer this over diagnose_scenes or compile_film_breakdown, and gives no explicit exclusions, so it stops short of full alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

build_video_promptsVideo prompt scaffolds from screenplayAInspect

Turn a screenplay into structured video-generation prompt scaffolds (deterministic — no LLM on the server; YOU fill the creative fields). For each selected scene it estimates ~15s segments (marked estimated), registers entities (characters + dialogue counts), proposes ≤4 shots per segment at beat boundaries, pre-fills dialogue lines VERBATIM from the screenplay (never rewrite them), and emits a two-layer template per segment: a SHARED block (A/V limits, camera base, style, entities, causal chain, global guards) written once, plus SHOT blocks carrying only private fields, with CUT-OUT/CUT-IN handoff lines between shots. STYLE GUIDANCE, never a style lock: by default the style section is a decision checklist (medium / frame-rate mechanism / brush / color-domain boundaries / light & face readability / banned vocabulary, each with how-to and example); optionally pass style="engine_cinematic" | "painted_on_twos" | "live_action_neutral" as an EDITABLE starting point, and/or style_note (≤500 chars, passed through verbatim). The response includes a condensed filling guide (eyeline = screen vector, performance arc, causal chain, motion domains, cut-point two-state, targeted negative guards). Estimates are proposals — adjust to the scene's beats. Charged like the other screenplay tools: one credit covers one screenplay for 24 hours across the screenplay tools; failed calls are never charged; same request_id retries never double-charge. After filling, call check_video_prompts (free) for drift findings. 剧本→视频提示词骨架:台词逐字预填、实体登记、段-镜两层结构与切点两态;风格由用户决定(决策清单+可选预设+自由附注),服务端不代做创意决定。

NameRequiredDescriptionDefault
textNoRaw screenplay text (required when input_format="text")
styleNoOptional style preset as an EDITABLE starting point: engine_cinematic / painted_on_twos / live_action_neutral (default: decision checklist — never a lock)
blocksNoTyped blocks (required when input_format="blocks")
scenesNoScene numbers (1-based) to scaffold; default all (batch with this when a full screenplay is too large)
request_idNoIdempotency key (optional)
style_noteNoFree-form style note (≤500 chars) passed through VERBATIM into every segment shared block — never validated
license_keyNoLicense key NRC-XXXX-XXXX-XXXX-XXXX (optional — free daily quota works without one)
input_formatNotext (default): line-based screenplay text. blocks: typed blocks (e.g. from format_screenplay).
segment_secondsNoTarget segment duration in seconds (default 15, range 5-60) — estimates, adjust to actual beats

Output Schema

NameRequiredDescription
okYes
toolNo
guideNo
stateNo
styleNo
reasonNo
scenesNo
totalsNo
creditsNo
messageNo
recoveryNo
conflictsNo
next_stepNo
request_idNo
diagnosticsNo
next_actionsNo
global_entitiesNo
contract_versionNo
scaffold_versionNo
style_template_versionNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are minimal (readOnly=false, idempotent=false), so the description carries most of the burden and delivers: determinism, server-side no-LLM behavior, verbatim dialogue preservation, bidirectionality of CUT-OUT/CUT-IN, and a full billing model (one credit/24h, failures not charged, request_id idempotency). It stops short of describing output shape or any rate limits, keeping it out of the top band.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and deterministic caveat lead cleanly, but the body is one very long compound sentence packed with parenthetical asides and a bilingual trailer. It is thorough rather than tight; a reader must parse several clauses before reaching the key billing and workflow guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 9 parameters, no required fields, complex two-layer output, and an output schema present, the description covers the workflow end-to-end: input modes, entity registration, shot proposal heuristics, style handling, billing, and the next tool to call. Nothing an agent needs in order to invoke it correctly is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and every parameter carries a description, so the baseline is 3. The description adds meaning beyond the schema for style (editable starting point, never a lock), style_note (verbatim, unvalidated), and segment_seconds (estimates to adjust), but these are restatements of schema intent rather than new syntax this contract provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (turn a screenplay into video-generation prompt scaffolds) and a specific resource, and explicitly distinguishes itself from siblings by describing the two-layer segment/shot output that no sibling (analyze_screenplay, compile_film_breakdown, check_video_prompts) produces. The deterministic/no-LLM clause makes the value proposition unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent forward: 'After filling, call check_video_prompts (free) for drift findings,' and gives the when-to-use condition for style presets vs. the default checklist. It does not, however, state when to choose build_video_prompts over analyze_screenplay or compile_film_breakdown, so the upstream selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_creditsCheck remaining creditsA
Read-onlyIdempotent
Inspect

Check the remaining credits for a Narracore license key (NRC-XXXX-XXXX-XXXX-XXXX), plus recent usage and the purchase link. One credit covers one screenplay for 24 hours across the screenplay tools, or one film analysis, or one story project for 24 hours. Costs nothing. 查询授权码剩余服务次数(1 次=一份剧本 24 小时剧本类工具通用,或一次拉片分析,或一个故事项目 24 小时)。 Preferred: set the key in your MCP client auth (Authorization: Bearer NRC-…) instead of passing it in chat.

NameRequiredDescriptionDefault
license_keyNoLicense key NRC-XXXX-XXXX-XXXX-XXXX (optional if configured in client auth header)

Output Schema

NameRequiredDescription
okYes
modeNo
usedNo
limitNo
stateNo
reasonNo
messageNo
key_hintNo
recoveryNo
conflictsNo
remainingNo
request_idNo
scope_noteNo
diagnosticsNo
purchase_urlNo
recent_callsNo
resets_at_utcNo
contract_versionNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly/idempotent/non-destructive, so the bar is lower; the description adds genuinely useful behavior — what a credit actually buys (one screenplay for 24 hours across screenplay tools, one film analysis, or one story project for 24 hours) and that the call is free.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded and the credit-cost explanation is valuable, but the full Chinese sentence restates the English credit definition verbatim for the same reader, which is duplication rather than added information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation, and the description covers the credit model, the free-call fact, and the auth preference. Complete enough for a zero-required-parameter read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema already documents the NRC pattern and the 'optional if configured in client auth header' note, so the description largely repeats it. Baseline 3 applies since the schema carries the parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Check the remaining credits for a Narracore license key') and enumerates the secondary returns (recent usage, purchase link). No sibling tool does anything comparable, so the agent can distinguish it instantly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear invocation context: 'Costs nothing' and the preferred auth method ('set the key in your MCP client auth instead of passing it in chat'). It does not discuss when to call it versus alternatives, but no sibling overlaps, so the guidance that matters is present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_video_promptsFree prompt quality gatesA
Read-onlyIdempotent
Inspect

FREE deterministic quality gates for video-generation prompts written against a screenplay (no LLM on the server — pattern matching and set comparison only; findings are reported, nothing is blocked). Submit the SAME screenplay plus up to 10 finished prompt texts (≤20k chars each). VIOLATIONS (objective locks): DIALOGUE_DRIFT — a DIALOGUE line attributed to a registered screenplay character whose text is not found verbatim (whitespace/punctuation-insensitive), i.e. rewritten, trimmed or hallucinated dialogue; STRUCTURE_MISSING_CUTOUT / _CUTIN / HANDOFF_MISMATCH — scaffold-format prompts ([SHOT n] markers) must carry CUT-OUT last-frame and CUT-IN first-frame states with the next shot repeating the previous verbatim; STRUCTURE_DUPLICATES_SHARED — a SHARED line restated inside a shot block (shot blocks carry only private fields). ADVISORIES (disable with advisories=false): BARE_EYELINE ("looks at X" with no screen-space direction), LITERARY_RHETORIC (metaphors a renderer cannot draw), EMPTY_NEGATIVE ("no weirdness"-style), CONFLICT_PAIRS (locked vs handheld, single-shot vs hard cuts, on-twos vs smooth), PLACEHOLDER_LEFT, CHAR_LIMIT (yours, or the style preset's recommended one), STYLE_CONSISTENCY (banned vocabulary of your chosen preset, or two medium families mixed). Free-form prompts without [SHOT] markers skip structure gates (reported honestly). Free — no key needed, works without one. 免费确定性质量门:台词逐字锁、结构切点两态锁(violation)+ 视线/修辞/冲突/风格自洽启发(advisory),只报告不拦截。

NameRequiredDescriptionDefault
textNoThe screenplay the prompts were written from (required when input_format="text")
styleNoThe style preset you built with (enables its banned-vocabulary and recommended-limit advisories)
blocksNoTyped blocks (the screenplay the prompts were written from)
promptsNoThe finished prompt(s), 1-10 items (from build_video_prompts scaffolds or free-form)
advisoriesNoRun advisory gates too (default true; false = violations only)
char_limitNoOptional character limit per prompt (advisory; default: the style preset recommendation, or none)
request_idNoEchoed back for tracing (this tool is free — no idempotency semantics needed)
input_formatNotext (default): line-based screenplay text. blocks: typed blocks (e.g. from format_screenplay).

Output Schema

NameRequiredDescription
okYes
toolNo
stateNo
styleNo
reasonNo
totalsNo
messageNo
promptsNo
recoveryNo
conflictsNo
advisoriesNo
request_idNo
screenplayNo
diagnosticsNo
gates_versionNo
contract_versionNo
style_template_versionNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly/idempotent/non-destructive), yet the description adds significant behavior: no LLM on the server, pure pattern matching and set comparison, findings are reported and nothing is blocked, free with no key required, and the exact violation vs advisory taxonomy with the escape hatch (advisories=false). That is well beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The load-bearing sentence (free, deterministic, screenplay-vs-prompts comparison, report-only) is front-loaded, and every sentence carries gate semantics. The violation/advisory enumeration is dense and reads as a wall of text, but given the number of distinct gates it is mostly justified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value detail is not required. Combined with 100% schema coverage and explicit annotations, the description leaves no gap an agent needs in order to call this tool correctly, including the free-form vs scaffolded branch.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3; the description still adds meaning by clarifying that up to 10 prompt texts at <=20k chars each are accepted, that style enables preset-specific banned-vocabulary/limit advisories, and that char_limit defaults to the style preset recommendation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'deterministic quality gates for video-generation prompts written against a screenplay'. It also names the sibling workflow it consumes ('build_video_prompts scaffolds') and distinguishes itself from siblings that analyze/validate the screenplay rather than the prompts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operational context: submit the SAME screenplay plus 1-10 prompt texts, free-form prompts without [SHOT] markers skip structure gates, advisories can be disabled. It does not explicitly say when to prefer this over siblings like analyze_screenplay or validate_film_breakdown, so it falls short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compile_film_breakdownCompile film analysis (charged)AInspect

CHARGED (1 credit per film analysis — the same analysis_id within 24h is NOT charged again; failed validation is never charged). Compile a validated film breakdown into a bounded, derivable result: authoritative validation → window→canonical shot merge (long-take windows are recombined so a 60s take is ONE shot in every statistic) → exact aggregates (distributions, shot lengths, per-scene aggregates, coverage) → deterministic-heuristic reconstructions (performance arc, cut logic, camera-performance logic — reproducible interpretations, explicitly labelled, NOT facts) → a print-ready PDF report (scene table + per-scene arcs + shot tables) with a 24h signed link. Your input records are NEVER echoed back — you already have them locally; this returns only the derived increments. analysis_id = sha256(media_id + sha256(topology_hash + film_schema_version + film_vocab_version)) with media_id = sha256(video bytes) computed locally; the server never sees the video and cannot verify media_id (it exists to protect YOU from double-charging, not as anti-cheat). Recompile after re-observing with a different model: same analysis_id, no re-charge; change the cuts or the protocol: new analysis. 收费编译:权威校验→长镜窗口合并→确定性统计+启发式重组→PDF 报告;不完整窗口/非法词表一律拒绝且不收费;同一分析任务 24h 内重复编译不重复扣费。

NameRequiredDescriptionDefault
shotsYes
detailNoReceipt detail (default full): summary omits per-scene aggregates and heuristic derivations — totals, identifiers and the PDF report link stay; free to re-call full within the same analysis_id 24h window
scenesYes
relationsYes
request_idNoIdempotency key (optional; same request_id never double-charges)
license_keyNoLicense key NRC-XXXX-XXXX-XXXX-XXXX (optional — one free analysis per day works without one)
film_manifestYes

Output Schema

NameRequiredDescription
okYes
toolNo
stateNo
statsNo
detailNo
reasonNo
creditsNo
messageNo
recoveryNo
conflictsNo
report_urlNo
request_idNo
analysis_idNo
detail_noteNo
diagnosticsNo
report_metaNo
report_pagesNo
topology_hashNo
patch_truncatedNo
contract_versionNo
exact_statisticsNo
normalized_patchNo
scene_aggregatesNo
analysis_spec_hashNo
truncated_scene_keysNo
diagnostics_truncatedNo
heuristic_derivationsNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the generic write/idempotency stance, and the description adds substantial behavioral context beyond them: the 1-credit charge model, 24h analysis_id de-duplication, no charge on failed validation, the 24h expiring signed PDF link, and the explicit warning that input records are never echoed back. It also discloses that the server cannot verify media_id and that media_id exists only to protect the caller from double-charging.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The charge rule and pipeline order are front-loaded, which is good, but the paragraph is extremely dense (nested parentheticals, long arrow chains) and then repeats the entire content in Chinese, roughly doubling length without adding new information for a single-language agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a high-complexity tool with nested payloads and an output schema, the description covers charging, dedup, validation failure behavior, output artifacts and the PDF link, which is most of what an agent needs. The remaining gap is the semantics of the nested shot/scene layer objects, which are handled only by the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema coverage at only 43%, the description compensates by explaining media_id = sha256(video bytes) computed locally, the analysis_id derivation, and the idempotency semantics of request_id. It adds real meaning beyond the schema, though the structure and meaning of the shots/scenes/relations layer fields remain schema-only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (compile) and resource (film breakdown) and then enumerates the exact pipeline stages, from authoritative validation through window/canonical shot merge, aggregates, heuristic reconstructions and a print-ready PDF with a 24h signed link. This scope (charged compilation producing a PDF report) is unmistakably distinct from siblings like validate_film_breakdown or plan_film_analysis without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit conditions for recompiling (new model, same analysis_id, no re-charge) vs starting a new analysis (different cuts or protocol), plus the free re-call rules and the detail=summary option. It implies the input must already be validated but never names the sibling tool that performs validation, so routing to alternatives is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

convert_fountainFountain ⇄ blocks converterAInspect

Convert between Narracore screenplay blocks and Fountain (the plain-text screenplay interchange format). direction="to_fountain": screenplay (input_format="text" or "blocks") → Fountain text (Latin content upper-cased per convention, CJK preserved verbatim; notes as [[…]]). direction="from_fountain": Fountain text → typed blocks you can pass straight to format_screenplay (input_format="blocks") — supports scene headings (INT/EXT/EST/I/E), character cues with (V.O.)-style extensions (extension becomes the delivery hint), parentheticals, dialogue, TO: transitions, > forced transitions, . forced action, [[notes]]; boneyard /…/ is stripped and reported, title-page keys and # section headers are skipped with warnings; mostly-Chinese content falls back to the Chinese screenplay parser (Fountain rules target Latin scripts). One credit covers one screenplay for 24 hours across the screenplay tools — converting and then formatting the same screenplay charges once. Failed calls are never charged. 剧本块与 Fountain 格式互转;同一份剧本 24 小时内多工具只扣一次。

NameRequiredDescriptionDefault
textNoto_fountain only: raw screenplay text (input_format="text")
blocksNoto_fountain only: typed blocks (input_format="blocks")
fountainNofrom_fountain only: the Fountain source text
directionNoRequired, one of to_fountain | from_fountain: to_fountain = screenplay → Fountain text; from_fountain = Fountain text → typed blocks.
request_idNoIdempotency key (optional)
license_keyNoLicense key NRC-XXXX-XXXX-XXXX-XXXX (optional — free daily quota works without one)
input_formatNoto_fountain only: screenplay source format

Output Schema

NameRequiredDescription
okYes
toolNo
stateNo
statsNo
blocksNo
reasonNo
creditsNo
messageNo
fountainNo
recoveryNo
warningsNo
conflictsNo
directionNo
next_stepNo
request_idNo
diagnosticsNo
next_actionsNo
contract_versionNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing transformation side effects (Latin upper-casing, CJK preserved verbatim, notes as [[…]]), lossy/ignored input (boneyard stripped and reported, title-page keys and # headers skipped with warnings), a Chinese-content parser fallback, and the unusual billing model (one credit per screenplay per 24h, failed calls never charged). This is exactly the kind of behavior an agent cannot infer from readOnlyHint/destructiveHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded, with purpose stated first and per-direction behavior clustered afterward. The trailing Chinese restatement duplicates the English content, costing a little space without adding information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained; the description covers direction semantics, parsing caveats, fallbacks, and billing, leaving no obvious gap for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds coupling semantics the schema does not convey — that direction determines which of text/blocks/fountain is meaningful and what each direction emits. Useful marginal value over the structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific bidirectional transformation between Narracore screenplay blocks and Fountain text, naming both the resource and both directions. An agent can distinguish it immediately from siblings like format_screenplay or analyze_screenplay.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly defines the two direction values and the condition that selects each, and points to the downstream consumer (pass blocks straight to format_screenplay with input_format="blocks"). There is no explicit when-not-to-use or sibling comparison, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

diagnose_scenesScene shootability diagnosis (AI cites, server scores)AInspect

Scene-level "shootability" diagnosis for a screenplay, using the same ai-2.0 rules as narracore.cn: YOU (the calling AI) cite the evidence, the server validates it and computes the score — no LLM on the server. Two steps: (1) mode="material" (FREE) returns each scene as a numbered block list ([n] [type] text), the strict findings JSON schema, and 6 problem types (abstract_psychology, literary_summary, unfilmable_information, unclear_space, weak_visible_action, unplayable_direction); (2) after analyzing the material yourself, call mode="score" with findings=[{scene, summary, problems:[{type, severity(low|medium|high), evidence (verbatim quote from the material), blocks (ordinals), suggestion}]}]. The server maps ordinals to blocks, drops any finding whose evidence cannot be verified (that scene then scores null — never faked), and computes each scene's 0-100 score (severity-weighted evidence coverage, exact arithmetic) plus a reference-only structural baseline. One credit covers one screenplay for 24 hours across the screenplay tools. Failed calls are never charged. 剧本逐场影视化度诊断:AI 举证、程序算分(0-100,证据核验,无效即空不冒充)。

NameRequiredDescriptionDefault
modeNoRequired, one of material | score: material (free) returns the numbered scene material + schema; score submits findings for validation and scoring.
textNo
blocksNo
scenesNomaterial mode only: scene numbers (1-based) to render; default all
findingsNoscore mode only: your per-scene findings
request_idNoIdempotency key (optional)
license_keyNoLicense key NRC-XXXX-XXXX-XXXX-XXXX (optional — free daily quota works without one)
input_formatNotext (default): line-based screenplay text. blocks: typed blocks (e.g. from format_screenplay).

Output Schema

NameRequiredDescription
okYes
modeNo
toolNo
stateNo
reasonNo
scenesNo
schemaNo
creditsNo
messageNo
overallNo
recoveryNo
versionsNo
conflictsNo
next_stepNo
request_idNo
diagnosticsNo
next_actionsNo
problem_typesNo
contract_versionNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing the core behavioral contract: no server-side LLM, the server maps ordinals to blocks, drops findings whose verbatim evidence cannot be verified (scene then scores null, never faked), and computes a severity-weighted 0-100 score plus a reference-only baseline. It also covers billing behavior (1 credit/24h, failures not charged), which annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the key contract (AI cites, server scores) and structured as a numbered two-step flow, so it reads efficiently despite its length. The trailing Chinese sentence restates the same content already given in English, which is mild redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex two-mode, credit-metered tool, it covers the workflow, the evidence-verification contract, failure handling, billing, and the free tier. An output schema exists, so return-value detail is correctly left to it, and nothing an agent needs to invoke either mode is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, and the description adds real meaning: it explains the material/score mode split, the shape of findings=[{scene, summary, problems:[...]}], the six problem types, that evidence must be a verbatim quote, that blocks are ordinals, and that severity is low|medium|high. This meaningfully supplements the schema, though some field detail remains schema-only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — scene-level 'shootability' diagnosis for a screenplay — and names the exact rule set (ai-2.0 / narracore.cn). It is clearly distinguishable from siblings like analyze_screenplay or format_screenplay because it defines a precise two-mode diagnostic job.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit sequencing: call mode="material" first (free, returns material + schema), analyze yourself, then call mode="score" with findings. It also states credit scope (one screenplay for 24h across screenplay tools) and that failed calls are never charged. It does not, however, position itself against the other screenplay-analysis siblings, so 4 rather than 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

format_screenplayFormat screenplay (blocks + PDF)AInspect

Convert raw or loosely formatted screenplay text (Chinese, English, or mixed — including Japanese broadcast-drama format and Chinese colon-style dialogue scripts) into professionally structured screenplay blocks and a print-ready PDF on a fixed typewriter character grid identical to narracore.cn. Use it for screenplay formatting, import, or producing a shareable screenplay PDF — NOT for general prose rewriting or story editing.

INPUT (contract_version 3) — two modes: • input_format="text" (default): line-based screenplay text, one element per line — scene headings ("INT. LAB - DAY", "第 N 场 …"), CHARACTER names in CAPS or CJK on their own line, short dialogue lines after them, standalone (…) parentheticals, standalone transitions ("CUT TO:", "切至:…"). Inline dialogue 名前「セリフ」 and 人名:台词 is parsed natively. An unbroken wall of text renders as continuous action and is flagged UNRESOLVED_STRUCTURE. • input_format="blocks": typed blocks validated and rendered EXACTLY as submitted, never re-classified; ids echoed. CHAINING: to run other tools on this screenplay, pass back the BLOCKS you received — not the plain text (it parses differently). The same screenplay is charged once per 24h across analyze/diagnose/convert/video-prompt tools; check_video_prompts is free. • output="validate_only": structure check + diagnostics only, free.

Before delivering: read diagnostics[] (code/severity/line or block_id/message/suggested_action) with the user; confidence = share of non-ambiguous lines, NOT accuracy.

Billing: one credit = one screenplay for 24h across the screenplay tools (or one film analysis / one story project). Free tier: one credit per day per visitor, no key. Failed calls are never charged; the same request_id never double-charges. On free_tier_exhausted or quota_exhausted: relay the price and purchase link from the response verbatim; never invent a license key.

Competition submissions: style="uk"/"fr" (A4, BBC/French layout), dialogue_breaks=true ((MORE)/(CONT'D) on page breaks), cover.anonymous=true (no author on title page) — rendering options, free within the 24h bundle.

Full parameter manual (cover/header/footer/style, examples): https://narracore.app/llms.txt

NameRequiredDescriptionDefault
textNoRaw screenplay text, one element per line (required when input_format="text")
coverNoCover page fields — any field present adds a cover page (not counted in page numbers); date defaults to today (UTC) when omitted; anonymous=true renders only title+date (competition blind-review convention — author/version stay off the page)
paperNoPaper override for us/uk/fr: "letter" / "a4" / "a4_landscape" / "b4" (default follows style: us → letter, uk/fr → a4). Grid and page count are identical across papers. Vertical ja_* styles use a fixed sheet (omit)
styleNoSubmission style: "us" (default — US Letter) / "uk" (A4, BBC-style margins, scene numbers on both sides) / "fr" (A4, French-style centered dialogue column) / vertical Japanese manuscript sheets "ja_business" (20×10, A4 landscape), "ja_standard" (20×20 400-character sheet, B4), "ja_kido" (20×40 Kido-style, A4 landscape) — pages = sheets. Rendering option — free to change within the same 24h screenplay bundle
blocksNoTyped blocks (required when input_format="blocks")
footerNoExplicit footer (centered below the text box); same value resolution as header
headerNoExplicit running header (overrides the default page-number line): field values come from cover; missing fields are skipped; page_number renders N/M at the right edge
outputNopdf_and_blocks (default) / blocks_only / validate_only (free structure check, no render)
includeNoReceipt body shape (default both): blocks=typed blocks only, plain_text=formatted text only — halves the receipt for large screenplays; validate_only always echoes blocks
request_idNoIdempotency key (optional)
license_keyNoLicense key NRC-XXXX-XXXX-XXXX-XXXX (optional — free daily quota works without one)
input_formatNotext (default): line-based screenplay text parsed server-side. blocks: submit typed blocks directly — validated and rendered as-is, never re-classified.
dialogue_breaksNoUS submission convention for dialogue spanning a page break: (MORE) at the bottom of the page and SPEAKER (CONT'D) at the top of the next. Default false
content_languageNoContent language (default: auto-detect)

Output Schema

NameRequiredDescription
okYes
stateNo
statsNo
blocksNo
reasonNo
creditsNo
messageNo
pdf_urlNo
pdf_metaNo
recoveryNo
warningsNo
conflictsNo
next_stepNo
pdf_bytesNo
confidenceNo
plain_textNo
request_idNo
diagnosticsNo
next_actionsNo
contract_versionNo
validation_statusNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the safety profile (readOnly=false, destructive=false, idempotent=false); the description adds a large amount beyond that: 24h-per-screenplay billing across the tool family, no charge on failure, request_id never double-charging, free tier behavior, quota-exhaustion handling instructions, the UNRESOLVED_STRUCTURE flag on wall-of-text input, and the meaning of the confidence field. Nothing here contradicts the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and the mode/billing sections are cleanly bulleted. The billing paragraph is dense and somewhat sprawling for a tool description, but every block carries operational information an agent needs (modes, chaining, diagnostics, quota).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter tool with nested objects and an output schema, the description covers the decision-relevant gaps: mode selection, chaining, diagnostics interpretation, confidence semantics, and billing/failure behavior. Return-value shape is delegated to the output schema, which is the correct division of labor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description earns more: it explains the two input_format modes conceptually (line-per-element parsing rules vs. blocks rendered exactly as submitted, never re-classified), warns that blocks and text parse differently when chaining, and covers style/dialogue_breaks/cover.anonymous as free rendering options within the bundle.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence names a specific verb (Convert) and precise resource (raw/loosely formatted screenplay text → structured blocks + print-ready PDF on a fixed typewriter grid). It scopes the input domain (Chinese/English/mixed, Japanese broadcast format, colon-style dialogue) and explicitly excludes general prose rewriting, so an agent can distinguish it from siblings like analyze_screenplay or convert_fountain.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states when to use it (formatting, import, shareable PDF) and when not to (general prose rewriting or story editing), plus a concrete free diagnostic path via output="validate_only" and the correct chaining pattern (pass back blocks, not text). It stops short of naming the sibling tools whose boundaries matter most (convert_fountain, render_bilingual_pdf, analyze_screenplay), leaving that routing to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_film_contractFilm protocol contractA
Read-onlyIdempotent
Inspect

FREE. Return the Narracore Film Contract by section — the protocol that lets ANY vision-capable agent turn its own observation of a film into a stable, comparable, traceable Film IR (shot/scene/relation), validated and compiled by this server. The video NEVER leaves your machine: you observe and reason with your own models, this server provides the shared language and the deterministic toolchain. section="core" (default): pipeline, entities, the window protocol for long takes, observability levels (observed/mixed/inferred), entity-level provenance, limits. "vocabulary": the closed vocabularies + alias table (normalization is exact→alias→reject — no fuzzy guessing). "observation_guidance": the observation prompt template + how to write interpretive fields. "reasoning_guidance": the dramatic-layer/scene/relation prompt + the Q&A playbook for answering questions from the compiled result. "media_recipe": reference ffmpeg recipes (a platform adapter example — not authoritative output). "all": every section in one call — recommended on first contact. 免费下发的影视拉片契约:分类词表、观察/推理提示词、窗口协议、问答 playbook 与备料配方示例(section="all" 一次拿全)。

NameRequiredDescriptionDefault
sectionNoContract section to return (default: core; "all" returns every section in one call)
film_schema_versionNoRequest a specific film schema version (default: current)

Output Schema

NameRequiredDescription
okYes
toolNo
stateNo
reasonNo
contentNo
messageNo
sectionNo
recoveryNo
conflictsNo
request_idNo
diagnosticsNo
contract_versionNo
available_sectionsNo
film_vocab_versionNo
film_schema_versionNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/non-openWorld, so the safety profile is covered. The description adds genuinely useful context beyond that: it is free, the video never leaves the caller's machine, and the toolchain is deterministic (normalization is exact→alias→reject, no fuzzy guessing). It does not discuss rate limits or response shape, but the output schema exists to cover the latter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded well with 'FREE' and the core action, and the per-section breakdown is informative. However it is dense and the trailing Chinese sentence largely duplicates the preceding English content without adding new information, which weakens conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations, a full input schema, and an output schema present, the description supplies everything else an agent needs: the purpose of the contract, the meaning of every section, and a first-contact recommendation. Nothing required to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the baseline is 3, but the description goes further by enumerating and explaining each enum value's content (core contents, vocabulary alias table, guidance prompts, media_recipe caveat). The film_schema_version parameter is left to the schema, which is adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'Return the Narracore Film Contract by section' — and immediately defines what that contract is (the protocol that produces a validated Film IR). An agent can distinguish this documentation/contract tool from siblings like compile_film_breakdown or validate_film_breakdown without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear per-section routing (what each section contains) and an explicit recommendation — section="all" on first contact. It does not state when to prefer this over sibling tools or what to do after retrieving the contract, so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plan_film_analysisAnalysis topology from cutsA
Read-onlyIdempotent
Inspect

FREE deterministic. Turn shot-cut timestamps into the analysis topology every Film Protocol agent shares: numbered base shots (shot-000001), long-take windowing (shot-000017-w01of03 when a shot exceeds the profile cap), and greedy analysis units (≤20s / ≤8 shots per unit by default). Pass duration_sec + the cut timestamps you detected locally (e.g. ffmpeg scene filter, threshold 0.30 — see get_film_contract section="media_recipe"); you get back windows and units carrying both source-relative and clip-relative times to cut your analysis clips and label your observations with. No ffmpeg commands are returned (execution is your platform's business). 免费:切镜时间点 → 统一分析拓扑(长镜开窗 + ≤20s/≤8 镜单元)。

NameRequiredDescriptionDefault
duration_secYesTotal duration of the film/video in seconds
cut_timestampsYesShot-cut timestamps in seconds (ascending; 0 and duration are implied)

Output Schema

NameRequiredDescription
okYes
toolNo
stateNo
reasonNo
messageNo
recoveryNo
topologyNo
conflictsNo
windowingNo
request_idNo
diagnosticsNo
contract_versionNo
analysis_profile_versionNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/idempotent/non-destructive, and the description adds genuinely new context: FREE, deterministic, no execution returned, and that outputs carry both source-relative and clip-relative times. The windowing rule for over-cap shots (shot-000017-w01of03) is disclosed rather than hidden. Missing only error/limit behavior for the 4000-item cap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core transformation, then inputs, then outputs, in a logical order with no filler. The appended Chinese restatement duplicates content already stated and is the only notable waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, yet the description still summarizes them. Inputs, defaults, derivation guidance, and the cross-reference to get_film_contract are all covered, so an agent can invoke this correctly without further exploration.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real value: how to obtain cut timestamps (ffmpeg scene filter, threshold 0.30), the implied 0/duration endpoints, and the default unit caps (≤20s / ≤8 shots) that govern how the two inputs are interpreted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource: transform cut timestamps into a shared 'analysis topology' of numbered base shots, long-take windows, and greedy analysis units. The scope (no ffmpeg execution, deterministic) and the sibling-adjacent contract pointer make it distinguishable from tools like analyze_screenplay or compile_film_breakdown.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says what to pass (duration_sec + locally detected cut timestamps) and where to find the detection recipe (get_film_contract section="media_recipe"). It also clarifies what it is not (no ffmpeg commands returned). No explicit 'do not use when' exclusion, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prepare_story_windowStory window split + anchoringA
Read-onlyIdempotent
Inspect

FREE. Split a story conversation (verbatim user/assistant turns) into stable, hash-anchored units for the Narracore Story Continuity Protocol. YOU judge the story; the server only slices and anchors provenance — a source is traceable, not proof your interpretation is true. Keep the full text and returned StoryState client-side (server stores nothing); failed calls are never charged. 免费:故事窗口确定性切分与锚定;AI 判断、服务端只核验出处,出处不证明结论真伪;全文与 state 由调用方保存,失败不收费。

NameRequiredDescriptionDefault
langNoen
stateNo
request_idNoIdempotency key (optional; same request_id never double-charges)
conversationYes

Output Schema

NameRequiredDescription
okYes
toolNo
stateNo
unitsNo
reasonNo
messageNo
recoveryNo
conflictsNo
window_fpNo
worksheetNo
request_idNo
diagnosticsNo
base_state_hashNo
contract_versionNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the bar is lower, yet the description adds real context beyond them: it is FREE, failed calls are never charged, the server stores nothing, and the caller must retain the full text and returned StoryState. It also draws an important epistemic boundary ('a source is traceable, not proof your interpretation is true'). No annotation contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose, cost, and statelessness are front-loaded ('FREE. Split a story conversation...'), and each sentence carries operational meaning. The full bilingual duplication effectively doubles the length, though the lang enum suggests bilingual support is intentional rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with a deeply nested state object and an existing output schema, the description covers the non-obvious essentials: no server-side persistence, cost/idempotency behavior, and the provenance-vs-truth caveat. It omits explicit routing versus the sibling absorb_story_window and any guidance on the state/language parameters, leaving modest gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25% (essentially just request_id), so the schema does not carry the load. The description helps partially by framing that StoryState is returned and must be kept client-side, which clarifies the state round-trip, but it says nothing about the lang enum, the state sub-structure, or the conversation item shape.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: 'Split a story conversation (verbatim user/assistant turns) into stable, hash-anchored units.' It clarifies its role relative to the caller ('YOU judge the story; the server only slices and anchors provenance'), which distinguishes it conceptually from the sibling absorb_story_window, but it never names that sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through the workflow context ('for the Narracore Story Continuity Protocol') and the caller/server division of labor, and the idempotency note tells the agent how repeated calls behave. However, there is no explicit statement of when to use this tool versus the sibling absorb_story_window or when to skip it entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

render_bilingual_pdfBilingual side-by-side screenplay PDFAInspect

Bilingual side-by-side screenplay PDF: submit the ORIGINAL screenplay (same inputs as format_screenplay) plus "translation" — the translated screenplay text you or your AI prepared. Both versions are typeset on the same fixed typewriter grids (Chinese 33×38 / English 61×55) side by side on A3 landscape pages, aligned scene by scene (each scene starts on a fresh page with both versions at the top). The two sides MUST have the SAME number of scene headings — a mismatch returns a scene-by-scene comparison to fix first. The translation is user-provided; this tool typesets, it never translates. One credit = the original screenplay's 24h bundle (same as the other screenplay tools) — revising the translation and re-rendering the same original within 24h is free.

NameRequiredDescriptionDefault
textNoOriginal screenplay text (required when input_format="text")
blocksNoTyped blocks for the original screenplay (required when input_format="blocks")
request_idNoIdempotency key (optional)
license_keyNoLicense key NRC-XXXX-XXXX-XXXX-XXXX (optional — free daily quota works without one)
translationYesTranslated screenplay text (user-provided) — must contain the same number of scene headings as the original
input_formatNotext (default): line-based screenplay text; blocks: typed blocks

Output Schema

NameRequiredDescription
okYes
toolNo
stateNo
statsNo
reasonNo
creditsNo
messageNo
pdf_urlNo
pdf_metaNo
recoveryNo
warningsNo
conflictsNo
next_stepNo
pdf_bytesNo
request_idNo
diagnosticsNo
next_actionsNo
contract_versionNo
validation_statusNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavioral context beyond the annotations: fixed typewriter grids, A3 landscape layout, scene-by-scene alignment, required matching scene-heading counts, mismatch-return behavior, credit cost, and free re-rendering within 24 hours. These details help an agent understand both output behavior and billing-related consequences.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the tool's purpose and then adds only relevant details about layout, alignment constraints, mismatch behavior, and credits. Despite its length, every sentence provides useful information for correct invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and annotations, the description is complete enough for an agent to call the tool correctly. It covers inputs, the non-translation behavior, scene-alignment constraints, failure behavior, and credit implications.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all six parameters, including input_format and translation requirements. The description reinforces that the original uses format_screenplay-style inputs and that translation must match scene headings, but most parameter-level meaning is already carried by the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: it renders a bilingual side-by-side screenplay PDF. It distinguishes this from related tools by explaining that it takes the original screenplay plus a user-provided translation and typesets them together, rather than translating or formatting a single-language screenplay.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly states the input pattern: submit the original screenplay using the same inputs as format_screenplay plus a translation. It also says the translation is user-provided and the tool never translates, which implicitly rules out using it as a translation tool. However, it does not explicitly name the alternative to use for monolingual formatting.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

render_story_handoffStory handoff documentA
Read-onlyIdempotent
Inspect

FREE. Render a StoryState into a zh/en handoff document (recent-canon window + bible) for a successor writer/AI. The server formats the state you SUPPLY — project_token proves identity only, not that the state content is authentic or current. Keep the full text client-side; failed calls are never charged. 免费:把调用方提供的 StoryState 排成交接文档;token 仅证身份、不证明 state 内容真实或最新;失败不收费。

NameRequiredDescriptionDefault
langNoen
stateYes
directionNo
request_idNoIdempotency key (optional; same request_id never double-charges)
recent_charsNo

Output Schema

NameRequiredDescription
okYes
langNo
toolNo
stateNo
reasonNo
handoffNo
messageNo
recoveryNo
conflictsNo
directionNo
request_idNo
diagnosticsNo
contract_versionNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly, idempotent and non-destructive behavior, yet the description adds genuinely new operational facts: the call is FREE, failed calls are never charged, and project_token proves identity only — not the authenticity or freshness of the supplied state. The warning to keep full text client-side is also useful. It stops short of describing output structure or limits, so a 4.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the most important qualifier ('FREE') and then the purpose, with the authenticity caveat following. The bilingual restatement roughly doubles the length, which is defensible for a zh/en-targeted tool but does introduce redundancy. Every sentence otherwise carries weight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-format explanation is rightly omitted, and annotations cover the safety profile. The description supplies the non-obvious trust and billing context an agent needs. It is slightly thin on the tuning parameters (recent_chars, direction), which is the only material gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 20% across 5 parameters. The description adds real meaning for project_token (identity-only, not content validation) and implicitly covers lang (zh/en) and the state payload. However, recent_chars (window size), direction, and the idempotency behavior of request_id are left to the schema, so it does not fully compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Render a StoryState into a zh/en handoff document (recent-canon window + bible) for a successor writer/AI.' The purpose and output artifact are unambiguous. It does not explicitly name or contrast with siblings such as prepare_story_window or absorb_story_window, so it earns a 4 rather than a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended consumer (a successor writer/AI) implies the usage context, but there is no explicit when-to-use versus alternatives like prepare_story_window, nor any stated prerequisites or when-not-to-use conditions. Guidance is inferable but not spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_film_breakdownFree breakdown preflightA
Read-onlyIdempotent
Inspect

FREE preflight for a film breakdown payload (film_manifest + shots + scenes + relations). Checks the contract WITHOUT watching anything: schema shape, closed vocabularies (exact→alias→reject), cross-references (shot ids, scene membership, relation endpoints), window topology (a long take's windows must be complete), provenance shape, and observability metadata only — it never judges whether an observation is TRUE (the server cannot see your video). Lossless representation fixes (alias/trim/wrap) are returned as normalized_patch; semantic problems are errors for YOU to fix, with retry_feedback to feed back to your model. This is advisory: compile_film_breakdown re-validates authoritatively. 免费预检:契约/词表/交叉引用/窗口拓扑校验,只修表示层、绝不代改语义;编译前先跑它可省一次失败往返。

NameRequiredDescriptionDefault
shotsYes
scenesYes
relationsYes
film_manifestYes

Output Schema

NameRequiredDescription
okYes
toolNo
stateNo
statsNo
validNo
reasonNo
messageNo
recoveryNo
conflictsNo
info_countNo
request_idNo
diagnosticsNo
error_countNo
warning_countNo
retry_feedbackNo
patch_truncatedNo
contract_versionNo
normalized_patchNo
diagnostics_truncatedNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/closed-world, and the description adds substantive behavior beyond them: it never watches video or judges observation truth, only fixes the representation layer, separates lossless fixes (normalized_patch) from semantic errors, and is advisory rather than authoritative. That is rich context an agent needs to interpret results correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the key qualifier (FREE preflight) and dense with signal, but the fully duplicated Chinese sentence adds length without adding information for a single-language reader. Structure is otherwise tight with no filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-param nested validation tool with an output schema, the description is close to complete: it scopes what is and isn't validated and explains the advisory relationship to compile_film_breakdown. Return-value details are correctly delegated to the output schema, so no gap there; only the nested field-level semantics are left to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate; it names all four top-level parameters and assigns each a validation role (cross-referencing shot ids, scene membership, relation endpoints, window completeness for long takes). It does not enumerate the many nested layer/provenance fields, but it covers the parameters that matter for invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (validate) and resource (a film breakdown payload of film_manifest + shots + scenes + relations), then enumerates the exact checks: schema shape, closed vocabularies, cross-references, window topology, provenance, observability metadata. It explicitly distinguishes itself from compile_film_breakdown as the non-authoritative preflight.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use guidance ('compile_film_breakdown re-validates authoritatively' and the Chinese line advising to run it before compiling to save a failed round trip), plus what to do with results (normalized_patch vs errors, retry_feedback to feed back to the model). Nothing is left to inference.

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.

  1. 2 tool updates
    • Changedformat_screenplay5 fields changed
      • changedInput schema / properties / cover / description
        Previous value: -"Cover page fields — any field present adds a cover page (not counted in page numbers); date defaults to today (UTC) when omitted"New value: +"Cover page fields — any field present adds a cover page (not counted in page numbers); date defaults to today (UTC) when omitted; anonymous=true renders only title+date (competition blind-review convention — author/version stay off the page)"
      • addedInput schema / properties / cover / properties / anonymous
        Added value: +{
        +  "type": "boolean"
        +}
      • addedInput schema / properties / dialogue_breaks
        Added value: +{
        +  "description": "US submission convention for dialogue spanning a page break: (MORE) at the bottom of the page and SPEAKER (CONT'D) at the top of the next. Default false",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / paper
        Added value: +{
        +  "description": "Paper override for us/uk/fr: \"letter\" / \"a4\" / \"a4_landscape\" / \"b4\" (default follows style: us → letter, uk/fr → a4). Grid and page count are identical across papers. Vertical ja_* styles use a fixed sheet (omit)",
        +  "maxLength": 24,
        +  "type": "string"
        +}
      • addedInput schema / properties / style
        Added value: +{
        +  "description": "Submission style: \"us\" (default — US Letter) / \"uk\" (A4, BBC-style margins, scene numbers on both sides) / \"fr\" (A4, French-style centered dialogue column) / vertical Japanese manuscript sheets \"ja_business\" (20×10, A4 landscape), \"ja_standard\" (20×20 400-character sheet, B4), \"ja_kido\" (20×40 Kido-style, A4 landscape) — pages = sheets. Rendering option — free to change within the same 24h screenplay bundle",
        +  "maxLength": 24,
        +  "type": "string"
        +}
    • Addedrender_bilingual_pdf
  2. 3 tool updates
    • Changedcheck_video_prompts3 fields changed
      • changedInput schema / properties / prompts / description
        Previous value: -"The finished prompt(s) (from build_video_prompts scaffolds or free-form)"New value: +"The finished prompt(s), 1-10 items (from build_video_prompts scaffolds or free-form)"
      • removedInput schema / properties / prompts / minItems
        Removed value: -1
      • removedInput schema / required
        Removed value: -[
        -  "prompts"
        -]
    • Changedconvert_fountain3 fields changed
      • changedInput schema / properties / direction / description
        Previous value: -"to_fountain: screenplay → Fountain text. from_fountain: Fountain text → typed blocks."New value: +"Required, one of to_fountain | from_fountain: to_fountain = screenplay → Fountain text; from_fountain = Fountain text → typed blocks."
      • removedInput schema / properties / direction / enum
        Removed value: -[
        -  "to_fountain",
        -  "from_fountain"
        -]
      • removedInput schema / required
        Removed value: -[
        -  "direction"
        -]
    • Changeddiagnose_scenes3 fields changed
      • changedInput schema / properties / mode / description
        Previous value: -"material (free): numbered scene material + schema. score: submit findings, server validates and scores."New value: +"Required, one of material | score: material (free) returns the numbered scene material + schema; score submits findings for validation and scoring."
      • removedInput schema / properties / mode / enum
        Removed value: -[
        -  "material",
        -  "score"
        -]
      • removedInput schema / required
        Removed value: -[
        -  "mode"
        -]
  3. 14 tool updates
    • Changedabsorb_story_window1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "canon_patch": {},
        +    "conflicts": {},
        +    "contract_version": {
        +      "type": "string"
        +    },
        +    "credits": {},
        +    "diagnostics": {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "block_id": {
        +            "type": "string"
        +          },
        +          "code": {
        +            "type": "string"
        +          },
        +          "line": {
        +            "type": "number"
        +          },
        +          "message": {
        +            "type": "string"
        +          },
        +          "severity": {
        +            "type": "string"
        +          },
        +          "suggested_action": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "severity",
        +          "message"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "fingerprint": {
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "no_op": {
        +      "type": "boolean"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "reason": {
        +      "type": "string"
        +    },
        +    "recovery": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "action": {
        +          "type": "string"
        +        },
        +        "field_path": {
        +          "type": "string"
        +        },
        +        "keep_request_id": {
        +          "type": "boolean"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "resets_at_utc": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "action",
        +        "retryable",
        +        "keep_request_id"
        +      ],
        +      "type": "object"
        +    },
        +    "request_id": {
        +      "type": "string"
        +    },
        +    "state": {},
        +    "tool": {
        +      "const": "absorb_story_window",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "ok"
        +  ],
        +  "type": "object"
        +}
    • Changedanalyze_screenplay1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "analyzer_version": {
        +      "type": "string"
        +    },
        +    "characters": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "conflicts": {},
        +    "contract_version": {
        +      "type": "string"
        +    },
        +    "credits": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "bundled": {
        +          "type": "boolean"
        +        },
        +        "charged": {
        +          "type": "number"
        +        },
        +        "free_tier_used": {
        +          "type": "boolean"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "remaining": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        }
        +      },
        +      "required": [
        +        "charged",
        +        "remaining"
        +      ],
        +      "type": "object"
        +    },
        +    "diagnostics": {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "block_id": {
        +            "type": "string"
        +          },
        +          "code": {
        +            "type": "string"
        +          },
        +          "line": {
        +            "type": "number"
        +          },
        +          "message": {
        +            "type": "string"
        +          },
        +          "severity": {
        +            "type": "string"
        +          },
        +          "suggested_action": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "severity",
        +          "message"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "next_actions": {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "billing": {
        +            "enum": [
        +              "free",
        +              "bundled",
        +              "charged"
        +            ],
        +            "type": "string"
        +          },
        +          "purpose": {
        +            "type": "string"
        +          },
        +          "requires": {
        +            "type": "string"
        +          },
        +          "reuse_fields": {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          "tool": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "tool",
        +          "purpose",
        +          "requires",
        +          "billing",
        +          "reuse_fields"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "reason": {
        +      "type": "string"
        +    },
        +    "recovery": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "action": {
        +          "type": "string"
        +        },
        +        "field_path": {
        +          "type": "string"
        +        },
        +        "keep_request_id": {
        +          "type": "boolean"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "resets_at_utc": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "action",
        +        "retryable",
        +        "keep_request_id"
        +      ],
        +      "type": "object"
        +    },
        +    "request_id": {
        +      "type": "string"
        +    },
        +    "scenes": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "state": {},
        +    "tool": {
        +      "const": "analyze_screenplay",
        +      "type": "string"
        +    },
        +    "totals": {},
        +    "validation_status": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "ok"
        +  ],
        +  "type": "object"
        +}
    • Changedbuild_video_prompts1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "conflicts": {},
        +    "contract_version": {
        +      "type": "string"
        +    },
        +    "credits": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "bundled": {
        +          "type": "boolean"
        +        },
        +        "charged": {
        +          "type": "number"
        +        },
        +        "free_tier_used": {
        +          "type": "boolean"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "remaining": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        }
        +      },
        +      "required": [
        +        "charged",
        +        "remaining"
        +      ],
        +      "type": "object"
        +    },
        +    "diagnostics": {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "block_id": {
        +            "type": "string"
        +          },
        +          "code": {
        +            "type": "string"
        +          },
        +          "line": {
        +            "type": "number"
        +          },
        +          "message": {
        +            "type": "string"
        +          },
        +          "severity": {
        +            "type": "string"
        +          },
        +          "suggested_action": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "severity",
        +          "message"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "global_entities": {},
        +    "guide": {
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "next_actions": {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "billing": {
        +            "enum": [
        +              "free",
        +              "bundled",
        +              "charged"
        +            ],
        +            "type": "string"
        +          },
        +          "purpose": {
        +            "type": "string"
        +          },
        +          "requires": {
        +            "type": "string"
        +          },
        +          "reuse_fields": {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          "tool": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "tool",
        +          "purpose",
        +          "requires",
        +          "billing",
        +          "reuse_fields"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "reason": {
        +      "type": "string"
        +    },
        +    "recovery": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "action": {
        +          "type": "string"
        +        },
        +        "field_path": {
        +          "type": "string"
        +        },
        +        "keep_request_id": {
        +          "type": "boolean"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "resets_at_utc": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "action",
        +        "retryable",
        +        "keep_request_id"
        +      ],
        +      "type": "object"
        +    },
        +    "request_id": {
        +      "type": "string"
        +    },
        +    "scaffold_version": {
        +      "type": "string"
        +    },
        +    "scenes": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "state": {},
        +    "style": {},
        +    "style_template_version": {
        +      "type": "string"
        +    },
        +    "tool": {
        +      "const": "build_video_prompts",
        +      "type": "string"
        +    },
        +    "totals": {}
        +  },
        +  "required": [
        +    "ok"
        +  ],
        +  "type": "object"
        +}
    • Changedcheck_credits1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "conflicts": {},
        +    "contract_version": {
        +      "type": "string"
        +    },
        +    "diagnostics": {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "block_id": {
        +            "type": "string"
        +          },
        +          "code": {
        +            "type": "string"
        +          },
        +          "line": {
        +            "type": "number"
        +          },
        +          "message": {
        +            "type": "string"
        +          },
        +          "severity": {
        +            "type": "string"
        +          },
        +          "suggested_action": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "severity",
        +          "message"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "key_hint": {
        +      "type": "string"
        +    },
        +    "limit": {
        +      "type": "number"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "mode": {
        +      "enum": [
        +        "key",
        +        "anonymous"
        +      ],
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "purchase_url": {
        +      "type": "string"
        +    },
        +    "reason": {
        +      "type": "string"
        +    },
        +    "recent_calls": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "recovery": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "action": {
        +          "type": "string"
        +        },
        +        "field_path": {
        +          "type": "string"
        +        },
        +        "keep_request_id": {
        +          "type": "boolean"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "resets_at_utc": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "action",
        +        "retryable",
        +        "keep_request_id"
        +      ],
        +      "type": "object"
        +    },
        +    "remaining": {
        +      "type": "number"
        +    },
        +    "request_id": {
        +      "type": "string"
        +    },
        +    "resets_at_utc": {
        +      "type": "string"
        +    },
        +    "scope_note": {
        +      "type": "string"
        +    },
        +    "state": {},
        +    "used": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "ok"
        +  ],
        +  "type": "object"
        +}
    • Changedcheck_video_prompts1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "advisories": {
        +      "type": "boolean"
        +    },
        +    "conflicts": {},
        +    "contract_version": {
        +      "type": "string"
        +    },
        +    "diagnostics": {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "block_id": {
        +            "type": "string"
        +          },
        +          "code": {
        +            "type": "string"
        +          },
        +          "line": {
        +            "type": "number"
        +          },
        +          "message": {
        +            "type": "string"
        +          },
        +          "severity": {
        +            "type": "string"
        +          },
        +          "suggested_action": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "severity",
        +          "message"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "gates_version": {
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "prompts": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "reason": {
        +      "type": "string"
        +    },
        +    "recovery": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "action": {
        +          "type": "string"
        +        },
        +        "field_path": {
        +          "type": "string"
        +        },
        +        "keep_request_id": {
        +          "type": "boolean"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "resets_at_utc": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "action",
        +        "retryable",
        +        "keep_request_id"
        +      ],
        +      "type": "object"
        +    },
        +    "request_id": {
        +      "type": "string"
        +    },
        +    "screenplay": {},
        +    "state": {},
        +    "style": {},
        +    "style_template_version": {
        +      "type": "string"
        +    },
        +    "tool": {
        +      "const": "check_video_prompts",
        +      "type": "string"
        +    },
        +    "totals": {}
        +  },
        +  "required": [
        +    "ok"
        +  ],
        +  "type": "object"
        +}
    • Changedcompile_film_breakdown2 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "Receipt detail (default full): summary omits per-scene aggregates and heuristic derivations — totals, identifiers and the PDF report link stay; free to re-call full within the same analysis_id 24h window",
        +  "enum": [
        +    "full",
        +    "summary"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "analysis_id": {
        +      "type": "string"
        +    },
        +    "analysis_spec_hash": {
        +      "type": "string"
        +    },
        +    "conflicts": {},
        +    "contract_version": {
        +      "type": "string"
        +    },
        +    "credits": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "bundled": {
        +          "type": "boolean"
        +        },
        +        "charged": {
        +          "type": "number"
        +        },
        +        "free_tier_used": {
        +          "type": "boolean"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "remaining": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        }
        +      },
        +      "required": [
        +        "charged",
        +        "remaining"
        +      ],
        +      "type": "object"
        +    },
        +    "detail": {
        +      "enum": [
        +        "full",
        +        "summary"
        +      ],
        +      "type": "string"
        +    },
        +    "detail_note": {
        +      "type": "string"
        +    },
        +    "diagnostics": {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "block_id": {
        +            "type": "string"
        +          },
        +          "code": {
        +            "type": "string"
        +          },
        +          "line": {
        +            "type": "number"
        +          },
        +          "message": {
        +            "type": "string"
        +          },
        +          "severity": {
        +            "type": "string"
        +          },
        +          "suggested_action": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "severity",
        +          "message"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "diagnostics_truncated": {
        +      "type": "boolean"
        +    },
        +    "exact_statistics": {},
        +    "heuristic_derivations": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "normalized_patch": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "patch_truncated": {
        +      "type": "boolean"
        +    },
        +    "reason": {
        +      "type": "string"
        +    },
        +    "recovery": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "action": {
        +          "type": "string"
        +        },
        +        "field_path": {
        +          "type": "string"
        +        },
        +        "keep_request_id": {
        +          "type": "boolean"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "resets_at_utc": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "action",
        +        "retryable",
        +        "keep_request_id"
        +      ],
        +      "type": "object"
        +    },
        +    "report_meta": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "bytes": {
        +          "type": "number"
        +        },
        +        "expires_at_utc": {
        +          "type": "string"
        +        },
        +        "filename": {
        +          "type": "string"
        +        },
        +        "mime_type": {
        +          "type": "string"
        +        },
        +        "pages": {
        +          "type": "number"
        +        },
        +        "url": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "filename",
        +        "mime_type",
        +        "bytes",
        +        "expires_at_utc",
        +        "pages",
        +        "url"
        +      ],
        +      "type": "object"
        +    },
        +    "report_pages": {
        +      "type": "number"
        +    },
        +    "report_url": {
        +      "type": "string"
        +    },
        +    "request_id": {
        +      "type": "string"
        +    },
        +    "scene_aggregates": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "state": {},
        +    "stats": {},
        +    "tool": {
        +      "const": "compile_film_breakdown",
        +      "type": "string"
        +    },
        +    "topology_hash": {
        +      "type": "string"
        +    },
        +    "truncated_scene_keys": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "ok"
        +  ],
        +  "type": "object"
        +}
    • Changedconvert_fountain1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "blocks": {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "delivery": {
        +            "type": "string"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "location": {
        +            "type": "string"
        +          },
        +          "scene_number": {
        +            "type": "string"
        +          },
        +          "speaker": {
        +            "type": "string"
        +          },
        +          "text": {
        +            "type": "string"
        +          },
        +          "time_of_day": {
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "type"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "conflicts": {},
        +    "contract_version": {
        +      "type": "string"
        +    },
        +    "credits": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "bundled": {
        +          "type": "boolean"
        +        },
        +        "charged": {
        +          "type": "number"
        +        },
        +        "free_tier_used": {
        +          "type": "boolean"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "remaining": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        }
        +      },
        +      "required": [
        +        "charged",
        +        "remaining"
        +      ],
        +      "type": "object"
        +    },
        +    "diagnostics": {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "block_id": {
        +            "type": "string"
        +          },
        +          "code": {
        +            "type": "string"
        +          },
        +          "line": {
        +            "type": "number"
        +          },
        +          "message": {
        +            "type": "string"
        +          },
        +          "severity": {
        +            "type": "string"
        +          },
        +          "suggested_action": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "severity",
        +          "message"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "direction": {
        +      "type": "string"
        +    },
        +    "fountain": {
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "next_actions": {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "billing": {
        +            "enum": [
        +              "free",
        +              "bundled",
        +              "charged"
        +            ],
        +            "type": "string"
        +          },
        +          "purpose": {
        +            "type": "string"
        +          },
        +          "requires": {
        +            "type": "string"
        +          },
        +          "reuse_fields": {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          "tool": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "tool",
        +          "purpose",
        +          "requires",
        +          "billing",
        +          "reuse_fields"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "reason": {
        +      "type": "string"
        +    },
        +    "recovery": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "action": {
        +          "type": "string"
        +        },
        +        "field_path": {
        +          "type": "string"
        +        },
        +        "keep_request_id": {
        +          "type": "boolean"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "resets_at_utc": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "action",
        +        "retryable",
        +        "keep_request_id"
        +      ],
        +      "type": "object"
        +    },
        +    "request_id": {
        +      "type": "string"
        +    },
        +    "state": {},
        +    "stats": {},
        +    "tool": {
        +      "const": "convert_fountain",
        +      "type": "string"
        +    },
        +    "warnings": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "ok"
        +  ],
        +  "type": "object"
        +}
    • Changeddiagnose_scenes1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "conflicts": {},
        +    "contract_version": {
        +      "type": "string"
        +    },
        +    "credits": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "bundled": {
        +          "type": "boolean"
        +        },
        +        "charged": {
        +          "type": "number"
        +        },
        +        "free_tier_used": {
        +          "type": "boolean"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "remaining": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        }
        +      },
        +      "required": [
        +        "charged",
        +        "remaining"
        +      ],
        +      "type": "object"
        +    },
        +    "diagnostics": {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "block_id": {
        +            "type": "string"
        +          },
        +          "code": {
        +            "type": "string"
        +          },
        +          "line": {
        +            "type": "number"
        +          },
        +          "message": {
        +            "type": "string"
        +          },
        +          "severity": {
        +            "type": "string"
        +          },
        +          "suggested_action": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "severity",
        +          "message"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "mode": {
        +      "type": "string"
        +    },
        +    "next_actions": {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "billing": {
        +            "enum": [
        +              "free",
        +              "bundled",
        +              "charged"
        +            ],
        +            "type": "string"
        +          },
        +          "purpose": {
        +            "type": "string"
        +          },
        +          "requires": {
        +            "type": "string"
        +          },
        +          "reuse_fields": {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          "tool": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "tool",
        +          "purpose",
        +          "requires",
        +          "billing",
        +          "reuse_fields"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "overall": {},
        +    "problem_types": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "reason": {
        +      "type": "string"
        +    },
        +    "recovery": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "action": {
        +          "type": "string"
        +        },
        +        "field_path": {
        +          "type": "string"
        +        },
        +        "keep_request_id": {
        +          "type": "boolean"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "resets_at_utc": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "action",
        +        "retryable",
        +        "keep_request_id"
        +      ],
        +      "type": "object"
        +    },
        +    "request_id": {
        +      "type": "string"
        +    },
        +    "scenes": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "schema": {},
        +    "state": {},
        +    "tool": {
        +      "const": "diagnose_scenes",
        +      "type": "string"
        +    },
        +    "versions": {}
        +  },
        +  "required": [
        +    "ok"
        +  ],
        +  "type": "object"
        +}
    • Changedformat_screenplay2 fields changed
      • addedInput schema / properties / include
        Added value: +{
        +  "description": "Receipt body shape (default both): blocks=typed blocks only, plain_text=formatted text only — halves the receipt for large screenplays; validate_only always echoes blocks",
        +  "enum": [
        +    "blocks",
        +    "plain_text",
        +    "both"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "blocks": {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "delivery": {
        +            "type": "string"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "location": {
        +            "type": "string"
        +          },
        +          "scene_number": {
        +            "type": "string"
        +          },
        +          "speaker": {
        +            "type": "string"
        +          },
        +          "text": {
        +            "type": "string"
        +          },
        +          "time_of_day": {
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "type"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "confidence": {
        +      "type": "number"
        +    },
        +    "conflicts": {},
        +    "contract_version": {
        +      "type": "string"
        +    },
        +    "credits": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "bundled": {
        +          "type": "boolean"
        +        },
        +        "charged": {
        +          "type": "number"
        +        },
        +        "free_tier_used": {
        +          "type": "boolean"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "remaining": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        }
        +      },
        +      "required": [
        +        "charged",
        +        "remaining"
        +      ],
        +      "type": "object"
        +    },
        +    "diagnostics": {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "block_id": {
        +            "type": "string"
        +          },
        +          "code": {
        +            "type": "string"
        +          },
        +          "line": {
        +            "type": "number"
        +          },
        +          "message": {
        +            "type": "string"
        +          },
        +          "severity": {
        +            "type": "string"
        +          },
        +          "suggested_action": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "severity",
        +          "message"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "next_actions": {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "billing": {
        +            "enum": [
        +              "free",
        +              "bundled",
        +              "charged"
        +            ],
        +            "type": "string"
        +          },
        +          "purpose": {
        +            "type": "string"
        +          },
        +          "requires": {
        +            "type": "string"
        +          },
        +          "reuse_fields": {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          "tool": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "tool",
        +          "purpose",
        +          "requires",
        +          "billing",
        +          "reuse_fields"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "pdf_bytes": {
        +      "type": "number"
        +    },
        +    "pdf_meta": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "bytes": {
        +          "type": "number"
        +        },
        +        "expires_at_utc": {
        +          "type": "string"
        +        },
        +        "filename": {
        +          "type": "string"
        +        },
        +        "mime_type": {
        +          "type": "string"
        +        },
        +        "pages": {
        +          "type": "number"
        +        },
        +        "url": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "filename",
        +        "mime_type",
        +        "bytes",
        +        "expires_at_utc",
        +        "pages",
        +        "url"
        +      ],
        +      "type": "object"
        +    },
        +    "pdf_url": {
        +      "type": "string"
        +    },
        +    "plain_text": {
        +      "type": "string"
        +    },
        +    "reason": {
        +      "type": "string"
        +    },
        +    "recovery": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "action": {
        +          "type": "string"
        +        },
        +        "field_path": {
        +          "type": "string"
        +        },
        +        "keep_request_id": {
        +          "type": "boolean"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "resets_at_utc": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "action",
        +        "retryable",
        +        "keep_request_id"
        +      ],
        +      "type": "object"
        +    },
        +    "request_id": {
        +      "type": "string"
        +    },
        +    "state": {},
        +    "stats": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "chars": {
        +          "type": "number"
        +        },
        +        "content_language": {
        +          "type": "string"
        +        },
        +        "input_blocks": {
        +          "type": "number"
        +        },
        +        "page_starts": {
        +          "items": {
        +            "type": "number"
        +          },
        +          "type": "array"
        +        },
        +        "pages": {
        +          "type": "number"
        +        },
        +        "render_elements": {
        +          "type": "number"
        +        },
        +        "scenes": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "input_blocks",
        +        "render_elements",
        +        "scenes",
        +        "pages",
        +        "page_starts",
        +        "chars",
        +        "content_language"
        +      ],
        +      "type": "object"
        +    },
        +    "validation_status": {
        +      "type": "string"
        +    },
        +    "warnings": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "ok"
        +  ],
        +  "type": "object"
        +}
    • Changedget_film_contract1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "available_sections": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "conflicts": {},
        +    "content": {
        +      "type": "string"
        +    },
        +    "contract_version": {
        +      "type": "string"
        +    },
        +    "diagnostics": {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "block_id": {
        +            "type": "string"
        +          },
        +          "code": {
        +            "type": "string"
        +          },
        +          "line": {
        +            "type": "number"
        +          },
        +          "message": {
        +            "type": "string"
        +          },
        +          "severity": {
        +            "type": "string"
        +          },
        +          "suggested_action": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "severity",
        +          "message"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "film_schema_version": {
        +      "type": "string"
        +    },
        +    "film_vocab_version": {
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "reason": {
        +      "type": "string"
        +    },
        +    "recovery": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "action": {
        +          "type": "string"
        +        },
        +        "field_path": {
        +          "type": "string"
        +        },
        +        "keep_request_id": {
        +          "type": "boolean"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "resets_at_utc": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "action",
        +        "retryable",
        +        "keep_request_id"
        +      ],
        +      "type": "object"
        +    },
        +    "request_id": {
        +      "type": "string"
        +    },
        +    "section": {
        +      "type": "string"
        +    },
        +    "state": {},
        +    "tool": {
        +      "const": "get_film_contract",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "ok"
        +  ],
        +  "type": "object"
        +}
    • Changedplan_film_analysis1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "analysis_profile_version": {
        +      "type": "string"
        +    },
        +    "conflicts": {},
        +    "contract_version": {
        +      "type": "string"
        +    },
        +    "diagnostics": {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "block_id": {
        +            "type": "string"
        +          },
        +          "code": {
        +            "type": "string"
        +          },
        +          "line": {
        +            "type": "number"
        +          },
        +          "message": {
        +            "type": "string"
        +          },
        +          "severity": {
        +            "type": "string"
        +          },
        +          "suggested_action": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "severity",
        +          "message"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "reason": {
        +      "type": "string"
        +    },
        +    "recovery": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "action": {
        +          "type": "string"
        +        },
        +        "field_path": {
        +          "type": "string"
        +        },
        +        "keep_request_id": {
        +          "type": "boolean"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "resets_at_utc": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "action",
        +        "retryable",
        +        "keep_request_id"
        +      ],
        +      "type": "object"
        +    },
        +    "request_id": {
        +      "type": "string"
        +    },
        +    "state": {},
        +    "tool": {
        +      "const": "plan_film_analysis",
        +      "type": "string"
        +    },
        +    "topology": {},
        +    "windowing": {}
        +  },
        +  "required": [
        +    "ok"
        +  ],
        +  "type": "object"
        +}
    • Changedprepare_story_window1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "base_state_hash": {
        +      "type": "string"
        +    },
        +    "conflicts": {},
        +    "contract_version": {
        +      "type": "string"
        +    },
        +    "diagnostics": {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "block_id": {
        +            "type": "string"
        +          },
        +          "code": {
        +            "type": "string"
        +          },
        +          "line": {
        +            "type": "number"
        +          },
        +          "message": {
        +            "type": "string"
        +          },
        +          "severity": {
        +            "type": "string"
        +          },
        +          "suggested_action": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "severity",
        +          "message"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "reason": {
        +      "type": "string"
        +    },
        +    "recovery": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "action": {
        +          "type": "string"
        +        },
        +        "field_path": {
        +          "type": "string"
        +        },
        +        "keep_request_id": {
        +          "type": "boolean"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "resets_at_utc": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "action",
        +        "retryable",
        +        "keep_request_id"
        +      ],
        +      "type": "object"
        +    },
        +    "request_id": {
        +      "type": "string"
        +    },
        +    "state": {},
        +    "tool": {
        +      "const": "prepare_story_window",
        +      "type": "string"
        +    },
        +    "units": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "window_fp": {
        +      "type": "string"
        +    },
        +    "worksheet": {}
        +  },
        +  "required": [
        +    "ok"
        +  ],
        +  "type": "object"
        +}
    • Changedrender_story_handoff1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "conflicts": {},
        +    "contract_version": {
        +      "type": "string"
        +    },
        +    "diagnostics": {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "block_id": {
        +            "type": "string"
        +          },
        +          "code": {
        +            "type": "string"
        +          },
        +          "line": {
        +            "type": "number"
        +          },
        +          "message": {
        +            "type": "string"
        +          },
        +          "severity": {
        +            "type": "string"
        +          },
        +          "suggested_action": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "severity",
        +          "message"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "direction": {
        +      "type": "string"
        +    },
        +    "handoff": {
        +      "type": "string"
        +    },
        +    "lang": {
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "reason": {
        +      "type": "string"
        +    },
        +    "recovery": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "action": {
        +          "type": "string"
        +        },
        +        "field_path": {
        +          "type": "string"
        +        },
        +        "keep_request_id": {
        +          "type": "boolean"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "resets_at_utc": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "action",
        +        "retryable",
        +        "keep_request_id"
        +      ],
        +      "type": "object"
        +    },
        +    "request_id": {
        +      "type": "string"
        +    },
        +    "state": {},
        +    "tool": {
        +      "const": "render_story_handoff",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "ok"
        +  ],
        +  "type": "object"
        +}
    • Changedvalidate_film_breakdown1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "conflicts": {},
        +    "contract_version": {
        +      "type": "string"
        +    },
        +    "diagnostics": {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "block_id": {
        +            "type": "string"
        +          },
        +          "code": {
        +            "type": "string"
        +          },
        +          "line": {
        +            "type": "number"
        +          },
        +          "message": {
        +            "type": "string"
        +          },
        +          "severity": {
        +            "type": "string"
        +          },
        +          "suggested_action": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "severity",
        +          "message"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "diagnostics_truncated": {
        +      "type": "boolean"
        +    },
        +    "error_count": {
        +      "type": "number"
        +    },
        +    "info_count": {
        +      "type": "number"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "normalized_patch": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "patch_truncated": {
        +      "type": "boolean"
        +    },
        +    "reason": {
        +      "type": "string"
        +    },
        +    "recovery": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "action": {
        +          "type": "string"
        +        },
        +        "field_path": {
        +          "type": "string"
        +        },
        +        "keep_request_id": {
        +          "type": "boolean"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "resets_at_utc": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "action",
        +        "retryable",
        +        "keep_request_id"
        +      ],
        +      "type": "object"
        +    },
        +    "request_id": {
        +      "type": "string"
        +    },
        +    "retry_feedback": {
        +      "type": "string"
        +    },
        +    "state": {},
        +    "stats": {},
        +    "tool": {
        +      "const": "validate_film_breakdown",
        +      "type": "string"
        +    },
        +    "valid": {
        +      "type": "boolean"
        +    },
        +    "warning_count": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "ok"
        +  ],
        +  "type": "object"
        +}
  4. 2 tool updates
    • Changeddiagnose_scenes4 fields changed
      • addedInput schema / properties / findings / items / properties / problems / items / properties / severity / enum
        Added value: +[
        +  "low",
        +  "medium",
        +  "high"
        +]
      • removedInput schema / properties / findings / items / properties / problems / items / properties / severity / maxLength
        Removed value: -16
      • addedInput schema / properties / findings / items / properties / problems / items / properties / type / enum
        Added value: +[
        +  "abstract_psychology",
        +  "literary_summary",
        +  "unfilmable_information",
        +  "unclear_space",
        +  "weak_visible_action",
        +  "unplayable_direction"
        +]
      • removedInput schema / properties / findings / items / properties / problems / items / properties / type / maxLength
        Removed value: -64
    • Changedget_film_contract2 fields changed
      • changedInput schema / properties / section / description
        Previous value: -"Contract section to return (default: core)"New value: +"Contract section to return (default: core; \"all\" returns every section in one call)"
      • changedInput schema / properties / section / enum
        Previous value: -[
        -  "core",
        -  "vocabulary",
        -  "observation_guidance",
        -  "reasoning_guidance",
        -  "media_recipe"
        -]New value: +[
        +  "core",
        +  "vocabulary",
        +  "observation_guidance",
        +  "reasoning_guidance",
        +  "media_recipe",
        +  "all"
        +]
  5. 8 tool updates
    • Changedanalyze_screenplay1 field changed
      • addedInput schema / properties / blocks / items / properties / text / maxLength
        Added value: +200000
    • Changedbuild_video_prompts1 field changed
      • addedInput schema / properties / blocks / items / properties / text / maxLength
        Added value: +200000
    • Changedcheck_video_prompts1 field changed
      • addedInput schema / properties / blocks / items / properties / text / maxLength
        Added value: +200000
    • Changedcompile_film_breakdown6 fields changed
      • addedInput schema / properties / film_manifest / additionalProperties
        Added value: +false
      • addedInput schema / properties / relations / items / additionalProperties
        Added value: +false
      • addedInput schema / properties / scenes / items / additionalProperties
        Added value: +false
      • addedInput schema / properties / scenes / items / properties / entity_provenance / additionalProperties
        Added value: +false
      • addedInput schema / properties / shots / items / additionalProperties
        Added value: +false
      • addedInput schema / properties / shots / items / properties / entity_provenance / additionalProperties
        Added value: +false
    • Changedconvert_fountain1 field changed
      • addedInput schema / properties / blocks / items / properties / text / maxLength
        Added value: +200000
    • Changeddiagnose_scenes1 field changed
      • addedInput schema / properties / blocks / items / properties / text / maxLength
        Added value: +200000
    • Changedformat_screenplay6 fields changed
      • addedInput schema / properties / blocks / items / properties / text / maxLength
        Added value: +200000
      • addedInput schema / properties / cover / additionalProperties
        Added value: +false
      • addedInput schema / properties / cover / properties / author / maxLength
        Added value: +2000
      • addedInput schema / properties / cover / properties / date / maxLength
        Added value: +64
      • addedInput schema / properties / cover / properties / title / maxLength
        Added value: +2000
      • addedInput schema / properties / cover / properties / version / maxLength
        Added value: +64
    • Changedvalidate_film_breakdown6 fields changed
      • addedInput schema / properties / film_manifest / additionalProperties
        Added value: +false
      • addedInput schema / properties / relations / items / additionalProperties
        Added value: +false
      • addedInput schema / properties / scenes / items / additionalProperties
        Added value: +false
      • addedInput schema / properties / scenes / items / properties / entity_provenance / additionalProperties
        Added value: +false
      • addedInput schema / properties / shots / items / additionalProperties
        Added value: +false
      • addedInput schema / properties / shots / items / properties / entity_provenance / additionalProperties
        Added value: +false
  6. 3 tool updates
    • Addedabsorb_story_window
    • Addedprepare_story_window
    • Addedrender_story_handoff
  7. 4 tool updates
    • Addedcompile_film_breakdown
    • Addedget_film_contract
    • Addedplan_film_analysis
    • Addedvalidate_film_breakdown
  8. 2 tool updates
    • Addedbuild_video_prompts
    • Addedcheck_video_prompts
  9. 4 tool updates
    • Addedanalyze_screenplay
    • Addedconvert_fountain
    • Addeddiagnose_scenes
    • Changedformat_screenplay3 fields changed
      • changedInput schema / properties / cover / description
        Previous value: -"Cover page fields — any field present adds a cover page (not counted in page numbers)"New value: +"Cover page fields — any field present adds a cover page (not counted in page numbers); date defaults to today (UTC) when omitted"
      • addedInput schema / properties / footer
        Added value: +{
        +  "description": "Explicit footer (centered below the text box); same value resolution as header",
        +  "properties": {
        +    "items": {
        +      "items": {
        +        "enum": [
        +          "title",
        +          "author",
        +          "date",
        +          "version",
        +          "page_number"
        +        ],
        +        "type": "string"
        +      },
        +      "maxItems": 5,
        +      "minItems": 1,
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "items"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / header
        Added value: +{
        +  "description": "Explicit running header (overrides the default page-number line): field values come from cover; missing fields are skipped; page_number renders N/M at the right edge",
        +  "properties": {
        +    "items": {
        +      "items": {
        +        "enum": [
        +          "title",
        +          "author",
        +          "date",
        +          "version",
        +          "page_number"
        +        ],
        +        "type": "string"
        +      },
        +      "maxItems": 5,
        +      "minItems": 1,
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "items"
        +  ],
        +  "type": "object"
        +}
  10. 2 tool updates
    • First observedcheck_credits
    • First observedformat_screenplay

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables AI agents to turn raw or loosely formatted screenplay text into professionally structured screenplay blocks and typeset plain text on fixed CJK or Latin character grids, with deterministic scene analysis, shootability diagnostics, and Fountain conversion. It runs locally with no account, key, quota, or network calls.
    5
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables assistants to read and write filmmaking projects: import Final Draft, WriterDuet or Fountain scripts, OCR PDFs and scans, edit scenes and elements, search the script, and create or update storyboard shots with panel cutting and reference images. Connects over remote Streamable HTTP with OAuth sign-in and 22 tools, with versioned script history and confirmation before deletions.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI-driven long-form novel creation and management, including chapter generation, character and timeline tracking, semantic memory retrieval, version savepoints, and deep consistency checking across multiple projects through MCP tools, with support for local LM Studio or any OpenAI-compatible API.
    15
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.