Shoot Plan

Practical filming plans for AI assistants. Shot-plan checks are not yet available to customers.

我該用這個嗎

品質與安全性

A
說明品質
97%
結構描述完整度
72%
命名品質
80%
汙染風險
100%
權限相符程度
100%
協定合規性
100%

發現項目(1)

  • LOWTool 'shoot_plan_capabilities' description lacks action verb在 shoot_plan_capabilities 中

根據工具定義與協定合規性的自動化分析。

上下文成本

~5,052Token(工具定義)
~4.4 KB典型回應大小
顯著的注意力影響(128k 上下文的 3.95%)

這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。

安裝

一鍵安裝

將以下內容加入你的 `claude_desktop_config.json` 檔案:

{
  "mcpServers": {
    "shoot-plan": {
      "url": "https://theamateur.co.uk/mcp/shoot-plan"
    }
  }
}

遠端端點

https://theamateur.co.uk/mcp/shoot-planstreamable-http

它能做什麼

工具清單

工具(11)

🟢 唯讀🟡 寫入🔴 刪除⚪ 未知
🟢shoot_plan_capabilities

Return truthful Shoot Plan scope, availability, privacy and commercial state.

輸入結構描述

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object"
}
🟢shoot_plan_example

Return a synthetic example plan generated by the real planner, with its provenance.

輸入結構描述

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object"
}
🟢shoot_plan_quote(projectType, targetRuntimeSeconds, sceneCount, locationCount, peopleCount, ...)

Calculate a deterministic public quote from non-private project metadata. Do not send a script or brief.

輸入結構描述

