Gravity Forms MCP exposes a Send Notifications tool when the site allowlist and user capabilities permit it. A broad prompt such as resend failed emails can select the wrong form, entry range, notification, or recipient and may contact real people more than once. A human approval gate needs an exact preview and a small execution boundary.
Use this for support teams, event reminders, lead-routing repairs, failed notification replays, registration follow-ups, and any MCP workflow that can send Gravity Forms emails.
Quick answer
Separate selection, preview, approval, and execution. Build a candidate list using read-only tools, then freeze form ID, notification ID, entry IDs, recipient addresses or redacted hashes, subject, merge-tag preview, expected count, exclusions, and reason. Cap the first batch at a small number such as five, issue an approval ID with a short expiry, and reject any changed payload. Send one canary, verify the entry note and mail provider event, then continue in bounded batches with a stable deduplication key. Stop on an unexpected recipient, template mismatch, bounce spike, duplicate, or count drift.
Test scenarios to run
Run the same controlled fixture across these branches. Write down the expected result before testing so a surprising response is easy to identify.
| Scenario | Fixture | Expected result |
| Preview | 5 exact entry IDs | No message sent |
| Canary | 1 approved recipient | One note and provider ID |
| Payload drift | Subject or IDs changed | Approval rejected |
| Replay | Completed batch key | No duplicate send |
Diagnostic table
Use this table to connect the observed behavior to evidence and a verification step.
| Action | Evidence | Verification |
| Build a read-only candidate list | Record the form, notification, entry query, exact entry IDs, recipient derivation, conditional logic, subject, body preview, attachments, sender, reply-to, mail provider, and business reason. | Every send maps to one approved entry and notification ID. |
| Freeze and preview the payload | Use read-only tools to build a frozen recipient manifest and redact personal data in shared approval evidence while retaining controlled hashes for comparison. | Recipient count never exceeds the approved cap. |
| Approve one expiring batch | Set a maximum batch size, canary count, approval owner, approval ID, expiry, deduplication key, rate limit, bounce threshold, and stop conditions before enabling the send. | Entry notes and provider message IDs reconcile one to one. |
| Send and verify one canary | Verify each send against Gravity Forms entry notes, WordPress mail logs, provider message IDs, delivery events, suppression lists, and recipient counts. | Changed, expired, failed, and replayed batches stop safely. |
What to check first
- Record the form, notification, entry query, exact entry IDs, recipient derivation, conditional logic, subject, body preview, attachments, sender, reply-to, mail provider, and business reason.
- Use read-only tools to build a frozen recipient manifest and redact personal data in shared approval evidence while retaining controlled hashes for comparison.
- Set a maximum batch size, canary count, approval owner, approval ID, expiry, deduplication key, rate limit, bounce threshold, and stop conditions before enabling the send.
- Verify each send against Gravity Forms entry notes, WordPress mail logs, provider message IDs, delivery events, suppression lists, and recipient counts.
- Refuse payload changes after approval, prevent replay of a completed deduplication key, and remove temporary send permissions when the incident closes.
Field notes
- Write the expected result before changing anything and keep one repeatable synthetic fixture for the full test window.
- Record exact versions and UTC timestamps because caches, retries, scheduled actions, and deployments can change the evidence between checks.
- Test the public path and the stored server-side result, not only an admin preview, isolated command, or API response.
- Review the result again after the relevant cache, queue, cron, webhook, and observation window has completed.
Useful command or data shape
Adapt paths, IDs, and privacy handling to the site before running commands or storing data on production.
approval_id: gf-send-20260903-01
form_id: 12
notification_id: admin_followup
entry_ids: [4102, 4104, 4107]
recipient_cap: 5
expires_utc: 2026-09-03T10:00:00Z
dedupe_key: sha256(frozen_manifest)
Why this usually happens
- A search query changes between preview and execution as new entries arrive.
- Conditional notification logic selects a different recipient than the prompt suggests.
- A retry has no stable batch key and resends successful messages.
- A broad user role can send notifications across forms outside the intended task.
Decision rule
Do not send unless the approval names the exact frozen payload, the recipient count is within the cap, the canary reconciles, and any replay or payload drift is blocked.
Production verification checklist
- Every send maps to one approved entry and notification ID.
- Recipient count never exceeds the approved cap.
- Entry notes and provider message IDs reconcile one to one.
- Changed, expired, failed, and replayed batches stop safely.
Safe fix order
Use a sequence that makes each result easy to prove. Stop when new evidence changes the scope or owner of the problem.
- Build a read-only candidate list
- Freeze and preview the payload
- Approve one expiring batch
- Send and verify one canary
- Continue with dedupe and stop rules
Mistakes to avoid
- Changing production before recording exact versions, UTC timestamps, a stable fixture, the expected result, and a tested rollback point.
- Treating one successful screen as proof while logs, stored records, background jobs, caches, emails, APIs, and downstream systems remain unchecked.
- Testing only as an administrator instead of using the role, device, locale, cache state, request path, and failure branch that users actually reach.
- Leaving debug output, temporary exclusions, helper accounts, duplicate hooks, broad permissions, or relaxed firewall rules active after verification.
Questions teams ask during testing
Can I test this directly in production?
Start with read-only evidence. Use staging for package, code, checkout, form, permission, or cache changes. If a production canary is necessary, make it identifiable, reversible, monitored, and unable to expose personal data or charge a customer.
How do I avoid a false positive?
Repeat the same fixture with the same versions, URL, role, locale, cache state, and downstream integration. Compare the browser result, stored result, and logs instead of relying on one successful screen.
What evidence should I retain?
Keep UTC time, exact versions, request or record ID, expected result, actual result, relevant log lines, change made, rollback point, owner, and final verification. Redact credentials, tokens, and personal data.
When is the work complete?
Close it when the primary path passes, failure branches are understood, stored and downstream records reconcile, temporary changes are removed, monitoring is active, and the owner has the evidence packet.
What to tell the client or owner
Give the owner a concise packet with the affected workflow, exact versions, UTC test time, synthetic fixture ID, expected result, actual result, key logs, change made, rollback point, final result, unresolved risks, owner, and next review date. Remove credentials and personal data before sharing it.
When HandL WP should help
Bring in help when this affects leads, checkout, search visibility, security, paid media reporting, or a client production site. HandL WP can trace the issue through WordPress, hosting, cache, tracking, and Search Console, then verify the workflow after the technical fix.
If this is active on a production site, have HandL WP control a Gravity Forms notification replay.
Related HandL WP guides
Use these related guides when the same issue touches tracking, security, checkout, or crawler visibility.
Helpful references