View Categories

Everest Forms WP Abilities API Integration

Everest Forms registers its core operations as abilities through the WordPress Abilities API, making them available to AI agents, automation tools, and external integrations — including Claude Desktop and custom LLM agents via the MCP protocol.

Each ability maps to a specific Everest Forms operation and enforces the same permission model as the plugin’s REST API — only users with the correct WordPress capability can execute it.

Prerequisites #

  • WordPress 6.0+ and PHP 7.4+
  • Everest Forms (free version) installed and activated — version 3.4.0 or later
  • A WordPress user with Administrator role or a role that has Everest Forms capabilities assigned
  • An Application Password for the user — generated from WordPress Admin → Users → Profile → Application Passwords
  • An MCP-compatible client — Claude Desktop, a custom agent, or any HTTP client that speaks JSON-RPC 2.0

Setup: Connect Claude Desktop to Your Site #

Step 1 — Install the MCP Adapter plugin #

  1. Download the latest release ZIP from the WordPress/mcp-adapter GitHub releases page.
  2. Go to WordPress Admin → Plugins → Add New → Upload Plugin and install the ZIP.
  3. Activate the plugin.

Step 2 — Generate an Application Password #

  1. Go to WordPress Admin → Users → Profile.
  2. Scroll down to Application Passwords.
  3. Enter a name (e.g. Claude Desktop) and click Add New Application Password.
  4. Copy the generated password — you will not see it again.

Step 3 — Add the MCP server to Claude Desktop #

Open the Claude Desktop configuration file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%Claudeclaude_desktop_config.json

Add the following entry:

{
  "mcpServers": {
    "everestforms-site": {
      "command": "npx",
      "args": ["-y", "@automattic/mcp-wordpress-remote"],
      "env": {
        "WP_API_URL": "https://yoursite.com/wp-json/mcp/mcp-adapter-default-server",
        "WP_API_USERNAME": "your-admin-username",
        "WP_API_PASSWORD": "xxxx xxxx xxxx xxxx xxxx xxxx"
      }
    }
  }
}

Replace yoursite.com, the username, and the Application Password with your own values

Step 3 — Restart Claude Desktop #

After saving the config, restart Claude Desktop. The Everest Forms abilities will be discovered automatically and available as tools in every conversation.

Using Everest Forms Abilities in Claude Desktop #

Once connected, you can manage your forms and entries in plain English. Claude Desktop resolves your intent to the matching ability and executes it with the correct parameters — no manual API calls needed.

Example prompts:

  • List all my published forms.
  • Create a contact form with name, email, phone, and a message field.
  • How many unread entries does the Job Application form have?
  • Mark all entries from last week as read.
  • Duplicate the Newsletter Signup form and rename it to Newsletter Signup — Summer 2026.
  • Show me the analytics summary across all forms.

Available Abilities #

All abilities are registered under the everest-forms namespace. The MCP endpoint exposes 22 abilities across five categories.

Forms #

AbilityDescription
list-formsList all forms with id, title, and status. Accepts limit (default 50) and status filter.
get-formGet a single form including its fields, settings, and layout structure.
create-formCreate a new form from a descriptor. New forms are created inactive by default — pass status: "publish" to make them live immediately.
update-formUpdate an existing form’s title, fields, layout, or settings. Supports dry_run for preview without saving.
delete-formPermanently delete a form by ID.
duplicate-formDuplicate an existing form and return the new form ID.
update-form-statusChange a form’s status to publish, draft, or trash.
list-field-typesList all field types registered on the site, including which addon each type requires.

Entries #

AbilityDescription
list-entriesList entries for a form. Accepts limit, offset, and status filter (read, unread, starred).
get-entryGet the full field data for a single entry by ID.
create-entryProgrammatically submit an entry for a form.
update-entry-fieldsPatch field values on an existing entry.
update-entry-statusChange an entry’s status to read, unread, starred, or trash.
delete-entryDelete a single entry. Pass permanent: true for a hard delete.
bulk-delete-entriesDelete multiple entries by ID array. Pass permanent: true for hard delete.
set-entry-starredStar or unstar an entry.
set-entry-viewedMark an entry as read or unread.
count-entriesReturn the total entry count for a form, optionally filtered by status.

Addons #

AbilityDescription
list-addonsList all installed Everest Forms addons with their active status and EVF feature toggle state.
describe-field-typeReturn the full JSON schema for a field type, including supported properties and required addon.
activate-addonActivate an installed Everest Forms addon by plugin file path. Handles both WP activation and the EVF feature toggle.

Analytics #

