Skip to main content
Glama

storage_upload_request

Mint a one-time uploader script for a private Storage blob (any file type).

Storage is the org's binary store: bytes go to the Railway bucket, metadata to drive_objects. Objects stay private until a human seat calls storage_publish (agent seats must request_gated_approval(gate=publish)). Document MIME types (Markdown, HTML, plain text, diagram JSON/YAML) are stored as blobs; versioned edit / /s/ publish still use file_upload_request. Pass work_id and/or project_id to attach after ingest (kind=artifact; transcripts stay on shared files). Pass parent_id to place the file in a folder. Batch uploads are multiple grants (one file each) — console multi-select uses sequential ingest, not a multi-file grant. Returns upload_url, upload_token, max_bytes, and a self-deleting Python script. Token is single-use and expires in ~10 min. drive_upload_request is a deprecated alias of this tool.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
agentNoOverride agent identity
titleYesStorage object title
work_idNoAttach the uploaded Storage object to this work item UUID
filenameNoOptional local filename (script default path + MIME sniff)
parent_idNoFolder UUID to land the file in (omit or empty = org root). One grant per file.
project_idNoAttach the uploaded Storage object to this project UUID (kind=artifact)
content_typeNoOptional MIME type hint stored on the grant
upload_base_urlNoOptional server origin (e.g. https://teamshared.com). Defaults to settings.public_url.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / parent_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Folder UUID to land the file in (omit or empty = org root). One grant per file."
      +}
  2. Added

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden — and it delivers: it discloses that the token is single-use with ~10 min expiry, the Python script is self-deleting, objects remain private until published, and batch uploads are strictly one-grant-per-file with console multi-select using sequential ingest. This is rich security-and-lifecycle context well beyond a bare 'upload' claim.

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

Conciseness5/5

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

The description is long, but every sentence earns its place — storage model, privacy flow, sibling routing, parameter semantics, return contract, token lifecycle, and deprecation notice. It is front-loaded with a crisp one-line summary and organized so each sentence adds non-redundant information an agent needs.

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 an 8-parameter, high-stakes upload tool with no annotations, the description is remarkably complete: it covers the storage architecture, the publish/gating workflow, sibling alternatives, parameter semantics, return values, token expiry, and alias deprecation. The output schema exists and the description still adds return-field context, leaving no material gap for correct invocation.

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 genuine meaning beyond the schema: work_id/project_id attach with kind=artifact plus the caveat that transcripts stay on shared files, parent_id places the file in a folder, and the one-grant-per-file granularity constraint. It does not merely restate the schema.

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 opening sentence states a specific verb ("Mint"), a precise resource ("one-time uploader script for a private Storage blob"), and explicitly broadens scope ("any file type"). It further distinguishes itself from siblings by naming file_upload_request for versioned edit //s/ publish flows and noting drive_upload_request as a deprecated alias.

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?

The description explicitly delineates when to use this tool (binary/any-type blobs into Storage) versus when not to (document MIME types needing versioned edit //s/ publish → file_upload_request). It also clarifies the post-ingest publish flow (human calls storage_publish; agent seats need request_gated_approval) and warns off the deprecated alias.

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.