Skip to main content
Glama

Upload File

upload_file

Low-level upload. Prefer the 'transfer' tool instead — it handles polling automatically. This tool returns immediately with PENDING_UPLOAD status; you must poll get_upload_status yourself. Max file size follows the account plan (Basic 500 MB / Pro 1 GB). Provide EITHER 'filePath' (local stdio only) OR 'content' (base64). Use only when you need explicit control over the upload lifecycle.Over stdio no API key is required: without one you upload as a guest (100 MB, 24-hour link); a key raises the limits and lets you sell.

Input Schema

NameRequiredDescriptionDefault
contentNoBase64-encoded file content (standard or URL-safe base64)
fileNameNoOriginal filename with extension (e.g. report.pdf). Required when using 'content', optional for 'filePath' (derived from path).
filePathNoAbsolute path to a local file. Only works when this MCP server runs locally (stdio transport). Preferred over base64 — zero tokens wasted.
mimeTypeNoMIME type override (auto-detected if omitted)
payoutAddressNoWallet that a priced download pays out to. Only for running without an API key — it is what lets you sell with no account. Ignored when a key is set, because that account's payout address is a dashboard setting. Payments are final: a mistyped address is unrecoverable, and an exchange deposit address usually will not credit a Base transfer from a contract.
idempotencyKeyNoUnique key for retry-safe uploads. Needs an API key; ignored without one.
pricePerDownloadNoPrice per download in USD (e.g. 0.50 or 0.00005). When set, downloaders pay this amount in USDC. Omit for free downloads.

Output Schema

NameRequiredDescriptionDefault
statusYesUpload status: PENDING_UPLOAD, UPLOADING, READY, or FAILED
uploadIdYesUnique upload identifier (e.g. up_a1b2c3d4e5f6g7h8)
expiresAtNoISO 8601 expiration timestamp
downloadUrlNoShareable download URL (works without auth, valid 24h)

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare it is a non-destructive write to an open world; the description adds the real behavioral facts: it returns immediately with PENDING_UPLOAD, requires manual polling, size limits vary by plan (Basic 500 MB / Pro 1 GB), guest mode without a key is capped at 100 MB with a 24-hour link, and a payout address for paid downloads is irrevocable. Those are irrecoverable-consequence warnings not present in the annotations.

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 purpose and the sibling redirect, then lifecycle, limits, and parameter rules follow in a logical order. Slightly dense with a missing space at 'lifecycle.Over stdio', but nearly every sentence carries non-redundant information.

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 7-parameter upload tool with an output schema already covering return values, the description supplies the remaining gaps an agent needs: async lifecycle, polling requirement, transport-dependent path support, plan-based limits, guest-mode constraints, and parameter interactions. Nothing required to invoke it correctly is missing.

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 the crucial mutual-exclusivity rule ('Provide EITHER filePath (stdio only) OR content (base64)') and ties parameters to auth state (payoutAddress only without a key, idempotencyKey needs a key). It stops short of covering every parameter, but the either/or constraint is the highest-value piece of added meaning.

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+resource ('Low-level upload') and immediately distinguishes itself from the sibling 'transfer' tool by explaining the exact difference (transfer handles polling for you). An agent can pick between upload_file, transfer, and upload_from_url 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?

Explicitly names the preferred alternative ('Prefer the transfer tool instead') and the condition for choosing this one ('Use only when you need explicit control over the upload lifecycle'). It also states the follow-up obligation (poll get_upload_status yourself), which is exactly the kind of guidance that prevents wrong tool selection.

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.

Resources