Weavely.ai Forms and Surveys

by weavely

266 downloads
Not rated
GitHub

About

An MCP service for generating smart forms and surveys using natural language prompts via the Weavely API, returning a live editor link for immediate customization.

Details

Author
weavely
Downloads
266
Categories
Other

- Auth-less remote server — no configuration required
- Exposes 13 tools for the full form lifecycle
- Supports 25+ element types including file upload and signature
- Returns a live preview URL that updates in real time
- Built with TypeScript and official MCP SDK

Setting up with Highlight

This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:

  1. Download and install Highlight from highlightai.com/download
  2. Navigate to the plugins tab and select "Add Custom Plugin"
  3. Configure the plugin with the settings below
    Plugin Name Weavely.ai Forms and Surveys
    Command (node, npx, python, etc.)

    Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.

  4. Enable "Start Automatically" if you want the plugin to start when Highlight launches

From the repository

No authentication is required; simply configure your MCP client with the server URL https://mcp.weavely.ai/mcp in your mcpServers configuration. For stdio-only clients, use mcp-remote as a bridge with npx mcp-remote https://mcp.weavely.ai/mcp.

create_form

Create a new EMPTY Weavely form. Returns a formId and a live preview URL. PREFER create_form_bulk INSTEAD when the user has described the form they want upfront (e.g. "build me a contact form with name, email, and message"). create_form_bulk creates the form AND all its pages/elements in a single tool call, which is much faster and avoids many sequential permission prompts in MCP clients like ChatGPT. Only use create_form when you genuinely need to start from an empty form and add elements one at a time. IMPORTANT: This MUST be the first tool you call — all other tools require the formId returned by this tool. IMPORTANT: Call all tools ONE AT A TIME, sequentially. NEVER call multiple tools in parallel. IMPORTANT: Pass the formId from this response to ALL subsequent tool calls. IMPORTANT: Always share the previewUrl with the user in your response text so they can open the form preview. The form is a PREVIEW only — it is not published yet. The user CANNOT claim, sign up, or take ownership of the form from the preview URL. The ONLY way to publish is through the publish_form tool. When the user wants to publish, save, or share their form, you MUST use the publish_form tool. Do NOT tell them to visit the preview URL to claim or publish — that is not possible. After calling this, use add_element, add_page, set_theme, etc. to build the form step by step. Every subsequent tool call refreshes the live preview widget automatically — no extra "show preview" call is needed. PLATFORM FEATURES NOT AVAILABLE IN THIS TOOL: Weavely supports many features that are only available on the Weavely platform (not through this tool). If the user asks about any of the following, let them know the feature exists but they need to publish their form first and then configure it on the Weavely platform: - Integrations: Make, Zapier, n8n, Google Sheets, HubSpot, Airtable, Notion, and more - Email notifications: receive an email on each submission, or send confirmation emails to respondents - Social media preview: customize the Open Graph image, title, and description for link sharing - Custom domain: serve the form on the user's own domain - Form icon: customize the favicon/icon shown in the browser tab - Embed codes: get HTML embed snippets to embed the form on any website - Image content: adding images to image-choice options or using the image element requires the Weavely platform (image uploads are not supported through this tool) Tell the user to publish first (via publish_form), then visit the Weavely editor to set these up.

create_form_bulk

