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
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.