MCP Server

Tool Reference

Complete reference for all 110 MCP tools available in the Surface MCP server

The Surface MCP server exposes 110 tools organized into 14 families. All tools are automatically scoped to your environment via your API key or OAuth connection.

A new connection loads the default forms bundle (the Forms, Responses, and AI Lead Scoring tools below). Add ?tools= to the server URL to load other families; see Tool Bundles.

Two things to know about the write tools:

  • Form edits save a draft. Nothing a visitor sees changes until publish_form promotes the draft to live.
  • Schemas are discoverable at runtime. list_component_types and describe_component_type document every buildable component, and get_tool_schema returns the full JSON Schema for the heavy authoring tools, so your assistant never has to guess a payload shape.

Forms

Create, edit, style, route, and publish forms.

Use CaseToolKey Parameters
List all my forms with response countslist_formspage, limit, search, sortBy, sortOrder, dateRange
View a specific form's full configuration, questions, and stylesget_formformId, source: "draft" | "live" (default draft)
Discover which components can go on a form steplist_component_typesNone
Learn a component type's exact params (JSON schema + example)describe_component_typetype
See a form's step/component outline with edit addressesget_form_structureformId, source: "draft" | "live", include: ["params"] for full component content
Get a plain-English narrative of a form to relay to the user verbatimsummarize_formformId, source: "draft" | "live" (default draft)
Get the full JSON Schema for the heavy authoring toolsget_tool_schematool
Add a component to a step of an existing formadd_componentformId, stepId, type, params, placement
Change a component's question, choices, or required flagupdate_componentformId, stepId, row, column, params, required
Remove a component from a stepremove_componentformId, stepId, row, column
Move or reorder a component (same step or across steps)move_componentformId, from, to
Add a step (page) to a form, optionally with componentsadd_stepformId, name, index, endStepKind, components
Rename a step, mark it as thank-you/disqualified, or set a redirectupdate_stepformId, stepId, name, endStepKind, redirection
Remove a step from a formremove_stepformId, stepId
Reorder a form's stepsmove_stepformId, stepId, toIndex
Browse Surface form templates (styling sources for create_form)list_form_templateskind, search
Find a Surface scheduler's id/booking link for a scheduler steplist_schedulersincludeInactive (default: bookable only)
Restyle a form with typed tokens (page fill, panes, layout, progress bar)update_form_stylesformId, tokens
Restyle one component type (button colors, input borders, option styles)update_component_stylesformId, componentType, styles
Style the WHOLE form in one call (palette, template, or another form's look)apply_form_themeformId, one of palette / templateId / sourceFormId
Branch a step on an answer, URL param, or known-lead signalset_step_routingformId, stepId, routing (null clears)
Apply several edits atomically in ONE call (all-or-nothing)batch_editformId, operations (ordered { op, ...params } array)
Discover marketing (story) pane component typeslist_marketing_component_typesNone
Set the marketing pane's headline, bullets, testimonial, logos, FAQupdate_marketing_paneformId, stepId (optional), components, replace
Edit ONE marketing component's text in place, keeping its stylingupdate_marketing_componentformId, stepId (optional), index, params, expectedType
Update a form's SEO metadata, tracking ids, language, or partial trackingupdate_form_settingsformId, settings, confirm
Check a form is valid: references, dead ends, reachability, routing graphvalidate_formformId (draft/live) or config
Dry-run a visitor's answers and see the exact path and ending they reachsimulate_responseformId, answers: { questionId: value }, source: "draft" | "live"
Critique a form blueprint before building (gaps, open questions, readiness)plan_formrequest, styleIntent, steps ({ purpose, components?, routingIntent?, routing? }); loop until readyForCreate
Create a new form with steps, routing, and a styling sourcecreate_formname, steps (components as { type, params }), optional styling source (sourceFormId / templateId, designTokens alone or as overrides on either; omit for the stock theme), copyMarketing (default true), confirmed (first call echoes the plan; true creates, as a draft unless publishImmediately: true)
Publish a form so visitors see the latest draftpublish_formformId

Responses

Use CaseToolKey Parameters
Get latest responses for a specific formlist_responsesformId, limit
Get responses for form X in a date rangelist_responsesformId, dateRange: { from, to }
Get only completed (or only partial/abandoned) responseslist_responsesformId, finished: true | false
Filter responses by answer value (e.g. contains "enterprise")list_responsesformId, filter: [{ type, filter, operator: "contains" }]
Full-text search across response datalist_responsesformId, search: [{ type, value }]
Get a single response with all answer data, notes, tags, and person infoget_responseresponseId

Leads

Use CaseToolKey Parameters
List all qualified leads with attributes (email, name, company)list_leadspage, limit, search, dateRange
Filter leads by source (form, website de-anon, webhook, HTML form)list_leadssource: "surfaceForm" | "htmlForm" | "websiteDeAnon" | "webhook"
Get total count of qualified leadsget_leads_countNone
Break down lead count by sourceget_leads_countbySource: true
Break down lead count by funnel stage (visited, submitted, completed, meeting booked)get_leads_countbyEventType: true
Import leads into the environmentimport_leadsleads

Analytics

Use CaseToolKey Parameters
Get completion rate, dropoff analysis, email open rates, and top referrers for a formget_form_analyticsformId, optionally dateRange
Get day-by-day response counts for a formget_daily_form_statsformId, optionally dateRange
Get daily environment-level metrics (visitors, leads, responses, workflow runs)get_daily_statsoptionally dateRange (defaults to last 30 days)
See landing page performance (visitors, form starts, completions, meetings, conversion rate)get_lead_source_analyticspage, limit, search, urls, dateRange
Get UTM and traffic source breakdown for a form (source, medium, campaign, AI referrers, click IDs)get_user_journey_analyticsformId, optionally dateRange
Get per-URL conversion funnel (form starts → completed/partial → qualified/disqualified → meetings booked/not booked)get_conversion_funneloptionally dateRange, page, limit, url
Get a high-level overview of the environment (total forms, leads, responses, workflows)get_environment_overviewNone

AI Lead Scoring

Use CaseToolKey Parameters
Get the top (or bottom) responses and leads ranked by AI lead scoreget_top_ai_scoreslimit, order, formId, minScore
Get AI score statistics (average, min, max, distribution buckets)get_ai_score_statsoptionally formId
Get responses for a form sorted by AI scoreget_responses_with_ai_scoresformId, sortBy: "score", finished
Get leads ranked by AI scoreget_leads_with_ai_scoressortBy: "score", minScore, maxScore
Find responses containing a specific email, name, or answer textsearch_responsessearchTerm, optionally formId
Compare forms by response count, completion rate, and average AI scorecompare_formsoptionally formIds (omit to compare all)

Workflows

Use CaseToolKey Parameters
List recent workflow runs, filtered by response, lead, workflow, or successlist_workflow_runspage, limit, sortOrder, responseId, leadId, workflowId, success
Get full details of a workflow run (per-step tasks, payloads, errors, timing)get_workflow_runrunId

AI Visibility

Use CaseToolKey Parameters
List AEO/GEO answer-engine visibility reports (with PDF/DOCX links)list_ai_visibility_reportsstatus, limit
Get a single visibility report's status and download linksget_ai_visibility_reportreportId
List all site profiles being trackedlist_ai_visibility_profilesNone
Get profile context, positioning, competitors, topics, and latest per-model scoresget_ai_visibility_profileprofileId
List tracked prompts with per-prompt visibility statslist_tracked_promptsprofileId, category, topicClusterId
Audit longitudinal prompt/model/competitor evidenceget_tracked_prompt_historyprofileId, optional prompt/category/model/date filters
Get daily visibility/coverage, model scores, and raw competitor mention ratesget_prompt_visibility_scoresprofileId, startDate, endDate
See which domains AI models cite when answering promptslist_cited_sourcesprofileId
Check if a scan is running, queued, or idleget_scan_statusprofileId
Trigger a new AI visibility scantrigger_scanprofileId
Add a custom tracked prompt to a profilecreate_tracked_promptprofileId, text, categoryId

Content Analytics

Use CaseToolKey Parameters
List all tracked URL patternslist_content_patternsNone
Get content performance dashboard with metrics and deltasget_content_analyticsdateRange, compare
See AI traffic source breakdown (ChatGPT, Gemini, Claude, etc.)get_ai_traffic_sourcesdateRange
Add a URL pattern to trackcreate_content_patternpattern
Bulk import URL patterns (up to 500)bulk_import_patternspatterns
Auto-discover sub-pages from a prefix via sitemap crawldiscover_content_patternspattern (must end with *)
Remove a tracked patterndelete_content_patternpatternId

Content Review

Use CaseToolKey Parameters
List blogs with optional state/search filteringlist_blogsstate, search, page, limit
Get full blog details (title, state, author, blocks)get_blogblogId
List all version summaries for a blogget_blog_versionsblogId
Get the rendered markdown content of a specific versionget_blog_version_contentblogId, versionId
List all content reviewers in the environmentlist_reviewersNone
Create a new blog from pasted markdownpaste_blogtitle, markdown
Update a blog's titleupdate_blog_titleblogId, title
Assign or clear a strategy cluster for a blogassign_blog_clusterblogId, clusterId
Quick-approve a blog's latest versionquick_approve_blogblogId
Request changes on a blog (must be IN_REVIEW)request_blog_changesblogId, feedback
Publish or unpublish an approved blogtoggle_blog_publishblogId
Archive or unarchive a blog (soft-delete)archive_blogblogId

CMS

Use CaseToolKey Parameters
List all content types with fields and entry countscms_list_content_typesNone
Get a single content type by id or apiNamecms_get_content_typecontentTypeId or apiName
List entries with optional filterscms_list_entriescontentTypeId, status, search
Get a single entry with draft and published datacms_get_entryentryId
Get an entry by content type and slugcms_get_entry_by_slugapiName, slug
List revision history for an entrycms_list_entry_revisionsentryId
List uploaded assets (images/files)cms_list_assetspage, limit
Get a single asset with signed download URLcms_get_assetassetId
Get a presigned upload URL (step 1 of upload)cms_create_asset_upload_urlfilename, mimeType, sizeBytes
Confirm an asset upload (step 2 of upload)cms_confirm_asset_uploadstorageKey, filename, mimeType, sizeBytes
Create a new content typecms_create_content_typedisplayName, apiName, kind
Update a content type's metadatacms_update_content_typecontentTypeId, displayName
Delete a content type and all entriescms_delete_content_typecontentTypeId, confirm
Add a field to a content typecms_add_fieldcontentTypeId, displayName, type
Update a field's propertiescms_update_fieldcontentTypeId, fieldId
Remove a field from a content typecms_remove_fieldcontentTypeId, fieldId, confirm
Reorder fields in a content typecms_reorder_fieldscontentTypeId, fieldIds
Create a new CMS entrycms_create_entrycontentTypeId, data
Update an entry's data or slugcms_update_entryentryId, data
Publish an entrycms_publish_entryentryId
Unpublish an entry (back to draft)cms_unpublish_entryentryId
Archive an entrycms_archive_entryentryId
Delete an entry and its revision historycms_delete_entryentryId, confirm
Schedule an entry to auto-publish at a future timecms_schedule_entryentryId, scheduledFor
Cancel a scheduled publish (back to draft)cms_unschedule_entryentryId

Environment & Admin

Use CaseToolKey Parameters
Get team info, members, subscription, and billingget_team_infoNone
Create a new environment with a trialcreate_environment_with_trialname
Invite a new member by emailinvite_memberemail, role
Submit feedback about MCP toolssubmit_feedbacktype, message

On this page