{
  "type": "object",
  "properties": {
    "projectType": {
      "type": "string",
      "enum": [
        "interview",
        "promo",
        "tutorial",
        "event",
        "narrative"
      ]
    },
    "targetRuntimeSeconds": {
      "type": "integer",
      "minimum": 15,
      "maximum": 7200
    },
    "sceneCount": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "locationCount": {
      "type": "integer",
      "minimum": 1,
      "maximum": 25
    },
    "peopleCount": {
      "type": "integer",
      "minimum": 0,
      "maximum": 50
    },
    "shootMinutes": {
      "type": "integer",
      "minimum": 15,
      "maximum": 1440
    },
    "orientation": {
      "type": "string",
      "enum": [
        "landscape",
        "portrait",
        "square",
        "mixed"
      ]
    },
    "coverageNeeds": {
      "type": "array",
      "uniqueItems": true,
      "items": {
        "type": "string",
        "enum": [
          "interview",
          "demonstration",
          "dialogue",
          "live_event",
          "night",
          "moving_subject",
          "product_detail",
          "voiceover"
        ]
      }
    },
    "equipment": {
      "type": "array",
      "uniqueItems": true,
      "items": {
        "type": "string",
        "enum": [
          "phone",
          "camera",
          "tripod",
          "gimbal",
          "external_microphone",
          "lights",
          "drone"
        ]
      }
    },
    "noAiImagery": {
      "const": true,
      "description": "Legacy compatibility field; omit or send true. The customer films their own material."
    },
    "ownFootageOnly": {
      "const": true,
      "description": "Customer films their own material. Same meaning as noAiImagery; omit or send true."
    }
  },
  "required": [
    "projectType",
    "targetRuntimeSeconds",
    "sceneCount",
    "locationCount",
    "peopleCount",
    "shootMinutes",
    "orientation"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object"
}
🟡shoot_plan_create(orderId, intake, idempotencyKey)

Create a plan for an authenticated organisation after authoritative payment confirmation.

輸入結構描述

{
  "type": "object",
  "properties": {
    "orderId": {
      "type": "string",
      "description": "The order id, or the customer-facing order reference shown on the website (for example A140A800)."
    },
    "intake": {
      "oneOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "title",
            "briefText",
            "beats",
            "safetyAcknowledged"
          ],
          "properties": {
            "title": {
              "type": "string",
              "minLength": 3,
              "maxLength": 120
            },
            "briefText": {
              "type": "string",
              "minLength": 20,
              "maxLength": 20000
            },
            "beats": {
              "type": "array",
              "minItems": 1,
              "maxItems": 20,
              "items": {
                "type": "string",
                "minLength": 3,
                "maxLength": 240
              }
            },
            "beatLocations": {
              "type": "array",
              "minItems": 1,
              "maxItems": 20,
              "items": {
                "type": "string",
                "minLength": 2,
                "maxLength": 120
              }
            },
            "constraints": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "locationNotes": {
                  "type": "string",
                  "maxLength": 1000
                },
                "accessNotes": {
                  "type": "string",
                  "maxLength": 1000
                },
                "soundNotes": {
                  "type": "string",
                  "maxLength": 1000
                },
                "lightNotes": {
                  "type": "string",
                  "maxLength": 1000
                },
                "mobilityNotes": {
                  "type": "string",
                  "maxLength": 1000
                },
                "safetyNotes": {
                  "type": "string",
                  "maxLength": 1000
                },
                "availableMinutes": {
                  "type": "integer",
                  "minimum": 15,
                  "maximum": 1440
                },
                "locationTransferMinutes": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 720
                }
              }
            },
            "safetyAcknowledged": {
              "const": true
            }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "intakeVersion",
            "title",
            "requirements",
            "locations",
            "beats",
            "safetyAcknowledged"
          ],
          "properties": {
            "intakeVersion": {
              "const": 2
            },
            "title": {
              "type": "string",
              "minLength": 3,
              "maxLength": 120
            },
            "context": {
              "type": "string",
              "maxLength": 20000,
              "description": "Optional private context. Never interpreted or used to change the plan."
            },
            "requirements": {
              "type": "array",
              "minItems": 1,
              "maxItems": 40,
              "items": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "requirementId",
                  "text",
                  "importance"
                ],
                "properties": {
                  "requirementId": {
                    "type": "string",
                    "pattern": "^RQ-[0-9]{2}$"
                  },
                  "text": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 240
                  },
                  "importance": {
                    "enum": [
                      "essential",
                      "useful",
                      "optional"
                    ]
                  }
                }
              }
            },
            "locations": {
              "type": "array",
              "minItems": 1,
              "maxItems": 4,
              "items": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "locationId",
                  "name"
                ],
                "properties": {
                  "locationId": {
                    "type": "string",
                    "pattern": "^L-[0-9]{2}$"
                  },
                  "name": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 120
                  },
                  "accessWindow": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "startMinute",
                      "endMinute"
                    ],
                    "properties": {
                      "startMinute": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 1440
                      },
                      "endMinute": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 1440
                      }
                    }
                  },
                  "acoustics": {
                    "enum": [
                      "quiet",
                      "noise_controllable",
                      "noise_fixed",
                      "unknown"
                    ]
                  },
                  "quieterPosition": {
                    "enum": [
                      "permitted",
                      "not_permitted",
                      "unknown"
                    ]
                  }
                }
              }
            },
            "participants": {
              "type": "array",
              "maxItems": 12,
              "items": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "participantId",
                  "label"
                ],
                "properties": {
                  "participantId": {
                    "type": "string",
                    "pattern": "^P-[0-9]{2}$"
                  },
                  "label": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "window": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "startMinute",
                      "endMinute"
                    ],
                    "properties": {
                      "startMinute": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 1440
                      },
                      "endMinute": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 1440
                      }
                    }
                  }
                }
              }
            },
            "beats": {
              "type": "array",
              "minItems": 1,
              "maxItems": 20,
              "items": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "beatId",
                  "label",
                  "purpose",
                  "requirementIds",
                  "locationId"
                ],
                "properties": {
                  "beatId": {
                    "type": "string",
                    "pattern": "^B-[0-9]{2}$"
                  },
                  "label": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 120
                  },
                  "purpose": {
                    "enum": [
                      "interview_answer",
                      "voiceover_line",
                      "process_step",
                      "result_reveal",
                      "place_context",
                      "closing_action",
                      "live_moment",
                      "dialogue_exchange"
                    ]
                  },
                  "requirementIds": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 10,
                    "uniqueItems": true,
                    "items": {
                      "type": "string",
                      "pattern": "^RQ-[0-9]{2}$"
                    }
                  },
                  "locationId": {
                    "type": "string",
                    "pattern": "^L-[0-9]{2}$"
                  },
                  "repeatable": {
                    "enum": [
                      "yes",
                      "no",
                      "unknown"
                    ],
                    "description": "Whether this key moment can be filmed again. When omitted, it is treated as not confirmed repeatable, so it is planned as one take."
                  },
                  "speech": {
                    "enum": [
                      "none",
                      "on_camera",
                      "voiceover"
                    ]
                  },
                  "participantIds": {
                    "type": "array",
                    "maxItems": 12,
                    "uniqueItems": true,
                    "items": {
                      "type": "string",
                      "pattern": "^P-[0-9]{2}$"
                    }
                  },
                  "keyDetail": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 160
                  },
                  "actionSeconds": {
                    "type": "integer",
                    "minimum": 5,
                    "maximum": 3600
                  },
                  "continuousMinutes": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 480
                  },
                  "eventStartMinute": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 1440
                  },
                  "eventStartFlexible": {
                    "const": true
                  },
                  "dependsOn": {
                    "description": "Earlier stages that must finish first. Omit to follow the preceding process/result stage in input order. Use [] only for a genuinely independent or already prepared result.",
                    "type": "array",
                    "maxItems": 19,
                    "uniqueItems": true,
                    "items": {
                      "type": "string",
                      "pattern": "^B-[0-9]{2}$"
                    }
                  }
                }
              }
            },
            "resources": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "operators": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 4
                },
                "captureDevices": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 4
                },
                "equipment": {
                  "type": "array",
                  "minItems": 1,
                  "uniqueItems": true,
                  "items": {
                    "enum": [
                      "phone",
                      "camera",
                      "tripod",
                      "gimbal",
                      "external_microphone",
                      "lights",
                      "drone"
                    ]
                  }
                }
              }
            },
            "planningConstraints": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "availableMinutes": {
                  "type": "integer",
                  "minimum": 15,
                  "maximum": 1440
                },
                "cameraMovement": {
                  "enum": [
                    "free",
                    "locked_position"
                  ]
                },
                "framingLimit": {
                  "enum": [
                    "any",
                    "wide_only"
                  ]
                },
                "transferMinutes": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 720
                },
                "transfers": {
                  "type": "array",
                  "minItems": 1,
                  "maxItems": 6,
                  "items": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "fromLocationId",
                      "toLocationId",
                      "minutes"
                    ],
                    "properties": {
                      "fromLocationId": {
                        "type": "string"
                      },
                      "toLocationId": {
                        "type": "string"
                      },
                      "minutes": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 720
                      }
                    }
                  }
                },
                "orientations": {
                  "type": "array",
                  "minItems": 1,
                  "maxItems": 2,
                  "uniqueItems": true,
                  "items": {
                    "enum": [
                      "landscape",
                      "portrait",
                      "square"
                    ]
                  }
                },
                "multiOrientationMethod": {
                  "enum": [
                    "separate_takes",
                    "crop_from_one",
                    "unknown"
                  ]
                }
              }
            },
            "ownFootageOnly": {
              "const": true,
              "description": "Customer films their own material. Same meaning as noAiImagery; omit or send true."
            },
            "noAiImagery": {
              "const": true,
              "description": "Legacy compatibility field; omit or send true. The customer films their own material."
            },
            "safetyAcknowledged": {
              "const": true
            }
          }
        }
      ]
    },
    "idempotencyKey": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    }
  },
  "required": [
    "orderId",
    "intake",
    "idempotencyKey"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object"
}
🟢shoot_plan_list(includeArchived)

