Skip to main content
Glama

Preview a volunteer form

preview_volunteer_form

Convert a blank volunteer application into an online form preview. No account and no API key. Send exactly one of a PDF or page url, pasted form text, or template (volunteer-application-form or volunteer-interest-form). Uses the on-server parser only: Workers AI and other models stay off, so this call has no model charge. Returns previewUrl (/tools/p/{token}), claimUrl, and signUpUrl. claimUrl and signUpUrl are the same sign-up link (/login?next=/tools/p/{token}&utm_source=mcp) labeled sign up free to publish. The parsed form is stored for 24 hours and the daily cleanup deletes it. The URL is fetched once. File contents are not logged. Restricted fields such as Social Security numbers are left out. Anonymous use is limited per network and by a daily cap; over the cap, sign up free.

Input Schema

NameRequiredDescriptionDefault
urlNohttps URL of a blank volunteer PDF, Word file, or HTML page.
textNoPasted blank form, one field label per line. Do not include applicant answers.
templateNoBuilt-in blank form. volunteer-application-form or volunteer-interest-form. Send exactly one of url, text, or template.

Output Schema

NameRequiredDescriptionDefault
titleYesParsed form title.
fieldsYes
parserYesOn-server parser. Workers AI stays off.
stagesYes
claimUrlYesSign-up link that claims this preview, /login?next=/tools/p/{token}&utm_source=mcp.
expiresAtYesUnix milliseconds when the preview is deleted.
signUpUrlYesSame URL as claimUrl.
fieldCountYes
previewUrlYesPublic preview URL, /tools/p/{token}.
publishLabelYesLabel for the sign-up link.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • removedInput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
    • addedInput schema / oneOf
      Added value: +[
      +  {
      +    "not": {
      +      "anyOf": [
      +        {
      +          "required": [
      +            "text"
      +          ]
      +        },
      +        {
      +          "required": [
      +            "template"
      +          ]
      +        }
      +      ]
      +    },
      +    "required": [
      +      "url"
      +    ]
      +  },
      +  {
      +    "not": {
      +      "anyOf": [
      +        {
      +          "required": [
      +            "url"
      +          ]
      +        },
      +        {
      +          "required": [
      +            "template"
      +          ]
      +        }
      +      ]
      +    },
      +    "required": [
      +      "text"
      +    ]
      +  },
      +  {
      +    "not": {
      +      "anyOf": [
      +        {
      +          "required": [
      +            "url"
      +          ]
      +        },
      +        {
      +          "required": [
      +            "text"
      +          ]
      +        }
      +      ]
      +    },
      +    "required": [
      +      "template"
      +    ]
      +  }
      +]
    • addedInput schema / properties / text / description
      Added value: +"Pasted blank form, one field label per line. Do not include applicant answers."
    • addedInput schema / properties / url / description
      Added value: +"https URL of a blank volunteer PDF, Word file, or HTML page."
  2. Changed1 schema field changed
    • addedInput schema / properties / template
      Added value: +{
      +  "description": "Built-in blank form. volunteer-application-form or volunteer-interest-form. Send exactly one of url, text, or template.",
      +  "enum": [
      +    "volunteer-application-form",
      +    "volunteer-interest-form"
      +  ],
      +  "type": "string"
      +}
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "claimUrl": {
      +      "description": "Sign-up link that claims this preview, /login?next=/tools/p/{token}&utm_source=mcp.",
      +      "format": "uri",
      +      "type": "string"
      +    },
      +    "expiresAt": {
      +      "description": "Unix milliseconds when the preview is deleted.",
      +      "type": "integer"
      +    },
      +    "fieldCount": {
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "fields": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "label": {
      +            "description": "Field label shown on the preview.",
      +            "type": "string"
      +          },
      +          "type": {
      +            "description": "Field type, such as short_text or email.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "label",
      +          "type"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "parser": {
      +      "const": "heuristic",
      +      "description": "On-server parser. Workers AI stays off.",
      +      "type": "string"
      +    },
      +    "previewUrl": {
      +      "description": "Public preview URL, /tools/p/{token}.",
      +      "format": "uri",
      +      "type": "string"
      +    },
      +    "publishLabel": {
      +      "description": "Label for the sign-up link.",
      +      "type": "string"
      +    },
      +    "signUpUrl": {
      +      "description": "Same URL as claimUrl.",
      +      "format": "uri",
      +      "type": "string"
      +    },
      +    "stages": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "kind": {
      +            "type": "string"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "order": {
      +            "type": "integer"
      +          }
      +        },
      +        "required": [
      +          "name",
      +          "kind",
      +          "order"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "title": {
      +      "description": "Parsed form title.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "title",
      +    "fields",
      +    "stages",
      +    "fieldCount",
      +    "previewUrl",
      +    "claimUrl",
      +    "signUpUrl",
      +    "publishLabel",
      +    "expiresAt",
      +    "parser"
      +  ],
      +  "type": "object"
      +}
  4. First observed

TDQS

A4/5.0
Behavior5/5

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

Goes well beyond the annotations: on-server parser only with no Workers AI/model charge, parsed form kept 24 hours then deleted by daily cleanup, URL fetched exactly once, file contents not logged, restricted fields like SSNs excluded, and anonymous per-network plus daily caps. With annotations only declaring write/open-world and non-destructive, this description carries substantial extra behavioral context.

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?

Purpose is front-loaded and most sentences carry unique facts (storage lifetime, privacy, rate limits). Minor waste and repetition around the sign-up link, which appears twice ('sign up free to publish', 'over the cap, sign up free'), and the return-field enumeration is partly redundant with the output 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 tool that writes stored state and returns URLs, the description covers input exclusivity, privacy handling, retention, rate limits, and the nature of the returned links; with an output schema present, it need not explain return values further. An agent has everything required to call it and set expectations.

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 oneOf exclusivity and all three parameter descriptions already exist in structured form; the prose restates 'send exactly one of url, text, or template' without adding syntax or format detail beyond the schema. Baseline 3 applies when the schema does the heavy lifting.

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?

States a specific verb and resource ('Convert a blank volunteer application into an online form preview'), and the word 'preview' plus 'blank' scopes it away from write tools like create_form or publish_form. However, it never names a sibling explicitly, so the agent must infer the boundary with convert_pdf_preview, create_form_from_pdf, and get_preview.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives useful gating context ('No account and no API key', rate limits, 'over the cap, sign up free') and input-shape rules, but never says when to pick this over create_form or get_preview, nor when a preview should be followed by claim_preview/publish_form. Usage is implied rather than directed.

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