add_subjects_to_collection
ChatGPTAdd one or more subjects to an existing collection. The subjects are appended to the current member list and may come from any canvas.
add_subjects_to_collection
ChatGPTAdd one or more subjects to an existing collection. The subjects are appended to the current member list and may come from any canvas.
check_storage_reachability
ChatGPTPreflight check before the first upload OR download in a session. Confirms the agent's environment can reach R2 for PUT requests (upload_asset_init / upload_asset_init_batch) and GET requests (get_asset_download_url's presigned URLs). Curl the returned probeUrl from your environment: a response containing a cf-ray header means R2 is reachable. Any other outcome — curl error, HTTP 000, X-Proxy-Error: blocked-by-allowlist header, or missing cf-ray — means storage is blocked. In that case, do not call upload_asset_init or fetch get_asset_download_url URLs, and print suggestion.message to the user verbatim so they can unblock. Call once per session.
check_storage_reachability
ChatGPTPreflight check before the first upload OR download in a session. Confirms the agent's environment can reach R2 for PUT requests (upload_asset_init / upload_asset_init_batch) and GET requests (get_asset_download_url's presigned URLs). Curl the returned probeUrl from your environment: a response containing a cf-ray header means R2 is reachable. Any other outcome — curl error, HTTP 000, X-Proxy-Error: blocked-by-allowlist header, or missing cf-ray — means storage is blocked. In that case, do not call upload_asset_init or fetch get_asset_download_url URLs, and print suggestion.message to the user verbatim so they can unblock. Call once per session.
create_bin
ChatGPTCreate a root-level canvas bin. MCP intentionally does not support creating bins inside bins.
create_bin
ChatGPTCreate a root-level canvas bin. MCP intentionally does not support creating bins inside bins.
create_canvas
ChatGPTCreate a new canvas in the project and return its deep link.
create_canvas
ChatGPTCreate a new canvas in the project and return its deep link.
create_node
ChatGPTCreate an empty draft asset-backed node on the board. This seeds editable draft settings but never starts generation or spends credits.
create_node
ChatGPTCreate an empty draft asset-backed node on the board. This seeds editable draft settings but never starts generation or spends credits.
create_node_and_generate
ChatGPTCreate a planned shot node and run an approved generation for it. Requires user approval of the model, prompt, target shot, count, and estimated cost.
create_node_and_generate
ChatGPTCreate a planned shot node and run an approved generation for it. Requires user approval of the model, prompt, target shot, count, and estimated cost.
create_nodes
ChatGPTCreate multiple empty asset-backed nodes in one server-owned layout pass. For nodes without explicit positions, Martini uses rendered node widths and default canvas spacing instead of source asset pixel dimensions.
create_nodes
ChatGPTCreate multiple empty asset-backed nodes in one server-owned layout pass. For nodes without explicit positions, Martini uses rendered node widths and default canvas spacing instead of source asset pixel dimensions.
create_nodes_and_generate
ChatGPTCreate multiple planned shot nodes and run approved generations for them. Requires one user approval for the whole batch.
create_nodes_and_generate
ChatGPTCreate multiple planned shot nodes and run approved generations for them. Requires one user approval for the whole batch.
create_project
ChatGPTCreate a new Martini project for the authenticated user. Optionally pass a teamId to create a private team project. After creating an empty project, use create_canvas before adding board content.
create_project
ChatGPTCreate a new Martini project for the authenticated user. Optionally pass a teamId to create a private team project. After creating an empty project, use create_canvas before adding board content.
create_subject
ChatGPTCreate a new subject (prop, animal, character, etc.) on a project board. Subjects are reusable visual references that keep characters and objects consistent across shots. Provide image URLs to make the subject immediately usable for generation.
create_subject
ChatGPTCreate a new subject (prop, animal, character, etc.) on a project board. Subjects are reusable visual references that keep characters and objects consistent across shots. Provide image URLs to make the subject immediately usable for generation.
create_subject_collection
ChatGPTGroup subjects into a named collection. The collection gets a home canvas for its card placement; member subjects may come from any canvas.
create_subject_collection
ChatGPTGroup subjects into a named collection. The collection gets a home canvas for its card placement; member subjects may come from any canvas.
create_text_note
ChatGPTCreate a canvas text note from plain text. This does not start generation or spend credits. Position is absolute canvas coordinates; content is stored as paragraph text.
create_text_note
ChatGPTCreate a canvas text note from plain text. This does not start generation or spend credits. Position is absolute canvas coordinates; content is stored as paragraph text.
create_variable
ChatGPTCreate a reusable text variable on a canvas. Variables are prompt text snippets, not visual labels for board organization. Reference it in prompts as @{variableId:variableName}; it expands to its value at generation time. Names are unique within the project — a numeric suffix is auto-appended on collision.
create_variable
ChatGPTCreate a reusable text variable on a canvas. Variables are prompt text snippets, not visual labels for board organization. Reference it in prompts as @{variableId:variableName}; it expands to its value at generation time. Names are unique within the project — a numeric suffix is auto-appended on collision.
generate
ChatGPTGenerate media for an existing shot after the user has approved the model, prompt, target shot, count, and estimated cost.
generate
ChatGPTGenerate media for an existing shot after the user has approved the model, prompt, target shot, count, and estimated cost.
get_asset
ChatGPTGet one asset with full stored metadata, deep links, and its canvas position. Use this after get_board_assets or get_canvas when you need deep detail on a specific node. Use the imageUrl field for referenceImages — do not construct URLs from the id.
get_asset
ChatGPTGet one asset with full stored metadata, deep links, and its canvas position. Use this after get_board_assets or get_canvas when you need deep detail on a specific node. Use the imageUrl field for referenceImages — do not construct URLs from the id.
get_asset_download_url
ChatGPTReturn a short-lived presigned URL for downloading a completed asset file. Use this when the user wants to save an asset to disk or needs a direct file URL for export/download workflows. Fetch the returned URL promptly before it expires.
get_asset_download_url
ChatGPTReturn a short-lived presigned URL for downloading a completed asset file. Use this when the user wants to save an asset to disk or needs a direct file URL for export/download workflows. Fetch the returned URL promptly before it expires.
get_asset_draft_settings
ChatGPTGet the full draft settings for one asset. Use this only when you need the asset-specific generation configuration.
get_asset_draft_settings
ChatGPTGet the full draft settings for one asset. Use this only when you need the asset-specific generation configuration.
get_board_assets
ChatGPTGet summarized asset nodes, deep links, and their canvas positions for a project. Use filters for shot-number lookup, empty-draft discovery, or smaller operational reads. Use get_asset or get_asset_draft_settings when you need full per-asset detail.
get_board_assets
ChatGPTGet summarized asset nodes, deep links, and their canvas positions for a project. Use filters for shot-number lookup, empty-draft discovery, or smaller operational reads. Use get_asset or get_asset_draft_settings when you need full per-asset detail.
get_board_canvases
ChatGPTGet canvases with deep links, canvas bins, and text annotations for a project.
get_board_canvases
ChatGPTGet canvases with deep links, canvas bins, and text annotations for a project.
get_board_overview
ChatGPTOne-call project and board orientation for agents. Resolves a project by projectId or projectQuery, then returns canvases with deep links, subjects, subject collections, and direct canvas children for one canvas. Prefer this before separate canvas/subject/collection lookup tools.
get_board_overview
ChatGPTOne-call project and board orientation for agents. Resolves a project by projectId or projectQuery, then returns canvases with deep links, subjects, subject collections, and direct canvas children for one canvas. Prefer this before separate canvas/subject/collection lookup tools.
get_board_subjects
ChatGPTGet all subjects (characters, props, animals, etc.) on a project board. Subjects are reusable visual references that keep characters and objects consistent across shots. Use get_subject for full detail on a specific subject.
get_board_subjects
ChatGPTGet all subjects (characters, props, animals, etc.) on a project board. Subjects are reusable visual references that keep characters and objects consistent across shots. Use get_subject for full detail on a specific subject.
get_board_variables
ChatGPTList variables on a project board. Variables are reusable named text snippets referenced in prompts via @{variableId:variableName} and expanded to their value at generation time; a value may embed other variables. Optionally filter by canvas.
get_board_variables
ChatGPTList variables on a project board. Variables are reusable named text snippets referenced in prompts via @{variableId:variableName} and expanded to their value at generation time; a value may embed other variables. Optionally filter by canvas.
get_canvas
ChatGPTGet a single canvas with its deep link and canvas-scoped summaries plus positions, including raw subjectCollections with collection names and memberOrder subject IDs. Use get_subject_collections for hydrated collection members. Use get_asset or get_asset_draft_settings for full per-asset detail. If canvasId is omitted, returns a deterministic canvas.
get_canvas
ChatGPTGet a single canvas with its deep link and canvas-scoped summaries plus positions, including raw subjectCollections with collection names and memberOrder subject IDs. Use get_subject_collections for hydrated collection members. Use get_asset or get_asset_draft_settings for full per-asset detail. If canvasId is omitted, returns a deterministic canvas.
get_canvas_children
ChatGPTGet direct spatial children of a canvas or bin. Canvas parent responses include the canvas deep link. Canvas parents can include bins, asset/job nodes, standalone subjects, subject collection cards, and text notes. Bin parents can include asset/job nodes, standalone subjects, subject collection cards, and text notes. This does not expand subject collection members; use get_subject_collection for that semantic membership.
get_canvas_children
ChatGPTGet direct spatial children of a canvas or bin. Canvas parent responses include the canvas deep link. Canvas parents can include bins, asset/job nodes, standalone subjects, subject collection cards, and text notes. Bin parents can include asset/job nodes, standalone subjects, subject collection cards, and text notes. This does not expand subject collection members; use get_subject_collection for that semantic membership.
get_job_status
ChatGPTGet the status of a generation job.
get_job_status
ChatGPTGet the status of a generation job.
get_model
ChatGPTGet detailed info for a specific model (inputs, pricing, constraints).
get_model
ChatGPTGet detailed info for a specific model (inputs, pricing, constraints).
get_projects
ChatGPTList projects the authenticated user is a member of. Use query or exactName when the user named a project; results default to 20 so agents do not load every project unnecessarily.
get_projects
ChatGPTList projects the authenticated user is a member of. Use query or exactName when the user named a project; results default to 20 so agents do not load every project unnecessarily.
get_subject
ChatGPTGet full detail for a single subject, including all reference images and costumes. Use this after get_board_subjects when you need the complete image set for generation.
get_subject
ChatGPTGet full detail for a single subject, including all reference images and costumes. Use this after get_board_subjects when you need the complete image set for generation.
get_subject_collection
ChatGPTGet one subject collection by ID, including its memberOrder and hydrated member subject summaries. This is the semantic collection-member reader; canvas/bin tools only show the collection card as a spatial object.
get_subject_collection
ChatGPTGet one subject collection by ID, including its memberOrder and hydrated member subject summaries. This is the semantic collection-member reader; canvas/bin tools only show the collection card as a spatial object.
get_subject_collections
ChatGPTList subject collections with collection names, home canvases, memberOrder subject IDs, and hydrated member subject summaries including names and thumbnails. Use get_subject_collection when you already know the collection ID.
get_subject_collections
ChatGPTList subject collections with collection names, home canvases, memberOrder subject IDs, and hydrated member subject summaries including names and thumbnails. Use get_subject_collection when you already know the collection ID.
get_text_note
ChatGPTRead one canvas text note, including plain text content and absolute canvas position. Use get_board_overview or get_canvas_children with include ["textNotes"] to discover text note IDs.
get_text_note
ChatGPTRead one canvas text note, including plain text content and absolute canvas position. Use get_board_overview or get_canvas_children with include ["textNotes"] to discover text note IDs.
get_variable
ChatGPTGet full detail for a single variable: name, value, color, bin, and absolute canvas position.
get_variable
ChatGPTGet full detail for a single variable: name, value, color, bin, and absolute canvas position.
group_nodes_into_bin
ChatGPTCreate a root-level bin around existing root-level asset/job nodes. Nodes keep their current visual canvas positions; stored positions become bin-relative. To organize the children into a tidy grid, call layout_bin_children after grouping.
group_nodes_into_bin
ChatGPTCreate a root-level bin around existing root-level asset/job nodes. Nodes keep their current visual canvas positions; stored positions become bin-relative. To organize the children into a tidy grid, call layout_bin_children after grouping.
layout_bin_children
ChatGPTArrange direct asset/job/subject children of a root-level canvas bin into a grid. Positions are stored and returned in bin coordinate space, with absolute positions included for visual verification. Use dryRun first when reorganizing an existing user board.
layout_bin_children
ChatGPTArrange direct asset/job/subject children of a root-level canvas bin into a grid. Positions are stored and returned in bin coordinate space, with absolute positions included for visual verification. Use dryRun first when reorganizing an existing user board.
list_models
ChatGPTList available generation models. Returns compact summaries by default; use get_model for full constraints.
list_models
ChatGPTList available generation models. Returns compact summaries by default; use get_model for full constraints.
list_project_jobs
ChatGPTList all generation jobs for a project.
list_project_jobs
ChatGPTList all generation jobs for a project.
move_bin
ChatGPTMove or resize a root-level canvas bin using absolute canvas bounds. Children keep their bin-relative positions.
move_bin
ChatGPTMove or resize a root-level canvas bin using absolute canvas bounds. Children keep their bin-relative positions.
move_node
ChatGPTMove an existing asset-backed node on the canvas.
move_node
ChatGPTMove an existing asset-backed node on the canvas.
move_node_to_bin
ChatGPTMove an asset/job/subject node into a root-level bin or out to the canvas root. Default placement is auto; use absolute only when you need a specific final canvas coordinate.
move_node_to_bin
ChatGPTMove an asset/job/subject node into a root-level bin or out to the canvas root. Default placement is auto; use absolute only when you need a specific final canvas coordinate.
move_variable
ChatGPTMove a variable on the canvas, into a root-level bin, or out to the canvas root. Default placement is auto; absolute requires position. Pass targetBinId null to move to the canvas root, or omit it to keep the current bin.
move_variable
ChatGPTMove a variable on the canvas, into a root-level bin, or out to the canvas root. Default placement is auto; absolute requires position. Pass targetBinId null to move to the canvas root, or omit it to keep the current bin.
prepare_support_request
ChatGPTPrepare a redacted support request preview when Martini support could help diagnose or unblock the user. This does not create a Productlane case. Use only after the user asks for help/support or agrees to prepare a support packet.
prepare_support_request
ChatGPTPrepare a redacted support request preview when Martini support could help diagnose or unblock the user. This does not create a Productlane case. Use only after the user asks for help/support or agrees to prepare a support packet.
remove_subjects_from_collection
ChatGPTRemove one or more subjects from a collection. If all members are removed, the collection is dissolved.
remove_subjects_from_collection
ChatGPTRemove one or more subjects from a collection. If all members are removed, the collection is dissolved.
rename_project
ChatGPTRename a Martini project. Requires project-update permission and updates the board's live projectName metadata for open collaborators.
rename_project
ChatGPTRename a Martini project. Requires project-update permission and updates the board's live projectName metadata for open collaborators.
rename_subject_collection
ChatGPTRename an existing subject collection without changing its member subjects or canvas placement.
rename_subject_collection
ChatGPTRename an existing subject collection without changing its member subjects or canvas placement.
reorder_subjects_in_collection
ChatGPTReorder the existing subjects in a collection. The subjectIds array must contain exactly the current members; this tool does not add, remove, or dissolve subjects.
reorder_subjects_in_collection
ChatGPTReorder the existing subjects in a collection. The subjectIds array must contain exactly the current members; this tool does not add, remove, or dissolve subjects.
reorder_variation_stack_members
ChatGPTReorder the existing members in a variation stack. The memberIds array must contain exactly the current stack members using asset-{id} or subject-{id}; this tool does not add, remove, or dissolve stack members.
reorder_variation_stack_members
ChatGPTReorder the existing members in a variation stack. The memberIds array must contain exactly the current stack members using asset-{id} or subject-{id}; this tool does not add, remove, or dissolve stack members.
set_node_color_labels
ChatGPTSet or clear the color label on asset-backed canvas nodes. This updates the node color bar; it does not create variable cards. Use this for requests like "make carrot nodes yellow" or "label these shots red".
set_node_color_labels
ChatGPTSet or clear the color label on asset-backed canvas nodes. This updates the node color bar; it does not create variable cards. Use this for requests like "make carrot nodes yellow" or "label these shots red".
submit_support_request
ChatGPTCreate a Martini support case in Productlane from a prepared support packet after the user reviewed the preview and explicitly approved submission.
submit_support_request
ChatGPTCreate a Martini support case in Productlane from a prepared support packet after the user reviewed the preview and explicitly approved submission.
update_bin
ChatGPTRename a root-level canvas bin.
update_bin
ChatGPTRename a root-level canvas bin.
update_subject_images
ChatGPTUpdate a subject's main image and/or reference images. Set appendReferences to true to add reference images without replacing existing ones.
update_subject_images
ChatGPTUpdate a subject's main image and/or reference images. Set appendReferences to true to add reference images without replacing existing ones.
update_text_note
ChatGPTUpdate a canvas text note. This does not start generation or spend credits. Content is a full plain-text replacement. Position is absolute canvas coordinates; binId null moves the note to the canvas root.
update_text_note
ChatGPTUpdate a canvas text note. This does not start generation or spend credits. Content is a full plain-text replacement. Position is absolute canvas coordinates; binId null moves the note to the canvas root.
update_variable
ChatGPTUpdate a variable: name, value, color, color label, or rating. Value is a full replacement. Renaming rewrites @{id:name} references in other variables. Pass null for color, colorLabel, or rating to clear them.
update_variable
ChatGPTUpdate a variable: name, value, color, color label, or rating. Value is a full replacement. Renaming rewrites @{id:name} references in other variables. Pass null for color, colorLabel, or rating to clear them.
upload_asset_complete
ChatGPTFinish an image upload started with upload_asset_init. Verifies the R2 object arrived, extracts width/height server-side, and triggers thumbnail/proxy generation. Returns immediately with status: "processing" — the Asset flips to "completed" when background processing finishes.
upload_asset_complete
ChatGPTFinish an image upload started with upload_asset_init. Verifies the R2 object arrived, extracts width/height server-side, and triggers thumbnail/proxy generation. Returns immediately with status: "processing" — the Asset flips to "completed" when background processing finishes.
upload_asset_complete_batch
ChatGPTFinish up to 50 image uploads started with upload_asset_init_batch in a single call. Verifies each R2 object arrived, extracts width/height server-side, and triggers the thumbnail/proxy pipeline. Per-asset completion failures (missing bytes, decode error, wrong MIME, already processed) return structured error entries without failing the rest of the batch.
upload_asset_complete_batch
ChatGPTFinish up to 50 image uploads started with upload_asset_init_batch in a single call. Verifies each R2 object arrived, extracts width/height server-side, and triggers the thumbnail/proxy pipeline. Per-asset completion failures (missing bytes, decode error, wrong MIME, already processed) return structured error entries without failing the rest of the batch.
upload_asset_from_base64
ChatGPTFallback image upload for MCP clients that cannot PUT directly to Martini R2 storage. Accepts a base64-encoded JPEG, PNG, or WebP image, writes it to Martini storage server-side, places it on the requested scene, and starts thumbnail/proxy processing. Prefer upload_asset_init/upload_asset_complete when the client can reach R2, especially for large files or batches.
upload_asset_from_base64
ChatGPTFallback image upload for MCP clients that cannot PUT directly to Martini R2 storage. Accepts a base64-encoded JPEG, PNG, or WebP image, writes it to Martini storage server-side, places it on the requested scene, and starts thumbnail/proxy processing. Prefer upload_asset_init/upload_asset_complete when the client can reach R2, especially for large files or batches.
upload_asset_init
ChatGPTUpload an image onto a canvas so it appears for the user. Returns a short-lived presigned R2 PUT URL the agent should upload bytes to, and writes a placeholder Asset into the project so collaborators see the upload in flight. Follow with upload_asset_complete. If this is the first storage operation in the session, call check_storage_reachability first and only proceed if its probe succeeds.
upload_asset_init
ChatGPTUpload an image onto a canvas so it appears for the user. Returns a short-lived presigned R2 PUT URL the agent should upload bytes to, and writes a placeholder Asset into the project so collaborators see the upload in flight. Follow with upload_asset_complete. If this is the first storage operation in the session, call check_storage_reachability first and only proceed if its probe succeeds.
upload_asset_init_batch
ChatGPTUpload up to 50 images onto a canvas in a single call, collapsing what would be N per-file round trips into one PartyKit read and one merge. Each file returns a presigned R2 PUT URL; follow with upload_asset_complete_batch after all bytes are uploaded. Per-file validation failures do not fail the rest of the batch; batch-level failures (empty array, over 50 files, canvas missing, access denied) reject the whole call with no writes. Prefer this over upload_asset_init when uploading 5 or more files. If this is the first storage operation in the session, call check_storage_reachability first and only proceed if its probe succeeds.
upload_asset_init_batch
ChatGPTUpload up to 50 images onto a canvas in a single call, collapsing what would be N per-file round trips into one PartyKit read and one merge. Each file returns a presigned R2 PUT URL; follow with upload_asset_complete_batch after all bytes are uploaded. Per-file validation failures do not fail the rest of the batch; batch-level failures (empty array, over 50 files, canvas missing, access denied) reject the whole call with no writes. Prefer this over upload_asset_init when uploading 5 or more files. If this is the first storage operation in the session, call check_storage_reachability first and only proceed if its probe succeeds.
view_asset
ChatGPTInline an image asset's bytes directly into your context so you can SEE it. The leading content block is the actual ImageContent — no fetch step required. Use when you want to inspect an image, not save it. Image-only (Claude can't perceive AudioContent meaningfully and videos don't fit) — videos, audio, oversized images all error with a hint to use get_asset_download_url. Hard cap: 10MB. Reads from R2 on every call — call only when you actually need to look at the asset.
view_asset
ChatGPTInline an image asset's bytes directly into your context so you can SEE it. The leading content block is the actual ImageContent — no fetch step required. Use when you want to inspect an image, not save it. Image-only (Claude can't perceive AudioContent meaningfully and videos don't fit) — videos, audio, oversized images all error with a hint to use get_asset_download_url. Hard cap: 10MB. Reads from R2 on every call — call only when you actually need to look at the asset.
view_subject_collection_card
ChatGPTRender one subject collection as an inline visual card. The card includes all available member subjects as thumbnail tiles with labels, plus placeholders for members without thumbnails or missing subjects. Use this when the user wants to see a collection or compare all subjects in it.
view_subject_collection_card
ChatGPTRender one subject collection as an inline visual card. The card includes all available member subjects as thumbnail tiles with labels, plus placeholders for members without thumbnails or missing subjects. Use this when the user wants to see a collection or compare all subjects in it.
view_subject_image
ChatGPTInline images from a subject node as MCP ImageContent so you can SEE the subject's main image, an individual reference image, or all subject images in one response. Use slot "all" to avoid repeated calls. Defaults to resized previews for all-images requests and full resolution for single-image requests. Hard cap: 10MB per returned image and 25MB per all-images response.
view_subject_image
ChatGPTInline images from a subject node as MCP ImageContent so you can SEE the subject's main image, an individual reference image, or all subject images in one response. Use slot "all" to avoid repeated calls. Defaults to resized previews for all-images requests and full resolution for single-image requests. Hard cap: 10MB per returned image and 25MB per all-images response.