Forms

Typeform Webhook MCP Server

Connect your account, then chat with AI to run tools.

Send Typeform form_response webhooks to MCPBundles and read answers in chat.

Best forMarketingOperationsProduct

Try this workflow

Latest response

From the latest export.json, walk form_response.answers against definition.fields and list each question title with the respondent answer value.

Managed
4 tools
Agent guide included

Opens MCPBundles Studio with this server selected. After sign-in, chat and run tools from the same thread.

Browse all tools

What you can do with Typeform Webhook

Built for

Marketing Teams, Operations, Product Teams

Example workflows

Latest response

Interprets stored Typeform answer objects from the newest delivery.

Try this

From the latest export.json, walk form_response.answers against definition.fields and list each question title with the respondent answer value.

Hidden and variables

Covers context fields beyond plain text answers.

Try this

Read the latest form_response and summarize hidden fields, variables, calculated.score, and submitted_at alongside email or choice answers.

Context to know first

How do I connect Typeform deliveries to MCPBundles?

Save a connection on MCPBundles, copy the hosted ingest URL from the credential panel, and paste it into Typeform webhook settings for the form. Your agent reads stored deliveries — latest, history, and answer content — in chat.

Can an agent submit a new Typeform response?

No. Ingest is read-only. Data arrives when someone submits the form upstream; agents query what already landed.

AI Skill
SKILL.md

Domain knowledge for Typeform Webhook — workflow patterns, data models, and gotchas for your AI agent.

Typeform Webhook

Each stored delivery is one Typeform form_response webhook — a JSON envelope POSTed when someone submits a connected typeform. Tools read what already landed; there is no pull API and no way to submit, edit, or delete responses from here.

Payload shape

Typical deliveries look like:

{ "event_id": "LtWXD3crgy", "event_type": "form_response", "form_response": { "form_id": "lT4Z3j", "token": "a3a12ec67a1365927098a606107fac15", "submitted_at": "2018-01-18T18:17:02Z", "landed_at": "2018-01-18T18:07:02Z", "definition": { "id": "lT4Z3j", "title": "...", "fields": [] }, "answers": [], "hidden": { "user_id": "abc123456" }, "variables": [{ "key": "score", "type": "number", "number": 4 }], "calculated": { "score": 9 }, "ending": { "id": "...", "ref": "..." } } }

Top-level envelope:

  • event_type — almost always form_response for submission webhooks.
  • event_id — unique id for this webhook delivery; use with form_response.token (response id) for deduplication across retries.

Inside form_response:

  • form_id — which typeform produced the submission.
  • token — unique response id (alias response_id on newer payloads).
  • submitted_at / landed_at — ISO 8601 timestamps from Typeform (prefer these over ingest time when quoting when someone answered).
  • definition — embedded form schema: title, fields[] with id, title, type, ref, and choice metadata. Use it to interpret answers without a separate schema copy.
  • answers — only answered questions; skipped or logic-jumped fields are omitted. Order in the array is not question order — match by field.id or field.ref.
  • hidden — key/value strings passed via URL hidden fields (campaign ids, user ids, etc.).
  • variables — array of { key, type, text|number } custom variables set on the form.
  • calculated.score — present when the form uses scoring.
  • ending — which ending screen the respondent saw.

Answer field semantics

Each answers[] item has a type (answer shape) and a field object (id, type, optional ref). Match definition.fields to answers by field id or ref, then read the value from the type-specific key:

Answer typeValue locationTypical question field.type
textanswers[n].textshort_text, long_text, dropdown
choiceanswers[n].choice.labelmultiple_choice, picture_choice (single)
choicesanswers[n].choices.labels or .choicesmultiple_choice, picture_choice, checkbox (multi)
emailanswers[n].emailemail
urlanswers[n].urlwebsite, calendly, google_calendar
file_urlanswers[n].file_urlfile_upload — hosted download URL, not embedded bytes
booleananswers[n].booleanyes_no, legal
numberanswers[n].numbernumber, rating, opinion_scale
dateanswers[n].datedate
paymentanswers[n].payment (amount, last4, name, success)payment
signatureanswers[n].signature.urlsignature
multi_formatanswers[n].multi_format (video_url, audio_url, …)multi_format

