Skip to main content
Glama

Create signed upload links

create_build_upload

Start a build upload and get signed links that upload the file without an API key: run the returned command in a shell, or PUT each part and POST complete to the links. The build is then checked and ready to run. For AI agents: tool arguments cannot carry a build, so hand the bytes to a shell command. command downloads the command-line tool and uploads the file (parts, then complete). Without it: PUT the raw bytes of part n (partBytes each, the last one shorter) to partUrlTemplate with {partNumber} replaced, then POST {parts: [{partNumber, etag}]} to completeUrl. The links expire at expiresAt and work only for this upload. Call find_build first to skip uploading a file that is already there.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "projectId": "<projectId>",
      "fileName": "<fileName>",
      "size": "<size>"
    },
    "name": "create_build_upload"
  }
}

Input Schema

NameRequiredDescriptionDefault
sizeYesSize in bytes
labelNoA label, for example the commit (optional)
fileNameYesapp.apk or MyApp.app.zip
projectIdYesProject id (p_…)
fingerprintNoNative fingerprint to store with the build, for find_build (optional)

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false), the description discloses the key behavioral traits that matter: no API key is required, the signed links are single-purpose ('work only for this upload') and time-bounded ('expire at expiresAt'), and the upload completes with a check step before the build is runnable. That is exactly the context an agent needs before firing a mutating, non-idempotent call.

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 dense but front-loaded: purpose first, then the two upload paths, then expiry, then the find_build prerequisite. Some phrasing is pile-up ('parts, then complete'), and putting the find_build prerequisite at the very end rather than before the instructions weakens the ordering slightly.

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?

There is no output schema, and the description compensates well by naming the returned fields (command, partUrlTemplate, partBytes, completeUrl, expiresAt) and how to consume them. Combined with the expiry constraint and the find_build prerequisite, an agent has everything needed to invoke this correctly.

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 baseline is 3, and the description does add a little: it explains how the file size maps onto the upload mechanics ('partBytes each, the last one shorter'). It says nothing about label, fingerprint, or projectId beyond what the schema already documents, so the added value over structured fields is modest.

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 opens with a specific verb and resource ('Start a build upload and get signed links') and immediately scopes it: key-less upload via either the returned shell command or direct PUT/POST to the returned links. It names find_build as the prerequisite sibling tool, so an agent can tell this apart from a plain fetch or from importing an existing build.

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 clear when-to-use context (a build that is not already present — 'Call find_build first to skip uploading a file that is already there') and two explicit invocation paths with a recommended one for agents. The gap is sibling routing: a tool named complete_build_upload exists, yet the description uses 'POST complete' for the link-based finalization without clarifying how that relates to the complete_build_upload tool, which could mislead an agent.

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.