List the authenticated organisation's Shoot Plans, most recently changed first, without returning private intake or full plan content. Archived plans are left out unless includeArchived is true. Each plan's taskId is the ID every other plan tool takes. Structured result: {plans:[...]}.

輸入結構描述

{
  "type": "object",
  "properties": {
    "includeArchived": {
      "type": "boolean",
      "description": "Also list plans the owner archived. Default false."
    }
  },
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "plans": {
      "type": "array",
      "items": {
        "type": "object"
      }
    },
    "message": {
      "type": "string"
    }
  },
  "required": [
    "plans"
  ]
}
🟢shoot_plan_status(taskId)

Return a plan's status, version, whether its included revision is used, its customer-facing order reference, and progress (essential shots ticked, next shot, when the last tick was made). Read-only. Use the full taskId from shoot_plan_list (not planId). A unique eight-character task prefix or orderReference also works. Connections see only their own live or owner-test plans.

輸入結構描述

{
  "type": "object",
  "properties": {
    "taskId": {
      "type": "string"
    }
  },
  "required": [
    "taskId"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object"
}
🟢shoot_plan_get(taskId)

Return a full plan: shots in filming order (priority must = essential), setup groups per location or visit, checklist, coverage risks, progress (item keys already ticked), progressSummary with counts, each tick's time and source (web, field or agent), and timeSummary when the plan has timing. Structured shots have a unique title and whole filming minutes (at least 1); older free-text shots omit both. Use a shot's shotId for progress. Read-only. Use the full taskId from shoot_plan_list (not planId). A unique eight-character task prefix or orderReference also works. Connections see only their own live or owner-test plans.

輸入結構描述

{
  "type": "object",
  "properties": {
    "taskId": {
      "type": "string"
    }
  },
  "required": [
    "taskId"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "plan": {
      "type": "object",
      "required": [
        "schemaVersion",
        "planId",
        "version",
        "status",
        "title",
        "summary",
        "ownFootageOnly",
        "constraints",
        "feasibility",
        "shootOrderRationale",
        "setupGroups",
        "shots",
        "coverageRisks",
        "captureChecklist",
        "revision"
      ],
      "properties": {
        "schemaVersion": {
          "type": "string"
        },
        "planId": {
          "type": "string"
        },
        "taskId": {
          "type": "string"
        },
        "version": {
          "type": "integer"
        },
        "status": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "summary": {
          "type": "string"
        },
        "ownFootageOnly": {
          "const": true
        },
        "constraints": {
          "type": "object"
        },
        "feasibility": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "status",
            "availableMinutes",
            "minimumShootMinutes",
            "scheduledMinutes",
            "contingencyMinutes",
            "basis"
          ],
          "properties": {
            "status": {
              "const": "passed"
            },
            "outcome": {
              "const": "ready",
              "description": "Structured plans only. Plans are stored only when ready."
            },
            "availableMinutes": {
              "type": "integer"
            },
            "minimumShootMinutes": {
              "type": "integer"
            },
            "scheduledMinutes": {
              "type": "integer"
            },
            "contingencyMinutes": {
              "type": "integer"
            },
            "basis": {
              "type": "string"
            },
            "timing": {
              "type": "object",
              "description": "Structured plans only: integer-second breakdown."
            }
          }
        },
        "shootOrderRationale": {
          "type": "string"
        },
        "setupGroups": {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "setupGroup",
              "name",
              "estimateMinutes",
              "instruction"
            ],
            "properties": {
              "setupGroup": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "estimateMinutes": {
                "type": "integer"
              },
              "instruction": {
                "type": "string"
              }
            }
          }
        },
        "shots": {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "shotId",
              "setupGroup",
              "priority",
              "sceneOrBeat",
              "coverageRole",
              "framing",
              "angle",
              "movement",
              "subjectAction",
              "suggestedHoldSeconds",
              "audio",
              "equipment",
              "continuityNote",
              "captureInstruction",
              "reason",
              "alternativeIfImpossible"
            ],
            "allOf": [
              {
                "if": {
                  "required": [
                    "beatId",
                    "timing"
                  ]
                },
                "then": {
                  "required": [
                    "title",
                    "minutes"
                  ]
                }
              }
            ],
            "properties": {
              "title": {
                "type": "string",
                "minLength": 1,
                "maxLength": 60,
                "description": "Deterministic title unique within this structured plan. Omitted for older free-text plans."
              },
              "minutes": {
                "type": "integer",
                "minimum": 1,
                "description": "Whole minutes allowed for filming this structured shot."
              },
              "shotId": {
                "type": "string"
              },
              "setupGroup": {
                "type": "string"
              },
              "priority": {
                "enum": [
                  "must",
                  "should",
                  "optional"
                ]
              },
              "sceneOrBeat": {
                "type": "string"
              },
              "coverageRole": {
                "type": "string"
              },
              "framing": {
                "type": "string"
              },
              "angle": {
                "type": "string"
              },
              "movement": {
                "type": "string"
              },
              "subjectAction": {
                "type": "string"
              },
              "suggestedHoldSeconds": {
                "type": "integer"
              },
              "audio": {
                "type": "string"
              },
              "equipment": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "continuityNote": {
                "type": "string"
              },
              "captureInstruction": {
                "type": "string"
              },
              "reason": {
                "type": "string"
              },
              "alternativeIfImpossible": {
                "type": "string"
              },
              "beatId": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "locationId": {
                "type": "string"
              },
              "requirementIds": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "displayPosition": {
                "type": "integer"
              },
              "recordsSpeech": {
                "type": "boolean"
              },
              "nonRepeatable": {
                "type": "boolean"
              },
              "dependsOn": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "orientation": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "timing": {
                "type": "object"
              },
              "scheduled": {
                "type": "object"
              },
              "parallelWith": {
                "type": "string"
              },
              "visitGroup": {
                "type": "string",
                "description": "Set only when the plan goes back to this shot's location: the setup group of the visit that films it."
              }
            }
          }
        },
        "coverageRisks": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "riskId",
              "severity",
              "beat",
              "risk",
              "recovery"
            ],
            "properties": {
              "riskId": {
                "type": "string"
              },
              "severity": {
                "type": "string"
              },
              "beat": {
                "type": "string"
              },
              "risk": {
                "type": "string"
              },
              "recovery": {
                "type": "string"
              }
            }
          }
        },
        "captureChecklist": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "itemId",
              "group",
              "label",
              "required"
            ],
            "properties": {
              "itemId": {
                "type": "string"
              },
              "group": {
                "enum": [
                  "before",
                  "during",
                  "finish"
                ]
              },
              "label": {
                "type": "string"
              },
              "required": {
                "type": "boolean"
              }
            }
          }
        },
        "revision": {
          "type": "object",
          "required": [
            "included",
            "used",
            "boundary"
          ],
          "properties": {
            "included": {
              "const": 1
            },
            "used": {
              "enum": [
                0,
                1
              ]
            },
            "boundary": {
              "type": "string"
            },
            "lastRequest": {
              "type": "string"
            }
          }
        }
      }
    }
  },
  "required": [
    "plan"
  ]
}
🟢shoot_plan_timing(taskId)

