Tool Reference
Complete reference for all 22 MCP tools available in the Surface Forms MCP server
The Surface Forms MCP server exposes 22 tools organized into six categories. All tools are automatically scoped to your environment via your API key.
Forms
list_forms
List all forms in your environment with response counts and pagination.
pagebodynumberPage number for pagination.
limitbodynumberNumber of forms to return per page.
searchbodystringSearch forms by name.
sortBybodystringSort by "name", "updatedAt", or "createdAt".
sortOrderbodystringSort direction: "asc" or "desc".
dateRangebodyobjectFilter by date range with from and to fields. Response counts are scoped to this range.
›Example use cases
- List all my forms with response counts
- Search forms by name (e.g. "contact us")
- Get forms sorted by most recently updated
- See how many total/completed/partial responses a form has within a date range
get_form
Get a single form's full configuration, including all questions, styles, and settings.
formIdbodystringrequiredThe ID of the form to retrieve.
generate_form
Generate a new form from an existing source form used as a style template. The new form inherits all visual settings (fonts, colors, backgrounds, component styles) from the source form. The form is automatically published and ready to use.
This is the only mutation tool in the MCP server. Use list_forms first to find a suitable source form ID.
sourceFormIdbodystringrequiredThe ID of an existing form to use as a style template.
namebodystringrequiredDisplay name for the generated form.
stepsbodyarrayrequiredArray of step objects (minimum 2). Each step represents a page/screen in the form.
›Step object properties
namebodystringrequiredDisplay name for the step.
componentsbodyarrayrequiredArray of component objects (minimum 1). Each component has a type and content.
Supported component types:
| Type | Description | Key content fields |
|---|---|---|
ShortInput | Single-line text input | question |
LongInput | Multi-line text area | question |
IdentityInfo | Name, email, company fields | fields (array of { key, label }) |
Dropdown | Dropdown select menu | question, options |
MultipleOptionsQuestion | Single/multi-select choices | question, choices, isMulti |
CalendlyScreen | Calendar scheduling widget | dataUrl, message, calendarType |
DynamicScheduler | Routing scheduler | defaultCalendar |
NextButton | Advance to next step | label |
Header | Heading text | title, subheading |
Disclaimer | Legal/disclaimer text | text |
See the Generate Form API reference for full content field details per component type.
›Example use cases
- Create a demo booking form with identity fields and a Calendly scheduler
- Generate a feedback survey with dropdowns and multiple choice questions
- Build a contact form with name, email, company, and a submit button
- Create a lead capture form styled like an existing form
Responses
list_responses
List responses for a form with filtering, full-text search, and sorting.
formIdbodystringrequiredThe form to list responses for.
limitbodynumberNumber of responses to return.
finishedbodybooleanFilter by completion status. true = completed, false = partial/abandoned.
dateRangebodyobjectFilter responses by date range (from, to).
filterbodyarrayFilter responses by answer values. Each filter has type, filter, and operator (e.g. "contains", "equals").
searchbodyarrayFull-text search across response data. Each entry has type and value.
sortbodyarraySort by specific fields. Each entry has field and direction.
›Example use cases
- Get the latest 10 responses for a specific form
- Get only completed responses
- Filter responses by answer value (e.g. contains "enterprise")
- Get responses within a date range
get_response
Get a single response with all answer data, notes, tags, and associated person info.
responseIdbodystringrequiredThe ID of the response to retrieve.
search_responses
Full-text search across all response data in your environment.
searchTermbodystringrequiredThe text to search for across response data (email, name, answer values, etc.).
formIdbodystringOptionally scope the search to a specific form.
›Example use cases
- Find all responses containing a specific email address
- Search for responses mentioning "enterprise"
- Find all responses from a specific company
Leads
list_leads
List qualified leads with their attributes (email, name, company) and scores.
pagebodynumberPage number for pagination.
limitbodynumberNumber of leads to return per page.
searchbodystringSearch leads by email, name, or company.
sourcebodystringFilter by lead source: "surfaceForm", "htmlForm", "websiteDeAnon", or "webhook".
dateRangebodyobjectFilter leads by creation date range (from, to).
›Example use cases
- List all qualified leads
- Search leads by email or company name
- Filter leads by source (e.g. only website de-anonymization leads)
- Get leads created in a specific date range
get_leads_count
Get total lead counts with optional breakdowns by source or funnel stage.
bySourcebodybooleanBreak down count by lead source (Surface Form, HTML Form, Website De-Anon, Webhook).
byEventTypebodybooleanBreak down count by funnel stage (visited, submitted, completed, meeting booked).
dateRangebodyobjectScope counts to a date range (from, to).
›Example use cases
- Get total count of qualified leads
- Break down leads by source
- Break down leads by funnel stage
- Get lead counts in a date range broken down by source and event type
Analytics
get_form_analytics
Get completion rate and dropoff analysis for a form, including email open rates and top referrer URLs.
formIdbodystringrequiredThe form to analyze.
dateRangebodyobjectScope analytics to a date range (from, to).
›Example use cases
- Get completion rate and dropoff analysis
- See which question has the highest dropoff
- Get email open rates for a form
- Get top referrer URLs
get_daily_form_stats
Get day-by-day response counts for a specific form.
formIdbodystringrequiredThe form to get daily stats for.
dateRangebodyobjectScope to a date range (from, to).
get_daily_stats
Get daily environment-level metrics including visitors, leads, responses, and workflow runs.
dateRangebodyobjectScope to a date range (from, to). Defaults to the last 30 days.
get_lead_source_analytics
Get landing page performance metrics — visitors, form starts, completions, meetings, and conversion rates. Automatically includes comparison with the previous period.
pagebodynumberPage number for pagination.
limitbodynumberNumber of landing pages to return.
searchbodystringSearch landing pages by URL.
urlsbodyarrayFilter to specific URLs.
dateRangebodyobjectScope analytics to a date range (from, to). Previous period comparison is included automatically.
›Example use cases
- See which landing pages have the best conversion rates
- Compare landing page performance with the previous period
- Search landing page analytics by URL
get_user_journey_analytics
Get UTM and traffic source breakdown for a form, including AI traffic sources (ChatGPT, Perplexity, etc.) and click IDs (gclid, fbclid).
formIdbodystringrequiredThe form to analyze.
dateRangebodyobjectScope analytics to a date range (from, to).
›Example use cases
- Get UTM breakdown (source, medium, campaign) for a form
- See AI traffic sources (ChatGPT, Perplexity, etc.)
- See click IDs (gclid, fbclid) for ad attribution
get_conversion_funnel
Get per-URL conversion funnel breakdown: form starts, completed/partial, qualified/disqualified, meetings booked/not booked.
pagebodynumberPage number for pagination.
limitbodynumberNumber of URLs to return.
urlbodystringFilter to a specific landing page URL.
dateRangebodyobjectScope to a date range (from, to).
›Example use cases
- Get the full conversion funnel for the last 7 days
- Get conversion funnel for a specific landing page
- Compare funnel performance across different URLs
get_environment_overview
Get a high-level summary of your environment: total forms, leads, responses, and workflows.
No parameters required.
AI Lead Scoring
get_top_ai_scores
Get top responses/leads ranked by AI score.
limitbodynumberNumber of results to return.
orderbodystringSort order: "desc" for highest scores first, "asc" for lowest.
formIdbodystringScope to a specific form.
minScorebodynumberMinimum AI score threshold.
›Example use cases
- Get the top 10 highest-scored leads
- Get the lowest-scored responses
- Get responses scoring above 80
get_ai_score_stats
Get AI score statistics including average, min, max, and distribution across buckets (0-19, 20-39, 40-59, 60-79, 80-100).
formIdbodystringScope statistics to a specific form.
get_responses_with_ai_scores
Get responses for a form enriched with their AI scores.
formIdbodystringrequiredThe form to get responses for.
sortBybodystringSort by "score" to rank by AI score.
finishedbodybooleanFilter by completion status.
get_leads_with_ai_scores
Get leads ranked by their AI score.
sortBybodystringSort by "score" to rank by AI score.
orderbodystringSort direction: "desc" or "asc".
minScorebodynumberMinimum score threshold.
maxScorebodynumberMaximum score threshold.
›Example use cases
- Get leads ranked by AI score (highest first)
- Get leads scoring between 50 and 80
compare_forms
Compare forms side-by-side by response count, completion rate, and average AI score.
formIdsbodyarrayArray of form IDs to compare. Omit to compare all forms in the environment.
›Example use cases
- Compare all forms by completion rate and AI score
- Compare two specific forms side-by-side
Workflows
list_workflow_runs
List workflow runs with filtering by status, response, lead, or workflow.
pagebodynumberPage number for pagination.
limitbodynumberNumber of runs to return.
sortOrderbodystringSort direction: "asc" or "desc".
responseIdbodystringFilter to runs triggered by a specific response.
leadIdbodystringFilter to runs for a specific lead.
workflowIdbodystringFilter to runs for a specific workflow.
successbodybooleanFilter by outcome: true for successful, false for failed runs.
›Example use cases
- List recent workflow runs
- Get only failed workflow runs
- Get runs triggered by a specific response or lead
get_workflow_run
Get full details of a workflow run including per-step task breakdown, payloads, errors, and timing.
runIdbodystringrequiredThe ID of the workflow run to retrieve.