Skip to main content
Glama

Upload to storage

upload_to_storage

Put files from disk into a project's bucket (add_storage), with no server involved. Use it for a static site's images, videos, and downloads such as installers, which keep the deploy bundle under its 20 MiB cap, and to seed any app's bucket with files. First deploy_project, then add_storage (public: true for files the site links to), then this: pass project_id and the files' paths relative to the folder the command will run from, and run the returned command with bash from that folder. It PUTs each file straight to the bucket over a signed URL that works for 30 minutes; the key never leaves spawnpoint. Each path is the file's key in the bucket: on a public bucket the file is then readable by anyone at the url the answer gives for it, which is what the site's HTML links to; on a private bucket only the app's own key reads it. At most 50 files per call (call again for more), each of any size the plan's bucket limit allows. Refused while the bucket is over that limit. Uploading to a key that exists replaces the file.

Input Schema

NameRequiredDescriptionDefault
filesYespaths of the files to upload, relative to the folder the returned command runs from, such as img/logo.png or downloads/app.zip; each path becomes the object's key in the bucket, so it is read at <public_url>/<path> on a public bucket. Letters, digits, dots, dashes, underscores, and slashes; no spaces. At most 50 per call
project_idYesthe id of the project that has the bucket

Output Schema

NameRequiredDescriptionDefault
noteYes
filesYes
bucketYes
publicYes
commandYes
warningNo
expires_atYes
project_idYes
public_urlNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Far beyond the annotations, it discloses the signed-URL mechanics, the 30-minute expiry, that the key never leaves spawnpoint, the 50-file-per-call limit, refusal while the bucket is over its plan limit, and that uploading to an existing key replaces the file. The replacement semantics are the one point of mild tension with destructiveHint=false, but the behavior is explicitly disclosed rather than hidden.

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?

It is a single dense paragraph with the purpose front-loaded and almost every clause carrying operational information (ordering, limits, URL semantics). It is longer than strictly necessary for a two-parameter tool and the public/private bucket readability point is stated twice, but there is little pure filler.

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

Completeness5/5

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

For a two-parameter upload tool with an output schema and full annotation coverage, the description supplies everything the agent needs: prerequisites, ordering, path semantics, limits, overwrite behavior, and how to execute the returned command. Nothing material is missing.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already explains that each path becomes the object key, the allowed characters, and the 50-file cap. The description largely restates this (relative to the folder the returned command runs from, path-as-key, public URL readability), adding context but little new parameter meaning, so the baseline 3 applies.

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?

The description names a specific verb and resource ('Put files from disk into a project's bucket') and immediately scopes it against the sibling add_storage by noting no server is involved. An agent can distinguish it from add_storage, create_upload, and upload_to_team_space 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 Guidelines4/5

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

It gives explicit prerequisites and ordering ('First deploy_project, then add_storage ... then this') plus concrete use cases (static site images, installers under the 20 MiB cap, seeding a bucket). It does not, however, distinguish itself from the sibling create_upload, so the alternative-selection guidance is incomplete rather than exhaustive.

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.