Skip to main content
Glama

Check uploaded files

finalize_upload

Call after all file PUTs finish. Verifies size, SHA-256, signatures, archive and HTML safety, manifest and content moderation. PDF/PPTX conversion may take 1–3 minutes; poll get_version every 15–30 seconds. Validation failures include file/line/fix issues; correct and upload the affected files. Review status blocks publishing. Moderation outages never release content. IMPORTANT: by default an approved update may immediately replace the live version. When the page already has readers outside the workspace, set hold=true whenever the user has not explicitly approved releasing this version, then provide its preview URL for review. Hold only matters once the page has readers outside the workspace (passcode, public, a folder link or a named link); on a page only workspace members can open — every new page starts that way — hold is ignored and the approved version becomes current directly without notifying anyone. Keywords: publish · web page · webpage · link · share · share to WeChat · WeChat link · html · pdf · markdown · upload · LivePage · proposal.

Input Schema

NameRequiredDescriptionDefault
tagNoOptional: the tag this version gets when it goes live (a string = the tag name, such as 2026-10-28 / v2 final; or {name, title, note}). On a tagged page readers see the newest tagged version and can browse every tagged one (past issues); an existing tag name moves to this version. Daily reports use the day's date. Omitted: a page that has never been tagged behaves exactly as today; on a tagged page this version takes over the tag readers are looking at
holdNoTrue keeps the approved version waiting to publish until the user confirms; then call publish_version. Default false: approval automatically makes this version live. Only takes effect once the page has readers outside the workspace (passcode, public, a folder link or a named link); on a page only workspace members can open it is ignored, and the approved version becomes current directly without notifying anyone.
quietNotrue = no notification this time: when this version goes live, neither workspace people nor readers subscribed to this page are notified; subscribers are notified as usual on the next update. Use it for small edits such as typo fixes
manifestYes
version_idYes
download_basisNoThe basis returned by preview_downloads, used to detect later configuration changes.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / hold / description
      Previous value: -"True keeps the approved version waiting to publish until the user confirms; then call publish_version. Default false: approval automatically makes this version live."New value: +"True keeps the approved version waiting to publish until the user confirms; then call publish_version. Default false: approval automatically makes this version live. Only takes effect once the page has readers outside the workspace (passcode, public, a folder link or a named link); on a page only workspace members can open it is ignored, and the approved version becomes current directly without notifying anyone."
    • changedInput schema / properties / manifest / properties / forms / additionalProperties / properties / fields / items / properties / type / enum
      Previous value: -[
      -  "text",
      -  "textarea",
      -  "select",
      -  "multiselect",
      -  "number",
      -  "phone",
      -  "email",
      -  "image"
      -]New value: +[
      +  "text",
      +  "textarea",
      +  "select",
      +  "multiselect",
      +  "number",
      +  "phone",
      +  "email",
      +  "image",
      +  "location"
      +]
  2. Changed1 schema field changed
    • addedInput schema / properties / manifest / properties / share / properties / auto_excerpt
      Added value: +{
      +  "maxLength": 600,
      +  "type": "string"
      +}
  3. Changed1 schema field changed
    • changedInput schema / properties / manifest / properties / forms / additionalProperties / properties / fields / items / properties / type / enum
      Previous value: -[
      -  "text",
      -  "textarea",
      -  "select",
      -  "multiselect",
      -  "number",
      -  "phone",
      -  "email"
      -]New value: +[
      +  "text",
      +  "textarea",
      +  "select",
      +  "multiselect",
      +  "number",
      +  "phone",
      +  "email",
      +  "image"
      +]
  4. Changed7 schema fields changed
    • addedInput schema / properties / manifest / properties / analytics
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "replay": {
      +      "type": "boolean"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / manifest / properties / folder
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 64,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedInput schema / properties / manifest / properties / folder_link
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / manifest / properties / forms
      Added value: +{
      +  "additionalProperties": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "append_open": {
      +        "type": "boolean"
      +      },
      +      "fields": {
      +        "items": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "key": {
      +              "maxLength": 64,
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "label": {
      +              "maxLength": 40,
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "max": {
      +              "type": "number"
      +            },
      +            "min": {
      +              "type": "number"
      +            },
      +            "options": {
      +              "items": {
      +                "maxLength": 40,
      +                "minLength": 1,
      +                "type": "string"
      +              },
      +              "maxItems": 50,
      +              "type": "array"
      +            },
      +            "required": {
      +              "type": "boolean"
      +            },
      +            "type": {
      +              "enum": [
      +                "text",
      +                "textarea",
      +                "select",
      +                "multiselect",
      +                "number",
      +                "phone",
      +                "email"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "key",
      +            "label",
      +            "type"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 20,
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "members_only": {
      +        "type": "boolean"
      +      },
      +      "title": {
      +        "maxLength": 40,
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "fields"
      +    ],
      +    "type": "object"
      +  },
      +  "propertyNames": {
      +    "maxLength": 64,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / manifest / properties / name
      Added value: +{
      +  "maxLength": 256,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / manifest / properties / path
      Added value: +{
      +  "maxLength": 80,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / manifest / properties / tag
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 40,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    {
      +      "properties": {
      +        "name": {
      +          "maxLength": 40,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "note": {
      +          "maxLength": 2000,
      +          "type": "string"
      +        },
      +        "title": {
      +          "maxLength": 200,
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "name"
      +      ],
      +      "type": "object"
      +    }
      +  ]
      +}
  5. Changed1 schema field changed
    • addedInput schema / properties / tag
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 40,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    {
      +      "properties": {
      +        "name": {
      +          "maxLength": 40,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "note": {
      +          "maxLength": 2000,
      +          "type": "string"
      +        },
      +        "title": {
      +          "maxLength": 200,
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "name"
      +      ],
      +      "type": "object"
      +    }
      +  ],
      +  "description": "Optional: the tag this version gets when it goes live (a string = the tag name, such as 2026-10-28 / v2 final; or {name, title, note}). On a tagged page readers see the newest tagged version and can browse every tagged one (past issues); an existing tag name moves to this version. Daily reports use the day's date. Omitted: a page that has never been tagged behaves exactly as today; on a tagged page this version takes over the tag readers are looking at"
      +}
  6. Changed1 schema field changed
    • addedInput schema / properties / manifest / properties / blankCheck
      Added value: +{
      +  "properties": {
      +    "at": {
      +      "maxLength": 40,
      +      "type": "string"
      +    },
      +    "backfill": {
      +      "type": "boolean"
      +    },
      +    "bytes": {
      +      "maximum": 9007199254740991,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "chars": {
      +      "maximum": 9007199254740991,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "code": {
      +      "enum": [
      +        "blank_swallowed",
      +        "blank_redirect_missing",
      +        "blank_no_content",
      +        "blank_tiny_text"
      +      ],
      +      "type": "string"
      +    },
      +    "file": {
      +      "maxLength": 512,
      +      "type": "string"
      +    },
      +    "line": {
      +      "exclusiveMinimum": 0,
      +      "maximum": 9007199254740991,
      +      "type": "integer"
      +    },
      +    "override_at": {
      +      "maxLength": 40,
      +      "type": "string"
      +    },
      +    "sev": {
      +      "enum": [
      +        "hold",
      +        "warn"
      +      ],
      +      "type": "string"
      +    },
      +    "tag": {
      +      "maxLength": 16,
      +      "type": "string"
      +    },
      +    "tags": {
      +      "maximum": 9007199254740991,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "target": {
      +      "maxLength": 512,
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "sev",
      +    "file"
      +  ],
      +  "type": "object"
      +}
  7. Changed1 schema field changed
    • changedInput schema / properties / manifest / properties / chrome / properties / default / enum
      Previous value: -[
      -  "open",
      -  "collapsed"
      -]New value: +[
      +  "open",
      +  "collapsed",
      +  "hidden"
      +]
  8. Changed1 schema field changed
    • addedInput schema / properties / manifest / properties / reader
      Added value: +{
      +  "properties": {
      +    "accent": {
      +      "pattern": "^#[0-9a-fA-F]{6}$",
      +      "type": "string"
      +    },
      +    "position": {
      +      "enum": [
      +        "br",
      +        "bl",
      +        "tr",
      +        "tl"
      +      ],
      +      "type": "string"
      +    },
      +    "style": {
      +      "enum": [
      +        "pill",
      +        "round"
      +      ],
      +      "type": "string"
      +    },
      +    "subscribe": {
      +      "type": "boolean"
      +    }
      +  },
      +  "type": "object"
      +}
  9. Changed1 schema field changed
    • addedInput schema / properties / manifest / properties / chrome
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "default": {
      +      "enum": [
      +        "open",
      +        "collapsed"
      +      ],
      +      "type": "string"
      +    },
      +    "handle": {
      +      "enum": [
      +        "top-right",
      +        "top-left",
      +        "bottom-right",
      +        "bottom-left"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  10. Changed1 schema field changed
    • addedInput schema / properties / quiet
      Added value: +{
      +  "description": "true = no notification this time: when this version goes live, neither workspace people nor readers subscribed to this page are notified; subscribers are notified as usual on the next update. Use it for small edits such as typo fixes",
      +  "type": "boolean"
      +}
  11. First observed

TDQS

A4.2/5.0
Behavior5/5

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

Far beyond the annotations: it discloses latency (PDF/PPTX conversion 1–3 minutes), polling cadence, failure granularity (file/line/fix issues), that review status blocks publishing, that moderation outages never release content, and the critical side effect that by default approval immediately replaces the live version. It also explains when hold is silently ignored (workspace-only pages), which is exactly the kind of non-obvious behavior annotations cannot convey.

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

Conciseness3/5

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

Front-loaded and purposeful in the first half, but the IMPORTANT block restates the 'readers outside the workspace' condition twice almost verbatim and largely duplicates the schema's hold description. The trailing keyword list ('publish · web page · webpage · link · share to WeChat ...') aids retrieval but is padding rather than instruction.

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?

For a complex 6-parameter, nested-manifest tool with no output schema, it covers what matters operationally: timing, failure handling, publishing side effects and the hold decision. It omits where the 'preview URL' it tells the agent to provide comes from (presumably get_version/preview_version) and says nothing about the tag/quiet semantics that determine reader-facing outcomes.

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 67%, so the schema already documents hold, quiet, tag and download_basis. The description reinforces hold with decision guidance (only when the user has not explicitly approved), which is real added meaning, but it says nothing about version_id, download_basis, or the large manifest object beyond mentioning that it is validated — leaving the heaviest parameter entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific: 'Call after all file PUTs finish. Verifies size, SHA-256, signatures, archive and HTML safety, manifest and content moderation' names the verb (verify) and the resource (uploaded files/version), and the IMPORTANT paragraph reveals the second function — approval that can make the version live. It stops short of stating in one place that this is the finalize-and-approve step distinct from publish_version, so an agent has to infer the name's meaning from a later paragraph.

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?

It gives an explicit trigger ('after all file PUTs finish'), a follow-up loop ('poll get_version every 15–30 seconds'), a remediation path on validation failure ('correct and upload the affected files'), and an explicit branch to another sibling ('hold=true ... then call publish_version'). The conditional for hold (only when the page has readers outside the workspace) is stated twice with concrete examples, leaving nothing to guess.

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