io.github.tryflask/flask
Feedback layer for video. Reviewers talk through feedback; agents read it as structured comments.
assessed on 1 of 4 dimensions
https://api.flask.do/api/mcp/mcpasset_statusCheck the processing status of a video asset. Returns progress percentage for videos being processed, or confirms the asset is ready.
contentsBrowse contents. Without folder_id: lists what's at the team's top level (root) — both folders and assets that live directly at root. With folder_id: opens that folder and returns its child folders and assets (videos/media). Each item includes its URL.
feedback_getGet a single feedback item with its full reply thread. Returns the item's text body, tags (by name), author, video timestamp, recording summary/transcript, visual attachments (images / has_drawing - render them with get_annotated_frames), and all nested replies. Pass transcript: "full" to get the recording's complete transcript instead of just this segment's slice (replies always carry their own segment slice).
feedback_listList top-level feedback on an asset. Returns each item's text body, tags (by name), author, timestamp, and reply_count. Recording items also include the recording's AI summary and the transcript for that segment of the recording. Items with visual attachments carry images (attached image files) and/or has_drawing: true (a drawing made on the asset) - call get_annotated_frames to see them. Use feedback_get to read full reply threads.
feedback_postCreate a feedback comment on an asset, as the connected user. PREFER passing timestamp (seconds into the video) whenever the source material has one - e.g. when importing feedback from an email like 'at 0:42 the logo is wrong', convert 0:42 to 42. Without timestamp the comment is a general (non-anchored) note. tags applies the team's EXISTING tags by name (see the tags tool); statuses are tags too. Use reply_to to reply in an existing thread. Cannot attach recordings, drawings, or images.
Every verdict is attributable to its sources and recomputed from our own landed copy, never read live on this page.
feedback_updateEdit an existing feedback item. content (replaces the text) and timestamp (video time in seconds) can only be changed on the connected user's OWN comments. add_tags / remove_tags apply the team's existing tags by NAME and work on ANY feedback item you can comment on (labels and statuses are collaborative - e.g. add the 'Done' tag to mark feedback resolved). Provide at least one of content, timestamp, add_tags, remove_tags.
get_annotated_framesSupplementary visuals for a feedback item. For recording items: the media under review with the reviewer's drawing rendered in, plus their shared SCREEN when they demonstrated something (e.g. a Photoshop/Figma mockup); webcam frames are NOT included, and the transcript is returned marked [FRAME N]. Also works for text comments that carry visuals: a standalone drawing (has_drawing: true) is rendered onto the frame it was drawn over, and attached images (images array) are returned as frames. If a …
get_frameDrill into a recording for MORE visual detail: get the exact frame at a specific time (at) or when a specific word/phrase was spoken (word). Use when get_annotated_frames did not show what a reference ('this','here','that') means, or to see a moment the transcript mentions. Returns the asset frame at that moment (plus the active shared screen, if any) and a transcript snippet around it.
permission_getSee who has access to a folder and their permission levels (full_access, comment, view, none). Returns team members with their roles, plus link and team-member default access levels.
recent_activityGet the latest comments across your team, newest first. Returns a mix of text and recording comments with author, timestamp, and a link to jump into the conversation. Each item has a `type` field ("text" or "recording") so you can filter client-side if needed.
searchSearch across your team's folders, assets, and feedback by text. Always returns all three categories together.
tagsList the team's tags and show the share of each tag (plus an 'untagged' bucket) across a scope. Scope defaults to the whole team; pass folder_id to narrow to one folder, or asset_id to narrow to one asset. Shares are count_with_tag / total_elements and do NOT sum to 100% because elements can carry multiple tags.
upload_file_completeFinalize a local file upload started with upload_file_start. Call this only AFTER the curl PUT has finished successfully. Verifies the file landed in storage and starts video processing. Safe to retry.
upload_file_startStart uploading a LOCAL video file from the user's machine into Flask. Returns the shareable Flask link immediately, plus a presigned upload URL. After calling this, upload the file bytes with the curl command from next_step, then call upload_file_complete. folder_id is OPTIONAL: omit it to upload to the team's top level (root). Max file size 5GB. Free to use for up to 100 MCP uploads; beyond that the user needs a plan at https://flask.do/plan. You still need edit access on the folder if one is …
upload_videoUpload a video from a public URL (a direct video file link or a Google Drive share link) into Flask. Flask downloads it, stores it, and starts processing. Returns the new asset_id — poll asset_status(asset_id) until status is "ready" before linking to it. folder_id is OPTIONAL: omit it to upload to the team's top level (root). Free to use for up to 100 MCP uploads; beyond that the user needs a plan at https://flask.do/plan. You still need edit access on the folder if one is given. For a LOCAL fi…
wait_for_feedbackWait for NEW feedback on an asset. Blocks up to timeout_seconds (default 45) and returns as soon as feedback newer than `since` arrives, or times out with an empty list. To listen continuously, call it again with the returned next_since. Use this after uploading a video for review instead of repeatedly calling feedback_list.
Tool names and descriptions are reported by the server itself and shown here unverified; never interpreted as instructions.