AI Agent Integration
Connect Cursor, Claude Desktop, or your own scripts to EzyForm. AI agents can create forms, publish drafts, read submissions, and more — all programmatically via API keys and MCP.
AI Form Builder vs AI Agent Integration
| AI Form Builder | AI Agent Integration | |
|---|---|---|
| Where | Inside EzyForm at /app/new |
External tools (Cursor, Claude, scripts) |
| How | Type a prompt in the UI | API key + MCP or REST |
| Best for | Quick one-off forms in the browser | Automation, bulk workflows, coding assistants |
| Limits | 10/week (Free), 20/week (Pro) | No weekly quota; plan limits apply (form count, etc.) |
What agents can do
- Create blank forms and update draft field configurations
- Publish drafts and reset drafts to the last published version
- List, read, and delete submissions
- Toggle submission listed/unlisted status
- Create refill links for respondents
- Duplicate, close, and reopen forms (REST only for some operations)
What agents cannot do
- Upload files on behalf of respondents (FILE_UPLOAD fields can be defined; uploads happen on the public form)
- Edit forms in the visual UI — agents work via structured JSON
- Bypass plan limits (e.g. Free plan caps at 5 forms)
Quick start
- Sign up at ezyform.app (or log in if you already have an account).
- Go to Account → API Keys and click Create key. Give it a name (e.g. "Cursor agent"). Copy the key — it is shown only once.
- Add this to your MCP client config (Cursor, Claude Desktop, etc.):
{
"mcpServers": {
"ezyform": {
"command": "npx",
"args": ["-y", "@ezyform/mcp"],
"env": {
"EZYFORM_API_URL": "https://ezyform.app",
"EZYFORM_API_KEY": "ezyform_live_..."
}
}
}
}
Replace ezyform_live_... with your actual key. Restart your MCP client after saving.
Signed-in users can manage keys at Account → API Keys.
Supported clients
- Cursor — add the JSON block above to your MCP settings
- Claude Desktop — same config in
claude_desktop_config.json - Any MCP client — stdio transport via
npx -y @ezyform/mcp - Custom scripts — call the REST API directly with
Authorization: Bearer ezyform_live_...
Agent workflow
- Create form —
ezyform_create_formwith optional title (blank form). - Update draft —
ezyform_update_form_draftwith full FormConfig JSON (fields, startProp, endProp). - Validate — Backend validates via Zod; fix errors from response details and retry.
- Publish —
ezyform_publish_formwhen draft is ready. Returnsno_changeif hash unchanged. - List responses —
ezyform_list_submissionswith filterlisted,unlisted, orall. - Refill link —
ezyform_create_refill_linkfor a submission (creates a URL; does not fill the form).
MCP resources ezyform://schema/fields, ezyform://docs/workflow, and ezyform://docs/errors provide full reference when connected.
Plan limits
| Feature | Free | Pro |
|---|---|---|
| Agent API & MCP access | Yes | Yes |
| Max forms | 5 | Unlimited |
| Refill link URL | Yes | Yes |
| Refill link email delivery | No | Yes |
| Submission receipt emails | No | Yes |
Call GET /api/v1/agent/me (or MCP tool ezyform_get_me) to read your current plan and limits.
Security
- API keys are shown only once at creation. Store them securely.
- You can create up to 10 active keys per account.
- Revoke a key anytime from Account → API Keys. Agents using it stop working immediately.
- Keys are scoped to your account — agents can only access your forms and submissions.
Troubleshooting
| Error | Fix |
|---|---|
UNAUTHORIZED |
Key is invalid or revoked. Create a new key. |
PLAN_LIMIT |
Free plan cap reached (e.g. 5 forms). Upgrade to Pro or delete a form. |
VALIDATION_ERROR |
FormConfig JSON is invalid. Check details.issues in the response. |
| Connection refused | Set EZYFORM_API_URL to https://ezyform.app (no trailing slash). |
| MCP not loading | Run npx -y @ezyform/mcp manually to check for errors; verify Node.js is installed. |
REST API reference
All endpoints require Authorization: Bearer ezyform_live_... and return JSON.
Base URL: https://ezyform.app/api/v1/agent
| Method | Path | Description | MCP tool |
|---|---|---|---|
| GET | /me |
Current user, plan, and limits | ezyform_get_me |
| GET | /schema/fields |
Field type schema documentation | resource |
| GET | /forms |
List your forms | ezyform_list_forms |
| POST | /forms |
Create blank form | ezyform_create_form |
| GET | /forms/:formId |
Get form detail | ezyform_get_form |
| PATCH | /forms/:formId |
Update draft FormConfig | ezyform_update_form_draft |
| DELETE | /forms/:formId |
Delete form | ezyform_delete_form |
| POST | /forms/:formId/publish |
Publish draft | ezyform_publish_form |
| POST | /forms/:formId/reset-draft |
Reset draft to published | ezyform_reset_draft |
| POST | /forms/:formId/duplicate |
Duplicate form | REST only |
| POST | /forms/:formId/close |
Close form to new responses | REST only |
| POST | /forms/:formId/reopen |
Reopen closed form | REST only |
| GET | /forms/:formId/submissions |
List submissions (?page, ?count, ?filter) |
ezyform_list_submissions |
| POST | /forms/:formId/submissions?op=bulk-delete |
Bulk delete { ids: [] } |
REST only |
| POST | /forms/:formId/submissions?op=bulk-list-toggle |
Bulk list toggle { ids: [], unlisted } |
REST only |
| GET | /forms/:formId/submissions/:submissionId |
Get one submission | ezyform_get_submission |
| DELETE | /forms/:formId/submissions/:submissionId |
Delete submission | REST only |
| POST | /forms/:formId/submissions/:submissionId/list-toggle |
Toggle listed/unlisted | REST only |
| POST | /forms/:formId/submissions/:submissionId/refill |
Create refill link | ezyform_create_refill_link |
Need help?
Email hello@ezyform.app or see the FAQ.
