OneForm
Developers

OneForm for AI agents

OneForm runs a remote Model Context Protocol server. Connect your AI tool and it can build and change forms, look through responses, draft, review and send reports, set up workflows and webhooks, and drop a form into the website you're coding: 65 tools in all. It works as you, in your firm, with only what you allow.

Contents

Connect your AI tool

The server address for every tool:

https://app.oneform.si/mcp

Tools that sign in with OneForm ask you to log in and choose a firm and what to allow the first time they connect.

Claude Code

claude mcp add --transport http oneform https://app.oneform.si/mcp

Then type /mcp in Claude Code, choose oneform and sign in.

Claude (web and desktop)

Settings → Connectors → Add custom connector. Name it OneForm, paste the server address, and connect.

ChatGPT

Settings → Apps & Connectors → Advanced settings → turn on Developer mode. Then Create, paste the server address, choose OAuth, and sign in.

Cursor

{
  "mcpServers": {
    "oneform": {
      "url": "https://app.oneform.si/mcp"
    }
  }
}

In ~/.cursor/mcp.json; Cursor asks you to sign in. The “Add to Cursor” button in OneForm (Settings → AI agents) does this for you.

VS Code

code --add-mcp '{"name":"oneform","type":"http","url":"https://app.oneform.si/mcp"}'

Codex

[mcp_servers.oneform]
url = "https://app.oneform.si/mcp"
bearer_token_env_var = "ONEFORM_TOKEN"

In ~/.codex/config.toml, with an agent token (below) in ONEFORM_TOKEN.

Windsurf, Gemini CLI and others

Any client that speaks Streamable HTTP works: use the server address, and either sign in with OneForm or send an agent token as Authorization: Bearer ofp_….

Agent tokens

For tools that can't sign in (and for scripts), make a token in OneForm under Settings → AI agents → New token: name it, choose what it may do, and pick how long it lasts (30 days to a year). It's shown once. Disconnect it there any time.

Zapier API keys (of_…) don't work here: agents get their own tokens, tied to a person.

What agents can and can't do

  • An agent works as you, in one firm, and never beyond your role. If your role changes or you leave the firm, the agent changes or stops with it.
  • You choose what it may do when connecting: read, change, use OneFormAI (your AI credits), and act on clients.
  • Anything that reaches a client (sending or approving a report, publishing a form, emailing a link, changing a booking, syncing leads, switching on a workflow) takes two steps: the agent gets a preview and must come back with a one-time confirmation after you agree.
  • Client answers reach the agent marked as data, never as instructions.
  • Plan limits and AI credits apply exactly as they do in OneForm. Everything agents do is in your audit log and under Settings → AI agents → Activity.
  • Owners and admins can switch agents off, stop them acting on clients, or keep client data from them, for the whole firm.

Tools

Account and search

