# FormForge Pro Operations

> Reference for the 7 FormForge Pro tools in Royal MCP Pro: entries and analytics, bulk export, bulk delete with undo, re-send notifications, and templates.

- Canonical: <https://royalplugins.com/support/royal-mcp-pro/formforge-pro-tools/>
- Last updated: 2026-09-20
- HTML version: <https://royalplugins.com/support/royal-mcp-pro/formforge-pro-tools/>

---

Complete reference for the 7 FormForge Pro Operations tools in Royal MCP Pro. Read individual entries and per-form analytics, paginated bulk entry export, bulk delete entries with 72-hour undo, form duplication, spin up new forms from templates, and re-fire email notifications for a batch of entries. Preview before every destructive write.

FormForge Pro required

All seven tools on this page wrap the paid [FormForge Pro](https://royalplugins.com/formforge/) plugin. FormForge Pro must be installed and active on the site — the free FormForge plugin doesn't include the underlying analytics API, template system, or bulk-notification hooks these tools call into. Tools return a clean `formforge_pro_not_active` error envelope when FormForge Pro is missing — no partial state is written. Not to be confused with Royal MCP *Pro*, which is what gates every tool on this page in the first place.

## Prerequisites

- FormForge Pro installed and active (see the plugin page at [royalplugins.com/formforge](https://royalplugins.com/formforge/))
- Royal MCP Pro installed and licensed (see [Getting Started](https://royalplugins.com/support/royal-mcp-pro/getting-started/))
- MCP client connected to your site (Claude Desktop, ChatGPT connector, Cursor, or any MCP-compatible client)
- Your MCP-connecting WordPress user needs `manage_options` for form CRUD and bulk operations, or `edit_posts` for entry reads (see [capability model](#capability-model))

Tools that reference a form or entry by ID refuse when the target can't be resolved and return `form_not_found` or `entry_not_found`. Nothing is partially written on a resolution failure.

## Capability model

FormForge Pro Operations tools use two capability tiers matching the two kinds of work they do:

- `edit_posts` — entry reads (`formforge_get_entry`, `formforge_get_analytics`) and paginated bulk export. Reading entries is a content-editor-scoped operation, not a site-admin one.
- `manage_options` — bulk delete, bulk resend notifications, duplicate form, create from template. Anything that changes site-wide form configuration or dispatches emails requires administrator.

Every tool falls back to `manage_options` if the scoped capability is missing. If your MCP-connecting user is an administrator this is all transparent.

## Shared safety layer

Every FormForge Pro write tool runs through the same safety layer used across Royal MCP Pro's write surface, with a couple of FormForge-specific patterns:

- **Cap checks.** Every tool checks the appropriate scoped cap first (`edit_posts` for reads, `manage_options` for writes and email dispatches). Fails-first with `insufficient_caps` if the caller doesn't have it — no partial writes.
- **Form + entry resolution.** Tools that reference a form or entry by ID resolve against FormForge's own registry first and refuse with `form_not_found` / `entry_not_found` if the target doesn't exist. No silent creation.
- **Confirm tokens on bulk delete.** `formforge_bulk_delete_entries` is two-step by design: call once with the entry ID set to get a five-minute confirm token plus a preview count; call again with the token to persist. Prevents accidental fat-finger deletes.
- **72-hour undo tokens on destructive writes.** `formforge_bulk_delete_entries` and `formforge_duplicate` (undo-able direction) return an undo token good for 72 hours. Undo on delete restores every deleted entry with its exact prior payload; undo on duplicate deletes the created form.
- **No undo on email dispatches.** `formforge_bulk_resend_notifications` returns `undo_token: "NO_UNDO_SCOPE"` — emails already left the box. Preview machinery on the read step lets you eyeball the recipient set before firing.
- **Audit Log row on every call.** Success, error, and undone states all produce audit rows.

## The 7 tools

Grouped by write shape. Two read tools (entry data + analytics) require the `edit_posts` capability; three bulk operations and two form-creation tools require `manage_options`.

### Entry reads (2)

Side-effect-free. `edit_posts` capability required.

### formforge\_get\_entry

Fetch a single form submission by entry ID. Returns the entry's field values, submission timestamp, submitter IP (if capture is enabled on the form), user agent, referrer, and any per-entry metadata FormForge Pro captured (e.g. UTM parameters, custom hidden fields).

#### Cap

`edit_posts`

#### Arguments

| Name | Type | Description |
| --- | --- | --- |
| `entry_id` required | `integer` | The FormForge entry ID. |
| `include_meta` | `boolean` | Include per-entry metadata (UTM, referrer, custom hidden fields). Default `true`. |

#### Example prompt

```
Show me the full details of FormForge entry 4287, including any UTM parameters captured on submission.
```

Read-only.

### formforge\_get\_analytics

Per-form submission analytics over a date range: total submissions, conversion rate (submissions / page views if tracking is enabled), abandonment rate at each field, average time-to-submit, top referrer sources, top UTM sources, and per-field completion rates.

#### Cap

`edit_posts`

#### Arguments

| Name | Type | Description |
| --- | --- | --- |
| `form_id` required | `integer` | The FormForge form ID. |
| `date_from` | `string` | ISO 8601 date lower bound. Default: last 30 days. |
| `date_to` | `string` | ISO 8601 date upper bound. Default: today. |
| `include_field_breakdown` | `boolean` | Include per-field completion + abandonment rates. Default `true`. |

#### Example prompt

```
Show me the analytics for form 12 over the last 14 days, including field-level completion rates.
```

Read-only.

### Bulk operations (3)

Bulk export is read-only. Bulk delete is a two-step confirm flow with a 72-hour undo. Bulk resend notifications dispatches emails — no undo scope.

### formforge\_bulk\_export\_entries

Paginated bulk export of form entries as JSON. Cap 500 entries per call. Response contains a page cursor for the next batch. Supports the same filter set as the FormForge admin entries view.

#### Cap

`edit_posts`

#### Arguments

| Name | Type | Description |
| --- | --- | --- |
| `form_id` required | `integer` | The FormForge form ID. |
| `status` | `string` | One of `completed` / `partial` / `spam` / `trashed`. Default `completed`. |
| `date_from` | `string` | ISO 8601 date lower bound. |
| `date_to` | `string` | ISO 8601 date upper bound. |
| `search` | `string` | LIKE match against entry field values. |
| `paginate` | `object` | `{page, per_page}`. Defaults page 1, per\_page 100, max 500. |

#### Example prompt

```
Export the last 30 days of completed submissions from form 12, 200 per page, ordered by submission date descending.
```

Read-only.

### formforge\_bulk\_delete\_entries

Bulk-delete form entries. Two-step confirm: call 1 returns a five-minute `confirm_token` plus the exact list of entry IDs that would be deleted; call 2 passes the token back and commits. Deleted entries are captured in the undo payload so the 72-hour undo can restore every one with its exact prior field values and metadata.

#### Cap

`manage_options`

#### Arguments

| Name | Type | Description |
| --- | --- | --- |
| `entry_ids` required | `integer[]` | Explicit list of entry IDs to delete. Cap 500 per call. |
| `confirm_token` | `string` | Required for step 2. One-shot — consumed on commit to prevent double-deletes. |

#### Example prompt

```
Delete FormForge entries 4200 through 4285 (the test submissions I made while setting up the form).
```

Undo: 72h token — restores every deleted entry with its exact prior field values, submission timestamp, and metadata.

### formforge\_bulk\_resend\_notifications

Re-fire the email notification hooks for a batch of already-submitted entries. Useful when a notification failed on original submission (SMTP outage, misconfigured recipient) and you need to send it now without re-triggering downstream integrations. Wraps FormForge Pro's own `send_notifications()` so it respects every notification rule, template, and conditional logic configured on the form.

#### Cap

`manage_options`

#### Arguments

| Name | Type | Description |
| --- | --- | --- |
| `entry_ids` required | `integer[]` | Explicit list of entry IDs whose notifications should be re-sent. Cap 500 per call. |
| `notification_ids` | `integer[]` | Optional. Restrict to specific notification IDs configured on the form. Omit to fire every notification for each entry. |

#### Example prompt

```
Re-fire the admin notification email for entries 4287 through 4295 (they were submitted while my SMTP provider was down).
```

**NO UNDO.** Emails already left the box. Per-entry send outcomes are legible in the response (`sent` / `skipped` / `failed` with reason).

### Form creation shortcuts (2)

Both tools create a new FormForge form. Duplicate copies an existing form (including notification config, field logic, and styling); create-from-template spins up a new form from a FormForge Pro template.

### formforge\_duplicate

Duplicate an existing form by ID. Copies every field, notification rule, conditional logic branch, styling override, and post-submit action. The clone starts with a fresh entry table — existing submissions are NOT copied.

#### Cap

`manage_options`

#### Arguments

| Name | Type | Description |
| --- | --- | --- |
| `source_form_id` required | `integer` | The form ID to duplicate. |
| `new_title` required | `string` | Title for the cloned form. |
| `copy_notifications` | `boolean` | Whether to copy notification config. Default `true`. |
| `copy_confirmations` | `boolean` | Whether to copy post-submit confirmation messages/redirects. Default `true`. |

#### Example prompt

```
Duplicate form 12 ("Contact Us") as "Contact Us — Landing Page Version" with notifications and confirmations copied.
```

Undo: 72h token — deletes the cloned form. Original form is untouched.

### formforge\_create\_from\_template

Spin up a new form from a FormForge Pro template. Templates ship with pre-configured field structure, notification defaults, and confirmation messages tuned for common use cases (contact, quote request, event registration, feedback survey, lead capture, etc.).

#### Cap

`manage_options`

#### Arguments

| Name | Type | Description |
| --- | --- | --- |
| `template_slug` required | `string` | Template identifier. Use the FormForge admin to list available templates. |
| `new_title` required | `string` | Title for the created form. |
| `notification_email` | `string` | Override the default admin notification recipient. Defaults to the site admin email. |
| `confirmation_message` | `string` | Override the template's default post-submit confirmation message. |

#### Example prompt

```
Create a new form titled "2026 Customer Feedback" from the "customer-satisfaction-survey" template, sending notifications to feedback@example.com.
```

Undo: 72h token — deletes the created form.

## Related reading

- [Undo Tokens & Reversibility](https://royalplugins.com/support/royal-mcp-pro/undo-tokens-and-reversibility/) — how the 72-hour undo tokens returned by `formforge_bulk_delete_entries` and `formforge_duplicate` work, when they expire, and how to consume them via `royal_mcp_undo_last_operation`.
- [Universal Audit Log](https://royalplugins.com/support/royal-mcp-pro/understanding-the-audit-log/) — every FormForge tool call is captured, including bulk delete confirms and undo dispatch.
- [FormForge Pro plugin](https://royalplugins.com/formforge/) — the underlying form builder these tools wrap.
- [FormForge Pro support](https://royalplugins.com/support/formforge/) — documentation for the form builder itself (form CRUD, notification rules, field logic, conditional display).

## Still Stuck? Two-Step Support Path

If a FormForge Pro tool isn't behaving the way you expected, work through these two steps in order — most tool-level failures resolve at Step 1 because they're actually MCP-connection, host-layer, or FormForge-Pro-availability issues, not FormForge Pro Operations specific.

### Step 1: Start with the Royal MCP Troubleshooting Guide

[**Royal MCP Troubleshooting — Start Here**](https://royalplugins.com/support/royal-mcp/troubleshooting-start-here/) covers MCP-layer issues. If Claude can't reach your site at all, the tool call never fires — that guide is where to start.

For Pro-specific patterns:

- [Undo token errors](https://royalplugins.com/support/royal-mcp-pro/undo-token-errors/) — expired, consumed, or handler missing
- [Undo Tokens & Reversibility](https://royalplugins.com/support/royal-mcp-pro/undo-tokens-and-reversibility/) — how the 72h undo flow on destructive tools works
- [Pro tool returned upgrade prompt with valid license](https://royalplugins.com/support/royal-mcp-pro/pro-tool-returned-upgrade-prompt/)

For FormForge Pro-specific patterns:

- **`formforge_pro_not_active`.** Every tool on this page requires FormForge Pro. The free FormForge plugin doesn't include the analytics API, template system, or bulk-notification hooks these tools wrap. Install FormForge Pro from [royalplugins.com/formforge](https://royalplugins.com/formforge/) to unlock.
- **`form_not_found` / `entry_not_found`.** The tool couldn't resolve the target by ID. Confirm the form or entry ID via the FormForge admin (WP Admin → FormForge → Forms or → Entries) before re-calling.
- **`confirm_token_invalid` on `formforge_bulk_delete_entries`.** Confirm tokens are one-shot with a 5-minute TTL. If the token expired or was already consumed, re-run step 1 with the entry ID list to get a fresh token.
- **`batch_too_large`.** Every bulk tool caps at 500 entries per call. Narrow the filter or split the batch and re-call.
- **Notifications not firing on `formforge_bulk_resend_notifications`.** The tool wraps FormForge Pro's own `send_notifications()` path, so if notifications aren't firing when you re-fire them here, the underlying cause is the same as when they don't fire on original submission — usually SMTP config. Check WP Admin → FormForge → Settings → Email Log, then Royal SMTP (or your SMTP plugin) admin dashboard.

### Step 2: Email priority support

If you've worked through Start Here and the relevant Pro-specific doc and the issue still isn't resolved, email priority support from your purchase email address at **[support@royalplugins.com](mailto:support@royalplugins.com)**. Priority email support is included with your license — typical response within 24 hours. **Never include your license key in email**; we look it up from your purchase address.

What to include in your email

- **Your hosting provider** (SiteGround, Cloudways, Hostinger, Kinsta, WP Engine, Liquid Web, self-hosted VPS, etc.)
- **Royal MCP Pro version** from WP Admin → Plugins
- **FormForge Pro version** from WP Admin → Plugins
- **Active caching plugins** (LiteSpeed Cache, WP Rocket, W3 Total Cache, SpeedyCache, Hummingbird, none)
- **Active security plugins** (Wordfence, Defender Pro, Solid Security, NinjaFirewall, none)
- **Active SMTP plugin** (Royal SMTP, WP Mail SMTP, Fluent SMTP, none) — only relevant for notification issues
- **Cloudflare or CDN** in front of the site? If yes, is “Manage AI Bots” or “Bot Fight Mode” on?
- **Which MCP client** — claude.ai web custom connector, Claude Desktop with `mcp-remote`, ChatGPT MCP, Cursor, or another MCP-compatible client
- **The exact FormForge tool name and args** you called (e.g. `formforge_bulk_delete_entries` with `entry_ids: [4200, 4201, 4202]`)
- **The exact error message returned** (from the MCP client's chat surface), plus any `ofid_xxxxx` reference code if claude.ai shows one
- **Screenshot of the most recent Pro tool row in Audit Log** with View Details expanded — or confirmation that the log is empty after a reproduced failure
- **The target form ID and a screenshot of that form in the FormForge admin** — so we can visually confirm the state we're operating against

[← ACF Setup Suite](https://royalplugins.com/support/royal-mcp-pro/acf-setup-suite/)
[Universal Audit Log →](https://royalplugins.com/support/royal-mcp-pro/understanding-the-audit-log/)
