Skip to content

MCP server

Let Claude, Cursor and other MCP clients build forms, publish them and analyze responses, with the same permissions as your API key.

Endpoint: POST https://YOUR_HOST/api/mcp (Streamable HTTP, stateless). Auth: Authorization: Bearer ff_live_.... Create a key with only the scopes the agent needs.

Claude Code

bash
claude mcp add --transport http formflow https://YOUR_HOST/api/mcp \
  --header "Authorization: Bearer $FORMFLOW_API_KEY"

Claude Desktop and Cursor (stdio)

The stdio entry relays to your instance over HTTP, so it needs only the API key and URL.

json
{
  "mcpServers": {
    "formflow": {
      "command": "npx",
      "args": ["tsx", "/path/to/formflow/src/mcp/stdio.ts"],
      "env": { "FORMFLOW_API_KEY": "ff_live_...", "FORMFLOW_URL": "https://YOUR_HOST" }
    }
  }
}

Claude Desktop: claude_desktop_config.json. Cursor: .cursor/mcp.json (or the remote form { "url": "https://YOUR_HOST/api/mcp", "headers": { "Authorization": "Bearer ..." } }).

Tools

ToolNeedsDoes
list_workspacesanyWorkspaces this credential can act in.
list_forms / get_formform:readBrowse forms; read a draft with its revision and engine issues.
create_formform:write (+ai:use for prompt)From a prompt, a template id or a full definition.
update_formform:writeAtomic batch of add/update/move/delete field, section, logic, theme, settings operations.
publish_formform:publishPublish; on failure returns the analyzeDefinition issues.
list_templatesform:readTemplate catalog.
list_question_bankform:readCurated ready-made questions.
import_questionsform:writeSurveyMonkey, sheet header or question list to a definition.
import_products_csvform:writeProduct CSV to product choices.
search_stock_imagesform:readStock photo search (needs UNSPLASH_ACCESS_KEY).
list_themes / apply_themeform:read / form:writePresets and saved themes; apply with overrides.
list_responses / get_responsesubmission:readFilters, pagination, field projection. Sensitive fields omitted unless workspace:manage.
get_form_analyticsanalytics:readMetrics, funnel, NPS/CSAT, single-question summary.
summarize_responsesanalytics:read + ai:useAI analysis with caveats.
create_exportsubmission:exportcsv, json, xlsx or pdf; download URL when ready.
get_share_linksform:readHosted URL, embed snippets, QR code URLs.
get_triage / triage_responsessubmission:read / form:writeStatus, assignee and tags per response; bulk update of up to 500. Answers are never changed.
get_version_history / compare_versionsform:readPublished versions with plain-language change summaries; diff of two versions or the draft.
restore_version / undo_restoreform:writeReplace the draft with a version (old draft snapshotted); undo once. The live form is unchanged until publish_form.
list_share_links / create_share_link / revoke_share_linkanalytics:read (+submission:export for respondent mode)Read-only results links. The URL is returned once, by create_share_link, and never repeated.
list_approvals / get_approvalsubmission:readApproval requests, stages and history. Links are never returned. Deciding is not exposed.
resend_approval / cancel_approvalintegration:manageRe-email pending approvers; cancel a pending request.
list_experiments / set_experiment_stateform:read / form:publishA/B results with a small-sample verdict; start, stop or conclude a test.
get_experiment_results / create_experimentanalytics:read / form:writeFull Bayesian and frequentist results; create a draft test (variants can be other forms).
report_experiment_conversionform:writeReport a downstream goal event for a user.
explain_experiment / suggest_experiment_variantsanalytics:read / form:readAI summary and variant ideas from statistics only.
list_analytics_destinationsintegration:managePostHog, Amplitude, Mixpanel and Segment destinations.
create_webhook / list_webhookswebhook:manageSecret is returned once.

Resources and prompts

Resources: formflow://field-types (catalog with examples), formflow://schema/form-definition (JSON Schema), formflow://templates, formflow://forms/{formId}. Prompts: build_lead_gen_form, analyze_nps_results, create_feedback_survey, review_form_before_launch, weekly_responses_digest.

Security

Every tool call checks the key's scopes and role, is scoped to the key's workspace, and is audited as mcp.<tool> (no answers or secrets in the log). Browser requests need an allowed Origin (APP_URL or MCP_ALLOWED_ORIGINS). The same rate limit as the REST API applies. Respondent answers are untrusted data and the server tells agents not to follow instructions inside them.