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)
- Open Settings > Connectors and choose Add custom connector.
- 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/mcpThen 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
| Tool | What it answers |
|---|---|
list_subaccounts | The subaccounts you can open |
list_forms | Forms with status, folder, live link and all-time numbers |
get_analytics | Visitors, starts, completions, leads, qualified leads, bookings, rates, change against the previous period, trend and drop-off per question |
search_leads | Find leads by name, email, phone, company, form, qualification, booking, tags, UTM values or day |
get_lead | One lead's answers, UTM data, timeline, bookings and CRM sync status |
list_integration_logs | GHL, Calendly and Meta Conversions API delivery results from the last 90 days, by lead, form, type or day |
list_pending_jobs | A lead's CRM syncs, webhooks and new-lead emails that are still queued or gave up |
check_integrations | Whether GHL, Calendly and your webhooks are connected and working, how many forms have a Meta token saved, and the latest results |
diagnose_lead | Everything that happened to one lead after it came in, in one answer |
get_account | Your 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_snapshot | A health check of the whole account, subaccount by subaccount |
get_calendar_setup | A form's booking steps: GHL or Calendly, which calendar, its last health check and the connection |
list_appointments | Bookings by form, lead, status or the day the call is scheduled for |
get_appointment | One booking in your timezone and the lead's, with what GHL or Calendly answered |
diagnose_calendar | A 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_form | A form as the builder shows it: questions in order, answer choices, scoring points, logic rules, endings and score ranges |
get_form_integrations | What happens to a form's leads: CRM selection and field mappings, tags, webhooks, Meta pixel and emails |
explain_lead_outcome | A 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_code | A form's share link and its default embed code |
diagnose_embed | Why an embedded form may not show: publishing, the submission limit, visitor blocks, recent views and the pages it was seen on |
get_tracking_setup | Each form's Meta pixel, Conversions API and UTM tracking, with the last 30 days of server deliveries to Meta |
list_plans | ROASForm's plans with current prices and limits |
list_team | Who can use a subaccount: members, roles and open invites (the agency team for agency members) |
get_subaccount | A subaccount's status, counts and email check settings |
list_blocked_entries | The block list: emails, domains, countries, IP addresses and fingerprints (IP and fingerprint values and their notes are never shown) |
get_notification_settings | Each form's new-submission emails and summary reports |
list_folders | The form folder tree with form counts |
list_webhooks | Webhooks with their events, forms, status and recent results (never the URL or secret) |
list_webhook_deliveries | Webhook delivery attempts with their result and retry state (the last 30 days unless you give dates) |
get_webhook_payload_sample | What a form's webhook sends for an event, with placeholder values |
list_partial_leads | Unfinished submissions, as the dashboard lists them, and the contact when one is linked |
get_submission | One submission with every answer, its ending, tags, booking and UTM data |
list_tags | The tags on contacts (with counts), submissions and bookings |
count_leads | How many contacts match filters such as tags, UTM values, qualification or creation day |
find_duplicates | Other leads with the same email (any letter case) or phone |
search | Find subaccounts and forms by name across everything the connection can read, or forms and leads inside one subaccount |
get_dashboard | The dashboard home page: all-time totals, the last 7 days, top forms and the next bookings |
get_question_answers | How one question was answered, as the Question Breakdown table shows it |
get_answer_summary | The saved AI summary of a name or text question's answers (never generates one) |
get_split_test | Split tests, and one test's numbers per variant |
get_campaign_breakdown | Submissions, leads, qualified leads and bookings split by a UTM parameter |
get_email_checks | The email verification checks Settings lists (never a visitor's IP) |
check_email | The stored verification result for one address (never runs a new check) |
get_onboarding_call | The agency's setup call with the ROASForm team |
list_ghl_fields | The GHL contact fields the CRM mapping offers (live from GHL), and question mappings whose field is gone |
check_calendar_slots | The free times a form's booking step offers (live from GHL or Calendly) |
list_connected_calendars | The GHL calendars or Calendly event types a booking step can use (live), and which steps use them |
diagnose_form | One form's check-up in one call: every note the per-area tools make, plus recent failed booking calls and Meta sends |
search_help | ROASForm 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.