AbilityDescription
analytics-summaryReturn a high-level snapshot — total forms, total entries, entries per form, and entries over a date range.

Permissions #

Each ability enforces the same capability checks as the Everest Forms REST API:

  • Viewing forms and entries requires everest_forms_view_forms or everest_forms_view_entries
  • Creating or editing forms requires everest_forms_create_forms or everest_forms_edit_forms
  • Deleting forms or entries requires everest_forms_delete_forms or everest_forms_delete_entries
  • Activating addons requires activate_plugins — Administrator level

Unauthenticated requests are rejected with HTTP 401. Users without the required capability receive a 403 for that specific ability while still being able to call abilities they do have access to.

Tools that modify site state (create, update, delete operations) carry MCP destructiveHint: true annotations. Claude Desktop reads these and shows a confirmation prompt before invoking any destructive ability.

Advanced: create-form Descriptor #

The create-form and update-form abilities accept a rich descriptor beyond a simple field list.

Flat fields array #

The simplest approach — one field per row:

{
  "title": "Contact Form",
  "status": "publish",
  "fields": [
    { "type": "first-name", "label": "First Name", "required": true },
    { "type": "email",      "label": "Email",       "required": true },
    { "type": "textarea",   "label": "Message" }
  ]
}

Multi-column layout #

Use the layout array and assign grid positions to place multiple fields side by side:

{
  "title": "Registration Form",
  "layout": [
    {
      "row": [
        { "type": "first-name", "label": "First Name", "grid": 1 },
        { "type": "last-name",  "label": "Last Name",  "grid": 2 }
      ]
    },
    { "row": [{ "type": "email", "label": "Email" }] }
  ]
}

Multi-part (step) forms #

Requires the Multi-Part Forms addon. Define steps in multi_part.parts and assign each row to a step with part: N:

{
  "title": "Job Application",
  "multi_part": { "parts": [{ "name": "Personal Info" }, { "name": "Experience" }] },
  "layout": [
    { "row": [{ "type": "first-name", "label": "First Name" }], "part": 1 },
    { "row": [{ "type": "textarea",   "label": "Previous Role" }],  "part": 2 }
  ]
}

Dry-run mode #

Pass "dry_run": true to validate the descriptor and preview the resulting field list without writing anything to the database.

Addon-gating #

If a field type requires an inactive addon, the endpoint returns a structured error naming the addon and whether to install or activate it:

{
  "code": "unregistered_type",
  "message": "Field type "likert" requires the Survey, Polls and Quiz addon.",
  "data": {
    "type": "likert",
    "addon": "Survey, Polls and Quiz",
    "plugin": "everest-forms-survey-polls-quiz/everest-forms-survey-polls-quiz.php",
    "action": "activate"
  }
}

Call activate-addon with the returned plugin value, then retry the original request.

The MCP Endpoint Directly #

You can also call the endpoint from any HTTP client without Claude Desktop. The transport is JSON-RPC 2.0 over HTTP POST.

# Sanity check
curl -s https://yoursite.com/wp-json/everest-forms/v1/mcp   -u "admin:your_application_password"

# Call an ability
curl -s -X POST https://yoursite.com/wp-json/everest-forms/v1/mcp   -u "admin:your_application_password"   -H "Content-Type: application/json"   -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": { "name": "list-forms", "arguments": { "status": "publish" } }
  }'

Supported JSON-RPC methods: initialize, tools/list, tools/call, ping. The endpoint also supports batch requests — send an array of request objects to execute multiple calls in a single round-trip.

WordPress Abilities API Integration #

When the WordPress Abilities API plugin is installed, Everest Forms additionally registers all 22 abilities into the WP Abilities registry under the everest-forms category. This exposes them to any Abilities-aware plugin or MCP adapter through the standard /wp-json/wp/v2/abilities REST surface — no additional configuration required.

If the Abilities API is not installed, Everest Forms’ own MCP endpoint works independently. An admin notice appears on Everest Forms screens with a link to install the API.

Frequently Asked Questions #

Can I restrict which abilities a user can access? #

Yes. Each ability enforces the corresponding Everest Forms capability. Use a plugin like User Role Editor to assign or remove capabilities per role to scope access precisely.

Are new AI-created forms live immediately? #

No. Forms created via create-form are inactive by default and do not collect submissions until explicitly published. Pass "status": "publish" to make a form live on creation.

Does the endpoint require HTTPS? #

Not technically, but it is strongly recommended. Application Passwords transmitted over plain HTTP expose credentials. Always use HTTPS in production.

Powered by BetterDocs

Scroll to top