apply_logic
ChatGPTCreate, update or delete logic rules. Create/update use DSL syntax: WHEN <condition> THEN <action>. <deleting_rules> To delete an existing rule, send {operation: 'delete', blockUuid: <logicRule_blockUuid>} — no dsl needed. Copy the uuid from the ledger's Logic rules table. This is the only way to remove a rule; never target a rule's condition or action uuids with other tools. </deleting_rules> <uuid_references> All UUIDs come from the ledger. Use the correct column: - Condition LHS → questionUuid column - Condition RHS for choice fields (Dropdown, MultipleChoice, Checkboxes) → optionBlockUuid (NOT the option text) - Condition LHS for Matrix → row blockUuid (MATRIX_ROW) - Condition RHS for Matrix → matrix column blockUuid (NOT the option text) - SHOW/HIDE a full question → questionUuid column - SHOW/HIDE a single block (e.g. one option) → blockUuid column - REQUIRE → questionUuid column - JUMP TO PAGE → page number column </uuid_references> <conditions> Each condition compares a field to a value, e.g. <priceUuid> > 100. Don't apply math to the field, and don't compare two fields to each other (for choice fields, the comparison value can still be an optionBlockUuid). To check a calculated value (like price × qty > 100), store the result as a calc field first and use that: - Choice fields (Dropdown, MultipleChoice): <questionUuid> IS <optionBlockUuid> / IS NOT <optionBlockUuid> - Text/Email/Link/Phone fields: <questionUuid> IS "literal text" / IS NOT "literal text" - Empty check (any input field, never a calculated field): <questionUuid> IS EMPTY / IS NOT EMPTY - Number/Rating/LinearScale: <questionUuid> > 5 (any of > >= < <= = !=) - Text matching: <questionUuid> CONTAINS "text" / DOES NOT CONTAIN "text" - Text matching: <questionUuid> STARTS WITH "text" / ENDS WITH "text" - Text matching: <questionUuid> DOES NOT START WITH "text" / DOES NOT END WITH "text" - Checkboxes/MultiSelect (arrays): <questionUuid> IS ANY OF (<blockUuid>,<blockUuid>) / IS NOT ANY OF / IS EVERY OF - Checkboxes/MultiSelect: do NOT use IS/IS NOT — use CONTAINS or IS ANY OF instead - Matrix: <matrixRowBlockUuid> IS <matrixColumnBlockUuid>; use CONTAINS / IS ANY OF when multiple selection is enabled - Date fields: <questionUuid> IS BEFORE "2024-01-01" / IS AFTER "2024-01-01" - Combine: <cond1> AND <cond2> or <cond1> OR <cond2> (parentheses required when mixing) </conditions> <actions> - SHOW <questionUuid> / HIDE <questionUuid> (comma-separate for multiple) - SHOW <blockUuid> / HIDE <blockUuid> to target a single block within a question - REQUIRE <questionUuid> - JUMP TO PAGE <pageNumber> — jump to a specific page (use the page number from the ledger's page column). Check the Page flow section for current page order. - JUMP TO END — end the form early (jump to the default thank you page). If a custom thank you page exists, it will target that page instead. - CALCULATE <calcFieldUuid> = <expression> — assign a formula expression to a calculated field. See <calculated_fields> below. - DISABLE SUBMISSION — hide the submit button so the form can't be submitted while the condition holds (eligibility gate). Takes no target. - Multiple actions: SHOW <questionUuid>, REQUIRE <questionUuid> </actions> <calculated_fields> Group calc field writes that share a condition into one rule's THEN clause; only split into separate rules when the conditions differ (e.g., per-event accumulators). - Target (left of =): the UUID of a calculated field from a CALCULATED_FIELDS block. The ledger lists them in the properties column as <calcFieldUuid>=<name>(<TYPE>) — use the UUID. Create the block via create_blocks before writing CALCULATE rules. - Expression (right of =): + - * / for NUMBER, + only for TEXT concat. Parens for precedence. Number and string literals allowed. Field refs are bare uuids – questionUuid for inputs, the calc field's own uuid (properties column) for cross-calc / self-reference. No blockUuid, no {{ }}, no functions. - Choice fields: a…
configure_blocks
ChatGPTConfigure block's properties. Use the current form ledger to find blocks and their properties. IMPORTANT: - Those are partial (incremental) updates - only properties you include will be changed - Set a property to null to unset it - To change the type of a question, use the change_type operation once on ONLY 1 option block in the group. This will change the entire group to that type. - To hide entire question, update the TITLE block and all question blocks will be hidden automatically - For hidden_fields_settings: provide the complete list of hidden fields (add new, remove by exclusion, rename by keeping UUID and changing name) - For calculated_fields_settings: provide the complete list of calculated fields (add/remove/rename/change-value/retype). Keep an existing field's UUID to update it (rename, change type, change value), omit UUID for new entries, exclude an entry to remove it. CALCULATE rules referencing a removed field are auto-cleaned. To remove a single calc field while keeping others, remove_blocks works too — pass that field's UUID directly.
create_blocks
ChatGPTCreates new blocks in the form. Blocks default structure with examples: - Name question: [TITLE, INPUT_TEXT] (short text) - Message question: [TITLE, TEXTAREA] (long text) - Country question: [TITLE, DROPDOWN_OPTION, DROPDOWN_OPTION, ...] (compact single-select) - Interests question: [TITLE, CHECKBOX, CHECKBOX, ...] (multi-select checklist) - Satisfaction question: [TITLE, LINEAR_SCALE] (numeric scale with labels) - Quality rating: [TITLE, RATING] (star rating) - Payment collection: [TITLE, PAYMENT] (collect payment with Stripe) - Yes/No question: [TITLE, MULTIPLE_CHOICE_OPTION, MULTIPLE_CHOICE_OPTION] (radio buttons) - Skills multi-select: [TITLE, MULTI_SELECT_OPTION, MULTI_SELECT_OPTION, ...] (dropdown multi-select) - Priorities ranking: [TITLE, RANKING_OPTION, RANKING_OPTION, ...] (drag to reorder) - Matrix table: [TITLE, MATRIX, MATRIX_COLUMN, MATRIX_COLUMN, ..., MATRIX_ROW, MATRIX_ROW, ...] (columns first, then rows) - Bot protection: [CAPTCHA] (no TITLE needed) - Location detection: [RESPONDENT_COUNTRY] (auto-detects from IP, no TITLE needed) - URL tracking: [HIDDEN_FIELDS] (captures query params like ?utm_source=email&campaign=summer, no TITLE needed) - Calculated fields: [CALCULATED_FIELDS] (named targets for CALCULATE logic rules, no TITLE needed) - New page: [PAGE_BREAK, ...content] (creates a new page with content) - New section: [HEADING_2, TEXT, ...content] (creates a new section with content) PAGE BREAK SEMANTICS: - PAGE_BREAK starts a new page - All blocks on a page share the same page number in the ledger IMPORTANT: - To append after the last block outside a Thank You page (most common), omit insertAfterBlockUuid entirely. Layout-only content can extend a trailing Thank You page. - Groups with the same insertAfterBlockUuid = auto-chain groups (only first group uses it, rest chain). - All questions are REQUIRED by default. The user sees a required indicator automatically in the UI. If you need to make a question optional, use configure_blocks tool after creating the question. Examples with ledger: | text | blockUuid | type | questionUuid | page | insertAfterBlockUuid_BEFORE | notes PAGE 1 ─────────────────────────────────────────────────────────────────────────────────────────────────────── 1 | Contact | aaa | FORM_TITLE | - | 1 | - | Form start 2 | Name | bbb | TITLE | xxx | 1 | aaa | Name question starts 3 | | ccc | INPUT_TEXT | xxx | 1 | bbb | Name question ends 4 | Country | ddd | TITLE | yyy | 1 | ccc | Country question starts 5 | US | eee | DROPDOWN_OPTION | yyy | 1 | ddd | Country question 6 | UK | fff | DROPDOWN_OPTION | yyy | 1 | eee | Country question ends PAGE 2 ─────────────────────────────────────────────────────────────────────────────────────────────────────── 7 | | ggg | PAGE_BREAK | - | 2 | fff | Page break (creates new page) 8 | Email | hhh | TITLE | zzz | 2 | ggg | Email question starts 9 | | iii | INPUT_EMAIL | zzz | 2 | hhh | Email question ends Add a question at the end of the form: // APPEND: omit insertAfterBlockUuid entirely — no need to reference any ledger UUID {"groups":[{"blocks":[{"type":"TITLE","html":"Email"},{"type":"INPUT_EMAIL"}]}]} Add phone after name: // AFTER a question: copy the row's "blockUuid" you want to insert after (last block of the question) {"groups":[{"blocks":[{"type":"TITLE","html":"Phone"},{"type":"INPUT_PHONE_NUMBER"}],"insertAfterBlockUuid":"ccc"}]} Add company before country: // CRITICAL: BEFORE a question means DIRECTLY BEFORE the question. Use the row immediately preceding the question; there should be NO other rows between! // Find "Country" in the current form ledger and copy its "insertAfterBlockUuid_BEFORE" into insertAfterBlockUuid {"groups":[{"blocks":[{"type":"TITLE","html":"Company"},{"type":"INPUT_TEXT"}],"insertAfterBlockUuid":"ccc"}]} Add subtitles/descriptions/hints to each question: // WITHIN a question: use question's TITLE blockUuid // Execute in one atomic tool call: a group per subtitle. {"groups":[{"blocks":[{"type":"TEXT","html":"Your full legal name"}],"insertAfterBlockUuid":"bbb"},{"blocks":[{"type":"TEXT","html":"Select your …
create_new_form
ChatGPTCreate a new draft form with the specified title and optional styling, and return its formId. Every call creates another form, so call it once per new form; to start over, keep editing that form.
extract_brand
ChatGPTExtract colors, fonts, and images from a website URL. Use when users want to match their website, copy brand colors, or style forms like an existing site. Automatically extracts primary/accent colors, button styling, and fonts for use with update_styling tool.
fetch_insights
ChatGPTFetch form analytics and performance insights. Returns metrics (views, completions, conversion rate), visitor time-series, submission time-series, traffic dimensions (sources, browsers, countries), and question drop-off data. Use the include parameter to request only specific sections.
fetch_submissions
ChatGPTFetch submissions for a form. Returns paginated results with question labels and response data. Use the page parameter to navigate through results when hasMore is true.
inspect_custom_css
ChatGPTReturn Tally's CSS selector reference and this form's current custom CSS. Call before writing a value for update_custom_css so you can merge with existing rules instead of overwriting them.
list_blocks
ChatGPTRetrieve the current form state as a ledger. The ledger shows all blocks with their UUIDs, types, positions, and properties, followed by the form settings and the styling.
list_forms
ChatGPTList forms the user has access to. Returns paginated results with form metadata including name, status, submission count, and timestamps. Use the page parameter to navigate through results when hasMore is true. Optionally filter by workspace IDs.
list_workspaces
ChatGPTList all workspaces the user can access. Use before creating a new form to select the target workspace. Selection rules: if only one workspace → use it; if multiple → ask the user which to use; if a personal workspace exists ('My workspace') you may auto-select it. When presenting the list of workspaces, use a numbered list for easy selection.
load_form
ChatGPTLoad existing form for editing
move_blocks
ChatGPTMove individual blocks to a new position. Use the current form ledger to find blocks. IMPORTANT: - FORM_TITLE block cannot be moved (must stay at top) - To move or swap entire questions, use reposition_questions tool instead - To move, swap or reorder entire pages, use reposition_pages tool instead
publish_form
ChatGPTMake the form's saved changes live for respondents and return the public form URL. Edits are already saved as unpublished changes, so only call this when the user wants the form live. Always share the returned URL with the user.
remove_blocks
ChatGPTRemove specific blocks from the form. Use the current form ledger to find blocks. Also accepts the uuid of an individual calculated field or hidden field — in that case only that entry is removed, and the parent block stays unless it becomes empty. IMPORTANT: - Never remove blocks unless the user explicitly asked you to - To remove entire questions, use remove_questions tool instead - To remove entire pages, use remove_pages tool instead
remove_pages
ChatGPTRemove entire pages from the form. Use the current form ledger to find page numbers. IMPORTANT: - Never remove pages unless the user explicitly asked you to - Removes all blocks on the page including the PAGE_BREAK - To remove individual blocks (TEXT, DIVIDER, etc.), use remove_blocks tool instead
remove_questions
ChatGPTRemove entire questions from the form. Use the current form ledger to find questions by their questionUuid. IMPORTANT: - Never remove questions unless the user explicitly asked you to - Removes all blocks that belong to the question (TITLE + input/options) - To remove individual blocks (TEXT, DIVIDER, etc.), use remove_blocks tool instead
reposition_pages
ChatGPTMove, swap, or reorder pages (1-based). Commands: "move", "swap", "reorder". Use move for relocating a single page, swap for exchanging two pages, and reorder for setting the exact final sequence. IMPORTANT: Check the ledger first to see how many pages exist. The form may have only 1 page if no PAGE_BREAK blocks have been added yet. IMPORTANT: - To create new pages, use create_blocks tool instead
reposition_questions
ChatGPTMove or swap entire questions (including their title and all inputs/options together). IMPORTANT: - This tool moves or swaps COMPLETE questions as a unit (title + all associated inputs/options) - To move individual blocks within a question (e.g., move options or reorder options), use move_blocks tool instead - To move, swap or reorder entire pages, use reposition_pages tool instead
search_documentation
ChatGPTAnswer-only search of the Tally Help Center for explicit documentation or product-knowledge questions: how Tally works, whether a capability exists, supported features, limits, or docs links. Never search for an assumed UI location. Search for the underlying task instead. For example, rewrite "Where is the webhook tab?" as "how to configure webhooks". Never use as a preflight for form edits. Never use for commands that change the current form, including adding or creating blocks, configuring fields, setting defaults, updating settings, adding calculated fields, styling, moving, removing, formatting, or applying logic.
set_column_layout
ChatGPTOrganize blocks into side-by-side columns. Use "create_column_list" to create a new column layout with 2+ columns. Use "create_column" to add a NEW separate column to an existing layout. Use "add_to_column" to add more blocks within the SAME existing column (vertically stacked, not side-by-side). Use "detach_from_column" to remove blocks from their column layout. Use "set_column_ratio" to adjust column widths.
set_form_title
ChatGPTSet or update the form title (always appears at the top of the form, position can not be changed)
update_custom_css
ChatGPTLAST-RESORT custom CSS for effects with no structured equivalent in update_styling: pseudo-states (:hover, :focus, :active), animations, hiding elements, ::placeholder. ALWAYS try update_styling first for colors, fonts, sizes, alignment, borders, padding, and width — those have structured properties. When the form already has custom CSS, call inspect_custom_css first to read and preserve it.
update_settings
ChatGPTUpdate form settings and configuration. IMPORTANT: - selfEmailSubject and respondentEmailSubject support mentions - selfEmailBody and respondentEmailBody support rich HTML formatting (bold, italic, underline, colors) and mentions LINK PREVIEW METADATA: The metaSiteName, metaSiteFaviconUrl, metaTitle, metaDescription, and metaImageUrl fields customize the preview card shown when a form URL is shared in apps like Slack, Discord, iMessage, and social platforms. They do not change the visible form content. FIELD REFERENCES (Mentions): Use {{questionUuid}} or {{Field Title}} to display a field's answer dynamically. Example: "Hello {{2c1674f6-843d-4fca-bddd-6598f0040ca7}}! Thanks for your feedback." Special email mentions: Use {{allAnswers}} in selfEmailBody, respondentEmailBody to include all submitted question titles and answers. Example: "A new response was submitted. {{allAnswers}}" Use {{id}}, {{respondentId}}, or {{formName}} to include submission metadata in the subject or body. Example: "New submission {{id}} for {{formName}}."
update_styling
ChatGPTUpdate form styling. Batch ALL desired changes (appearance, advanced) into a single call — do not split per property or call repeatedly across turns. For pseudo-states (:hover, :focus), animations, hiding elements, ::placeholder, or any effect without a structured equivalent here, use the separate update_custom_css tool instead.
update_text
ChatGPTUpdate text/HTML content for blocks in the form. Use the current form ledger to find blocks. Supports: form title, question titles, text blocks, headings (H1-H3), input placeholders (text/email/phone/date/time/link/number/textarea), and option text (dropdown/multiple choice/checkboxes/multi-select/ranking). Batch updates: Can update multiple blocks atomically in a single operation. IMPORTANT: - Text blocks (TITLE, TEXT, HEADING) support rich HTML formatting (bold, italic, underline, colors) and mentions - Input placeholders and option text automatically strip HTML to plain text (no mentions) - Use the "blockUuid" from the ledger to identify which blocks to update - "html" replaces the entire block. Preserve all unrequested wording, line breaks, formatting, mentions, and links exactly as shown in the current form ledger FIELD REFERENCES IN TEXT (Mentions): Use {{questionUuid}} or {{Field Title}} in TEXT, TITLE, or HEADING html to display a field's answer dynamically. Example: "Hello {{2c1674f6-843d-4fca-bddd-6598f0040ca7}}! Thanks for your feedback." This is NOT for default answers — use configure_blocks with defaultAnswer for that.
apply_logic
Claudeconfigure_blocks
Claudecreate_blocks
Claudecreate_new_form
Claudeextract_brand
Claudefetch_insights
Claudefetch_submissions
Claudeinspect_custom_css
Claudelist_blocks
Claudelist_forms
Claudelist_workspaces
Claudeload_form
Claudemove_blocks
Claudepublish_form
Clauderemove_blocks
Clauderemove_pages
Clauderemove_questions
Claudereposition_pages
Claudereposition_questions
Claudesave_form
Claudesearch_documentation
Claudesend_feedback
Claudeset_column_layout
Claudeset_form_title
Claudeupdate_custom_css
Claudeupdate_settings
Claudeupdate_styling
Claudeupdate_text
Claude