mcpserver.lol
registry/furrow-forms
Connection check verified live · 20h ago

furrow-forms

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

Tools 27
GitHub stars 1
Installs / wk
Licence MIT
Transport streamable-http, stdio
Last checked 20h ago

Tools & capabilities

27 tools

Read from the running server on 20h ago.

archive_client can modify data client_id*
Use to archive a client. Do not use this as a hard delete. There is no unarchive tool in v1.
archive_form can modify data form_id*
Use to archive a form so public submit returns 404. Do not use this as a hard delete.
archive_project can modify data project_id*
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.
bootstrap_site name*slug*emailformsteam_idfrom_name +18
Use 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 account…
create_client name*slug*strictteam_id
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 tea…
create_form name*slug*emailstrictproject_id*field_contract +5
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, req…
create_project name*slug*emailstrictclient_id*from_name +16
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_upgrade_link productteam_id
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, work…
get_account read-only team_id
Use to read the team's plan, usage this month, limits, expansion_packs, retention_days, and branding. Plans are capacity, not a feature ladder. Free: one workspace, 100 clean submi…
get_client read-only client_id*
Use to inspect one client. Do not use to list that client's sites — call list_projects with client_id.
get_form read-only form_id*
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…
get_project read-only project_id*
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 plu…
get_snippet read-only form_id*framework*
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 inpu…
get_submission read-only submission_id*
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 expec…
list_clients read-only limitcursorstatusteam_id
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 n…
list_forms read-only limitcursorstatusteam_idclient_idproject_id
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. Te…
list_projects read-only limitcursorstatusteam_idclient_id
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-sc…
list_submissions read-only spamlimitsincecursorform_idteam_id +1
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_…
list_teams read-only
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_i…
rotate_project_inbox can modify data project_id*
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.
test_webhook project_id*
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/…
update_account nameteam_idbranding
Use to rename the workspace or set branding. Free accounts cannot set branding.mode or email.footer_mode to anything but furrow — those writes are ignored. Yearly may set branding.…
update_client nameclient_id*
Use to rename a client. Do not use this to change domains, Turnstile, or webhooks — call update_project.
update_form nameemailform_id*field_contractwebhook_url_overrideredirect_url_override +3
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…
update_project nameemailbrandingfrom_nameproject_id*webhook_url +15
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…
update_team name*team_id
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 t…
upsert_project_webhook project_id*webhook_url*webhook_secret
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_overr…