P
ProFormsDocs

Agent Instructions

A single page any AI agent can read and immediately know how to use all 57 ProForms MCP tools without making mistakes.

Last updated: 2025-03-18 ยท Also available as raw markdown at /docs/agents.md or via the get_agent_instructions MCP tool.

Quick Start

5 steps to your first form
1. list_sites()                              โ†’ see existing sites
2. find_or_create_site({ domain: "x.com" })  โ†’ get or create a site
3. create_form({ siteId, name, fields })     โ†’ create form (starts as DRAFT)
4. publish_form({ formId, publish: true })   โ†’ make it live
5. get_embed_code({ formId })                โ†’ get the embed snippet

โš ๏ธ Critical Rules

โš ๏ธ Fields = FULL REPLACE

update_form with fields replaces ALL fields. To add one: get_form โ†’ append โ†’ update_form with complete array.

โš ๏ธ Settings = DEEP MERGE

Safe to send partials like { settings: { thankYou: { message: "Thanks!" } } }.

โš ๏ธ Theme = DEEP MERGE

Send only what you want to change. Send null to reset.

โš ๏ธ Notifications = FULL REPLACE

update_notifications replaces ALL rules. Get existing first.

โš ๏ธ Forms start as DRAFT

Always call publish_form after creation.

โš ๏ธ Options need label AND value

{ label: "Display", value: "stored" } for select/radio/checkbox.

โš ๏ธ Multi-step forms

Set settings.multiStep: true, define settings.steps, set field.step on each field.

All 57 Tools by Category

๐Ÿ” Discovery (2)

describe_schema โ€” Get docs for features/settings (topic param)

get_agent_instructions โ€” Get this complete guide. No params.

๐ŸŒ Sites (6)

list_sites โ€” List all sites. search?, limit?

get_site โ€” Get site details + forms. siteId

create_site โ€” Create a site. name, domain?, notificationEmail?

find_or_create_site โ€” Find by domain or create. domain, name?

update_site โ€” Update site. siteId, name?, domain?

delete_site โ€” Archive a site. siteId

๐Ÿ“ Forms (8)

list_forms โ€” List forms. siteId?, status?, search?

get_form โ€” Get full form details. formId

create_form โ€” Create form with fields. siteId, name, fields[]

update_form โ€” Update form (fields=replace, settings=merge). formId

publish_form โ€” Publish or unpublish. formId, publish

delete_form โ€” Archive form. formId

restore_form โ€” Restore archived form. formId

duplicate_form โ€” Clone a form. formId, targetSiteId?

๐Ÿ“ฅ Submissions (6)

get_submissions โ€” List with filters. formId?, status?, search?

get_submission โ€” Get one submission. submissionId

update_submission โ€” Mark read/starred. submissionId

update_submission_status โ€” Set lead status. submissionId, status

bulk_submissions โ€” Bulk action on multiple. action, ids[]

export_submissions โ€” Export CSV/JSON. format?, formId?

๐Ÿ”” Notifications (2)

get_notifications โ€” Get form notification rules. formId

update_notifications โ€” Replace all notification rules. formId, notifications[]

๐Ÿ“„ Templates (2)

list_templates โ€” Browse templates. category?

create_from_template โ€” Create form from template. templateId, siteId

๐Ÿ“Ž Embed (1)

get_embed_code โ€” Get embed snippets. formId

๐Ÿ“Š Insights (1)

get_insights โ€” Form analytics. formId, range?

๐ŸŽจ Theme Presets (2)

list_theme_presets โ€” List saved themes. No params.

create_theme_preset โ€” Save a theme. name, theme

๐Ÿ“ Uploads (2)

list_uploads โ€” List file uploads. siteId?, formId?

delete_upload โ€” Delete an upload. id

โš™๏ธ Settings (5)

get_profile โ€” Get current user profile. No params.

update_profile โ€” Update name/avatar. name?, avatar?

update_password โ€” Change password. currentPassword, newPassword

get_email_settings โ€” Get org email settings. No params.

update_email_settings โ€” Update BCC settings.

๐Ÿ”‘ API Keys (3)

list_api_keys โ€” List all API keys. No params.

