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 #
- Download the latest release ZIP from the WordPress/mcp-adapter GitHub releases page.
- Go to WordPress Admin → Plugins → Add New → Upload Plugin and install the ZIP.
- Activate the plugin.
Step 2 — Generate an Application Password #
- Go to WordPress Admin → Users → Profile.
- Scroll down to Application Passwords.
- Enter a name (e.g. Claude Desktop) and click Add New Application Password.
- 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 #
| Ability | Description |
|---|---|
list-forms | List all forms with id, title, and status. Accepts limit (default 50) and status filter. |
get-form | Get a single form including its fields, settings, and layout structure. |
create-form | Create a new form from a descriptor. New forms are created inactive by default — pass status: "publish" to make them live immediately. |
update-form | Update an existing form’s title, fields, layout, or settings. Supports dry_run for preview without saving. |
delete-form | Permanently delete a form by ID. |
duplicate-form | Duplicate an existing form and return the new form ID. |
update-form-status | Change a form’s status to publish, draft, or trash. |
list-field-types | List all field types registered on the site, including which addon each type requires. |
Entries #
| Ability | Description |
|---|---|
list-entries | List entries for a form. Accepts limit, offset, and status filter (read, unread, starred). |
get-entry | Get the full field data for a single entry by ID. |
create-entry | Programmatically submit an entry for a form. |
update-entry-fields | Patch field values on an existing entry. |
update-entry-status | Change an entry’s status to read, unread, starred, or trash. |
delete-entry | Delete a single entry. Pass permanent: true for a hard delete. |
bulk-delete-entries | Delete multiple entries by ID array. Pass permanent: true for hard delete. |
set-entry-starred | Star or unstar an entry. |
set-entry-viewed | Mark an entry as read or unread. |
count-entries | Return the total entry count for a form, optionally filtered by status. |
Addons #
| Ability | Description |
|---|---|
list-addons | List all installed Everest Forms addons with their active status and EVF feature toggle state. |
describe-field-type | Return the full JSON schema for a field type, including supported properties and required addon. |
activate-addon | Activate an installed Everest Forms addon by plugin file path. Handles both WP activation and the EVF feature toggle. |
Analytics #
| Ability | Description |
|---|---|
analytics-summary | Return 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_formsoreverest_forms_view_entries - Creating or editing forms requires
everest_forms_create_formsoreverest_forms_edit_forms - Deleting forms or entries requires
everest_forms_delete_formsoreverest_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.
