Skip to content

Forms

New in v3.5.0. EMCP exposes eight WordPress form builders over MCP, each through the same two-dispatcher pattern: one Read tool, one Write tool. An AI agent can list your forms and fields, read and manage entries (submissions), and tune notifications and settings, without you spelling out each plugin’s quirks.

Contact Form 7 is free; the other seven are Pro:

PluginToolsTierEntries?
Contact Form 7cf7-read / cf7-writeFreeNo (CF7 stores none)
WPFormswpforms-read / wpforms-writeProYes, requires WPForms Pro
Gravity Formsgravityforms-read / gravityforms-writeProYes
Fluent Formsfluentforms-read / fluentforms-writeProYes
Ninja Formsninjaforms-read / ninjaforms-writeProYes
Formidable Formsformidable-read / formidable-writeProYes
MetFormmetform-read / metform-writeProYes (Elementor-based)
SureFormssureforms-read / sureforms-writeProYes (Gutenberg-based)

Each pair registers only when its plugin is active, so a typical site with one form plugin sees exactly that plugin’s two tools.

Every dispatcher takes an operation and an arguments object. Call a tool with no operation to get its catalog, then call again to run one:

// discover
fluentforms-read({})
// → { mode: "read", operations: [ { operation: "list-forms", … }, { operation: "get-entry", … }, … ] }
// act
fluentforms-read({ operation: "list-entries", arguments: { form_id: 3, limit: 20 } })
fluentforms-read({ operation: "get-entry", arguments: { entry_id: 812 } })

Reads cover forms, fields, notifications and entries; writes manage settings/notifications and entries. Not every plugin supports every operation, the catalog each dispatcher returns is authoritative.

OperationWhat it does
list-formsAll forms, id, title, field/entry counts
get-formOne form: fields, notifications, settings
list-notificationsA form’s email notifications (where the plugin has them)
list-entries / get-entrySubmissions and their field values (entry-storing plugins)
update-form-settings / update-notificationTune form config / email notifications
update-entry-statusMark a submission read / spam / trash (where supported)
delete-entryDelete a submission, confirm: true required

Contact Form 7 has no entries (it stores none), so it offers form + mail-template operations only. WPForms entry operations require WPForms Pro: on WPForms Lite they return a clear message; forms and notifications still work.

  • Reads on, writes off. Each <plugin>-read is enabled by default; each <plugin>-write ships disabled: enable it under EMCP Tools → Tools → Plugins → Forms.
  • Entries are personal data. Reads of submissions are gated on the plugin’s own view-entries capability; delete-entry requires an explicit confirm: true on top of the write tool being enabled.
  • Only when active. A plugin’s pair doesn’t register unless that plugin is installed and active.
  • No form-builder authoring. These tools read and manage forms + submissions, they don’t create form structure (that’s out of scope by design).
// 1. list a form's recent submissions
gravityforms-read({ operation: "list-entries", arguments: { form_id: 28, limit: 10 } })
// 2. read one
gravityforms-read({ operation: "get-entry", arguments: { entry_id: 5 } })
// 3. mark it spam
gravityforms-write({ operation: "update-entry-status", arguments: { entry_id: 5, status: "spam" } })
// 4. delete it (irreversible, needs confirm)
gravityforms-write({ operation: "delete-entry", arguments: { entry_id: 5, confirm: true } })

The dispatchers appear under EMCP Tools → Tools → Plugins → Forms, grouped as one section. Each plugin is a card with its two toggles, read (on) and write (off by default), listing the operations it covers. Toggles grey out with a hint when the plugin isn’t active.

Pro bundles an emcp-plugins/forms Agent Skill that teaches a connected agent the whole model, the two-dispatcher pattern, per-plugin operation support, the entries/PII handling, and the confirm: true delete rule, so it drives any of the eight plugins correctly.