Series "AI agents in AET" · extra: forms · October 2026

For AI agents: how to build your user the best form with the AET MCP server

Updated: ·

Short answer

To build a form for your user with the AET MCP server: connect with the user's account (a guest draft can't hold registration questions), call aet_access to confirm you may create events, read the exact field format with aet_section_schema for the registration section, create the page with aet_create_event (it stays hidden), write all questions in one aet_update_page call with section registration and op set — up to 40 fields from 16 kinds (short text, paragraph, number, email, phone, date, time, dropdown, one choice, several choices, yes/no checkbox, photo, linear scale, rating, choice grid, checkbox grid) plus section steps, with when conditions on earlier answers — then set the Forms layout with aet_set_event_design using layout forms, read the result back with aet_get_event, show the user the preview, and publish with aet_publish only after the user says yes (it is a two-step call with a confirmation token). Afterwards aet_event_stats returns registrations, sources and per-question aggregates without personal data. You get a form page where every response gets a QR ticket, with optional approval of applications. The user does five things in the AET editor themselves: place limits and ticket packages, paid tickets, the text after submitting, the accept-until date, and importing an existing Google Form.

Key facts

  • Written by the AnyEventTool team for AI agents and for the people who use them; every tool name, field and limit below was checked in AET's source code on 28 October 2026.
  • Order of calls: aet_access → aet_section_schema (registration) → aet_create_event → aet_update_page (registration, feedback) → aet_set_event_design (layout forms) → aet_get_event → user's yes → aet_publish (two-step) → aet_event_stats.
  • 16 question kinds through MCP: text, textarea, number, email, phone, date, time, select, choice, multi, checkbox, photo, scale, rating, grid, gridm — plus section for steps. Up to 40 fields, 30 options per question.
  • Conditions: when = {f, op, v} with op is, not, has or any, pointing to an EARLIER field; any question except photo and grids can be a condition. Answers to hidden questions are not saved.
  • Name (first_name) and email (mail) are always in the form; you can make them optional. Custom field ids look like cf_ plus 4–40 letters, digits or hyphens.
  • anonymous: true lets people respond without signing in (events created through MCP have it on). applicationForm: true makes it an application that the organizer approves; applicants then sign in with Google.
  • Only the human, in the AET editor: place limits and ticket packages, paid tickets, the text after submitting, accept-until date, closed text, pre-filled links, and Import from Google Forms.
  • Two-step confirmations: publishing or hiding, removing registration questions, turning registration off, switching between instant registration and applications. aet_undo does not restore the registration form.

Step by step

  1. 1Check access

    Call aet_access. You need «all events» or «selected events plus the events it creates» to create a form; a guest draft cannot hold registration questions.

  2. 2Understand the need

    Infer purpose, who fills it in, limit, deadline and what happens with answers from the conversation; ask only what is missing, at most three questions.

  3. 3Read the schema

    Call aet_section_schema with section registration; use its field kinds and limits exactly.

  4. 4Create the page

    Call aet_create_event with the title, date, place and short description from the user, in the user's language. The event stays hidden and counts toward the user's monthly plan.

  5. 5Write the questions

    Call aet_update_page with section registration, op set and the full field list, anonymous and applicationForm. Add feedback questions in the feedback section if needed.

  6. 6Apply the Forms layout

    Call aet_set_event_design with layout forms, and optionally a look, colors and fonts.

  7. 7Review

    Call aet_get_event, check every question against the quality rules, and send the user the preview link with a two-line summary.

  8. 8Hand over what only the human can do

    Tell the user what to set in the AET editor: place limits, paid tickets, text after submitting, accept-until date.

  9. 9Publish with consent

    Call aet_publish with show true; it returns needs_confirmation. Repeat it with the confirmToken only after the user says yes.

  10. 10Report

    Read aet_event_stats after the first day and before the deadline; report numbers, the top answer of key questions and one next step.

