ROASFormDocs

MCP server

Connect Claude, ChatGPT, Cursor or VS Code to your ROASForm account and ask about your forms, analytics and leads.

The ROASForm MCP server lets an AI app read your ROASForm account. Ask things like "How did my roofing forms do last week?", "Which question loses the most people?" or "Find the lead jane@example.com and tell me if they booked."

It is read-only: it can't change anything.

MCP URL: https://mcp.roasform.com/mcp

You can also copy it in the dashboard: click your name in the top right corner, open Profile Settings and find Connected AI apps.

Connect

Every app opens ROASForm in your browser. Sign in, check the app name and where it will send you back, then click Allow.

If the app sends you back somewhere other than claude.ai, claude.com, chatgpt.com or your own computer, the page says ROASForm hasn't verified it. Allow it only if you started connecting it yourself and you trust that address.

Claude (web, desktop and mobile)

  1. Open Settings > Connectors and choose Add custom connector.
  2. Paste the MCP URL and click Connect.

Works on every Claude plan. The Free plan allows one custom connector.

ChatGPT

Custom MCP servers need developer mode, on the web. OpenAI lists Pro (read-only use) and Business, Enterprise and Edu plans. Turn on developer mode in ChatGPT's settings, then add a connector with the MCP URL.

Claude Code

claude mcp add --transport http roasform https://mcp.roasform.com/mcp

Then run /mcp in Claude Code to sign in.

Cursor

Add this to ~/.cursor/mcp.json (or .cursor/mcp.json in a project):

{
  "mcpServers": {
    "roasform": { "url": "https://mcp.roasform.com/mcp" }
  }
}

VS Code

Add this to .vscode/mcp.json:

{
  "servers": {
    "roasform": { "type": "http", "url": "https://mcp.roasform.com/mcp" }
  }
}

What it can read

ToolWhat it answers
list_subaccountsThe subaccounts you can open
list_formsForms with status, folder, live link and all-time numbers
get_analyticsVisitors, starts, completions, leads, qualified leads, bookings, rates, change against the previous period, trend and drop-off per question
search_leadsFind leads by name, email, phone, company, form, qualification, booking, tags, UTM values or day
get_leadOne lead's answers, UTM data, timeline, bookings and CRM sync status
list_integration_logsGHL, Calendly and Meta Conversions API delivery results from the last 90 days, by lead, form, type or day
list_pending_jobsA lead's CRM syncs, webhooks and new-lead emails that are still queued or gave up
check_integrationsWhether GHL, Calendly and your webhooks are connected and working, how many forms have a Meta token saved, and the latest results
diagnose_leadEverything that happened to one lead after it came in, in one answer
get_accountYour monthly submission count and payment grace period, subaccounts in use and allowed for agency admins, plus plan and billing for the account owner
get_account_snapshotA health check of the whole account, subaccount by subaccount
get_calendar_setupA form's booking steps: GHL or Calendly, which calendar, its last health check and the connection
list_appointmentsBookings by form, lead, status or the day the call is scheduled for
get_appointmentOne booking in your timezone and the lead's, with what GHL or Calendly answered
diagnose_calendarA form's booking problems from what ROASForm stores: calendar health, connection, failed and stuck bookings (it can't see open times in GHL or Calendly)
get_formA form as the builder shows it: questions in order, answer choices, scoring points, logic rules, endings and score ranges
get_form_integrationsWhat happens to a form's leads: CRM selection and field mappings, tags, webhooks, Meta pixel and emails
explain_lead_outcomeA lead's ending, qualification and score next to its points per question and the form's rules (which rule picked the ending isn't recorded; on a form X-Ray Finance scores, only the answers' part of the score)
get_embed_codeA form's share link and its default embed code
diagnose_embedWhy an embedded form may not show: publishing, the submission limit, visitor blocks, recent views and the pages it was seen on
get_tracking_setupEach form's Meta pixel, Conversions API and UTM tracking, with the last 30 days of server deliveries to Meta
list_plansROASForm's plans with current prices and limits
list_teamWho can use a subaccount: members, roles and open invites (the agency team for agency members)
get_subaccountA subaccount's status, counts and email check settings
list_blocked_entriesThe block list: emails, domains, countries, IP addresses and fingerprints (IP and fingerprint values and their notes are never shown)
get_notification_settingsEach form's new-submission emails and summary reports
list_foldersThe form folder tree with form counts
list_webhooksWebhooks with their events, forms, status and recent results (never the URL or secret)
list_webhook_deliveriesWebhook delivery attempts with their result and retry state (the last 30 days unless you give dates)
get_webhook_payload_sampleWhat a form's webhook sends for an event, with placeholder values
list_partial_leadsUnfinished submissions, as the dashboard lists them, and the contact when one is linked
get_submissionOne submission with every answer, its ending, tags, booking and UTM data
list_tagsThe tags on contacts (with counts), submissions and bookings
count_leadsHow many contacts match filters such as tags, UTM values, qualification or creation day
find_duplicatesOther leads with the same email (any letter case) or phone
searchFind subaccounts and forms by name across everything the connection can read, or forms and leads inside one subaccount
get_dashboardThe dashboard home page: all-time totals, the last 7 days, top forms and the next bookings
get_question_answersHow one question was answered, as the Question Breakdown table shows it
get_answer_summaryThe saved AI summary of a name or text question's answers (never generates one)
get_split_testSplit tests, and one test's numbers per variant
get_campaign_breakdownSubmissions, leads, qualified leads and bookings split by a UTM parameter
get_email_checksThe email verification checks Settings lists (never a visitor's IP)
check_emailThe stored verification result for one address (never runs a new check)
get_onboarding_callThe agency's setup call with the ROASForm team
list_ghl_fieldsThe GHL contact fields the CRM mapping offers (live from GHL), and question mappings whose field is gone
check_calendar_slotsThe free times a form's booking step offers (live from GHL or Calendly)
list_connected_calendarsThe GHL calendars or Calendly event types a booking step can use (live), and which steps use them
diagnose_formOne form's check-up in one call: every note the per-area tools make, plus recent failed booking calls and Meta sends
search_helpROASForm help center articles for a how-to question (the search words go to the help center provider)

The AI app sees the subaccounts you can open in the dashboard, except locked and archived ones, and plan and billing details only if you can see the Billing page. Analytics use whole UTC days, like the dashboard.

It never returns IP addresses, browser fingerprints, Meta cookie ids, ad click ids, X-Ray data, integration credentials, webhook URLs, invoices, payment methods or links to uploaded files (it shows their file names).

Tools marked live ask GHL or Calendly at that moment, using your saved connection. They never change anything in ROASForm, GHL or Calendly, and ROASForm allows about 6 of these requests a minute per subaccount.

Ready-made prompts

AI apps that show MCP prompts offer these starting points: Check my account, What happened to a lead, Check a form, Fix booking problems, Weekly report and Review campaigns. Each one tells the AI which of the tools above to use.

Good to know

  • Lead answers are typed by the people who fill in your forms. The AI app gets them as data; treat anything they say as a lead's words, not as instructions.
  • The data goes to the AI app you connect, under that app's terms.
  • A connected app can make about 120 calls a minute. Past that, ROASForm answers "Too many requests" until the minute is up.

Disconnect

Click your name in the top right corner of the dashboard, open Profile Settings and click Disconnect next to the app under Connected AI apps. It loses access at once. Changing, setting or resetting your password disconnects every AI app too.