Skip to main content
Glama

Narracore Screenplay Formatter

Compile film analysis (charged)

compile_film_breakdown

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 内重复编译不重复扣费。

Input Schema

TableJSON Schema
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

TableJSON Schema
NameRequiredDescriptionDefault
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

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema 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"
      +}
  2. Changed6 schema 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
  3. Added

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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.