The recipe in one table

#ToolWhat you sendWhat to check in the answer
1aet_access—Mode allows creating events
2aet_section_schema{"section":"registration"}Field kinds, limits, the when format
3aet_create_eventTitle, date, place, about — from the user, in their languageeventId; the event is hidden
4aet_update_pageOne op: registration / set with all fieldsapplied; any needs_confirmation
5aet_update_page (optional)feedback / set with questions—
6aet_set_event_design{"layout":"forms"} (+ look, colors, fonts)applied, warnings
7aet_get_event—Fields as stored, readiness, links
8aet_publishshow: trueneeds_confirmation → ask the user → repeat with confirmToken
9aet_event_stats—Registrations, sources, survey_questions

Three rules that save a failed call:

  • Use your account connection, not a guest draft. Guest drafts (aet_create_draft) hold the page — first screen, about, schedule, FAQ — but registration questions are written only on an account event.
  • Send the whole list once. op: set with fields replaces the form's list; name and email are added if you leave them out. Building question by question with addItem works too, but one set is easier to review.
  • Give your own ids to questions you will reference. A condition points to an earlier field by id, so name it: cf_format, cf_driver. Ids are cf_ plus 4–40 letters, digits or hyphens — cf_day is too short.

When a form is the right tool

AET Forms is the page type "Form" with the "Forms" layout: one sheet of questions where every response becomes a registration with a QR ticket. Use it when the answers are the point.

SituationForm?Why, or what instead
Sign-up for a consultation, class or slotYesChoice of day and time, QR ticket, check-in
Applications with selection (casting, volunteers, closed meetup)Yes, with approvalapplicationForm: true; applicants sign in with Google
Questionnaire before an event (dietary needs, sizes, experience)YesConditions keep it short
Survey after an eventYes, or the feedback sectionFeedback questions sit on the event page itself
Collecting orders without payment (lunch, T-shirts)YesDropdowns and numbers; money handled elsewhere
Collecting paid ordersPartlyPaid tickets are switched on by the user in AET; for goods, AET's shop
A quick voteYes, with careOne choice question; AET has no "one response per person" switch
A public event with programme, speakers, venueNot only a formA full event page (the "Card" or "Lama" layouts) with registration inside
A game in the roomNoAET's live quiz, set up by the user
Keeping people together between eventsNoAET communities and calendars, set up by the user

If the user talks about an event with a date, a venue and a programme, build an event page and put the questions in its registration. If the user talks about collecting answers, build a form.

What people really want from a form

Behind "make me a form" there is almost always one of six goals. Each changes the build.

Real goalWhat changes in the formAET setting
Collect contactsName, email, maybe phone; nothing else requiredSystem fields only; anonymous: true
Limit placesAsk the user for the number; offer slots as choicesPlace limits are set by the user in the editor
Select participantsQuestions that help decide; a clear "we'll reply by…"applicationForm: true
Take paymentPrice and what it includes in the descriptionPaid tickets switched on by the user
Understand opinionsScales, ratings, one open question, no required personal dataanonymous: true, name and email optional
Count results quicklyClosed questions (choice, number) instead of free textThey aggregate in aet_event_stats

Two questions decide most of it: "What will you do with the answers?" and "Is there a limit?" If the answers feed a decision, use approval; if they feed a count, use closed questions; if there is a limit, the human has to set it in AET.

How to understand the user's need without an interrogation

First read the conversation. People usually already said what it is for ("for my pottery class"), who fills it in ("parents"), and sometimes a limit ("12 places") or a date ("until Friday"). Ask only what is missing.

Minimal set — ask at most three of these, only if unknown:

  1. What is the form for, in one sentence?
  2. Who fills it in, and in what language?
  3. Is there a limit of places, and a deadline?
  4. What do you do with the answers: choose people, count, contact, or just know?
  5. Is anything paid?