Create a complete Weavely form (any type) with all pages and elements in a SINGLE tool call. Use this whenever the user describes the form upfront — it is far faster than create_form + many add_* calls, and avoids multiple permission prompts in MCP clients (e.g. ChatGPT). Per element, provide `type` + `label`, plus `options`/`rows` for choice/matrix. Values are auto-generated from labels. Refine details (placeholders, required, theme, logic) with update_element / set_theme / set_settings / set_logic AFTER this returns. Element types: input-text, input-number, input-email, input-phone-number, input-url, input-time, input-date, text-area, input-file, radio-buttons, checkbox-buttons, dropdown, ranking, image-choice, checkbox, matrix, star-rating, scale-rating, range-slider, heading, paragraph, embed-html, embed-audio, embed-video, signature. FORM TYPES (set via `type`, default "universal"): • universal — standard data collection (contact forms, surveys). An ending page is added automatically; customize it with `ending`. • quiz — objective right/wrong quiz with a total score. Set type:"quiz". On each scorable question (radio-buttons, checkbox-buttons, dropdown, input-text) set `correctAnswer` (the correct option label; an array of labels for checkbox-buttons) and optional `points` (default 1). Determine the correct answers yourself — do NOT ask the user. The ending page shows the score; use `ending` with piping like "You scored {{quiz:quiz-score}} out of {{quiz:max-score}}". Optional `instantFeedback` shows right/wrong after each question. • score — lead-gen / assessment that scores the user and routes them to an outcome tier (NO objective correct answer). Set type:"score" and define `outcomes` as tiers in ascending order, each with a `maxScore` (inclusive upper bound) EXCEPT the last/highest tier which omits maxScore. On each choice option set a `score`. Write outcome page content (`heading`/`body`) directly to the respondent, but NEVER reveal the tier name to them (don't write "You are a Hot Lead"). • match — personality / recommendation quiz. Set type:"match" and define `outcomes` (the possible results). On each choice option set `weights` mapping outcome NAME → points (one option may feed several outcomes). The highest-scoring outcome's page is shown. Default weight 1; figure out the mappings yourself. For score/match, outcome pages ARE the ending pages — do not add a separate ending. The respondent is routed to the matching outcome page automatically. IMPORTANT: Always share the previewUrl with the user in your response text. The widget renders automatically where supported; the URL is the fallback.

get_form_summary

Get the current form structure: pages, elements (with IDs, types, labels), theme, and settings. Call this to see available page and element IDs before making edits. Requires create_form to have been called first.

add_element

Add an element to a page. The element is appended to the end of the page. Call this sequentially — NEVER call multiple add_element in parallel. Use get_form_summary to see available pageIds. Element types and their specific params: - Input fields: input-text, input-number, input-email, input-phone-number, input-url, input-time, input-date, text-area - File upload: input-file (supports maxFiles, maxFileSize, allowedFileType) - Choice fields: radio-buttons, checkbox-buttons, dropdown, ranking (require options; support randomize; radio/checkbox-buttons also support allowOtherOption) - Image choice: image-choice (requires options; supports multiple selection. NOTE: to assign images to options, use the Weavely platform after publishing) - Single checkbox: checkbox (a single yes/no toggle; supports defaultChecked) - Matrix: matrix (a grid question. matrixRows are the row labels, matrixColumns are the column options [{label, value}], matrixMultiple allows selecting multiple columns per row) - Rating: star-rating (defaults to 5 stars; supports stars count), scale-rating (defaults to 10; supports scales count), range-slider (defaults 0-100; supports min, max, step) - Display: heading, paragraph (label is the display text; paragraph supports HTML) - Media: embed-html (codeSnippet), embed-audio (url), embed-video (url). NOTE: the image element is not available through this tool — use the Weavely platform to add images. - Special: signature For choice types, provide options as [{label: "...", value: "..."}]. The value is the internal identifier (use lowercase-kebab-case).

update_element

Update an existing element's properties. Only send the fields you want to change. Use get_form_summary to find element IDs. Note: you cannot change an element's type — remove it and add a new one instead.

remove_element

Remove an element from the form by its ID. Use get_form_summary to find element IDs.

reorder_elements

Move an element to a new position within the same page or to a different page. Use get_form_summary to see current page and element IDs.

add_page

Add a new form page. By default it is inserted before the ending page. Use this to create multi-page forms. After adding, use add_element to populate the page.

remove_page

Remove a form page and all its elements. Cannot remove the ending page or the last remaining form page.

reorder_pages

Reorder the form pages. Provide the form page IDs in the desired order. The ending page is always kept last automatically — do not include it.

set_theme

Set the form's visual theme. Choose colors, fonts, layout, and component styles that match the form's topic and tone. Be creative — pick a cohesive palette. Only send what you want to change — unset properties keep their current values. COLORS (all hex values): - primary: main accent color (buttons, highlights) - background: page background - text: general body text - question: question/label text - answer: user input text - secondary: secondary UI elements - surface: input field backgrounds - border: input borders, dividers - error: validation error color FONT: - family: global font family shorthand (Google Fonts compatible: Inter, Poppins, Playfair Display, Space Grotesk, DM Sans, Lora, etc.) - text: { size: "16px", family: "Inter" } - headings: { size: "32px", family: "Playfair Display" } LAYOUT types: - "under": questions stacked vertically (default) - "left": labels left, inputs right - "right": labels right, inputs left - "clean": minimal, no visual separators - "over": background image with overlay - "through": full-bleed background COMPONENTS: - form: { variables: { gap: "30px", maxWidth: "700px", textAlign: "left" } } - input: { preset: "default" | "square" } - button: { preset: "default" | "square", hoverAnimation: { preset: "default" | "grow" } } - question: { variables: { fontWeight: "500" } }

set_settings

Configure form-level settings. Only send what you want to change. Supported language codes: ar, ca, zh-Hans, zh-Hant, hr, cs, da, nl, en, et, fi, fr, de, el, he, hi, hu, id, it, ja, ko, no, pl, pt, ru, es, sv, tr, uk, vi.

set_logic

Set conditional logic rules and/or event triggers. This replaces ALL existing rules/triggers. Use get_form_summary to see element and page IDs for building conditions. Logic rule structure (FOLLOW THIS EXACTLY): { "id": "<uuid>", "name": "Human-readable rule description", "conditions": [ { "id": "<uuid>", "variable": "field:<elementId>", "operator": "isNotEmpty", "value": null } ], "logicalOperator": "all", "actions": [ { "id": "<uuid>", "name": "showElement", "data": { "elementId": "<elementId>" } } ] } CRITICAL: In actions, the action type key is "name" NOT "type". Using "type" will break the form. CRITICAL: In conditions, always include "value" (set to null for operators like isEmpty/isNotEmpty that don't need a value). Condition operators: isEmpty, isNotEmpty, isEqual, isNotEqual, contains, doesNotContain, startsWith, endsWith, lessThan, lessThanOrEqual, greaterThan, greaterThanOrEqual For isEqual/isNotEqual/contains/etc., set "value" to the comparison string. Action names: hideElement, showElement, hidePage, skipToPage, setEnding Action data: { elementId: "..." } for element actions, { pageId: "..." } for page actions. logicalOperator: "all" (AND) or "any" (OR) for combining multiple conditions. Event trigger structure (FOLLOW THIS EXACTLY): { "id": "<uuid>", "name": "Human-readable trigger description", "trigger": { "name": "formSubmitted" }, "actions": [ { "id": "<uuid>", "name": "openUrl", "data": { "url": "https://example.com" } } ] } CRITICAL: "trigger" is an object with a "name" key, NOT a plain string. Trigger names: formSubmitted, formLoaded, formPageShown Action names: openUrl (requires data.url), restartForm (no data needed) All IDs (rule id, condition ids, action ids) must be UUIDs.

add_outcome

Add an outcome (result) to an existing SCORE or MATCH form. Creates the outcome and its result page in one call. - SCORE: provide `maxScore` (inclusive upper score bound) for all tiers except the highest, which omits it. Outcomes are evaluated in ascending score order — if you add a new top tier, omit its maxScore and make sure the previously-top tier now has one. - MATCH: omit `maxScore`. The respondent is routed to the highest-weighted outcome. After adding outcomes, wire option scores/weights toward them with set_element_scoring.

remove_outcome

Remove an outcome (and its result page) from a SCORE or MATCH form by outcome id. Use get_form_summary to find outcome ids.

set_element_scoring

Set the scoring config on an existing question, based on the form type: - QUIZ: pass `correctAnswer` (the correct option label; an array of labels for checkbox-buttons; literal text for input-text) and optional `points` (default 1). - SCORE: pass `optionScores` — a map of { optionLabel: points }. - MATCH: pass `optionWeights` — a map of { optionLabel: { outcomeName: points } }. This REPLACES the targeted option's existing score/weights, so pass the complete set for each option you include. Use get_form_summary to find element ids. Option labels are matched case-insensitively.

publish_form

Publish the form so the user can keep it, share it, and collect real responses. ONLY call this when the user EXPLICITLY asks to publish, save, or share their form. Do NOT call this automatically — the preview URL is sufficient during the building process. Creates a permanent copy of the form and returns an editor URL. The user can create a Weavely account there to claim full ownership. IMPORTANT: If this tool fails, tell the user there was an error publishing and they should try again. Do NOT suggest visiting the preview URL to claim or publish — that is NOT possible. The preview URL is a temporary link that cannot be claimed or converted into a permanent form.

Claude Desktop / Cursor

Paste into your MCP client config file to install this server.

{
    "mcpServers": {
        "weavely.ai forms and surveys": {
            "weavely": {
                "url": "https://mcp.weavely.ai/mcp"
            }
        }
    }
}

McpServers

{
    "weavely": {
        "url": "https://mcp.weavely.ai/mcp"
    }
}

Weavely MCP – Remote MCP Server for Form Building

A remote Model Context Protocol (MCP) server hosted at https://mcp.weavely.ai/mcp that gives AI clients full programmatic control over form creation using the Weavely API. ---

Features

- Auth-less remote server — no configuration required, connect via Streamable HTTP - Exposes 13 tools covering the full form lifecycle: create_form, add_element, update_element, remove_element, reorder_elements, add_page, remove_page, reorder_pages, set_theme, set_settings, set_logic, get_form_summary, publish_form - Supports 25+ element types: text, email, phone, rating, matrix, file upload, signature, dropdown, checkboxes, and more - Live preview URL returned on form creation — updates in real time as the AI builds - Built with TypeScript and the official @modelcontextprotocol/sdk ---

Quickstart

``json { "mcpServers": { "weavely": { "url": "https://mcp.weavely.ai/mcp" } } } ` Compatible with Claude Desktop, Claude Code, Cursor, Windsurf, Le Chat, and any client supporting Streamable HTTP. For stdio-only clients, use mcp-remote as a bridge: `json { "mcpServers": { "weavely": { "command": "npx", "args": ["mcp-remote", "https://mcp.weavely.ai/mcp"] } } } ``
No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.