MCP App Store
by KeenEthics
Productivity
MotionHub icon

MotionHub

by MotionHub Limited

Overview

Manage media production projects with AI. Access tasks, scripts, calendars, boards, media files with transcripts and AI analysis, contacts, and team scheduling. Search footage using natural language to find clips by topic, speaker, or content — even when exact keywords don't match.

Tools

account_info

ChatGPT
Get information about the currently connected MotionHub account and authenticated user. Use this to verify which account the AI assistant is operating on.

account_list_users

ChatGPT
List all users in the account with their roles and status. Requires owner or admin permission.

add_clip_to_script

ChatGPT
Opens an interactive panel for attaching a MotionHub media clip to a scene in one of the user's scripts. The panel shows the clip header, its transcript, a script picker, and the scene list with "Add to scene" buttons, so the target script and scene are chosen by clicking rather than by typing identifiers. Use it once a specific clip has been identified and it is to be placed in a script. To attach only part of a clip, pass in and out (start and end in seconds); the panel pre-fills those values for the user to confirm or adjust. media_get_transcript returns the timed segments those values come from.

board_card_attach_file

ChatGPT
Attach an existing project file to a card

board_card_attach_task

ChatGPT
Attach a task to a card

board_card_create

ChatGPT
Create a new card in a board column

board_card_create_comment

ChatGPT
Add a comment to a card. Set parent_id to reply to an existing comment.

board_card_delete

ChatGPT
Delete a card and all its attachments

board_card_delete_comment

ChatGPT
Delete a comment and all its replies

board_card_detach_file

ChatGPT
Remove a file from a card

board_card_detach_task

ChatGPT
Remove a task from a card

board_card_get

ChatGPT
Get details of a specific card

board_card_list

ChatGPT
List cards in a board, optionally filtered by column. Returns paginated results (default 100, max 500).

board_card_list_comments

ChatGPT
List comments on a card (includes threaded replies)

board_card_list_files

ChatGPT
List files attached to a card

board_card_list_tasks

ChatGPT
List tasks attached to a card

board_card_remove_image

ChatGPT
Remove the image from a card

board_card_set_image

ChatGPT
Set a card image from a URL. The image is downloaded, resized to 512px, and stored as base64.

board_card_set_image_from_article

ChatGPT
Fetch an article URL, extract the og:image or best available thumbnail, and set it as the card image. Prefer this over board_card_set_image whenever a source article URL is available — no image URL required, the server handles all extraction automatically.

board_card_update

ChatGPT
Update a card. Set column_id to move the card to a different column.

board_column_create

ChatGPT
Add a new column to a board

board_column_delete

ChatGPT
Delete a column. Must have no cards assigned and board must have at least 2 columns.

board_column_list

ChatGPT
List columns in a board

board_column_update

ChatGPT
Update a column name or colour

board_create

ChatGPT
Create a new kanban board in a project

board_delete

ChatGPT
Delete a board and all its columns, cards, and attachments

board_get

ChatGPT
Get a specific board with its details

board_list

ChatGPT
List all kanban boards in a project

board_update

ChatGPT
Update a board name or description

budget_account_create

ChatGPT
Create a new schedule/category in the budget. Optionally nests under an existing account via parent_id.

budget_account_list

ChatGPT
List the schedule/category hierarchy for a budget (no line items). Use parent_id to reconstruct nested groupings; depth indicates nesting level. Returns paginated results (default 100, max 500).

budget_account_set_allocation

ChatGPT
Set or clear a schedule's top-down allocation (cap) for one budget version. With allocation_amount, the version total uses this figure instead of the line rollup and lines cannot exceed it; pass null to clear (revert to bottom-up). Rejected if it would push the schedule above an allocated parent schedule's cap.

budget_account_update

ChatGPT
Update a schedule/category code, name, or parent.

budget_actual_create

ChatGPT
Record a new actual (spend) against a budget line. Use this for spend that does NOT correspond to an existing PO (cards, payroll, ad-hoc invoices). For spend fulfilling an existing PO, budget_po_convert_to_actual is the corresponding tool: it tags the actual with source_po_id so the cost report offsets it against the PO's committed amount rather than double-counting. Defaults to posted status; pass status=draft to create as a draft for review. budget_line_id is required for posted actuals. VAT is computed server-side from vat_code_id: amount is the GROSS you pay the supplier, and net_amount / vat_amount are derived from it. Omit vat_code_id and the record defaults to NO_VAT (net = gross), which is what the cost report will then show — set a code when the invoice carried VAT. Side effect: when the account has a Xero organisation connected, a posted actual is queued for sync to that Xero organisation, and the project's Budget Admins get an in-app alert and an email asking them to review the push.

