formward-mcp
OfficialProvides paste-ready form markup snippets for Astro projects via get_form_snippet.
Provides paste-ready form markup snippets for Nuxt projects via get_form_snippet.
Provides paste-ready form markup snippets for React projects via get_form_snippet.
Provides paste-ready form markup snippets for Shopify via get_form_snippet.
Provides paste-ready form markup snippets for Svelte projects via get_form_snippet.
Provides paste-ready form markup snippets for Webflow via get_form_snippet.
@formward/mcp
Formward as an MCP server for your coding agent. Pair once from the Formward dashboard, then let Claude Code, Codex, Cursor or any other MCP client create forms, fetch the paste-ready snippet, add webhooks and confirm a test submission against your workspace.
Formward is a form backend hosted in the EU (Sweden). This package talks to it over HTTPS with a key that is pinned to one workspace and can never read what your visitors submitted.
Pairing
In Formward, open Dashboard > Connected agents and create a pairing code. Codes are single use and expire after 10 minutes.
In your project, run:
npx @formward/mcp pair ABCD-EFGHApprove the claim in the dashboard. The CLI stores the key for your user (never printed) and shows how to register the server:
claude mcp add formward -- npx -y @formward/mcp # Claude Code
codex mcp add formward -- npx -y @formward/mcp # Codex CLI{ "mcpServers": { "formward": { "command": "npx", "args": ["-y", "@formward/mcp"] } } }The key lives for 30 days and can be revoked in the dashboard at any time. Pairing works on every plan, including Free; the forms the agent creates follow your plan's limits like any other form.
Related MCP server: formslist-mcp
What the agent can do
Tool | What it does |
| Forms in the workspace with endpoint and hosted page URLs |
| Field lists of the built-in templates |
| Create a form from fields or a template, optionally with a hosted page |
| Paste-ready markup for html, react, vue, svelte, astro, nextjs, nuxt, tailwind, shopify or webflow |
| Submission counts and the time of the latest one, nothing else |
| Webhook destinations (Professional plan and above) |
| Posts one test submission to the form endpoint from your machine |
The agent never sees submission content. After a test it checks the count with get_form_stats; you read the message in the dashboard.
Before pairing, the server still starts: it answers initialize and tools/list from a built-in copy of the tool list, and every tool call returns the pairing instructions. So you can register it in your agent first and pair when the owner has a code ready.
Commands
formward-mcp pair <CODE> [--name "Agent name"] claim a code and wait for approval
formward-mcp serve MCP over stdio (what the agent runs)
formward-mcp status paired workspace and key expiry
formward-mcp logout forget the stored keyEnvironment: FORMWARD_API_KEY uses a key directly (CI, or a classic Professional API key) and takes precedence over a paired key, FORMWARD_API_URL points at another API origin, FORMWARD_AGENT_NAME sets the name the workspace owner sees.
A running server re-reads the stored key when the API rejects the current one and while it is unpaired, so pairing again (or for the first time) in another terminal takes effect without a restart.
Credentials are stored in ~/.config/formward/credentials.json (%APPDATA%\formward\credentials.json on Windows), readable by your user only.
How it works
The server is a stateless stdio bridge: each JSON-RPC message from the client is forwarded to https://formward.eu/api/v1/mcp with your key, and the answer is written back. Only send_test_submission runs locally, because the test should come from the machine that will host the website.
No dependencies beyond Node.js 18.17 or newer.
Development
npm install
npm testA Dockerfile is included for directory checks: docker build -t formward-mcp . && docker run -i --rm formward-mcp.
License
MIT. See LICENSE.
Available Tools
8 toolsadd_webhookB
Add a webhook (generic, Slack or Discord) that fires on each submission. Professional plan and above; https URLs to public hosts only.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| name | No | ||
| type | No | generic (default), slack or discord. | |
| formId | Yes | ||
| secret | No | Optional HMAC signing secret for generic webhooks. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose meaningful behavior: the webhook fires on each submission, requires a paid plan, and only accepts https public URLs. It stops short of stating auth/permission needs, what happens on invalid or duplicate URLs, or whether the secret is generated or user-supplied at creation time.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler; the core action is front-loaded and the constraints follow. Slightly dense but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter mutation tool with no annotations, no output schema, and 40% parameter coverage, the description covers plan gating and URL rules but omits name/formId semantics, permission requirements, and error behavior. Adequate but with visible gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 40%, so the description should compensate. It does add real meaning for url (https, public host only) and confirms the type values, but leaves name and formId undocumented in both schema and description. Partial compensation for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb+resource ('Add a webhook') plus the supported flavors (generic, Slack, Discord) and the triggering event ('fires on each submission'). It is easy to distinguish from siblings like list_webhooks, though it doesn't explicitly name a sibling the way the top-calibration example does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states real prerequisites ('Professional plan and above') and an input constraint ('https URLs to public hosts only'), which is useful when-to-use context. However, it never says when to choose this over alternatives such as list_webhooks, nor what to do if the plan requirement isn't met.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_formA
Create a form. Returns the endpoint URL to POST submissions to. The notification address gets a verification email automatically; notifications are held until the owner confirms it. Pass either fields (array of {name,label,type,required}) or a template slug, or neither for name/email/message.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Shown in the dashboard, e.g. 'Website contact'. | |
| orgId | No | Workspace id. A paired agent key defaults to its own workspace and may omit this; a classic API key must pass one of the orgId values that list_forms returns. | |
| fields | No | Explicit field definitions. | |
| hosted | No | Also publish a hosted page at formward.eu/s/... (no code needed). | |
| template | No | Template slug from list_templates. | |
| notifyEmail | Yes | Where submission notifications go. | |
| redirectUrl | No | Thank-you page after a classic POST. | |
| allowedOrigins | No | Site origins allowed to submit, e.g. https://example.com. | |
| successMessage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose non-obvious behavior: the notification address receives a verification email and notifications are held until the owner confirms. It omits auth/permission requirements and failure behavior, but the verification gating is genuinely valuable context not present in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the core action and return value, then behavior, then input guidance. Dense but earned; the only slight cost is the final sentence packing three alternatives into one clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter mutation tool with no annotations and no output schema, the description covers the essential return value and the trickiest behavioral quirk. Remaining gaps (hosted/redirect/allowedOrigins semantics, auth) are largely handled by the rich schema descriptions, so an agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 89%, so the baseline is 3, but the description adds real meaning by spelling out the shape of each fields entry ({name,label,type,required}) that the schema leaves as an undescribed object, and by clarifying the fields/template/neither choice.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a form') and adds the key output ('Returns the endpoint URL to POST submissions to'), so an agent immediately knows what it gets. It does not name or contrast against siblings like list_forms or get_form_snippet, so there is no explicit differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Offers meaningful selection logic among the definition inputs ('Pass either fields ... or a template slug, or neither for name/email/message'), which resolves a real ambiguity. However, it gives no guidance on when to use this tool versus alternatives (list_templates, list_forms) or any preconditions for calling it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_form_snippetB
Paste-ready form markup for one form with its real endpoint. tech is one of: html, react, tailwind, shopify, webflow, vue, svelte, astro, nextjs, nuxt.
| Name | Required | Description | Default |
|---|---|---|---|
| tech | No | ||
| formId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose meaningful output context — the markup is paste-ready and contains the real endpoint — but says nothing about error behavior for a nonexistent formId, auth/permission requirements, or whether output is cached/deterministic. Partial disclosure, not a contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences: the first front-loads what the tool returns, the second constrains the tech argument. Every clause earns its place with zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-style tool with no output schema, the description adequately conveys what comes back but omits the two things an agent most needs: the meaning/lookup of the required formId and the default behavior when tech is omitted. Adequate minimum viability, not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It merely restates the tech enum that is already fully enumerated in the schema (adding no new semantic meaning, not even a default) and says nothing at all about formId — its format, where to obtain it, or whether it must reference an existing form. The required parameter is entirely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the resource (form markup for one form), the form it produces (paste-ready markup) and a distinguishing trait (embeds the real endpoint), which separates it from siblings like get_form_stats or create_form. The verb is implicit in the get_ prefix but the output is concrete and specific enough for an agent to select it correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the tool to call when it needs embeddable code for a form, but there is no explicit when-to-use statement, no exclusions, and no mention of alternatives among the seven siblings. The absence of any prerequisite (e.g. the form must already exist) leaves selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_form_statsA
Submission counts and the time of the latest submission for a form. Use after sending a test to confirm it arrived. Never returns submission content.
| Name | Required | Description | Default |
|---|---|---|---|
| formId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses a boundary ("Never returns submission content") and implies a read-only stats lookup rather than a mutation. However, it omits permission requirements, error behavior for an invalid formId, and any latency/rate context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with the core output defined first, followed by usage timing and a scoping caveat. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with no output schema and no annotations, the description covers what is returned, when to call it, and an important negative boundary. Only the parameter's expected value form and failure behavior remain unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single formId parameter, and the description only indirectly refers to it via "for a form" without giving format or source guidance. The value it adds over the schema's type/required declarations is marginal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the exact resource (a form's submissions) and the exact outputs (submission counts and latest submission time), which cleanly separates it from siblings like send_test_submission and list_forms. An agent can identify the tool's role without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use after sending a test to confirm it arrived" gives an explicit when-to-use and implicitly points at the send_test_submission sibling as the prerequisite. No when-not guidance or alternatives are stated, but the sequencing instruction is concrete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_formsA
List the forms in this workspace with their endpoint URLs and hosted page URLs. No submission data.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the return payload scope (endpoint URLs, hosted page URLs, and explicitly no submission data), but omits pagination, ordering, or permission/auth context for a list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, front-loaded with the action and resource, followed by a scoping exclusion. Every clause earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter list tool with no annotations or output schema, the description gives an adequate picture of what comes back. Only return format details (pagination, ordering, URL shape) are left unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly does not fabricate any filter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the forms in this workspace') and clarifies what is returned (endpoint URLs, hosted page URLs). It implicitly distinguishes forms from the sibling list_templates resource, though it doesn't explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The scope note 'No submission data' hints at what this tool is not for, but there is no explicit when-to-use guidance or routing to alternatives like list_templates or get_form_stats. Usage is only implied by the tool's name and scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_templatesA
Form templates (contact, feedback, registration, ...) with their field lists. Pass a template slug to create_form to start from one.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral weight. It does disclose the return content ('templates ... with their field lists'), which is the main behavioral detail for a read operation. It says nothing about pagination, permissions, or whether the category argument narrows results, leaving notable gaps for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with no filler; the resource definition is front-loaded and the cross-tool hint follows. Both sentences carry information, though the second sentence is the one doing most of the routing work.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-optional-param list tool with neither annotations nor an output schema, the description covers what comes back and the intended follow-on call to create_form. Missing pieces are minor: no statement that the category filter is optional and no pagination note.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter has 0% schema description coverage, so the schema alone does not explain it. The description's examples ('contact, feedback, registration') map directly onto enum values, giving the agent partial semantics for the category filter, but it never says the parameter is an optional category filter or what happens when it is omitted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource precisely ('Form templates... with their field lists') and gives representative categories, so an agent knows this returns template definitions rather than submissions or forms. However, it never uses an explicit list verb and gives no differentiation from the sibling list_forms, so an agent must infer which of the two list tools it wants.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It supplies a workflow hint ('Pass a template slug to create_form to start from one') that tells the agent what to do after calling this tool. It does not state when to choose this over list_forms or whether the category filter is required, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_webhooksB
Webhook destinations configured on a form (no secrets).
| Name | Required | Description | Default |
|---|---|---|---|
| formId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose one real behavioral trait: secrets are omitted from the returned destinations. It does not state that this is a read-only operation, what permissions are needed, or anything about ordering/pagination. One genuine disclosure, several gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the scoping constraint and the no-secrets caveat front-loaded; nothing is wasted. It is a fragment rather than a full sentence but reads cleanly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with no output schema, the description covers the resource and a key caveat, which is minimally sufficient. It stops short of documenting formId or confirming the read-only nature, the only remaining things an agent would want.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single required parameter formId is undocumented in both schema and description. The phrase 'on a form' only implies that formId selects the form; no format, ID source, or expected value is given to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact resource ('webhook destinations') and constrains scope to a form, which distinguishes it from the sibling add_webhook. It lacks an explicit verb (list/retrieve), but the resource-plus-scope phrasing leaves no real ambiguity about what is returned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this versus add_webhook or any other sibling, and no prerequisites or exclusions. The agent must infer that this is the read counterpart to add_webhook purely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_test_submissionA
Send one test submission to a form's endpoint from this machine, exactly like the website will (JSON body, Accept: application/json). Counts as one submission against the plan. Then call get_form_stats to confirm it arrived; the dashboard shows the content. Pass values matching the form's fields (include _consent: "on" for consent-gated forms), or omit it for name/email/message defaults. The honeypot and redirect controls are always stripped.
| Name | Required | Description | Default |
|---|---|---|---|
| formId | Yes | ||
| values | No | Field name to value. Defaults to name, email and message. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the side effect (counts as one submission against the plan), the wire behavior (JSON body, Accept: application/json), and that honeypot/redirect controls are always stripped. It omits auth requirements and error/failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the core action and its fidelity guarantee before the workflow and parameter guidance. Dense with useful detail and no filler, though the instruction set is close to overloaded for a two-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description covers side effects, expected-next-tool, and parameter handling, and notes the dashboard shows content. It still leaves the return payload shape and failure modes unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50% (formId is undocumented), but the description compensates meaningfully: it explains that `values` must match the form's fields, how to handle consent-gated forms with `_consent: "on"`, and what defaults apply when omitted. It adds semantic value beyond the schema, though it does not explain where formId comes from.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (send), resource (one test submission), and scope (this machine, form's endpoint), plus fidelity detail ('exactly like the website will'). An agent can distinguish it from list_forms, create_form, and get_form_stats without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly frames this as a testing action and prescribes the follow-up step ('Then call get_form_stats to confirm it arrived'), routing the agent to a sibling. It does not state when NOT to use it (e.g., real user submissions should go through the live form, not this tool).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v0.1.0- First observed
add_webhook - First observed
create_form - First observed
get_form_snippet - First observed
get_form_stats - First observed
list_forms - First observed
list_templates - First observed
list_webhooks - First observed
send_test_submission
TDQS
Scored across 8 tools
Each tool targets a distinct resource and action: forms (list/create/snippet/stats), templates (list), webhooks (list/add), and test sending. The only near-neighbors, list_forms and list_templates, are clearly separated by descriptions (workspace forms vs. reusable templates). No two tools compete for the same job.
Every tool follows a strict snake_case verb_noun pattern (send_test_submission, list_forms, create_form, get_form_stats, add_webhook, etc.). Verb choice is also semantically consistent: list_* for enumeration, get_* for single-resource lookups, create_/add_ for mutations.
Eight tools is well-scoped for a form-building service: form lifecycle, templates, snippets, stats, testing, and webhooks each get dedicated tools with no filler. Nothing appears redundant or gratuitously split.
Creation, listing, embedding, and stats are covered, but the lifecycle has real holes: no update_form or delete_form, no get_form detail tool, and no way to remove or modify a webhook once added. Submission content is also unreadable programmatically (stats only), which limits the surface for agents.
Maintenance
Related MCP Connectors
Form backend for AI agents: create live form endpoints, configure them, read submissions.
Form backend an agent runs end to end: provision forms, snippets, spam, signed webhooks.
Fillo MCP server — provision, scaffold, publish, and query forms from your coding agent.
Create forms, read submissions, and build invitations from Claude, ChatGPT, or any MCP client.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server for the Nextcloud Forms API v3 that enables secure creation, update, cloning, and validation of forms without exposing credentials to the AI agent.MIT
- FlicenseAqualityCmaintenanceMCP server for FormsList, a form-backend SaaS. Enables creating form endpoints, reading submissions, configuring auto-responses, and generating embed snippets via natural language.7-
- AlicenseNot gradedqualityAmaintenanceMCP server for Microsoft Forms automation, enabling AI agents to inspect forms, resolve branching, validate and submit answers, upload files, and manage response links.46 npm1MIT
- FlicenseNot gradedqualityBmaintenanceExposes an Auth0 Form as an MCP server, enabling AI models to interact with the form via natural language. It uses a stateless HTTP MCP transport with Auth0 authentication.-