Connector status: LIVE. Connect two ways: hosted (add
https://mcp.videngineer.com/mcp in a supported app and sign in on your own account — no key, no config) or API-key bearer (local stdio connector). Both surfaces register 83 base tools; each connection sees only currently authorized tools. An API-key connection currently sees 74: four upload-recovery and five share/access tools require approved OAuth claims.mcp/videngineer_mcp.py (TOOL_SPECS on origin/main). Where an older draft and the code disagree, the code wins.
| Setup | The connector |
| Recipes | Connector recipes |
Owned analyses and Canvas boards include app_url when ownership is confirmed. Offer that link to open the item in videngineer; media download links are separate and short-lived. Shared boards and public study records do not receive private app links.
Tool map (83)
| Canvas views, templates, access and recovery |
add_canvas_comment, apply_canvas_label_preset, apply_canvas_template, cancel_library_upload, canvas_view_link, create_canvas_share_link, delete_canvas_label_preset, delete_canvas_permanently, delete_canvas_template, duplicate_canvas_cards, edit_canvas_layers, export_canvas, finish_library_upload, get_canvas_draft, get_canvas_link, get_canvas_preferences, grant_canvas_access, group_canvas_cards, library_upload_proxy, list_canvas_access, list_canvas_label_presets, list_canvas_sections, list_canvas_templates, list_deleted_canvases, move_canvas_cards, order_canvas_folder, prepare_library_upload, publish_canvas_draft, purge_deleted_canvases, reset_canvas_preferences, resolve_canvas_draft, restore_deleted_canvas, revert_canvas_change, revoke_canvas_access, revoke_canvas_share_link, save_analysis_reference, save_canvas_card, save_canvas_label_preset, save_canvas_template, set_canvas_preferences, set_canvas_section, delete_canvas_section, set_canvas_settings, update_canvas_kb_node, update_canvas_template |
Full grantees may edit existing visible section titles and bounds, delete visible
section frames, and edit permitted native cards. Creating sections, changing a
section slug, and caller-chosen card ids are owner-only. add_cards is owner-only;
full grantees create permitted native cards with edit_cards, omitting card.id.
To connect new cards, first create them, then use the returned created_ids in a
second edit_cards call with the returned revision and a new idempotency_key.
Both calls require the explicit board and owner ids.
Refusals do not reveal hidden targets: 404 not_found covers section creation
attempts through set_canvas_section and hidden/missing targets in section/card
mutations. For visible sections, a slug change returns 403 forbidden regardless of the proposed slug’s
existence. Creating any card with an explicit id, creating a section through
edit_cards, or supplying a slug field there returns 403 forbidden without
checking whether the proposed identity exists. Owners retain same-batch explicit
ids and section create/rename behavior.
Auth surfaces
Both surfaces register the same eighty-three tool bodies. Hosted listing and direct invocation also enforce rollout claims and scopes.API-key bearer (live today)
- Create a key in Account → API access. Put it in
VIDENGINEER_API_KEY. - Plan entitlements (API access, minutes, credits) apply exactly as in the app.
- Local keys carry no OAuth scopes. Plan gates are the only gate.
- Optional env:
VIDENGINEER_BASE_URL(defaulthttps://videngineer.com),VIDENGINEER_WAIT_CAP(seconds localget_reportpolls; default300). Local context requests keep their 90-second timeout; a final request can extend beyond the polling cap.
Hosted OAuth (live)
- Live in Claude (claude.ai and the desktop app: Settings → Connectors → Add custom connector) and Claude Code (
claude mcp add --transport http videngineer https://mcp.videngineer.com/mcp, then/mcpto sign in). Endpoint:https://mcp.videngineer.com/mcp. Authorize on your own account — no key, no config file. ChatGPT, Cursor, OpenClaw and Hermes: coming soon. - Scopes:
mcp:read,mcp:analyze,mcp:cut_brief,mcp:build_cuts,mcp:canvas. A read-only grant is a real option; board editing is its own consent line. - Missing scope returns a clean refusal with the scopes already granted.
- Hosted
get_report(wait=True)polls for at most 36 seconds. Including cold sign-in verification, a pending call normally returns in about 44 seconds plus small transport overhead. An operator may lower the tool budget with a positive integerVIDENGINEER_WAIT_CAP; invalid or larger values use 36 seconds. - Hosted
get_statusstays a single snapshot. Hostedwait=Falsealso makes one read. Each context request is bounded to the smaller of 8 seconds or the remaining tool budget. - An owned analysis still running returns an ordinary successful result: original
job_id,status, rawprogress, integer or nullprogress_percent, andnote:Still processing — about N% done. Ask again in a minute.When an estimate is unavailable, the note says so. Call again in a minute; do not start another analysis. - Progress estimates prefer a finite number, then a progress object’s
percentvalue, a whole percentage string, or an exactdone/totalstring with positive total. Fractions truncate to whole percentages and pending estimates stay within 0–99. Otherwise known stages use approximate estimates: waiting/queued 5, processing 10, extracting frames 20, extracting audio 35, transcribing 45, analyzing 60, blueprint preparation 80, settling 90, and index pending 95. Unknown stages with unparseable progress return null. Actual errors remain errors.
Charges (quote from tool surfaces)
Reads never charge. Spend tools only charge on an explicit call. Writes stay in your own account: your own Canvas boards, plus new Library assets from
add_asset_from_url. delete_canvas moves a board to Recently Deleted (restorable in the app). No tool edits or deletes your analyses or saved Library files.
Known empty surfaces (honest)
find_cutsreturns empty until its cut-index backfill runs (Mark-gated).find_analyseswithintent(recommend mode) returns an empty recommendation envelope until the labeler /reference_indexbackfill runs (Mark-gated). Keyword filters still work.
Efficient sequences
Remake one cut (your library):get_sound / get_cast, not get_report(fields=[...]). Media URLs stay on list_assets.
Upload limits
Private Library uploads (prepare_library_upload, library_upload_proxy, finish_library_upload) count toward the account’s footage storage: 50 GB on Pro, 250 GB on Power, 500 GB on Studio and 5 GB during a trial (decimal units, so 1 GB is 1,000 MB). Each video can be up to 2 GB and 30 minutes (500 MB and 10 minutes during a trial), and each image or audio file up to 50 MB. Uploaded files are stored, not analyzed. Footage storage is separate from analysis, so uploads never use analysis minutes.
Ownership
Every analysis id is ownership-checked server-side. An id you do not own comes back as a redacted preview (title, thumbnail, hook type, duration) with an analyze-it-yourself option and the credit cost stated — never auto-analyzed for you.Byte budgets (measured)
Wire = hosted MCP HTTP body; compact = structured tool JSON re-encoded compact UTF-8. From wave-2 founder E2E + L3/L4 package specs:
Prefer lean discovery over full dumps. Prefer
get_sound / get_cast over field-sliced full reports.