budget_actual_get

ChatGPT
Get a single actual including attachments and tags.

budget_actual_list

ChatGPT
List recorded actuals (spend) for a project budget. Pagination is server-side (page/per_page). Returns rows with totals. budget_actual_get returns a single actual with its attachments and tags.

budget_actual_post

ChatGPT
Promote a draft actual to posted status. Idempotent — re-posting an already-posted actual is a no-op. Requires the draft to have description, gross_amount, occurred_at, and budget_line_id all set. Side effect: when the account has a Xero organisation connected, a posted actual is queued for sync to that Xero organisation, and the project's Budget Admins get an in-app alert and an email asking them to review the push.

budget_actual_update

ChatGPT
Update an actual, including linking it to the PO it pays down via source_po_id. Posted actuals lock cost-shifting fields (gross_amount, currency, fx_rate, vat_code_id, budget_line_id, occurred_at) — only metadata (description, notes, invoice_ref, contact, location, shoot_day, department, source_po_id) can change after posting. Side effect: when the account has a Xero organisation connected, editing a posted actual re-queues it for Xero — a Budget Admin's edit to an actual already synced is pushed to Xero automatically; otherwise the project's Budget Admins get an in-app alert and an email asking them to review the push.

budget_cost_report

ChatGPT
Get the cost-report summary for a budget version: budget vs committed (POs) vs actual vs EFC (Earned Final Cost) vs variance, broken down by schedule/account. Defaults to the budget's default version when version_id is omitted. All money figures are fringe-loaded on the same basis: budget_amount includes fringe on-costs, and committed_amount / actual_to_date / efc include fringe computed on realised spend, so a fully delivered line closes at zero variance. All figures are also NET of VAT: an actual stores a gross amount plus a derived net_amount, and the report sums the net so it is comparable with the budget, which has no tax component. Use committed_amount_excl_fringe / actual_to_date_excl_fringe to reconcile against a PO total or the NET of an invoice — not its gross face value — and realised_fringe_amount for the on-cost portion. A scoped Budget Contributor/Reader sees their granted schedules only. Returns paginated results (default 100, max 500).

budget_cost_report_pivot

ChatGPT
Get an actuals-only pivot of recorded spend by shoot day, location, or department. Useful for "how much did we spend on day 4" / "total catering by location" questions. Figures are actuals at face value and EXCLUDE fringe on-costs — this pivot aggregates by dimension rather than by budget line, so per-line fringe rules do not apply. budget_cost_report carries the fringe-loaded figures. Returns paginated results (default 100, max 500).

budget_fringe_attach_account

ChatGPT
Attach a fringe rule to a schedule/account so newly-created lines under it inherit the rule. Set apply_to_existing=true to also retro-apply to existing lines.

budget_fringe_attach_line

ChatGPT
Attach a fringe rule directly to a single budget line for a specific version, with optional rate/threshold/cutoff overrides. Returns the application ID needed for later updates.

budget_fringe_rule_create

ChatGPT
Create a fringe rule template (e.g. NI, pension, holiday pay). A rule is applied to a schedule by budget_fringe_attach_account, or to a single line by budget_fringe_attach_line.

budget_fringe_rule_list

ChatGPT
List fringe rule templates for a budget (NI, pension, holiday pay, etc). Each rule has a basis (percentage or flat), rate, and optional threshold/cutoff/validity window. Returns paginated results (default 100, max 500).

budget_get

ChatGPT
Get the budget tree for a project: header, versions, schedules (accounts), fringes, tags and the account's VAT codes (vat_codes: id, code, name, rate — the vat_code_id values actuals and POs take), with per-schedule totals. Lines are NOT included by default — each schedule carries line_count and the response sets lines_omitted:true; pass include_lines:true for the full line detail. budget_line_list and budget_line_get return the same detail more cheaply. Totals always reflect every line regardless. Use this to understand the budget structure before drilling into specific lines or running cost reports. Three grand totals are returned per version: grand_totals is the bare line subtotal, effective_grand_totals substitutes any top-down allocation caps, and loaded_grand_totals adds fringe on-costs — use loaded_grand_totals to answer "what does this budget cost". All three exclude the per-version production fee (see versions[].production_fee_basis/value) and any schedule whose parent_id no longer resolves; a scoped Budget Contributor/Reader sees totals for their granted schedules only. Note: line version values can change between calls due to concurrent edits (web UI, other API clients, or server-side recalculation, e.g. dynamic percentage-basis lines). Check updated_by.source and updated_at against your own last write before attributing an unexpected value to a bug — if updated_at is later than your last write and source is not your own client, the value was changed elsewhere. total_source tells you how total was derived.