Structured plans only (not older free-text plans). Compare planned and actual filming time between consecutive ticks in field mode. plannedSeconds is the planned time of those measured tick-to-tick steps, not the whole plan; planPlannedSeconds is the whole plan's planned shot work when present. Read-only. Use the full taskId from shoot_plan_list (not planId). A unique eight-character task prefix or orderReference also works. Connections see only their own live or owner-test plans.

輸入結構描述

{
  "type": "object",
  "properties": {
    "taskId": {
      "type": "string"
    }
  },
  "required": [
    "taskId"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object"
}
🔴shoot_plan_revise(taskId, idempotencyKey, request, replacementBeats, constraintUpdates, ...)

Use the plan's one included revision. This cannot be undone and uses the allowance, so call shoot_plan_revision_preview first and confirm with the person. For structured plans, change filming time or transfer time (constraintUpdates.availableMinutes, locationTransferMinutes), framing, or structuredChanges. Use the full taskId from shoot_plan_list (not planId). A unique eight-character task prefix or orderReference also works. Connections see only their own live or owner-test plans.

輸入結構描述

{
  "type": "object",
  "properties": {
    "taskId": {
      "type": "string"
    },
    "idempotencyKey": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "request": {
      "type": "string",
      "minLength": 1,
      "maxLength": 1000
    },
    "replacementBeats": {
      "type": "array",
      "minItems": 1,
      "maxItems": 20,
      "items": {
        "type": "string",
        "minLength": 3,
        "maxLength": 240
      }
    },
    "constraintUpdates": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "locationNotes": {
          "type": "string",
          "maxLength": 1000
        },
        "accessNotes": {
          "type": "string",
          "maxLength": 1000
        },
        "soundNotes": {
          "type": "string",
          "maxLength": 1000
        },
        "lightNotes": {
          "type": "string",
          "maxLength": 1000
        },
        "mobilityNotes": {
          "type": "string",
          "maxLength": 1000
        },
        "safetyNotes": {
          "type": "string",
          "maxLength": 1000
        },
        "availableMinutes": {
          "type": "integer",
          "minimum": 15,
          "maximum": 1440
        },
        "locationTransferMinutes": {
          "type": "integer",
          "minimum": 0,
          "maximum": 720
        }
      }
    },
    "framingMode": {
      "type": "string",
      "enum": [
        "closer",
        "wide_locked"
      ]
    },
    "audioPriority": {
      "type": "string",
      "enum": [
        "clean"
      ]
    },
    "structuredChanges": {
      "type": "object",
      "additionalProperties": false,
      "description": "Structured plans only: typed changes that stay within the plan's scope.",
      "properties": {
        "removeEquipment": {
          "type": "array",
          "minItems": 1,
          "uniqueItems": true,
          "items": {
            "enum": [
              "phone",
              "camera",
              "tripod",
              "gimbal",
              "external_microphone",
              "lights",
              "drone"
            ]
          }
        },
        "beatRepeatable": {
          "type": "array",
          "minItems": 1,
          "maxItems": 20,
          "items": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "beatId",
              "repeatable"
            ],
            "properties": {
              "beatId": {
                "type": "string",
                "pattern": "^B-[0-9]{2}$"
              },
              "repeatable": {
                "enum": [
                  "yes",
                  "no",
                  "unknown"
                ],
                "description": "Whether this key moment can be filmed again. A one-time live moment cannot be switched to repeatable."
              }
            }
          }
        }
      }
    }
  },
  "required": [
    "taskId",
    "request",
    "idempotencyKey"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object"
}
🟢shoot_plan_revision_preview(taskId, replacementBeats, constraintUpdates, framingMode, audioPriority, ...)

