Furrow Forms
Form backend an agent runs end to end: provision forms, snippets, spam, signed webhooks.
Connect it
Settings → Connectors → Add custom connector
URL: https://api.furrowforms.com/mcpSettings → Apps & Connectors → Advanced → Developer mode
Create connector with URL: https://api.furrowforms.com/mcp{
"mcpServers": {
"furrow-forms": {
"url": "https://api.furrowforms.com/mcp",
"headers": {
"Authorization": "<YOUR_AUTHORIZATION>"
}
}
}
}claude mcp add --transport http furrow-forms https://api.furrowforms.com/mcp --header "Authorization: <value>"{
"servers": {
"furrow-forms": {
"type": "http",
"url": "https://api.furrowforms.com/mcp",
"headers": {
"Authorization": "<YOUR_AUTHORIZATION>"
}
}
}
}{
"mcpServers": {
"furrow-forms": {
"command": "npx",
"args": [
"-y",
"@furrowforms/mcp@1.0.1"
],
"env": {
"FURROW_TOKEN": "<value>"
}
}
}
}claude mcp add furrow-forms -- npx -y @furrowforms/mcp@1.0.127 tools, verified live
list_teamsread-onlyUse 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, create_client, and bootstrap_site. Creating another workspace is dashboard-only after signing in and requires a yearly plan; free accounts stay on one team. Do not use this to list clients â call l
update_teamUse 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 workspace â that is dashboard-only and requires yearly. For plan, usage, retention, and branding, call get_account / update_account. Do not use this to change clients or projects.
get_accountread-onlyUse 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). The TypeSafe key itself is never returned. Plans are capacity, not a feature ladder. Free: one workspace, 100 clean submissions/month pooled on the team, 3 active (non-archived) projects, 30-day submission retention, and email.footer_
update_accountUse to rename the workspace, set branding, or configure the AI spam filter. Pass ai.typesafe_api_key to save this team's TypeSafe key (null clears it; the key is write-only). ai.notify_suspected_spam (default true) emails notify addresses with a Potential spam label when Jev flags a submission; no webhook is sent either way. Heuristic spam stays silent. Free accounts cannot set branding.mode or em
create_upgrade_linkUse 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 new submissions. Returns a Stripe Checkout URL to hand the human. If the team is already yearly, omit product to get a Stripe Customer Portal URL, or pass product=expansion for a $99/year pack that ad
list_clientsread-onlyUse 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 websites â call list_projects with client_id. Archived clients are hidden unless status=all or archived.
get_clientread-onlyUse to inspect one client. Do not use to list that client's sites â call list_projects with client_id.
create_clientUse 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 target another workspace. Prefer bootstrap_site when also creating a website and forms. Do not put Turnstile or webhooks on a client â those live on the project.
update_clientUse to rename a client. Do not use this to change domains, Turnstile, or webhooks â call update_project.
archive_clientcan modifyUse to archive a client. Do not use this as a hard delete. There is no unarchive tool in v1.
list_projectsread-onlyUse 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 team_id and cannot target another workspace. Do not use to read one project's settings â call get_project. Archived projects are hidden unless status=all or archived.
get_projectread-onlyUse 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. Secrets are never returned. Plans are capacity, not a feature ladder. Free: one workspace, 100 clean submissions/month pooled on the team, 3 active (non-archived) projects, 30-day submission retention,
list_formsread-onlyUse 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 omit team_id and cannot target another workspace. Do not use to read resolved inheritance â call get_form.
get_formread-onlyUse 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 public snippet). Turnstile always inherits from the project (inherited.turnstile is true). Form webhook_url_override is nullable; null means inherit the project webhook. Forms may override email.subje
list_submissionsread-onlyUse 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 tokens may omit team_id and cannot target another workspace. Free teams prune submissions after 30 days; yearly after 730 days. Do not use to read a single submission â call get_submission.
get_submissionread-onlyUse 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 â download from the inbox.
get_snippetread-onlyUse 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 groups and multi-selects yourself. Checkbox groups, select multiple, and other multi-value HTML fields must use a [] suffix on the name (name="services[]") or only the last checked value is stored. P
create_projectUse 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 returns plan_limit, call create_upgrade_link and hand the human the Stripe URL. Prefer bootstrap_site when the client does not exist yet. Optional email sets notification templates (subject, from_name, in
update_projectUse 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 updates the team (mode furrow | off | agency on yearly only; ignored on free except furrow). Set uploads_enabled and upload_allowed_types here â forms inherit them. Email templates support {{project
rotate_project_inboxcan modifyUse 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_projectcan modifyUse 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_formUse 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 email templates. Pass email.subject / email.intro to override notification copy for this form only. Pass webhook_url_override to send this form to a different URL. Field contract labels (label) are us
update_formUse 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_meta stay on the project. Email templates support {{project.name}}, {{project.slug}}, {{form.name}}, {{form.slug}}, {{count}} (1-based clean submissions on this form, including the current one), and an
archive_formcan modifyUse to archive a form so public submit returns 404. Do not use this as a hard delete.
upsert_project_webhookUse 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 use this for a one-off delivery â call test_webhook.
test_webhookUse 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. Fails if no webhook URL and secret are set.
bootstrap_siteUse this to stand up a client, one website (project), and its forms in a single call. name/slug are the client; optional project_name/project_slug default to the same. Free accounts cannot create a fourth active project â call create_upgrade_link if bootstrap_site returns plan_limit. Operator tokens (all workspaces) must pass team_id from list_teams. Team-scoped tokens may omit team_id and canno
Alternatives in AI & Agents
Compare →
Competitor Tracking Trends MCPB
Brand and competitor trend volume over time, with growth signals. Free key at trendsmcp.ai
Spotify Trends MCPB
Spotify podcast and artist trends over time, with growth metrics. Free key at trendsmcp.ai
ASAstrocalB
AI-native scheduling: check availability, book meetings, cancel and reschedule via MCP
SHSelf Hosted AiB
Engineering log of self-hosted AI on NVIDIA DGX Spark (GB10/SM121A). 60+ articles indexed.
BOBowmarkB
Do things on live websites: prices, availability, quotes, bookings, anything behind a form or login.
SlopItB
Instant blogs for AI agents: sign up, publish markdown posts, get a live public URL in seconds.