MCP server

ZenoForms ships a streamable-HTTP MCP server at https://mcp.forms.zeno.io. It supports OAuth 2.1 Dynamic Client Registration so any compliant client can one-click connect.

Connect from Claude Code

~/.claude/mcp.json
{
  "mcpServers": {
    "zenoforms": {
      "url": "https://mcp.forms.zeno.io",
      "transport": "http"
    }
  }
}

On first tool call, Claude opens a browser tab for OAuth. Approve; you're back in the editor.

Create a form mid-build

agent.ts
// In Claude Code (after OAuth one-click)
await mcp.zenoforms.create_form({
  owner_email: "[email protected]",
  name: "Contact form",
  description: "Name, email, message; honeypot spam guard"
});
// => { form_id, endpoint_url, shareable_url, claim_url }

Tools

  • create_form(owner_email, name, description)
  • list_forms()
  • get_submissions(form_id, limit)

Claim flow

If the owner_email isn't yet verified, ZenoForms returns a claim_url. Share it with the human; they click, verify, and the form (and any queued submissions) transfers to their dashboard.