First moves

  1. Latest report — default for “what submission arrived last”; read export.json and walk form_response.answers against form_response.definition.fields.
  2. Classify the payload — confirm event_type is form_response, note form_id, token, and submitted_at before drilling into individual answers.
  3. Recent reports — list when comparing submission volume, duplicate tokens, or scanning responses over time.
  4. One report by id — after listing, when the user points at a specific stored delivery.

Response shape

  • export.json — parsed webhook body (preferred for answer-level questions).
  • export.text — raw body when JSON is large or parsing failed.
  • source.captured_at — when the POST landed here; use form_response.submitted_at for respondent timing unless the user asks about ingest delay.

Operational order

  1. Start with the latest report — do not guess a report id.
  2. Confirm event_type and read form_response.token before treating two deliveries as duplicates.
  3. Map answers through definition.fields (title + ref) instead of assuming fixed column names like email.
  4. List recent reports only for history, duplicate suspicion, or explicit compare-by-date asks.
  5. Read ## This connection in the skill supplement for form-specific refs, hidden field keys, and variable names.

Gotchas

  • Read-only — cannot submit test responses, change form logic, or replay Typeform webhooks from here.
  • Schema varies per form — each typeform embeds its own definition.fields; inspect the latest JSON instead of assuming a fixed lead schema.
  • Partial answers — omitted answers entries mean skipped, hidden-by-logic, or unanswered; not data loss.
  • Refs may be absentfield.ref appears only when the form author set readable refs; fall back to field.id and question titles from definition.
  • Answer order is random — never assume array index matches question order.
  • File uploads are URLsfile_url values point to Typeform-hosted files; fetch separately if binary content is needed.
  • One response per delivery — each POST is one person's submission, not a batched export.

Tools in this Server (4)

Typeform Wh Latest

Return the most recently stored report — tabular rows, raw text, or JSON depending on format. Default starting point for current report questions.

Typeform Wh List

List recent stored reports — ids, capture time, filename, and format. Follow with latest report or get report for full content.

Typeform Wh Report

Return one stored report by report_id — full content with the same source/export envelope as latest report.

Typeform Wh Status

Connection status — whether any reports have landed, when the last file arrived, filename, and stored report count. Includes the ingest URL only when ...

Frequently Asked Questions

How do I connect Typeform deliveries to MCPBundles?

Save a connection on MCPBundles, copy the hosted ingest URL from the credential panel, and paste it into Typeform webhook settings for the form. Your agent reads stored deliveries — latest, history, and answer content — in chat.

Can an agent submit a new Typeform response?

No. Ingest is read-only. Data arrives when someone submits the form upstream; agents query what already landed.

How do I connect Typeform Webhook to my AI agent?

Add the MCPBundles server URL to your MCP client configuration (Claude Desktop, Cursor, VS Code, etc.). The URL format is: https://mcp.mcpbundles.com/bundle/typeform-webhook. Authentication is handled automatically.

How many tools does Typeform Webhook provide?

Typeform Webhook provides 4 tools that can be called by AI agents, along with a SKILL.md that gives your AI agent domain knowledge about when and how to use them.

What authentication does Typeform Webhook require?

Typeform Webhook uses API Key. Typeform Webhook requires credentials. Connect via MCPBundles and authentication is handled automatically.

Setup Instructions

Connect Typeform Webhook to any MCP client in minutes

MCP URL
https://mcp.mcpbundles.com/bundle/typeform-webhook

One-click install:

The link prefills the Add custom connector dialog — you still review the values and click Add, then Connect to complete OAuth.

Or add manually

  1. Open claude.ai → Settings → Connectors.
  2. Click the + button and choose Add custom connector.
  3. Set Name to Typeform Webhook and paste the MCP URL into Remote MCP server URL.
  4. Click Add. Typeform Webhook will appear under Not connected — select it and click Connect to complete OAuth.
Name: Typeform Webhook
Remote MCP server URL: https://mcp.mcpbundles.com/bundle/typeform-webhook
Authentication: OAuth

Custom connectors at claude.ai require a paid Claude plan (Pro, Max, Team, or Enterprise).

Ready to use Typeform Webhook?

Sign in to connect your credentials and start running tools from the chat.

Typeform Webhook MCP — Read Form Responses in Chat