budget_line_create

ChatGPT
Create a new budget line under a schedule/account. Pass quantity, rate, and x_factor here whenever you know them — they seed every version cell in one round trip and the response echoes the seeded cells back under line_versions. Per-version variations, and later edits to those cells, belong to budget_line_version_update.

budget_line_get

ChatGPT
Get a single budget line including its per-version cells (quantity, rate, x-factor, total override, currency, fx_rate, and the percentage-basis config when the line is computed). Note: line version values can change between calls due to concurrent edits (web UI, other API clients, or server-side recalculation, e.g. dynamic percentage-basis lines). Check updated_by.source and updated_at against your own last write before attributing an unexpected value to a bug — if updated_at is later than your last write and source is not your own client, the value was changed elsewhere. total_source tells you how total was derived: percentage, override, quantity_rate, or null for an empty cell.

budget_line_list

ChatGPT
List budget lines for a project with optional filters. Filters compose with AND. Returns raw line metadata. budget_line_get additionally returns per-version cell data (qty/rate/total). Returns paginated results (default 100, max 500).

budget_line_tag_attach

ChatGPT
Attach a tag to a budget line. Returns the line_tag association ID needed for budget_line_tag_detach.

budget_line_tag_detach

ChatGPT
Remove a tag from a budget line by its line_tag association ID.

budget_line_update

ChatGPT
Update a budget line's metadata (code, description, supplier, unit). Per-version numeric values belong to budget_line_version_update.

budget_line_version_update

ChatGPT
Update the per-version cell data for a budget line: quantity, rate, multiplier, total override, currency. Rejected with a 409-equivalent error if the version is locked. currency_code and fx_rate must be set together. The response echoes the version state immediately after this write, including updated_by and total_source. If a later read shows a different value, check updated_by/updated_at on that read rather than assuming this call failed. To make the write conditional, pass if_unmodified_since with the updated_at you last read — the write is then rejected rather than overwriting a concurrent edit.

budget_po_convert_to_actual

ChatGPT
Convert an approved/issued/closed purchase order into actual spend rows. This is the canonical way to record that a PO has been paid: it mints budget_actual rows tagged with source=po_conversion and source_po_id=<this PO>, so the cost report offsets them against the PO's committed amount instead of double-counting. Idempotent — rerunning skips already-converted lines. This is the path for spend fulfilling a specific PO; budget_actual_create covers spend with no PO behind it. Side effect: when the account has a Xero organisation connected, each new actual is queued for sync to that Xero organisation, and the project's Budget Admins get an in-app alert and an email asking them to review the push.

budget_po_create

ChatGPT
Create a new purchase order in draft state. PO number is auto-assigned per project; reference holds the supplier's own quote, contract or order reference, carried to Xero as the PO Reference if the PO is later approved and pushed (this tool itself does not contact Xero). Line items are added with budget_po_line_create, and budget_po_submit puts the PO forward for approval. Pass at least one of contact_id or company_id so the PO has a recipient.

budget_po_get

ChatGPT
Get a single purchase order with all its line items.

budget_po_line_create

ChatGPT
Add a line item to a purchase order. budget_line_id binds the PO line to a specific budget line (drives committed-spend rollups in the cost report). quantity and rate must be provided — a PO line with rate=0 is rarely intentional.

budget_po_line_update

ChatGPT
Update a purchase order line item.

budget_po_list

ChatGPT
List purchase orders for a project budget. Filters compose with AND. Returns PO headers only. budget_po_get returns a single PO including its line items. Returns paginated results (default 100, max 500).

budget_po_submit

ChatGPT
Submit a draft purchase order for approval (transitions draft → pending_approval). The server then auto-promotes it to approved if EITHER the PO total is at or below the budget's PO approval threshold — note a blank/null threshold means no gate, so every PO auto-approves — OR the submitter is the only effective Budget Admin on the project, since approval would otherwise deadlock. Check the returned status rather than assuming pending_approval. Available to editors. Side effect: notifies the other people involved in the approval (the budget admins, or the PO's creator) with an in-app alert, and emails them unless they have turned that category off. When the account has a Xero organisation connected, a PO that becomes approved, issued or cancelled is queued for sync to Xero: pushed automatically if it was synced before, otherwise held for a Budget Admin to review.

budget_po_transition