create_api_key โ€” Create key (secret shown once). name

delete_api_key โ€” Revoke a key. id

๐Ÿ‘ฅ Team (4)

list_team_members โ€” List members + invites. No params.

invite_team_member โ€” Send invite. email, role

remove_team_member โ€” Remove member. userId

resend_invite โ€” Resend invite email. userId

๐Ÿ“ˆ Dashboard (2)

get_dashboard_overview โ€” Stats summary. period

get_dashboard_chart โ€” Submission chart data. period, siteId?

๐Ÿ‘ค Clients (Agency) (5)

list_clients โ€” List with stats. search?, archived?

create_client โ€” Create client. name, contactName?

update_client โ€” Update client. clientId, name?

archive_client โ€” Toggle archive. clientId

assign_sites_to_client โ€” Assign sites. clientId, siteIds[]

๐Ÿ”— Inbound Webhooks (4)

list_inbound_webhooks โ€” List webhooks for site. siteId

create_inbound_webhook โ€” Create webhook. siteId, name, source?

update_inbound_webhook โ€” Update webhook. siteId, webhookId

delete_inbound_webhook โ€” Delete webhook. siteId, webhookId

22 Field Types

Input

text โ€” Single-line text

textarea โ€” Multi-line text

email โ€” Email with validation

phone โ€” Phone number

number โ€” Numeric input (min, max)

date โ€” Date picker

time โ€” Time picker

url โ€” URL with validation

name โ€” Full name

company โ€” Company name

Choice

select โ€” Dropdown (options[{label, value}])

multiselect โ€” Multi-select dropdown

radio โ€” Radio buttons (supports score, calcValue)

checkbox โ€” Checkboxes (supports score, calcValue)

rating โ€” Stars or numbers (ratingMax: 5|10)

scale โ€” Numeric scale (scaleMin, scaleMax, scaleLabels)

nps โ€” Net Promoter Score (0-10)

Special

file โ€” File upload (accept, maxFileSize)

hidden โ€” Hidden field (defaultValue)

address โ€” Full address

signature โ€” Signature pad

matrix โ€” Grid/table (matrixRows, matrixColumns, matrixType: radio|checkbox)

Layout (no data)

heading โ€” Section heading

paragraph โ€” Descriptive text

divider โ€” Visual separator

Advanced

calculated โ€” Auto-calculated (formula: "price * quantity", numberFormat, currencySymbol)

Common Workflows

Contact form from scratch

find_or_create_site({ domain: "example.com" })
create_form({
  siteId: "...", name: "Contact Form",
  fields: [
    { type: "name", label: "Full Name", required: true },
    { type: "email", label: "Email", required: true },
    { type: "phone", label: "Phone" },
    { type: "textarea", label: "Message", required: true }
  ],
  settings: { emailNotifications: { enabled: true, recipients: ["owner@example.com"] } }
})
publish_form({ formId: "...", publish: true })
get_embed_code({ formId: "..." })

Add a field to existing form

get_form({ formId: "..." })  // Get current fields
update_form({ formId: "...", fields: [...existingFields, newField] })

Calculator form

create_form({
  siteId: "...", name: "Price Calculator",
  fields: [
    { type: "number", label: "Quantity", key: "quantity" },
    { type: "select", label: "Size", key: "size", options: [
      { label: "Small", value: "small", calcValue: 10 },
      { label: "Large", value: "large", calcValue: 25 }
    ]},
    { type: "calculated", label: "Total", key: "total",
      formula: "quantity * size", numberFormat: "currency", currencySymbol: "$" }
  ]
})

What NOT To Do

โŒ Don't send partial fields arrays โ€” you'll lose fields

โŒ Don't assume a form is published after creation

โŒ Don't guess field types โ€” use the 22 types listed above

โŒ Don't skip options.value โ€” both label and value are required

โŒ Don't send notifications without getting existing ones first

โŒ Don't hardcode the MCP URL โ€” use the one from your config

โŒ Don't create duplicate sites โ€” use find_or_create_site

๐Ÿ“„ Raw Markdown

Agents can fetch the full instructions as raw markdown at https://proforms.io/docs/agents.md or call the get_agent_instructions MCP tool.