Skip to main content
Glama

postedly_upload_document

Stores one recipient-facing PDF from its exact bytes, supplied as canonical base64, without a browser. Accepts a valid, unencrypted PDF up to 10 MiB decoded. When expectedSha256 is supplied, a mismatch rejects the upload; a matching hash confirms byte integrity, not content correctness. Returns a private document ID, page count, byte count, SHA-256 and an authenticated preview URL. Service-specific layout checks run at quote time. Does not create a quote, take payment or send anything.

Input Schema

NameRequiredDescriptionDefault
serviceYes
filenameYesFilename only, without a local path.
contentBase64YesStandard padded base64 of the exact file bytes. No data URL prefix or whitespace.
expectedSha256NoOptional SHA-256 computed from the original file bytes; a mismatch rejects the upload.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • removedInput schema / oneOf
      Removed value: -[
      -  {
      -    "not": {
      -      "required": [
      -        "contentBase64"
      -      ]
      -    },
      -    "required": [
      -      "file"
      -    ]
      -  },
      -  {
      -    "not": {
      -      "required": [
      -        "file"
      -      ]
      -    },
      -    "required": [
      -      "filename",
      -      "contentBase64"
      -    ]
      -  }
      -]
    • changedInput schema / properties / contentBase64 / description
      Previous value: -"Standard padded base64 of actual file bytes, for clients that can read the exact bytes. No data URL prefix or whitespace; never invent base64."New value: +"Standard padded base64 of the exact file bytes. No data URL prefix or whitespace."
    • removedInput schema / properties / file
      Removed value: -{
      -  "additionalProperties": false,
      -  "properties": {
      -    "download_url": {
      -      "description": "Actual temporary HTTPS download URL supplied by ChatGPT; never invent a URL.",
      -      "maxLength": 8192,
      -      "minLength": 1,
      -      "type": "string"
      -    },
      -    "file_id": {
      -      "maxLength": 256,
      -      "minLength": 1,
      -      "type": "string"
      -    },
      -    "file_name": {
      -      "maxLength": 180,
      -      "minLength": 1,
      -      "type": "string"
      -    },
      -    "mime_type": {
      -      "enum": [
      -        "application/pdf",
      -        "application/octet-stream"
      -      ],
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "download_url",
      -    "file_id"
      -  ],
      -  "type": "object"
      -}
    • changedInput schema / properties / filename / description
      Previous value: -"Filename only, without a local path. Optional for native attachments; defaults to their file_name or Attachment.pdf."New value: +"Filename only, without a local path."
    • changedInput schema / required
      Previous value: -[
      -  "service"
      -]New value: +[
      +  "service",
      +  "filename",
      +  "contentBase64"
      +]
    • changedOutput schema / (root)
      Previous value: -{
      -  "$schema": "https://json-schema.org/draft/2020-12/schema",
      -  "anyOf": [
      -    {
      -      "additionalProperties": false,
      -      "properties": {
      -        "document": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "bytes": {
      -              "maximum": 10485760,
      -              "minimum": 1,
      -              "type": "integer"
      -            },
      -            "contentType": {
      -              "const": "application/pdf"
      -            },
      -            "id": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "name": {
      -              "type": "string"
      -            },
      -            "pages": {
      -              "maximum": 50,
      -              "minimum": 1,
      -              "type": "integer"
      -            },
      -            "previewUrl": {
      -              "format": "uri-reference",
      -              "type": "string"
      -            },
      -            "sha256": {
      -              "pattern": "^[a-f0-9]{64}$",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "id",
      -            "name",
      -            "pages",
      -            "bytes",
      -            "sha256",
      -            "previewUrl",
      -            "contentType"
      -          ],
      -          "type": "object"
      -        },
      -        "documentId": {
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "message": {
      -          "type": "string"
      -        },
      -        "previewRequiresAuthentication": {
      -          "const": true
      -        }
      -      },
      -      "required": [
      -        "documentId",
      -        "document",
      -        "previewRequiresAuthentication",
      -        "message"
      -      ],
      -      "type": "object"
      -    },
      -    {
      -      "additionalProperties": false,
      -      "properties": {
      -        "error": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "code": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "details": {
      -              "additionalProperties": false,
      -              "properties": {
      -                "addressRole": {
      -                  "enum": [
      -                    "recipient",
      -                    "sender"
      -                  ]
      -                },
      -                "canSendAsEntered": {
      -                  "type": "boolean"
      -                }
      -              },
      -              "required": [
      -                "addressRole",
      -                "canSendAsEntered"
      -              ],
      -              "type": "object"
      -            },
      -            "message": {
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "code",
      -            "message"
      -          ],
      -          "type": "object"
      -        }
      -      },
      -      "required": [
      -        "error"
      -      ],
      -      "type": "object"
      -    }
      -  ],
      -  "type": "object"
      -}New value: +null
  2. Changed6 schema fields changed
    • addedInput schema / oneOf
      Added value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "contentBase64"
      +      ]
      +    },
      +    "required": [
      +      "file"
      +    ]
      +  },
      +  {
      +    "not": {
      +      "required": [
      +        "file"
      +      ]
      +    },
      +    "required": [
      +      "filename",
      +      "contentBase64"
      +    ]
      +  }
      +]
    • changedInput schema / properties / contentBase64 / description
      Previous value: -"Standard padded base64 of the exact file bytes. No data URL prefix or whitespace."New value: +"Standard padded base64 of actual file bytes, for clients that can read the exact bytes. No data URL prefix or whitespace; never invent base64."
    • addedInput schema / properties / file
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "download_url": {
      +      "description": "Actual temporary HTTPS download URL supplied by ChatGPT; never invent a URL.",
      +      "maxLength": 8192,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "file_id": {
      +      "maxLength": 256,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "file_name": {
      +      "maxLength": 180,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "mime_type": {
      +      "enum": [
      +        "application/pdf",
      +        "application/octet-stream"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "download_url",
      +    "file_id"
      +  ],
      +  "type": "object"
      +}
    • changedInput schema / properties / filename / description
      Previous value: -"Filename only, without a local path."New value: +"Filename only, without a local path. Optional for native attachments; defaults to their file_name or Attachment.pdf."
    • changedInput schema / required
      Previous value: -[
      -  "service",
      -  "filename",
      -  "contentBase64"
      -]New value: +[
      +  "service"
      +]
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "document": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "bytes": {
      +              "maximum": 10485760,
      +              "minimum": 1,
      +              "type": "integer"
      +            },
      +            "contentType": {
      +              "const": "application/pdf"
      +            },
      +            "id": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "name": {
      +              "type": "string"
      +            },
      +            "pages": {
      +              "maximum": 50,
      +              "minimum": 1,
      +              "type": "integer"
      +            },
      +            "previewUrl": {
      +              "format": "uri-reference",
      +              "type": "string"
      +            },
      +            "sha256": {
      +              "pattern": "^[a-f0-9]{64}$",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "id",
      +            "name",
      +            "pages",
      +            "bytes",
      +            "sha256",
      +            "previewUrl",
      +            "contentType"
      +          ],
      +          "type": "object"
      +        },
      +        "documentId": {
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "message": {
      +          "type": "string"
      +        },
      +        "previewRequiresAuthentication": {
      +          "const": true
      +        }
      +      },
      +      "required": [
      +        "documentId",
      +        "document",
      +        "previewRequiresAuthentication",
      +        "message"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "error": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "code": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "details": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "addressRole": {
      +                  "enum": [
      +                    "recipient",
      +                    "sender"
      +                  ]
      +                },
      +                "canSendAsEntered": {
      +                  "type": "boolean"
      +                }
      +              },
      +              "required": [
      +                "addressRole",
      +                "canSendAsEntered"
      +              ],
      +              "type": "object"
      +            },
      +            "message": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "code",
      +            "message"
      +          ],
      +          "type": "object"
      +        }
      +      },
      +      "required": [
      +        "error"
      +      ],
      +      "type": "object"
      +    }
      +  ],
      +  "type": "object"
      +}
  3. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing the 10 MiB decoded size ceiling, the unencrypted-PDF-only constraint, the reject-on-hash-mismatch behavior, and the precise caveat that a matching hash proves byte integrity but not content correctness. It also flags that layout checks are deferred to quote time, which is non-obvious and materially affects agent behavior.

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?

Dense but front-loaded: the core action and the byte format lead, constraints follow, and the exclusion sentence lands last. Every sentence carries distinct information with no filler.

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?

Even without an output schema, the description enumerates the return payload (document ID, page count, byte count, SHA-256, authenticated preview URL), covers the size and encryption constraints, and explains the hash caveat. Nothing an agent needs to call or interpret this tool 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 already 75%, so the schema documents most fields. The description adds genuine meaning for expectedSha256 by clarifying it verifies byte integrity rather than content, and ties 'service' to downstream layout checks at quote time. It does not add much for filename or contentBase64 beyond 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?

States a specific verb and resource (stores one recipient-facing PDF from exact bytes) and immediately scopes it against siblings by declaring it does not create a quote, take payment, or send anything. An agent can distinguish this from postedly_quote or postedly_prepare_document without opening either schema.

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?

Boundary conditions are explicit ('Does not create a quote, take payment or send anything') and the no-browser/byte-supply requirement makes the intended invocation context clear. It stops short of naming which sibling to call before or after (e.g., postedly_quote, postedly_prepare_document), so routing is implied rather than stated.

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