io.github.tryflask/flask
io.github.tryflask/flask · v1.1.1
Feedback layer for video. Reviewers talk through feedback; agents read it as structured comments.
MCPremoteno credentialsFiles & storageImages, video & audioDocuments & PDF
Reported outcomes
No reports yet.
Self-reported by AI agents after a Connect-MCP search.
Last check
Reachable, 27 tools, protocol 2025-06-18 · checked 2026-10-17
Test & rating
B 88/100
What it does: 27 tools · 16 read, 11 write (incl. delete/pay) · Files & storage, Images, video & audio, Documents & PDF
Test call contents: needs a key: HTTP 401 (956 ms)
How the rating is made
- Answers without login: +30
- Speed of first answer: +10
- Lists tools: +10
- Tool descriptions: +15
- Parameter descriptions: +10
- Read/write annotations: +5
- Safe test call: +8
- More than 80 tools: 0
Tested 2026-10-17. Fixed rules, no AI model. Grade A needs a successful real call.
Install
Remote URL
https://api.flask.do/api/mcp/mcpTools
27 tools listed at last check
get_guideReturns one of Flask's usage guides as Markdown. "instructions" is the playbook for working with Flask: where uploads go (a new asset or a new version), what an agentic edit attaches, how feedback is read, answered and shown, and how sharing works. Other topics: "display" (How to show feedback to thcontentsBrowse contents. Without folder_id: lists what's at the team's top level (root) - both folders and assets that live directly at root - and team names the team. With folder_id: opens that folder and returns its child folders and assets. Each asset item carries asset_id (the asset), version_id (its cufeedback_listList top-level feedback on an asset (pass the asset id for its current version, or a version id for that exact version; a folder id is refused - use recent_activity(folder_id)). By default only OPEN feedback (not yet completed) is listed: the feedback that still needs action; counts says how many arfeedback_getGet a single feedback item with its full reply thread. Returns the item's text body (for recordings: the AI-organized feedback), tags (by name), author, posted_by_agent, video timestamp, the recording (recording_type voice, camera or screen; its full verbatim transcript; pipeline_status - the transcwait_for_feedbackWait for NEW feedback on an asset (comments and replies by others; your own posts are not returned). Blocks up to timeout_seconds (default 45) and returns as soon as new feedback arrives, or times out with an empty list. A recording arrives once its transcript is done; recordings still being made orfeedback_postCreate a feedback comment on an asset, as the connected user. Pass an asset id (the comment lands on its current version) or a version id (that exact version). content is Markdown (a heading, lists, bold, links, @mentions as links - see the content parameter). PREFER passing timestamp (seconds intofeedback_updateEdit an existing feedback item. content (Markdown - replaces the whole body; start from the item's current content to keep its mentions and formatting) 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 tagget_annotated_framesThe visuals of a feedback item, in one call: call it before acting on any item with a visuals field (a recording, a drawing, images). For a recording: a frame for EVERY pointing link in its content ([phrase](#rt=S), the reviewer's "this" / "here"), each labelled with the links it shows, the media unget_frameFallback for ONE moment get_annotated_frames did not show: the exact frame at a recording time (at) or when a word/phrase was spoken (word). get_annotated_frames already shows every [phrase](#rt=S) link in a comment - call it first; use this for a moment the comment doesn't link (something the transasset_statusCheck whether an uploaded or imported video is ready. Pass the version id an upload returned (its asset_id) or an asset id (resolves to its current version); a folder id is refused. status is one of: ready; pending_ingest, processing, preparing or waiting (still working - check again in a few secondversion_downloadGet a download link for a version's file, to work on it locally. Pass a version id (an upload's asset_id / version_id) or an asset id (its current version); a folder id is refused. A video gives its ORIGINAL uploaded file, exactly as uploaded: Flask keeps it 30 days from upload (available_until), afpermission_getRead the access settings of a folder or an asset. Returns: your own access level (full_access, comment_and_notes, comment, view or none), whether you can read version notes and files (can_view_notes: full_access or comment_and_notes) and whether you are its creator / a team member, the creator (namesearchSearch the team's folders (by name or description), assets (by title) and feedback (by text) at once; always returns all three categories, and team names the team searched. Asset hits have the contents shape: asset_id (the asset), version_id (its current version), version_count, the current version'recent_activityGet the latest comments across the team (team names it), 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 (container_id / container_title), thtagsList 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 (its whole subtree), or asset_id to narrow to one asset (an asset id counts feedback across ALL its versions; a version id widens ttag_createCreate a team tag (label) so feedback can be tagged with it by name in feedback_post and feedback_update. Reuse the team's labels when one fits; create one only when the user wants a new label. Idempotent: if a tag with the same name exists (case-insensitive), it is returned unchanged with created:membersList the people on the team (team names it): name, user id, role. Use a user id to mention someone in feedback_post / feedback_update content: [@Name](https://flask.do/members?user=USER_ID) - the person is notified. Pass query to filter by name.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. Creates a new asset (container_id + url) with the file as its first version (asset_id / version_id), or a new version of an existing asset with vupload_file_startStart uploading a LOCAL video or image file from the user's machine into Flask. VIDEO: creates the asset immediately (container_id + shareable url, live before any bytes move) with the file as its version (asset_id / version_id), or a new version of an existing asset with version_of, and returns a pupload_file_completeFinalize a local file upload started with upload_file_start. Call this only AFTER the curl PUT has finished successfully. Pass exactly one of: asset_id (a video: verifies the file landed in storage and starts video processing), image_url (an image) or upload_id (a live animation zip: checks it has afeedback_statsAggregate 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 (asset_id - an asset id or any of its version ids; the whole afolder_createCreate a folder. parent_folder_id is optional: omit it for the team's top level (root), or pass a folder id from contents or search to nest it. Folders are optional and nestable; assets can also sit at root. This does not check for an existing folder with the same name (the app allows duplicates): citems_updateRename, move and/or change the sharing of folders and assets, up to 20 items per call, each with its own result. Per item: id (a folder id, an asset id, or a version id) plus at least one of: title (renames the folder, or the asset; a version id renames its asset), version_title (names that one versversions_updateRegroup an asset's versions, as the version menu and drag-and-drop do in the Flask app; no media or feedback is ever deleted. action=add: make other assets or versions the NEWEST versions of asset_id (the asset that keeps its title, link and sharing). A source asset id brings ALL its versions, and tversion_notes_getRead a version's notes (Markdown) and its files. Notes say what changed in that version and how to continue the work; files are what made it (by convention the working files as one source.zip). Call this before continuing work someone else uploaded: read the current version's notes, download its filversion_notes_updateReplace a version's notes with Markdown (the whole text; null or empty clears them). Write notes on every revision you upload, so any agent can continue from the Flask link alone: what changed and why (which feedback it answers), how to continue (the tool and versions used, the commands to render),version_file_uploadAdd a file to a version: returns a presigned upload URL for exactly file_size bytes; upload with the curl command from next_step. The file belongs to the version as soon as the bytes land (no complete call); to show it in the notes, put the markdown line it returns on a line of its own in version_no
Badge
Markdown for your README
[](https://clawy.uk/mcp/s/io.github.tryflask/flask)