ChatGPT
Move a purchase order through its state machine: pending_approval → approved, approved → issued, issued → closed, or any → cancelled. Approving requires Budget Admin and cannot be done by the PO's creator; issuing and closing require Budget Admin; submitting, withdrawing and cancelling require PO write access on a PO you created. Side effect: notifies the other people involved in the approval (the budget admins, or the PO's creator) with an in-app alert, and emails them unless they have turned that category off. When the account has a Xero organisation connected, a PO that becomes approved, issued or cancelled is queued for sync to Xero: pushed automatically if it was synced before, otherwise held for a Budget Admin to review.

budget_po_update

ChatGPT
Update a purchase order header (supplier, reference, dates, currency, notes). Number can only change while status is draft or pending_approval.

budget_tag_create

ChatGPT
Create a custom tag definition for the budget. Tags are attached to lines via budget_line_tag_attach.

budget_tag_list

ChatGPT
List custom tag definitions for a budget (e.g. department, cost type, region). Tags are attached to lines via budget_line_tag_attach. Returns paginated results (default 100, max 500).

budget_update

ChatGPT
Update the budget header fields: name, default currency, PO auto-approval threshold, or notes. Manager-tier — affects every editor on the project. Returns the updated budget tree.

budget_version_list

ChatGPT
List budget versions (e.g. commission, working, estimate, cost report, final) with their lock state and currency. The default_version_id on each budget identifies which one the cost report uses by default. Returns paginated results (default 100, max 500).

budget_version_lock

ChatGPT
Lock a budget version so no further cell, fringe, or tag edits can happen against it. Idempotent — locking an already-locked version is a no-op. Manager-tier — locking ends in-flight edits for every editor working on this version, so coordinate before calling. Locked versions can still be renamed and reordered, but their numeric cells become read-only.

budget_version_unlock

ChatGPT
Unlock a previously-locked budget version, allowing cell/fringe/tag edits again. Idempotent — unlocking an already-unlocked version is a no-op. Manager-tier — only use when the producer explicitly wants to revise a locked snapshot.

calendar_check_contact_conflicts

ChatGPT
Check if a contact has overlapping calendar events across all projects in a date range. Use this before assigning contacts to events or when changing event dates.

calendar_check_user_conflicts

ChatGPT
Check if a team member has overlapping calendar events across all projects in a date range. Use this before assigning users to events or when changing event dates.

calendar_event_assign_user

ChatGPT
Assign a team member to a calendar event. IMPORTANT: Always use calendar_check_user_conflicts first to check for scheduling overlaps before assigning.

calendar_event_attach_task

ChatGPT
Link a task to a calendar event

calendar_event_create

ChatGPT
Create a new calendar event in a project

calendar_event_delete

ChatGPT
Delete one or more calendar events

calendar_event_detach_task

ChatGPT
Remove a task from a calendar event

calendar_event_get

ChatGPT
Get details of a specific calendar event including assigned users, contacts, and task count

calendar_event_list

ChatGPT
List all calendar events in a project. Returns paginated results (default 100, max 500).

calendar_event_unassign_user

ChatGPT
Remove a team member from a calendar event

calendar_event_update

ChatGPT
Update an existing calendar event. If changing dates on an event with assigned users or contacts, use calendar_check_user_conflicts and calendar_check_contact_conflicts to check for scheduling overlaps.

calendar_group_create

ChatGPT
Create a new calendar group in a project

calendar_group_delete

ChatGPT
Delete one or more calendar groups

calendar_group_list

ChatGPT
List calendar groups in a project (groups contain rows which contain events)

calendar_group_update

ChatGPT
Update a calendar group

calendar_row_create

ChatGPT
Create a new calendar row in a project

calendar_row_delete

ChatGPT
Delete one or more calendar rows

calendar_row_list

ChatGPT
List calendar rows in a project, optionally filtered by group

calendar_row_update

ChatGPT
Update a calendar row

company_create

ChatGPT
Create a new company/client

company_get

ChatGPT
Get details of a specific company

company_list

ChatGPT
List all companies/clients in the account

company_update

ChatGPT
Update a company. Requires account admin permission.

contact_create

ChatGPT
Create a new contact. Requires account admin permission.

contact_get

ChatGPT
Get details of a specific contact including project associations

contact_list

ChatGPT
List contacts in the account, optionally filtered by company. Returns paginated results (default 100, max 500).

contact_update

ChatGPT
Update a contact

help_get_article

ChatGPT
Full text of one MotionHub help centre article, addressed by its path (e.g. "/help/account/users"). Paths come from help_list_articles. Each article documents how a feature behaves in the MotionHub UI; the response includes the article url.

