Skip to content
Back to search
100
MCP live MCP 2026-07-28 streamable-http

Playwright MCP Server

com.furrowforms/furrow-forms

Form backend an agent runs end to end: provision forms, snippets, spam, signed webhooks.

Watch this dependency Share evidence report
Uptime
100.0%
5 direct probes · 30d
Response
785ms
last probe
Tools
29
callable
Resources
8
readable
Prompts
0
available
Score: 100/100
Handshake verified by our own probe.
pass Answers the MCP handshake 50/50
The handshake and the list calls succeeded on the primary URL.
pass Lists tools, resources or prompts 30/30
29 tools, 8 resources, 0 prompts returned.
pass 3 or more catalogue items 10/10
37 items in total; 3 or more earns these points.
pass Describes itself 10/10
88 characters; more than 30 earns these points.

Tools · 29

list_teams

Use to see workspaces this token can act on. A team-scoped frw_ token returns that team only. An operator token or an MCP OAuth login returns every team you belong to — pass team_id on list_clients, c…

update_team

Use to rename a team. Operator tokens (all workspaces) must pass team_id from list_teams. Team-scoped tokens may omit team_id and cannot target another workspace. Do not use this to create another wor…

get_account

Use to read the team's plan, usage this month, limits, expansion_packs, retention_days, branding, and AI spam filter (ai.typesafe_key_set, ai.notify_suspected_spam), and text alerts (sms.configured, p…

update_account

Use to rename the workspace, set branding, configure the AI spam filter, or connect the team's own Twilio account for new-lead text alerts. Pass sms { account_sid, auth_token, from } to save Twilio (a…

create_upgrade_link

Use when a free team is blocked on the 3-project, 100-submission, or one-workspace limit, or when a human should upgrade to yearly ($199/year) so you can keep adding projects, workspaces, and storing …

list_clients

Use to browse clients (companies). Operator tokens (all workspaces) must pass team_id from list_teams. Team-scoped tokens may omit team_id and cannot target another workspace. Do not use to list websi…

get_client

Use to inspect one client. Do not use to list that client's sites — call list_projects with client_id.

create_client

Use to add a client (company) by slug. Idempotent on slug unless strict is true. Operator tokens (all workspaces) must pass team_id from list_teams. Team-scoped tokens may omit team_id and cannot targ…

update_client

Use to rename a client. Do not use this to change domains, Turnstile, or webhooks — call update_project.

archive_client

Use to archive a client. Do not use this as a hard delete. There is no unarchive tool in v1.

move_client

Use when the human asks to move a client (company) and all its projects, forms, submissions, and files into another workspace they own. Public keys, snippets, inbox links, and webhook secrets stay the…

list_projects

Use to browse websites. Pass client_id to list one client's sites (team is inferred). Without client_id, Operator tokens (all workspaces) must pass team_id from list_teams. Team-scoped tokens may omit…

get_project

Use to inspect one website's settings, domains, webhook URL, email templates, upload policy, plan, usage this month, limits, retention_days, and branding. Returns stored values plus resolved.email. Se…

list_forms

Use to list forms. Pass project_id for one website or client_id for one company (team is inferred). Otherwise Operator tokens (all workspaces) must pass team_id from list_teams. Team-scoped tokens may…

get_form

Use to read a form plus resolved and inherited settings, including resolved.email and resolved.uploads. files_url is the private inbox folder for this form under the project inbox (do not put it in a …

list_submissions

Use to inspect recent posts. Available on free and yearly. Pass project_id or form_id to infer the team; omit both and Operator tokens (all workspaces) must pass team_id from list_teams. Team-scoped t…

get_submission

Use to read one stored submission by id, including file metadata and files_url (the form inbox). Do not use this for live submit tests — POST to /s/:publicKey instead. Do not expect signed bucket URLs…

get_snippet

Use after the form exists to get copy-paste html, astro, or next code that posts to /s/:publicKey. Do not invent a submit URL — this tool returns it. Snippets are single-value inputs; write checkbox g…

create_project

Use to add one website under an existing client_id. Idempotent on slug unless strict is true. Free accounts are limited to 3 active (non-archived) projects; yearly is unlimited. If create_project retu…

update_project

Use to patch website settings. Nested email sets notification templates: email.subject, email.from_name, email.intro, email.footer_mode (furrow | minimal | off), email.include_meta. Optional branding …

rotate_project_inbox

Use when a project's private inbox URL may have leaked. Issues a new inbox key; every previously shared inbox link stops working immediately. get_project returns the new files_url.

archive_project

Use to archive a website. Archived projects reject public submit. Do not use this as a hard delete. There is no unarchive tool in v1.

create_form

Use to add a form under an existing project_id. Idempotent on slug unless strict is true. Overrides are nullable; omit them to inherit project notify emails, webhook, redirect, require_turnstile, and …

update_form

Use to patch form overrides. Pass null on an override to inherit again. Set email.subject or email.intro to override project notification copy for this form only; from_name, footer_mode, and include_m…

archive_form

Use to archive a form so public submit returns 404. Do not use this as a hard delete.

upsert_project_webhook

Use to set or replace the project webhook URL. Available on free and yearly. A signing secret is generated once if the project has none. Forms inherit this unless webhook_url_override is set. Do not u…

test_webhook

Use to POST a signed webhook.test event to the project's webhook URL. Available on free and yearly. Do not use this to inspect past deliveries — that is REST GET /api/projects/:id/webhook-deliveries. …

test_sms

Use after setting notify_phones to send one test text to each of the project's numbers through the team's Twilio account. Returns per-number results with Twilio's error when one fails. Fails if the te…

bootstrap_site

Use this to stand up a client, one website (project), and its forms in a single call. Before calling, ask the human who should receive notification emails (notify_emails has no default; empty means no…

Resources · 8

workflow

How to provision a client site's forms without a UI.

furrow://docs/workflow
register

How a teammate or agent creates an account and receives a frw_ token without opening the dashboard.

furrow://docs/register
reserved-fields

Fields stripped from stored submissions.

furrow://docs/reserved-fields
multi-value-fields

How to name checkbox groups, multi-selects, and JSON arrays so every selected value is stored.

furrow://docs/multi-value-fields
submit-success

How to show a thank-you after a successful POST /s/:publicKey (redirect page or on-page message).

furrow://docs/submit-success
testing

How to verify a form yourself, then hand the human a short no-config checklist. No env vars.

furrow://docs/testing
text-alerts

Step-by-step guide for walking a human through Twilio signup, US carrier registration, connecting Twilio, choosing numbers, and test_sms.

furrow://docs/text-alerts
file-uploads

How to enable project uploads, post files, and use the form inbox instead of signed URLs.

furrow://docs/file-uploads

How to use

Claude Desktop or claude.ai: add a custom connector (Customize → Connectors; on Team and Enterprise plans an owner adds it under Organization settings → Connectors) with this server URL: https://api.furrowforms.com/mcp

Cursor or Cline: add to your MCP config:

{
  "mcpServers": {
    "playwright_mcp_server": {
      "url": "https://api.furrowforms.com/mcp",
      "transport": "streamable-http"
    }
  }
}