MCP App Store
Entertainment
Martini icon

Martini

by C47 Inc.

Overview

Use ChatGPT with Martini to navigate visual project boards, organize scenes and shot ideas, manage subjects and reference assets, add production notes, and structure filmmaking work on a shared canvas.

Tools

add_subjects_to_collection

ChatGPT
Add 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

ChatGPT
Add 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

ChatGPT
Preflight 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

ChatGPT
Preflight 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

ChatGPT
Create a root-level canvas bin. MCP intentionally does not support creating bins inside bins.

create_bin

ChatGPT
Create a root-level canvas bin. MCP intentionally does not support creating bins inside bins.

create_canvas

ChatGPT
Create a new canvas in the project and return its deep link.

create_canvas

ChatGPT
Create a new canvas in the project and return its deep link.

create_node

ChatGPT
Create an empty draft asset-backed node on the board. This seeds editable draft settings but never starts generation or spends credits.

create_node

ChatGPT
Create 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

ChatGPT
Create 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

ChatGPT
Create 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

ChatGPT
Create 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

ChatGPT
Create 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

ChatGPT
Create multiple planned shot nodes and run approved generations for them. Requires one user approval for the whole batch.

create_nodes_and_generate

ChatGPT
Create multiple planned shot nodes and run approved generations for them. Requires one user approval for the whole batch.

create_project

ChatGPT
Create 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

ChatGPT
Create 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

ChatGPT
Create 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

ChatGPT
Create 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

ChatGPT
Group 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

ChatGPT
Group 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

ChatGPT
Create 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

ChatGPT
Create 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

ChatGPT
Create 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

ChatGPT
Create 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.

extract_video_frame

ChatGPT
Extract a durable JPEG still from a completed video asset. By default this creates only a reusable R2-backed frame file, not a visible canvas node. Optionally attach the frame to a draft start/end slot or create a visible video-frame image node.

extract_video_frame

ChatGPT
Extract a durable JPEG still from a completed video asset. By default this creates only a reusable R2-backed frame file, not a visible canvas node. Optionally attach the frame to a draft start/end slot or create a visible video-frame image node.

generate

ChatGPT
Generate media for an existing shot after the user has approved the model, prompt, target shot, count, and estimated cost.

generate

ChatGPT
Generate media for an existing shot after the user has approved the model, prompt, target shot, count, and estimated cost.

get_asset

ChatGPT
Get 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

ChatGPT
Get 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

ChatGPT
Return 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

ChatGPT
Return 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

ChatGPT
Get the full draft settings for one asset. Use this only when you need the asset-specific generation configuration.

get_asset_draft_settings

ChatGPT
Get the full draft settings for one asset. Use this only when you need the asset-specific generation configuration.

get_board_assets

ChatGPT
Get 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

ChatGPT
Get 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

ChatGPT
Get canvases with deep links, canvas bins, and text annotations for a project.

get_board_canvases

ChatGPT
Get canvases with deep links, canvas bins, and text annotations for a project.

get_board_overview

ChatGPT
One-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

ChatGPT
One-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

ChatGPT
Get 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

ChatGPT
Get 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

ChatGPT
List 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

ChatGPT
List 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

ChatGPT
Get 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

ChatGPT
Get 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

ChatGPT
Get 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

ChatGPT
Get 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

ChatGPT
Get the status of a generation job.

get_job_status

ChatGPT
Get the status of a generation job.

get_model

ChatGPT
Get detailed info for a specific model (inputs, pricing, constraints).

get_model

ChatGPT
Get detailed info for a specific model (inputs, pricing, constraints).

get_projects

ChatGPT
List 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

ChatGPT
List 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

ChatGPT
Get 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

ChatGPT
Get 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

ChatGPT
Get 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

ChatGPT
Get 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

ChatGPT
List 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

ChatGPT
List 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

ChatGPT
Read 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

ChatGPT
Read 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

ChatGPT
Get full detail for a single variable: name, value, color, bin, and absolute canvas position.

get_variable

ChatGPT
Get full detail for a single variable: name, value, color, bin, and absolute canvas position.

group_nodes_into_bin

ChatGPT
Create 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

ChatGPT
Create 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

ChatGPT
Arrange 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

ChatGPT
Arrange 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

ChatGPT
List available generation models. Returns compact summaries by default; use get_model for full constraints.

list_models

ChatGPT
List available generation models. Returns compact summaries by default; use get_model for full constraints.

list_project_jobs

ChatGPT
List all generation jobs for a project.

list_project_jobs

ChatGPT
List all generation jobs for a project.

move_bin

ChatGPT
Move or resize a root-level canvas bin using absolute canvas bounds. Children keep their bin-relative positions.

move_bin

ChatGPT
Move or resize a root-level canvas bin using absolute canvas bounds. Children keep their bin-relative positions.

move_node

ChatGPT
Move an existing asset-backed node on the canvas.

move_node

ChatGPT
Move an existing asset-backed node on the canvas.

move_node_to_bin

ChatGPT
Move 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

ChatGPT
Move 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

ChatGPT
Move 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

ChatGPT
Move 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

ChatGPT
Prepare 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

ChatGPT
Prepare 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

ChatGPT
Remove one or more subjects from a collection. If all members are removed, the collection is dissolved.

remove_subjects_from_collection

ChatGPT
Remove one or more subjects from a collection. If all members are removed, the collection is dissolved.

rename_project

ChatGPT
Rename a Martini project. Requires project-update permission and updates the board's live projectName metadata for open collaborators.

rename_project

ChatGPT
Rename a Martini project. Requires project-update permission and updates the board's live projectName metadata for open collaborators.

rename_subject_collection

ChatGPT
Rename an existing subject collection without changing its member subjects or canvas placement.

rename_subject_collection

ChatGPT
Rename an existing subject collection without changing its member subjects or canvas placement.

reorder_subjects_in_collection

ChatGPT
Reorder 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

ChatGPT
Reorder 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

ChatGPT
Reorder 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

ChatGPT
Reorder 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

ChatGPT
Set 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

ChatGPT
Set 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

ChatGPT
Create a Martini support case in Productlane from a prepared support packet after the user reviewed the preview and explicitly approved submission.

submit_support_request

ChatGPT
Create a Martini support case in Productlane from a prepared support packet after the user reviewed the preview and explicitly approved submission.

update_bin

ChatGPT
Rename a root-level canvas bin.

update_bin

ChatGPT
Rename a root-level canvas bin.

update_subject_images

ChatGPT
Update a subject's main image and/or reference images. Set appendReferences to true to add reference images without replacing existing ones.

update_subject_images

ChatGPT
Update a subject's main image and/or reference images. Set appendReferences to true to add reference images without replacing existing ones.

update_text_note

ChatGPT
Update 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

ChatGPT
Update 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

ChatGPT
Update 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

ChatGPT
Update 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

ChatGPT
Finish 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

ChatGPT
Finish 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

ChatGPT
Finish 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

ChatGPT
Finish 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

ChatGPT
Fallback 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

ChatGPT
Fallback 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

ChatGPT
Upload 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

ChatGPT
Upload 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

ChatGPT
Upload 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

ChatGPT
Upload 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

ChatGPT
Inline 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

ChatGPT
Inline 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

ChatGPT
Render 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

ChatGPT
Render 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

ChatGPT
Inline 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

ChatGPT
Inline 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.

Capabilities

Writes

App Stats

122

Tools

ChatGPT

Platforms

Works with

ChatGPT

Data refreshed daily