Structured plans only; older free-text plans cannot be previewed. Preview a revision without using it: what would change, which checked shots would be cleared, and whether it still fits. For example constraintUpdates.availableMinutes: 30 answers "what if I only had 30 minutes?". Never uses the included revision. Use the full taskId from shoot_plan_list (not planId). A unique eight-character task prefix or orderReference also works. Connections see only their own live or owner-test plans.

輸入結構描述

{
  "type": "object",
  "properties": {
    "taskId": {
      "type": "string"
    },
    "replacementBeats": {
      "type": "array",
      "minItems": 1,
      "maxItems": 20,
      "items": {
        "type": "string",
        "minLength": 3,
        "maxLength": 240
      }
    },
    "constraintUpdates": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "locationNotes": {
          "type": "string",
          "maxLength": 1000
        },
        "accessNotes": {
          "type": "string",
          "maxLength": 1000
        },
        "soundNotes": {
          "type": "string",
          "maxLength": 1000
        },
        "lightNotes": {
          "type": "string",
          "maxLength": 1000
        },
        "mobilityNotes": {
          "type": "string",
          "maxLength": 1000
        },
        "safetyNotes": {
          "type": "string",
          "maxLength": 1000
        },
        "availableMinutes": {
          "type": "integer",
          "minimum": 15,
          "maximum": 1440
        },
        "locationTransferMinutes": {
          "type": "integer",
          "minimum": 0,
          "maximum": 720
        }
      }
    },
    "framingMode": {
      "type": "string",
      "enum": [
        "closer",
        "wide_locked"
      ]
    },
    "audioPriority": {
      "type": "string",
      "enum": [
        "clean"
      ]
    },
    "structuredChanges": {
      "type": "object",
      "additionalProperties": false,
      "description": "Structured plans only: typed changes that stay within the plan's scope.",
      "properties": {
        "removeEquipment": {
          "type": "array",
          "minItems": 1,
          "uniqueItems": true,
          "items": {
            "enum": [
              "phone",
              "camera",
              "tripod",
              "gimbal",
              "external_microphone",
              "lights",
              "drone"
            ]
          }
        },
        "beatRepeatable": {
          "type": "array",
          "minItems": 1,
          "maxItems": 20,
          "items": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "beatId",
              "repeatable"
            ],
            "properties": {
              "beatId": {
                "type": "string",
                "pattern": "^B-[0-9]{2}$"
              },
              "repeatable": {
                "enum": [
                  "yes",
                  "no",
                  "unknown"
                ],
                "description": "Whether this key moment can be filmed again. A one-time live moment cannot be switched to repeatable."
              }
            }
          }
        }
      }
    }
  },
  "required": [
    "taskId"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object"
}
🟢shoot_plan_progress_sync(taskId, ops)

