# flask MCP server

Feedback layer for video. Reviewers talk through feedback; agents read it as structured comments.

## Links
- Registry page: https://www.getdrio.com/mcp/io-github-tryflask-flask
- Repository: https://github.com/tryflask/skills
- Website: https://flask.do/mcp

## Install
- Endpoint: https://api.flask.do/api/mcp/mcp
- Auth: Not captured

## Setup notes
- Remote endpoint: https://api.flask.do/api/mcp/mcp

## Tools
- contents - Browse 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. Endpoint: https://api.flask.do/api/mcp/mcp
- feedback_list - List 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. Endpoint: https://api.flask.do/api/mcp/mcp
- feedback_get - Get 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). Endpoint: https://api.flask.do/api/mcp/mcp
- wait_for_feedback - Wait 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. Endpoint: https://api.flask.do/api/mcp/mcp
- feedback_post - Create 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. Endpoint: https://api.flask.do/api/mcp/mcp
- feedback_update - Edit 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. Endpoint: https://api.flask.do/api/mcp/mcp
- get_annotated_frames - Supplementary 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 visual reference is still unclear, call get_frame to drill into a specific moment (at) or spoken word/phrase (word). Returns up to 12 images. Endpoint: https://api.flask.do/api/mcp/mcp
- get_frame - Drill 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. Endpoint: https://api.flask.do/api/mcp/mcp
- asset_status - Check the processing status of a video asset. Returns progress percentage for videos being processed, or confirms the asset is ready. Endpoint: https://api.flask.do/api/mcp/mcp
- permission_get - See 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. Endpoint: https://api.flask.do/api/mcp/mcp
- search - Search across your team's folders, assets, and feedback by text. Always returns all three categories together. Endpoint: https://api.flask.do/api/mcp/mcp
- recent_activity - Get 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") plus the asset it belongs to and its version number, so you can read feedback across many videos in one call. Scope with folder_id to read one client's/project's feedback, narrow the window with since/until, and page with offset. For counts and trends use feedback_stats instead. Endpoint: https://api.flask.do/api/mcp/mcp
- tags - List 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. Endpoint: https://api.flask.do/api/mcp/mcp
- upload_video - Upload 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 file on disk, use upload_file_start instead. Endpoint: https://api.flask.do/api/mcp/mcp
- upload_file_start - Start 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 given. Endpoint: https://api.flask.do/api/mcp/mcp
- upload_file_complete - Finalize 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. Endpoint: https://api.flask.do/api/mcp/mcp
- feedback_stats - Aggregate feedback statistics across many assets in ONE call - counts per asset and per version (v1, v2, ...), split by type (text/recording), tag, and author, with first/last feedback timestamps. Scope to a folder (folder_id), one asset or version stack (asset_id), or the whole team; narrow the time window with from/to. Use this for trend questions like 'are v1 notes going down across this client's recent videos' or 'what tags dominate this folder' instead of calling feedback_list per asset. For reading the feedback text itself across assets, use recent_activity. Endpoint: https://api.flask.do/api/mcp/mcp

## Resources
Not captured

## Prompts
Not captured

## Metadata
- Owner: io.github.tryflask
- Version: 1.1.1
- Runtime: Streamable Http
- Transports: HTTP
- License: Not captured
- Language: Not captured
- Stars: Not captured
- Updated: Jul 8, 2026
- Source: https://registry.modelcontextprotocol.io