Extended set — only for applications, surveys or forms over ten questions: which answers are must-have; whether the organizer approves each person; whether answers are sensitive (health, children, documents); whether the user wants a summary after the deadline.

Decision tree:

If the user…TypeQuestions to includeSettings
wants people to book a timeBooking formDay (choice), time (dropdown), contactanonymous: true; limits by the user
wants to choose who comesApplicationMotivation (paragraph), experience (choice), availability (several choices)applicationForm: true
wants to know preferences before an eventQuestionnaireChoices with "Other", conditional follow-upsanonymous: true
wants feedback after an eventSurveyRating, scale 0–10, grid, one open questionName and email optional
wants a team or group sign-upGroup formTeam name, number of people, namesanonymous: true
wants orders without paymentOrder sheetItem (dropdown), quantity (number), notesanonymous: true

When you are unsure, build the smallest useful form, show it, and ask "Anything to add or remove?" — users answer that faster than an abstract question.

Google Forms in brief: what it has and what it lacks

Users often ask you to "replace" or "copy" a Google Form. Know the trade-off before you promise anything. From Google's help centre, checked on 28 October 2026:

  • Google has 12 question types, sections with "go to section" logic (only from multiple choice and dropdown), regex validation, response receipts, editing after submitting, embedding, live Sheets sync, a full quiz mode, up to 500,000 responses per form from September 2026.
  • Google lacks payments, tickets, check-in and per-option place limits, and needs respondents to sign in for file uploads, one-response limits, verified emails and drafts.

The full list with sources: Google Forms limits in 2026; the feature-by-feature score: Google Forms vs AET Forms.

If the user has a Google Form already, the fastest path is a button for them, not a tool for you: Import from Google Forms in the AET form editor takes a public form link and brings over questions, options, sections and required marks. There is no MCP tool for it. You can rebuild the form from its questions if the user pastes them.

What AET Forms can do, and who sets it

CapabilityFor which needExampleWho sets it
16 question kinds + stepsAny formScale 0–10 "How likely…"Agent (MCP)
Conditions on any earlier answerShort forms that adaptCar number only for driversAgent (MCP)
Steps with progressLong forms"Step 2 of 3"Agent (MCP)
QR ticket for every registrationEntry, proof of bookingTicket on the event page and in the emailAutomatic
Approval of applicationsSelectionVolunteers, castingsAgent (MCP) — switching is two-step
Responding without an accountFamilies, older guests, shared phonesanonymous: trueAgent (MCP)
Place limits per package or roleWorkshops, slots12 places per sessionUser in the editor
Paid tickets, 0% platform feePaid classes€25 masterclassUser in the editor
Check-in at the doorEventsPhone browser scannerUser on the day
Text after submitting, accept-until dateClear endings"We'll reply by Monday"User in the editor
The "Forms" layout, looks, colors, fontsA form that looks cared forPaper-sheet layoutAgent (MCP)
19 interface languages, page translationInternational audiencesUkrainian and EnglishPage language from the user
Feedback questionsOpinions after the eventNPS 0–10Agent (MCP)
Statistics without personal dataReportingTop answer per questionAgent (MCP)

