Skip to main content
Glama

Finish local file upload

upload_file_complete
Idempotent

Finalize a local file upload started with upload_file_start. Call this only AFTER the upload command (or, for an image or zip, the curl PUT) has finished successfully. Pass exactly one of: asset_id (a video: verifies every part landed in storage and starts video processing), image_url (an image) or upload_id (a live animation zip: checks it has a page to play, else says what to fix). An image or a zip creates the asset here - at the team's top level, in folder_id, or as a new version of version_of - titled title. Safe to retry: a repeat returns the same asset.

Input Schema

NameRequiredDescriptionDefault
filesNoImage or zip (a video's go with upload_file_start; a zip is already its version's file). Files to attach to the version, sent with the upload: by convention the working files that made it as ONE source.zip (the project folder without node_modules, build output or renders; over 30 MB, split into source-1.zip, source-2.zip, ...). Max 30 MB each, 20 per version, names used once. Each comes back with its upload command: run it before the main upload.
notesNoImage or zip (a video's go with upload_file_start). The version's notes, in Markdown: what changed and why (link the feedback it answers), and how to continue (the tools, the command that renders it). Saved with the version, so it shows them from the start; each file's line is put above them for you. Up to 20,000 characters of text.
titleNoImage or zip only: title for the new asset (defaults to the file name for an image)
team_idNoTeam to act in: the team.id an earlier result named. Omit for the team selected in the Flask app (which the user can switch at any time).
asset_idNoThe asset_id (version id) upload_file_start returned for a video
folder_idNoImage or zip only: folder to create it in (omit for the team's top level)
image_urlNoThe image_url upload_file_start returned for an image
upload_idNoThe upload_id upload_file_start returned for a live animation zip
version_ofNoImage or zip only: add it as a new version of this asset (any of its ids). For a video it is ignored: the version is attached at upload_file_start.

Schema Changelog

Changes observed during successful MCP inspections.

No schema history has been recorded yet.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by describing branch-specific behavior: for a video it verifies every part landed and starts processing, for a zip it checks for a playable page and reports what to fix, and for an image/zip it creates the asset at a chosen location. 'Safe to retry: a repeat returns the same asset' reinforces idempotentHint=true with a concrete return behavior, though it partly overlaps the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and precondition, then the discriminating parameter rule, then per-branch behavior. Dense but every clause carries information; a few long parentheticals make it slightly harder to scan than an ideal definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter, no-output-schema finalize step, it covers the workflow position, the three mutually exclusive entry modes, asset placement (top level, folder_id, version_of), title handling, and retry semantics. It does not spell out failure recovery for a partial video upload or permission requirements, which are the remaining gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds a genuinely non-schema constraint: 'Pass exactly one of: asset_id ... image_url ... or upload_id'. That mutual-exclusion rule is not expressed by any required/oneOf constraint (0 required params), so the description carries real semantic weight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Finalize a local file upload') and immediately anchors it to the sibling it completes, upload_file_start. An agent can distinguish it from upload_file_start and upload_video without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit precondition ('Call this only AFTER the upload command ... has finished successfully') and an explicit alternative for the preceding step (upload_file_start). It further routes by media type, telling the agent which of asset_id / image_url / upload_id applies to a video, image, or live animation zip.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.