Skip to main content
Glama

create_form

Creates a new form from exact fields or a natural-language brief, with options to publish immediately or save as a draft.

Instructions

Create a new form. Provide exactly one of:

  • fields (with name): use this when you already know the questions. It is instant and exact.

  • description: a natural-language brief; niceform's AI designs the form (takes 10-60 seconds).

Set publish: true to make the form live right away, optionally with close_at (deadline) and response_limit. Without it the form is a draft: use get_preview_url to look at it, then publish_form.

niceform does not send the form to anyone. Once published, share the returned publicUrl with respondents yourself (email, chat, etc.). To check on results later, call summarize_responses for totals, or list_form_responses with since (the previous latestSubmittedAt) for new answers. Call close_form when collection is over.

Examples:

  • fields: [{label: "Name", type: "text", required: true}, {label: "Attending?", type: "radio", options: ["Yes", "No"]}], name: "Party RSVP"

  • description: "Create a customer feedback form for a restaurant with rating scales and comments"

Input Schema

NameRequiredDescriptionDefault
nameNoForm name. Required with fields.
fieldsNoExact questions, in order. Mutually exclusive with description; requires name.
publishNoPublish immediately after creating.
close_atNoISO 8601 timestamp with offset after which the form stops accepting responses. Requires publish: true.
descriptionNoNatural language brief for niceform to design the form (10-60 s). Mutually exclusive with fields.
response_limitNoMaximum responses to accept. Requires publish: true.
idempotency_keyYesA caller-generated unique key (preferably a UUID) for this intended form creation. Reuse the same key when retrying the same request.
style_preferenceNoOptional style preference for the form appearance. Default uses organization branding.default
one_response_per_deviceNoAllow only one response per device.

Output Schema

NameRequiredDescriptionDefault
nameYes
formIdYes
statusYes
closeAtNo
publicIdYes
publicUrlNoPresent when published; share this with respondents.
stepCountYes
fieldCountYes
previewUrlYes
responseLimitNo
idempotencyKeyYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.3.0

TDQS

A4.1/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the safety profile is already known. The description still adds genuinely new behavior: AI design latency of 10-60 seconds, and the critical fact that niceform never sends the form to anyone so the caller must distribute `publicUrl`. That latency and non-delivery context is the kind of disclosure the score rewards, but it stops short of covering failure/retry behavior around the idempotency_key, so it is not a 5.

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 core action, then a bulleted either/or, then lifecycle guidance, then two examples — a logical progression with little waste. It runs long and the two examples partially restate the field-object shape the schema already defines, costing it a point.

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?

An output schema exists, so return values need no explanation, and yet the description still tells the agent to capture `publicUrl` and the `latestSubmittedAt` cursor, which is the operationally relevant part. The only gap is retry/idempotency behavior for a non-idempotent, open-world create that is explicitly flagged idempotentHint=false.

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 coverage is 100%, so the schema already documents every parameter including the fields/description mutual exclusivity and the publish prerequisites on close_at and response_limit; baseline 3 applies. The description reinforces the one-of constraint and the publish→live/draft distinction in operational terms, and its worked examples show how a field object is composed, but it adds no parameter detail the schema lacks.

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+resource ("Create a new form") and immediately splits it into the two creation modes, which is the real disambiguation an agent needs. It also names its siblings (get_preview_url, publish_form, summarize_responses, list_form_responses, close_form) so the agent can place it in the workflow without opening another schema.

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?

Explicitly says when to use `fields` (you already know the questions, instant and exact) versus `description` (natural-language brief, 10-60s), and enforces "provide exactly one of." It then routes downstream: draft → get_preview_url → publish_form, later → summarize_responses or list_form_responses with `since`, closing → close_form.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.