Skip to main content
Glama

Plan a large upload

plan_upload

Accepts a file manifest and returns which hashes are already stored, a direct upload URL for each missing hash, a session id, and commands: one curl PUT per missing blob plus a finalize line that uses $DEEDPAGE_TOKEN. Inputs: files as {path, sha256, size, content_type?}, and optional slug, spa, merge, ttl_seconds, expected_version, via, heard_from, and token. Applies when the files are larger than about 4 MB, or when each sha256 is already known. Does not publish by itself. Run commands from the site folder; the last line finalizes the upload. Per-site size limits are unchanged.

Input Schema

NameRequiredDescriptionDefault
spaNoServe index.html for unknown paths (single-page apps). Default false.
viaNoOptional label stored with the publish. At most 80 characters. An IP address, a URL, or an email address is not stored. A non-empty value replaces the X-Via header.
slugNoExact slug, or omit for a random one.
filesYesManifest entries. sha256 is 64 lowercase hex characters. size is the byte length.
mergeNoOverlay these paths on the live site.
tokenNoBearer token returned by your first publish (deed_tok_...). Optional if the MCP client sends Authorization: Bearer.
heard_fromNoOptional. Where you or your user found deed.page, such as a skill repo, a directory, a blog post, X, or a friend. Free text, at most 200 characters. An email address, IP address, or phone number is stored as [redacted]. A URL or hostname is kept. Omit it and signup continues.
ttl_secondsNoOpt-in expiry in seconds after the site goes live. Omit for a permanent site.
expected_versionNoLive version this upload must match, such as "v3".

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / spa / description
      Added value: +"Serve index.html for unknown paths (single-page apps). Default false."
    • addedInput schema / properties / ttl_seconds / description
      Added value: +"Opt-in expiry in seconds after the site goes live. Omit for a permanent site."
  2. Changed1 schema field changed
    • addedInput schema / properties / heard_from
      Added value: +{
      +  "description": "Optional. Where you or your user found deed.page, such as a skill repo, a directory, a blog post, X, or a friend. Free text, at most 200 characters. An email address, IP address, or phone number is stored as [redacted]. A URL or hostname is kept. Omit it and signup continues.",
      +  "type": "string"
      +}
  3. Changed1 schema field changed
    • addedInput schema / properties / via
      Added value: +{
      +  "description": "Optional label stored with the publish. At most 80 characters. An IP address, a URL, or an email address is not stored. A non-empty value replaces the X-Via header.",
      +  "type": "string"
      +}
  4. Changed1 schema field changed
    • changedInput schema / properties / expected_version / description
      Previous value: -"Live version this finalize must match, such as \"v3\"."New value: +"Live version this upload must match, such as \"v3\"."
  5. Added

TDQS

A4.2/5.0
Behavior4/5

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

Since no output schema exists, the description usefully discloses the return shape (per-hash upload URLs, session id, ready-made curl commands) and the operational constraint to run from the site folder with $DEEDPAGE_TOKEN. That goes well beyond the annotation set (readOnlyHint=false, destructiveHint=false, openWorldHint=true). It omits session/URL expiry and what happens if a PUT fails, which matters for a multi-step upload workflow.

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 most decision-relevant fact—what comes back—followed by inputs, eligibility threshold, and workflow caveat. Every sentence is functional, though the enumerated input list is largely redundant against a fully documented schema.

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 9-parameter, no-output-schema tool, the description supplies the missing return contract, the size/hash preconditions, and the fact that a finalize step is still required. An agent has enough to decide whether to call it and how to proceed afterward; residual gaps (expiry, retry behavior) are secondary.

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%, so the schema already documents every parameter including the nested file entry shape. The description's 'Inputs:' sentence mostly restates the parameter list and the {path, sha256, size, content_type?} shape without adding semantics such as how merge interacts with expected_version. Baseline 3 applies when the schema carries the load.

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 concrete verb and resource ('accepts a file manifest and returns which hashes are already stored') and enumerates the exact return payload: upload URLs, session id, and curl commands. It also separates itself from publishing ('Does not publish by itself'), which distinguishes it from publish_site and finalize_upload.

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?

Gives a concrete activation threshold: 'Applies when the files are larger than about 4 MB, or when each sha256 is already known.' It also warns 'Does not publish by itself,' which tells the agent another step is required. It does not name the alternative sibling (publish_site for small files, finalize_upload for completion) explicitly, leaving the agent to infer it from 'the last line finalizes the upload.'

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.