Tick or untick shots and checklist items. Each op: itemKey "shot:<shotId>" or "check:<itemId>" from shoot_plan_get, basePlanVersion = the plan's version, a new random UUID v4 as opId, state "complete" or "incomplete". Retry-safe: resending the same opId does nothing twice. An op made against an older basePlanVersion still applies when that item is unchanged in the current version; otherwise its result is item_changed_in_current_version and nothing changes. Ticking records that the person checked the shot, not its technical quality. Use the full taskId from shoot_plan_list (not planId). A unique eight-character task prefix or orderReference also works. Connections see only their own live or owner-test plans.

輸入結構描述

{
  "type": "object",
  "properties": {
    "taskId": {
      "type": "string"
    },
    "ops": {
      "type": "array",
      "minItems": 1,
      "maxItems": 200,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "opId",
          "basePlanVersion",
          "itemKey",
          "state"
        ],
        "properties": {
          "opId": {
            "type": "string",
            "format": "uuid"
          },
          "basePlanVersion": {
            "type": "integer",
            "minimum": 1
          },
          "itemKey": {
            "type": "string",
            "pattern": "^(shot|check):"
          },
          "state": {
            "enum": [
              "complete",
              "incomplete"
            ]
          },
          "recordedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        }
      }
    }
  },
  "required": [
    "taskId",
    "ops"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object"
}

社群

為此伺服器評分

證據

近期觀測

已驗證未記錄版本11 個工具