Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the Typeform MCP server

Vendor MCP
Open markdown

The Typeform MCP connector routes your AI agent's tool calls to Typeform's own MCP server through Scalekit. Each user signs in to Typeform once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 63 tools.

Tools
63
What they doRead · write · destructive
27 · 27 · 927 read27 write9 destructive
Users sign in with
OAuth app
Your own Typeform MCP server app

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. Create the Typeform MCP connection

    In AgentKit > Connections, create a Typeform MCP connection and copy its redirect URI. The name you give it is the connection_name your code passes. See Configure connections.

  4. Register an OAuth app

    Typeform MCP server connections use your own OAuth app. Register one with Typeform MCP server and add the redirect URI you copied.

    Then enter the app's Client ID and Client Secret on the Typeform MCP connection.

  5. Authorize a user and make your first call

    quickstart.mts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    import { createInterface } from 'node:readline/promises'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENVIRONMENT_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'typeformmcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Typeform MCP:', link)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'typeformmcp_accounts_list_accounts',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • typeformmcp_accounts_list_accountsLists all accounts the authenticated user is a member of.Read-only

    Accounts List Accounts

    Lists all accounts the authenticated user is a member of.

    Inputs

    This tool takes no inputs.

  • typeformmcp_automations_public_get_authorized_email_domainsGet authorized email domains for the current account, typically used as senders in an automation (workflow/flow) email step.Read-only

    Get Authorized Email Domains

    Get authorized email domains for the current account, typically used as senders in an automation (workflow/flow) email step. ## Prerequisites - `account_id` — obtain via `accounts-list_accounts`.

    Inputs

    account_idstringrequired
    The account whose authorized email domains to list.
  • typeformmcp_automations_public_get_automationGet automation (workflow/flow) by its ID.Read-only

    Get Automation

    Get automation (workflow/flow) by its ID. Returns the working state (published baseline + any pending draft operations). ## Prerequisites - `account_id` — obtain via `accounts-list_accounts`. - `automation_id` — obtain via `public_list_automations`. ## Output - workflow: - id - name - status: DRAFT | ACTIVE | PAUSED - entrypoint_id: ID of the first step to execute - steps: Array of step objects - id - type: DELAY | SEND_EMAIL | SEND_WEBHOOK | SEND_TO_INTEGRATION | TERMINATE - next_ids: Downstream step IDs - triggers: Trigger associations (id, type, enabled) - triggered: Total run count - last_patch_id: Pass as last_patch_id on the next patch

    Inputs

    account_idstringrequired
    The ID of the Organization.
    automation_idstringrequired
    The automation's ULID (e.g., '01H3JY5FWFM3YXBCPF2BQ9JYZ2')
  • typeformmcp_automations_public_get_email_notificationGet the working state of an email notification template (used by an automation/workflow/flow email step).Read-only

    Get Email Notification

    Get the working state of an email notification template (used by an automation/workflow/flow email step). ## Prerequisites - `account_id` — obtain via `accounts-list_accounts`. - `headless_form_id` and `template_id` — obtain via `public_get_automation` (the email step's `email_notifications` map: key is the headless form id, value has `template_id`). ## Use cases - Retrieve the current email notification content before making updates - Inspect pending changes that haven't been published yet - Review edit history of modifications

    Inputs

    account_idstringrequired
    The ID of the Organization.
    headless_form_idstringrequired
    The ID of the headless form associated with the email notification.
    template_idstringrequired
    The ID of the email notification template to retrieve.
  • typeformmcp_automations_public_get_triggerGet a trigger of an automation (workflow/flow) by its ID.Read-only

    Get Trigger

    Get a trigger of an automation (workflow/flow) by its ID. Returns the working state (published baseline + any pending draft operations). The trigger_type determines which kind of trigger to fetch. ## Prerequisites - `account_id` — obtain via `accounts-list_accounts`. - `trigger_id` and `trigger_type` — obtain via `public_list_automations` (each automation's `triggers[].id`/`.type`) or from the `public_create_automation` output.

    Inputs

    account_idstringrequired
    The ID of the Organization.
    trigger_idstringrequired
    The triggers's ULID (e.g., '01H3JY5FWFM3YXBCPF2BQ9JYZ2')
    trigger_typestringrequired
    The type of the trigger.one of CONTACTFORM
  • typeformmcp_automations_public_list_automationsList all automations (workflows/flows) for the authenticated account.Read-only

    List Automations

    List all automations (workflows/flows) for the authenticated account. ## Prerequisites - `account_id` — obtain via `accounts-list_accounts`. ## Use cases - Find an automation by name before inspecting or updating it - Discover which automations exist for the account - Get automation IDs needed by other tools (get_automation, publish_automation, pause_automation)

    Inputs

    account_idstringrequired
    The account that owns the automations.
  • typeformmcp_automations_public_list_referenceable_fieldsList the fields available to reference for a given automation (workflow/flow).Read-only

    List Referenceable Fields

    List the fields available to reference for a given automation (workflow/flow). ## Prerequisites - `account_id` — obtain via `accounts-list_accounts`. - `automation_id` — obtain via `public_list_automations`. ## Use cases - Discover the fields (and their refs) usable in the automation. Useful in email notifications, automation conditions, etc. ## Important notes - When referencing a field, use its 'ref' property. - For choice-typed fields, reference a specific option by the choice's 'ref'.

    Inputs

    account_idstringrequired
    The ID of the Organization.
    automation_idstringrequired
    The automation's ULID (e.g., '01H3JY5FWFM3YXBCPF2BQ9JYZ2')
  • typeformmcp_contacts_public_get_contactGet a single contact by ID with property metadata included.Read-only

    Get Contact

    Get a single contact by ID with property metadata included. Use this tool when you need to fetch a specific contact and want property names/types without a separate API call. ## What this tool does - Returns a single contact with all its properties - Property metadata (name, type, template_id) is automatically included - No need to call list_contacts_database_properties separately ## Inputs - contact_id: The UUID of the contact to fetch ## Output - id: Contact UUID - identifier: Primary identifier value (e.g., email address) - properties: Array of properties, each with: - property_id: The property UUID - value: The property value - name: Human-readable property name (e.g., "Email", "Name") - type: Property type (e.g., "email", "short_text", "number") - template_id: Standard property template ID (null for custom properties)

    Inputs

    account_idstringrequired
    The ID of the Organization
    contact_idstringrequired
    The UUID of the contact to fetch