help_list_articles

ChatGPT
Catalogue of MotionHub help centre articles — title, description, keywords and path for each, optionally filtered to one group. The articles document how MotionHub features work and how tasks are carried out in the UI. Returns the article paths that help_get_article takes.

media_add_tags

ChatGPT
Add tags to a media item

media_get

ChatGPT
Get detailed information about a specific media item including Azure AI analysis results (keywords, topics, labels, detected objects, people, locations, brands)

media_get_transcript

ChatGPT
Get the transcript for a video or audio media item. Only available for media processed by Azure Video Indexer (azure_status: completed).

media_list

ChatGPT
List media items in a project with optional search and type filtering. Returns paginated results (default 100, max 500).

media_list_comments

ChatGPT
List timestamped comments on a media item (includes threaded replies)

media_remove_tags

ChatGPT
Remove tags from a media item

media_update_description

ChatGPT
Update the description of a media item

programme_create

ChatGPT
Create a new programme. Requires account admin permission.

programme_get

ChatGPT
Get details of a specific programme

programme_list

ChatGPT
List all programmes in the account

programme_update

ChatGPT
Update a programme. Requires account admin permission.

project_assign_contact

ChatGPT
Associate an existing contact with a project

project_assign_user

ChatGPT
Add an existing account user to a project with a specific role. Requires admin permission on the project.

project_create

ChatGPT
Create a new project. Requires account admin permission. Auto-assigns users flagged with add_to_future_projects.

project_list

ChatGPT
List all projects the authenticated user has access to

project_list_members

ChatGPT
List members of a project for task assignment

project_remove_contact

ChatGPT
Remove a contact from a project

project_remove_user

ChatGPT
Remove a user from a project. Requires manager permission on the project.

project_update

ChatGPT
Update a project. Can update name, description, owner, delivery date, reference, and production contact details.

project_update_status

ChatGPT
Update a project status or stage. Status values: development, in production, archived.

project_update_user_role

ChatGPT
Change a user's role on a project. Requires admin permission on the project.

rusheslog_get

ChatGPT
Get a specific rushes log with its media entries

rusheslog_list

ChatGPT
List all rushes logs in a project

script_create

ChatGPT
Create a new script in a project. Types: "filming" (production script) or "edit" (editing script)

script_delete

ChatGPT
Delete one or more scripts

script_get

ChatGPT
Get a specific script with its scenes and content

script_list

ChatGPT
List all scripts in a project

script_scene_add_title

ChatGPT
Add a title card (full-screen text) to a script scene. Shows the text for a fixed duration in the consolidated MP4 export — no media file needed. Useful for an intro title or labelling each actor in an audition reel. By default the card is appended to the end of the scene; pass position to insert it at a specific spot (e.g. position 0 to make it the first element, ahead of existing clips).

script_scene_associate_media

ChatGPT
Link a media item to a script scene with optional in/out timecode points. Automatically extracts the transcript for the specified range from Azure insights.

script_scene_create

ChatGPT
Add a new empty scene to a script

script_scene_delete

ChatGPT
Remove a scene from a script

script_scene_remove_media

ChatGPT
Remove a media association from a script scene

script_scene_reorder

ChatGPT
Reorder scenes in a script by providing scene IDs in the desired order

script_scene_update

ChatGPT
Update the visual or audio content of a scene. Content uses basic HTML with <p>, <strong>, <em> tags. IMPORTANT: All spoken dialogue MUST be enclosed in double quotes for accurate Running Time calculation. Example audio: <p><strong>V/O:</strong> "Welcome to the show."</p><p><strong>PRESENTER:</strong> "Today we explore the city."</p>

script_scene_update_media

ChatGPT
Update the in/out timecode points for a media association in a scene. Recalculates the transcript for the new range.

script_scene_update_title

ChatGPT
Edit a title card's text and/or duration, found by its media_assoc_id (from script_get). Provide text, duration, or both.

script_update

ChatGPT
Update a script name, type, or description

task_create

ChatGPT
Create a new task in a project

task_delete

ChatGPT
Delete one or more tasks

task_get

ChatGPT
Get details of a specific task

task_list

ChatGPT
List tasks for a project or across all projects. Returns paginated results (default 100, max 500). Note: status filter only applies when project_id is provided. Cross-project queries exclude completed tasks.

task_update

ChatGPT
Update an existing task

Capabilities

WritesInteractive

Example Prompts

Click any prompt to copy it.

App Stats

142

Tools

1

Prompts

ChatGPT

Platforms

Works with

ChatGPT

Data refreshed daily