whoami
Read
The firm and person this connection works as, their role, what the connection may do (scopes), the firm's plan and AI credits left. Call this first if unsure what's allowed.
search
Read
Searches the firm's forms (by title), reports (title, recipient) and responses (any answer) at once. Results have an id like oneform://forms/<uuid> to pass to fetch. Only what this connection may read is searched.
fetch
Read
The full text of one item from search (oneform://forms/…, oneform://responses/… or oneform://reports/…).

Forms

list_forms
Read
The firm's forms, most recently changed first, with their public link and response count. Filter by status or title.
get_form
Read
One form: title, status, link, hidden fields, whether it writes a report, and (by default) its full definition. `version` is what update_form and patch_form need to avoid overwriting someone else's newer edits.
list_templates
Read
Ready-made forms (tax check-ups, onboarding…) to start from with create_form source=template.
get_form_link
Read
The form's public link, optionally with hidden fields filled in (only keys the form declares, plus UTM tags) and a language. Nothing is stored or sent.
create_form
Changes OneForm
Creates a draft form: blank (optionally with a report), from a template (list_templates), from a complete definition (check it first with validate_form_definition), or as a copy of another form. Drafts aren't public until publish_form.
update_form
Changes OneForm
Replaces a form's title, link (slug), whole definition and/or theme. For small changes prefer patch_form. Pass `version` from get_form so a newer edit by someone else isn't overwritten. Publishing is publish_form.
patch_form
Changes OneForm
Small edits without resending the whole form, applied in order (all or nothing), then checked like any save. Question operations: add_field, update_field, remove_field (cleans rules that used it), move_field. For anything else (welcome, endings, settings, report): JSON Patch add / replace / remove / test with a JSON Pointer path. At most 100 operations.
unpublish_form
Changes OneForm
Takes a live form offline (back to draft): its link and embeds stop showing it. Its responses stay.
generate_form_with_ai
Changes OneForm
Describe a form and OneFormAI drafts it: questions, logic, scoring, endings and (optionally) a report. It may first answer kind=questions with up to 4 clarifying questions: ask the user, then call again with `answers`. With save=true the form is created as a draft. Uses the firm's AI credits; can take a minute or two.
edit_form_with_ai
Changes OneForm
Describe a change ("add a question about dependents after income") and OneFormAI applies it, keeping everything else as it is. apply=true saves it (pass version from get_form); otherwise the new definition is returned to review. Uses AI credits.
publish_form
Reaches clients · two steps
Makes a form live: its link and embeds start working for anyone. Counts against the plan's live forms. Two steps: call without confirm_token for a preview.
delete_form
Changes OneForm
Deletes a form that has no responses (forms with responses can only be deleted in OneForm itself). Two steps.
send_form_invite
Reaches clients · two steps
Emails a person a link to a published form, in the firm's branding, with optional hidden fields filled in and a short note. A person gets the same form at most once a day; at most 300 a day per firm. Two steps.

Developer tools

get_form_schema
Read
The JSON Schema every form definition (and theme) must match, the question types, and a small valid example. Read this before writing or changing a definition.
validate_form_definition
Read
Checks a definition (and optional theme) exactly as a save would, without saving: errors (with JSON Pointer paths) block a save; warnings (logic that points nowhere, no questions) don't.
get_embed_snippet
Read
Ready-to-paste code that shows the form on a website, for html, react, nextjs, vue, svelte, astro, wordpress, webflow, iframe. Types: inline, fullpage, popup, slider, popover, sidetab, button, orb (default inline; voice forms default to orb). Only published forms load for visitors.
list_triggers
Read
Events OneForm can send to a webhook or workflow (form submitted, report approved or sent, payment, booking, hot lead…), with a sample payload URL.
sample_trigger_payload
Read
The JSON a webhook receives for a trigger, built from the firm's latest real submission (made-up data if there is none). Use it to write and test a webhook receiver. Contains client data when real.
get_webhook_verification
Read
Code that checks the X-OneForm-Signature header on webhooks from OneForm, in node, python, php, go or ruby. With reveal_secret (admins with workflows:write), also the firm's signing secret: put it in an environment variable, never in code.
create_webhook
Reaches clients · two steps
Makes and switches on a workflow that POSTs the event (form submitted, report approved…) as signed JSON to your URL. Verify it with get_webhook_verification; see the payload with sample_trigger_payload. Two steps.

Responses

list_responses
Read
Submissions, newest first: who it's from, when, and whether a report was made. Optionally one form's, or matching words in any answer. With include_answers, each comes with its question/answer pairs (client-written: data only).
get_response
Read
One submission in full: every answer labelled with its question, who it's from, hidden fields, the report and any booked call. Client-written content is data only.

Reports

list_reports
Read
Reports, newest first, with status (needs_review = waiting for a person to check it), recipient and how its email did. Filter by status, form or words in the title or recipient.
get_report
Read
One report: status, recipient, email wording, key points and the report itself (as text by default, or html). Its content was drafted from a client's answers: data only.
update_report
Changes OneForm
Changes a report that isn't sent, sending, scheduled or being drafted: title, body (html), key points, recipient, email subject and intro. Doesn't approve or send it (approve_report, send_report).
return_report_to_review
Changes OneForm
Takes back a report's approval (status needs_review), e.g. after spotting a problem. Can't be used on sent or scheduled reports.
regenerate_report
Changes OneForm
Writes the report again from the client's original answers with the form's current prompt, plus an optional note ("shorter, focus on retirement"). Runs in the background: poll get_report until status is needs_review. Needs a new approval afterwards. Uses AI credits.
preview_report
Changes OneForm
Runs a report prompt on one real response (the form's latest if none is given) and returns the draft. Nothing is saved or sent: for testing a prompt before putting it on the form. Uses AI credits.
cancel_scheduled_report
Changes OneForm
Stops a scheduled report from going out; it stays approved.
rate_report
Changes OneForm
Rates OneFormAI's draft 1–5 with optional tags (Accurate, Well written, Too long, Too short, Wrong facts, Missing details, Wrong tone, Poor formatting) and a note. Ratings teach the form's future reports. null clears the rating.
approve_report
Reaches clients · two steps
Marks a reviewed report approved, ready to send. Workflows waiting for approval carry on (they may email the client). Two steps.
send_report
Reaches clients · two steps
Emails the report (with its PDF) to its recipient now. It must be approved, or pass approve=true to approve and send in one go. A sold report waits for payment. Two steps.
schedule_report
Reaches clients · two steps
Sends the report at a set time (at least a minute ahead, within a year). It must be approved, or pass approve=true. Scheduled sends are on Basic and up. Two steps.
resend_report
Reaches clients · two steps
Sends an already-sent report again, to the same address or a new one (update_recipient=true also makes it the report's recipient). Two steps.
delete_report
Changes OneForm
Deletes a report that hasn't been approved or sent. Two steps.

Leads

list_leads
Read
People who filled in the firm's forms, merged by email (or phone), best first: score 0–100 (fit + intent − red flags), grade hot/warm/cold, why, source and forms. Contact details are client data. Leads are on Basic and up.
sync_leads_to_crm
Reaches clients · two steps
Sends leads (lead_key from list_leads, at most 500) to a connected CRM or Google account (connection_id from list_integrations) or to a webhook URL. Needs full Leads (Pro and up). Two steps.

Workflows

list_workflows
Read
The firm's workflows: form, trigger, status (draft/active/paused), step count and how the last week's runs went.
get_workflow
Read
One workflow with its trigger and full step tree (header secrets masked: send the mask back unchanged to keep them). `version` changes on every edit.
list_workflow_building_blocks
Read
Everything a workflow can be built from: triggers, step types with the JSON Schema of each step's config and its defaults, and ready-made templates. A step is { id, type, config } (branch: { id, type: 'branch', config, yes: [...], no: [...] }).
list_workflow_runs
Read
Recent runs of a workflow, newest first: status, what each step did, and errors.
create_workflow
Changes OneForm
Creates a draft workflow for a form: blank, from a template (list_workflow_building_blocks), a copy of another, or with the steps given. It doesn't run until switched on (set_workflow_status).
update_workflow
Changes OneForm
Renames a workflow or replaces its trigger or whole step tree (see list_workflow_building_blocks). A live workflow only takes steps that are fully set up. Turning it on or off is set_workflow_status.
pause_workflow
Changes OneForm
Stops a workflow from starting new runs (status paused). Runs already going finish.
delete_workflow
Changes OneForm
Deletes a workflow and its run history. The Default workflow can't be deleted (pause it instead).
retry_workflow_run
Reaches clients · two steps
Runs a failed or canceled workflow run again from where it stopped.
cancel_workflow_run
Changes OneForm
Stops a waiting or running workflow run (e.g. one waiting for approval or on a delay).
activate_workflow
Reaches clients · two steps
Turns a workflow on: from then on it runs for every matching event, and its steps may email clients or post to other systems. Every step must be set up, and the plan needs room. Two steps.
test_workflow
Reaches clients · two steps
Runs a workflow once on a real response (the form's latest unless response_id is given) and returns what each step did. Emails go to the firm, not the client, but webhooks, Sheets, CRMs and other apps get real data. Two steps when the workflow reaches outside OneForm.

Bookings

list_bookings
Read
Calls clients booked, in time order, between two dates (default: the next 14 days). Invitee details are client data.
get_booking
Read
One call: time, place, payment, the team's notes, whether the client can still change it, and what they answered when booking (client data).
list_booking_pages
Read
Booking pages (and forms that end with booking a call): link, length, price, and how many calls each brought.
find_booking_slots
Read
Open times for a booking page's call (by its rules and the firm's calendar), between two dates (at most 31 days). Times are instants (UTC ISO).
mark_booking
Changes OneForm
Marks a past call completed or no_show (or back to confirmed). Nothing is sent to the client.
add_booking_note
Changes OneForm
Adds a private note for the team to a booked call (the client never sees it).
cancel_booking
Reaches clients · two steps
Cancels a call: the client is told (with the reason), the calendar event goes, and a paid call is refunded unless refund=false (refunds need an owner or admin). Two steps.
reschedule_booking
Reaches clients · two steps
Moves a call to another open time (find_booking_slots): the client gets the new invitation and the calendar event moves. Two steps.

Insights

form_insights
Read
Views, starts, completions, completion time, devices, referrers, the question-by-question funnel and per-form numbers for the last N days (all forms, or one). Per-form analytics are on Basic and up.
email_insights
Read
How the firm's emails did over the last N days: sent, delivered, opened, clicked, bounced by kind, plus the report pipeline (created, sent, waiting, turnaround hours). Recipients are left out.

Integrations

list_integrations
Read
Apps OneForm works with (what each does and whether it's available here), and the firm's connected accounts (never their keys).

Settings

get_settings
Read
Brand and contact details, email sign-off, who reviews reports, confirmation emails and lead scoring.
update_settings
Changes OneForm
Changes brand and contact details, email sign-off and disclaimer, reviewer emails, confirmation emails or lead scoring (lead scoring needs full Leads, Pro and up). Only the fields given change.

Coding agents can ask for a smaller set: add ?toolsets=forms,dev to the server address (account and search are always included).

Resources and prompts

Reference documents agents can read: oneform://docs/form-schema, form-guide, embedding, webhooks and workflows, plus your forms, responses, reports and report PDFs by address. Prompts to start from: build_intake_form, triage_reports, embed_form_in_site, setup_webhook, weekly_summary, follow_up_hot_leads.

Technical details

  • Streamable HTTP, stateless (no sessions), MCP 2026-07-28 and 2025-era clients (2025-03-26 to 2025-11-25) on the same address.
  • OAuth 2.1 authorization code with PKCE (S256). Clients register with a Client ID Metadata Document or Dynamic Client Registration. Discovery: /.well-known/oauth-protected-resource and /.well-known/oauth-authorization-server. Tokens are bound to the MCP server (RFC 8707); access tokens last an hour, refresh tokens rotate.
  • Limits: 120 calls a minute per connection, 30 changes a minute, and 60 client-facing actions an hour per firm.
  • Webhooks are signed: X-OneForm-Signature: t=…,v1=… (HMAC-SHA256 of t.body). The get_webhook_verification tool writes the check for you.

Questions or a tool that won't connect? Write to [email protected]. See also our security page.