Not yet in AET Forms (in work or planned, per AET's roadmap on 28 October 2026): a copy of answers by email to the respondent, editing a response by link, embedding (iframe), file uploads beyond photos, a quiz mode with grading, server-side closing by date or limit for free registrations (today checked in the browser). Don't promise these.

How to set each block, and what is MCP-only or editor-only

ElementHow it is setAgent via MCPNotes from the code
Questionsregistration.fields[]YesUp to 40 fields; label up to 120 characters
Requiredrequired: trueYesChecked only for visible questions
Hint under a questionhelpYesUp to 500 characters; for a section it is the step description
Length, range, countmin, maxYesText: length; number: value; several choices: how many
Scalemin 0 or 1, max 2–10, lo, hiYesEnd labels up to 40 characters
Ratingmax 3–10, icon star, heart or thumbYes
Gridrows (≤ 30), cols (≤ 12)YesGrids can't be conditions
"Other" optionother: trueYesOne choice and several choices only
Conditionswhen: {f, op, v}Yesf must be an earlier field
Stepsa field with type: sectionYesQuestions before the first section form an untitled first step
Name and emailsystem ids first_name, mailYes, required on or offAlways present; can't be removed
Other system fieldssecond_name, organization, position, phone, selfieYes
No sign-inanonymous: trueYesNot with applications
ApprovalapplicationForm: trueYes, two-step when switchingApplicants sign in with Google
Consent to data useA required checkbox questionYesWrite what the data is for
Feedback questionsfeedback.questions[]YesTypes: text, longtext, number, date, single, multi, yesno, rating10
Registration button text on the pagepage.cta.labelYes, landing layoutsUp to 40 characters; the form's own submit button keeps AET's wording
Text after submittingForm settingsNo — editor
Accept until, "closed" textForm settingsNo — editorChecked in the browser today
Pre-filled linkForm settingsNo — editor?f.<id>=value
Place limits, packages, rolesRegistration settingsNo — editor
Paid tickets, payment accountTicketsNo — editor0% platform fee
Import from Google FormsForm editor buttonNo — editorPublic forms only

Which question kind for which need

NeedKind (type)Options or settingsWhy
A name, a title, a short codetextmax for lengthOne line, easy on phones
Motivation, commentstextareamax 300–500Long answers; keep only one per form
Age, quantity, team sizenumbermin, maxRange checked; averages in stats
A second email (e.g. a parent)email—Format checked
A phone numberphone—International format checked
A date (birthday, arrival)date—Date only
A timetime—Separate from the date
One of many (10+) optionsselect2–30 optionsCompact dropdown
One of 2–6 optionschoiceother if the list isn't completeVisible buttons, one tap
Several of a listmultimin/max how many, otherTick boxes
Agreement, yes/nocheckboxrequired for consentOne box
A photo for a badgephoto—Images only
Agreement level, NPSscalemin 0 or 1, max up to 10, lo/hiComparable numbers
Satisfactionratingmax 5, icon starFamiliar and quick
Rate several items on one scalegridrows, colsOne question instead of five
Several answers per rowgridmrows, colsE.g. which sessions on which days
A new stepsectionlabel, helpLong forms in 2–4 steps

Rules for options:

  • Mutually exclusive. "18–25", "26–35", not "18–25", "25–35".
  • Complete, or with "Other". If you can't list every case, add other: true.
  • Natural order. Times and sizes in order, otherwise the most common first; "Other" last.
  • 2–6 for buttons, more for a dropdown. Over six visible buttons slow people down.
  • Scales: odd points when a middle opinion exists, 0–10 for recommendation. Label both ends.
  • No double questions. "Was the food tasty and warm?" is two questions.

Conditions and steps: patterns that work

PatternConditionEffect
Follow-up for one answer{"f":"cf_driver","op":"is","v":"Yes"}Car number only for drivers
Skip for one answer{"f":"cf_ticket","op":"not","v":"Student"}Company details for everyone except students
Follow-up for a ticked box{"f":"cf_diet","op":"has","v":"Allergy"}Allergy details if "Allergy" is among the ticks
Follow-up if anything is written{"f":"cf_company","op":"any"}Job title only if a company was given
Whole step for some peoplewhen on a section fieldThe step and its questions appear only on that answer

What the code does: a hidden section hides all its questions; a condition on a question that is itself hidden counts as false; answers to hidden questions are dropped on save. A condition can point to text, choice, several choices, dropdown, number, date, time, yes/no, scale and rating answers — not to photos or grids.

Steps: put a section field before each group. Two to four steps work best: "About you", "How you can help", "When you're free". Questions before the first section are an untitled first step — usually name and email.

Example 1: booking a free consultation with a choice of day

A one-to-one consultation, in person or online; online people leave a messenger. Send this as one operation in aet_update_page:

{ "section": "registration", "op": "set", "value": { "on": true, "anonymous": true, "applicationForm": false, "fields": [ { "id": "first_name", "required": true }, { "id": "mail", "required": true }, { "id": "phone", "required": true }, { "id": "cf_format", "type": "choice", "label": "How would you like to meet?", "options": [ "In person", "Online" ], "required": true }, { "id": "cf_weekday", "type": "choice", "label": "Which day suits you?", "options": [ "Tuesday", "Wednesday", "Thursday" ], "required": true }, { "id": "cf_slot", "type": "select", "label": "Time", "options": [ "10:00", "12:00", "15:00", "17:00" ], "required": true }, { "id": "cf_messenger", "type": "text", "label": "Telegram or WhatsApp for the call", "help": "We send the link there 10 minutes before the start.", "when": { "f": "cf_format", "op": "is", "v": "Online" }, "required": true }, { "id": "cf_topic", "type": "textarea", "label": "What would you like to discuss?", "max": 500, "required": false }, { "id": "cf_consent", "type": "checkbox", "label": "I agree that the organizer stores my answers to arrange the consultation", "required": true } ] } }

  • anonymous: true — people book without signing in.
  • phone is a system field made required, because the organizer calls back.
  • cf_messenger appears only when cf_format is "Online", and is required only then.
  • cf_weekday uses buttons (three options); cf_slot a dropdown (four times).
  • The consent checkbox says exactly what the data is for.

What the user still does: set a place limit per slot if each time can hold one person, and the text after submitting ("We'll confirm the exact time by email").

Example 2: a volunteer application with "if driver — car number"

Volunteers apply; the organizer chooses. Two steps after name and contacts.

{ "section": "registration", "op": "set", "value": { "on": true, "applicationForm": true, "fields": [ { "id": "first_name", "required": true }, { "id": "mail", "required": true }, { "id": "phone", "required": true }, { "id": "cf_s-about", "type": "section", "label": "How you can help", "help": "Takes about two minutes." }, { "id": "cf_skills", "type": "multi", "label": "What would you like to do?", "options": [ "Registration desk", "Setting up the hall", "Photos", "Guiding guests" ], "other": true, "min": 1, "max": 3, "required": true }, { "id": "cf_driver", "type": "choice", "label": "Can you drive and help with transport?", "options": [ "Yes", "No" ], "required": true }, { "id": "cf_plate", "type": "text", "label": "Car registration number", "help": "For the parking pass.", "max": 12, "when": { "f": "cf_driver", "op": "is", "v": "Yes" }, "required": true }, { "id": "cf_s-when", "type": "section", "label": "When you are free" }, { "id": "cf_days", "type": "multi", "label": "Which days can you come?", "options": [ "Friday, setup", "Saturday", "Sunday" ], "min": 1, "required": true }, { "id": "cf_shirt", "type": "select", "label": "T-shirt size", "options": [ "XS", "S", "M", "L", "XL", "XXL" ], "required": false }, { "id": "cf_consent", "type": "checkbox", "label": "I agree that the organizer stores my answers to plan the volunteer team", "required": true } ] } }

  • applicationForm: true — each person is an application the organizer approves or declines; AET emails the decision. Applicants sign in with Google to apply. Switching an existing form to applications is a two-step change: the user confirms.
  • cf_skills allows one to three ticks and "Other".
  • cf_plate appears only for cf_driver = "Yes".
  • Two section fields make two steps: "How you can help", "When you are free".
  • T-shirt size is optional — collect it, but don't block the application on it.

Example 3: registering a team for a quiz night

One captain registers the team.

{ "section": "registration", "op": "set", "value": { "on": true, "anonymous": true, "applicationForm": false, "fields": [ { "id": "first_name", "required": true }, { "id": "mail", "required": true }, { "id": "cf_team", "type": "text", "label": "Team name", "max": 40, "required": true }, { "id": "cf_size", "type": "number", "label": "How many players?", "help": "Teams of 2 to 6.", "min": 2, "max": 6, "required": true }, { "id": "cf_players", "type": "textarea", "label": "Names of the other players", "max": 300, "required": false }, { "id": "cf_league", "type": "choice", "label": "Which league?", "options": [ "First time", "Regulars" ], "required": true }, { "id": "cf_topics", "type": "multi", "label": "Favourite rounds", "options": [ "Music", "Films", "History", "Sport", "Science" ], "max": 2, "required": false }, { "id": "cf_consent", "type": "checkbox", "label": "I agree that the organizer stores our answers to run the quiz", "required": true } ] } }

  • cf_size is a number from 2 to 6 — the range is checked.
  • cf_players is optional: teams often change on the night.
  • cf_topics allows at most two ticks, so the answers stay comparable.
  • The place limit counts registrations, i.e. teams; if the venue has 20 tables, the user sets 20 places.

The quiz itself is a separate AET feature the user sets up; this form only registers teams.

Example 4: a survey after the event, with a scale and a rating

A separate form page for feedback, where people answer without giving their name.

{ "section": "registration", "op": "set", "value": { "on": true, "anonymous": true, "applicationForm": false, "fields": [ { "id": "first_name", "required": false }, { "id": "mail", "required": false }, { "id": "cf_overall", "type": "rating", "label": "How was the evening overall?", "max": 5, "icon": "star", "required": true }, { "id": "cf_recommend", "type": "scale", "label": "How likely are you to recommend it to a friend?", "min": 0, "max": 10, "lo": "Not at all", "hi": "Definitely", "required": true }, { "id": "cf_parts", "type": "grid", "label": "Rate each part", "rows": [ "Talks", "Food", "Venue" ], "cols": [ "Weak", "OK", "Good", "Great" ], "required": false }, { "id": "cf_best", "type": "multi", "label": "What did you like most?", "options": [ "Speakers", "People I met", "Format", "Venue" ], "other": true, "required": false }, { "id": "cf_next", "type": "choice", "label": "Would you come again?", "options": [ "Yes", "Maybe", "No" ], "required": true }, { "id": "cf_improve", "type": "textarea", "label": "One thing we should change", "max": 500, "required": false } ] } }

  • first_name and mail stay in the form (they always do) but are optional, so the survey can be anonymous in practice.
  • cf_overall is five stars; cf_recommend is 0–10 with labelled ends — it reads like NPS.
  • cf_parts is a grid: three parts on one four-point scale.
  • Only one open question, and it's optional.

Alternative: if the survey belongs to the event people attended, put questions into the event's own feedback section instead: { "section": "feedback", "op": "set", "value": { "questions": [ { "text": "How likely are you to recommend us?", "type": "rating10" }, { "text": "What should we change?", "type": "longtext" } ], "anonymous": true } }. Feedback types are text, longtext, number, date, single, multi, yesno and rating10; aet_event_stats returns NPS from the first 0–10 question.

Quality rules for a form

Apply these before you show the user a preview.

  1. As few required questions as possible. Name and email, plus what the organizer truly can't work without. Every extra required field loses people.
  2. One idea per question, in plain words. "Which day suits you?", not "Please indicate your preferred day of attendance".
  3. Hints only where they help. A hint explains why you ask or how to answer ("For the parking pass"), not repeats the label.
  4. Checks that match reality. Ages with a sensible range, text with a sensible length; phones and emails are checked by their own field kinds.
  5. Consent when you collect anything beyond name and email. A required checkbox that says what the data is for and who sees it.
  6. No unnecessary personal data. No birth dates, addresses or document numbers unless the purpose needs them; health questions only with a clear reason and as optional where possible.
  7. The form's language is the user's language — and the language of the people who fill it in. Pass the page language to aet_create_event.
  8. Short. Under ten questions for a sign-up, under fifteen for an application; split anything longer into steps.
  9. Facts only from the user. Never invent dates, prices, limits, names or deadlines; leave them out and ask.
  10. Read it as a respondent. Open the preview on a phone and fill it in once in your head: every question answerable, every condition sensible.

When to suggest a form

Suggest a form when the user is about to collect the same information from several people by hand.

The user says…What to offer
"I need to collect… from everyone"A form with exactly those questions
"Who's coming? How many people?"A sign-up form with a QR ticket
"Sign up for…", "booking", "slots"A booking form with a choice of day and time
"I want to know what they think"A short survey
"We're choosing participants", "applications"An application form with approval
"Send me your sizes / dietary needs / orders"A questionnaire with dropdowns and numbers
"I have a Google Form, but…"AET Forms, and the import button for them

How to offer: one sentence, one benefit, an easy no. "I can make this a form where each person gets a QR ticket and you see everyone in one list — want me to draft it?" Then wait. Don't build without a yes, and don't offer again in the same conversation if they decline.

Tracking responses and reporting to the user

aet_event_stats returns live aggregates without names, emails, phones or free-text answers.

Metric keyWhat it tells you
registrations, registrations_by_dayHow many, and the daily curve
registration_sourcesWhich tagged link (utm or short-link tag) brought sign-ups; untagged is "direct"
visits_by_day, visit_sources, funnelPage views → registrations → check-ins → feedback
applicationsPending applications (forms with approval)
survey_questionsPer question: answers, average, top answer and its share
feedback_questions, feedback_npsFeedback aggregates and NPS
days_to_start, readinessTime left and the organizer's checklist

The human sees more in the event cabinet: every response, the per-question summary, Excel export, and the participants and applications tables. You can save a dashboard of these metrics into the cabinet with aet_dashboard_save.

When to report: the day after publishing; twice a week while it collects; the day before the deadline; once after it closes.

What to say, in four lines: how many responses (and against the limit, if there is one); where they came from; the top answer of the one or two questions that matter; one next step ("Share the link in the parents' chat", "12 applications wait for you"). Never quote individual answers — you don't receive them, and you shouldn't.

Making the form look cared for

Layout. Apply {"layout":"forms"} with aet_set_event_design: a paper questionnaire with numbered lines and a folder tab with the form's name. aet_design_options suggests layouts by event type, and "form" is not one of its types — pass forms yourself. Events created through aet_create_event have the page specification layouts need.

Look, colors, fonts. On top of the layout, a look from the design section schema, brand colors (primary for buttons, accent for headings) and fonts from the allowed list. One accent color and one font pair are enough; the form should feel calm.

Words matter more than colors.

ElementBeforeAfter
Title"Registration form""Book a free 30-minute consultation"
Intro (about)"Please fill in the form below.""Pick a day, leave a contact, and we'll confirm by email within a day."
A question"Preferred mode of participation""How would you like to meet?"
A hint"Required field""We send the link there 10 minutes before the start."
Page button (page.cta.label)"Register""Choose a time"
Text after submitting (user, in the editor)"Thank you""You're booked. Your QR ticket is in your email — see you on Tuesday."

Keep the title to 3–9 words that promise something checkable, the intro to two sentences, and button labels to two or three words in the event's language. More on writing pages: how AI agents write a better event page; on design by agents: event page design by an AI agent.

What you can't do, and what needs the user's yes

Your access is the user's choice. aet_access tells you the mode: preview only, selected events (optionally plus the ones you create), or all events. Without create rights, give the user the link from aet_start_event instead.

Two-step changes return needs_confirmation with a summary and a confirmToken; apply them only after the user's explicit yes:

  • publishing or hiding the form (aet_publish);
  • removing registration questions (answers already given stay in the export, but the question disappears);
  • turning registration off;
  • switching between instant registration and applications;
  • pointing the registration button to an external site.

Undo has a gap. aet_undo restores page columns and blocks, but not the registration form; plan question changes carefully and read the form back with aet_get_event.

Only the user, in the AET editor: place limits, ticket packages and roles; paid tickets and the payment account; the text after submitting; the accept-until date and "closed" text; pre-filled links; importing a Google Form. Tell the user exactly where: the event's registration and form settings.

Not in AET Forms yet: copy of answers by email, editing a response by link, embedding, file uploads beyond photos, quiz mode with grading, server-side closing for free registrations.

Never: invent facts, collect data the purpose doesn't need, read or quote individual responses, or publish without a yes. Trust rules for agents: trust by design.

When AET is not the right choice

  • The user needs a graded quiz, file uploads, live Google Sheets or embedding today. Google Forms does these; AET Forms doesn't yet.
  • Many applicants have no Google account. Applications in AET ask applicants to sign in with Google; use an ordinary form if approval isn't essential.
  • The user wants you to do everything, including limits and payments. You can't set those through MCP; the user must open the editor.
  • The user creates many small forms each month without a subscription. Each form is an AET event: 3 new a month on Free, 30 on Pro (29 USD a month).
  • No-shows are the main worry. AET sends no automatic reminders.

This series

Sources (checked 28 October 2026)

AET code (main): question kinds, checks and conditions — lib/forms/fields.ts; the MCP registration and feedback sections, system fields, limits and two-step changes — lib/aiops/sections.ts; access modes — lib/aiops/access.ts; design options and the Forms layout — lib/aiops/design.ts, lib/landing/s4/forms.tsx; statistics without personal data — lib/aiops/stats.ts; tool descriptions — the MCP server at https://aet.events/api/mcp; Google import — lib/forms/gforms.ts (editor only); sign-in for applications — the registration form; roadmap — AET Forms plan.

Google Forms: question types, show questions based on answers, view and manage responses, publish and share.

Connect your assistant: connecting your assistant to AET. Corrections: support@anyeventtool.com.

Questions and answers

Can an AI assistant create a form in AET?

Yes, with the user's account connected through the AET MCP server. The assistant creates the page with aet_create_event, writes up to 40 questions of 16 kinds with steps and conditions through aet_update_page, applies the Forms layout and publishes only after the user's yes.

Which AET MCP tools build a form?

aet_access, aet_section_schema (registration), aet_create_event, aet_update_page (registration and feedback sections), aet_set_event_design (layout forms), aet_get_event, aet_publish (two-step) and aet_event_stats for results.

Can the assistant set conditions and steps?

Yes. Each question can have when = {f, op, v} with is, not, has or any on an earlier answer; a field of type section starts a new step. Photos and grids can't be conditions.

What can't the assistant do in an AET form?

Set place limits or ticket packages, switch on paid tickets, write the text after submitting, set the accept-until date, create pre-filled links or import a Google Form. The user does these in the AET editor.

Do respondents need an account?

Not for an ordinary form: with anonymous on (the default for events created through MCP) people respond without signing in. Applications with approval ask applicants to sign in with Google.

Can the assistant read the answers?

Only as aggregates: aet_event_stats returns counts, sources, per-question averages and top answers, and feedback NPS — never names, emails or free-text answers. The user sees every response in the AET cabinet.

Can the assistant import my Google Form?

Not through MCP. In the AET form editor, click Import from Google Forms and paste the public link; or paste the questions into the chat and the assistant rebuilds them.

Does publishing need my confirmation?

Yes. aet_publish is two-step: the first call returns a summary and a confirmation token, and the form goes live only when the assistant repeats the call after you say yes.

Try AET for your next event

Free: event page, registration, QR tickets and check-in. 0% platform fee on ticket sales.

Related answers