WP Manifestindependent plugin directory
manifest / unclassified / ai-landing-pages

AI Landing Pages

WordPress plugin: create landing page drafts from an AI client over MCP, validated against a page-type schema and rendered as core blocks.

★ 0stars

Install

Download source zip No release zip yet

This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/innaplx/ai-landing-pages/archive/refs/heads/main.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

A WordPress plugin that lets marketing create landing pages from their own AI client, like Claude, over MCP. The AI sends content only. The plugin checks it against a page type schema, builds the page from core blocks and saves it as a draft that looks like the active theme and is edited in the normal block editor.

The design and the reasoning behind it are in SOLUTION.md.

Requirements

  • WordPress 6.9 or later (the Abilities API is in core). Tested on 7.1 with Twenty Twenty-Five and Twenty Twenty-Four.
  • The WordPress MCP Adapter plugin, active.
  • Node.js, for the @automattic/mcp-wordpress-remote proxy that Claude Desktop runs.
  • Claude Desktop, or any other MCP client.

Install

  1. Copy this folder to wp-content/plugins/ai-landing-pages.
  2. Install and activate the MCP Adapter plugin.
  3. Activate AI Landing Pages.

The MCP endpoint is then http://YOUR-SITE/wp-json/mcp/mcp-adapter-default-server.

Create a user and an Application Password

  1. Create a WordPress user with the Editor role (any role with edit_pages works). Each person should use their own user, so pages are attributed to them.
  2. Go to Users > Profile > Application Passwords, add a name such as "Claude", and copy the password. It is shown only once.

On a local site without HTTPS, Application Passwords may need to be enabled first (for example, set WP_ENVIRONMENT_TYPE to local).

Connect Claude Desktop

Open Settings > Developer > Edit Config and add:

{
  "mcpServers": {
    "wordpress-ai-landing": {
      "command": "npx",
      "args": ["-y", "@automattic/mcp-wordpress-remote@latest"],
      "env": {
        "WP_API_URL": "http://YOUR-SITE/wp-json/mcp/mcp-adapter-default-server",
        "WP_API_USERNAME": "your-wp-username",
        "WP_API_PASSWORD": "xxxx xxxx xxxx xxxx xxxx xxxx",
        "OAUTH_ENABLED": "false"
      }
    }
  }
}

Restart Claude Desktop fully (quit it from the tray, not just the window). The server should show as running under Settings > Developer.

Try it

What landing page types can you create on our WordPress site?
Create a webinar landing page for "Scaling Onboarding with AI" on November 18 at 17:00 CET.
Speakers: Dana Levi, Head of Product Adoption, and Tom Cohen, Solutions Architect.
Registration link: https://example.com/register. Add an agenda with 4 points and 3 FAQ questions.
Create the same webinar page, but add a testimonials section and a pricing table.

The last one asks for sections the type doesn't have. Claude should build the page without them and say why.

Every page is saved as a draft. Claude returns an edit link and a preview link; review and publish in WordPress.

Add a page type

If the new type only reuses existing sections (hero, speaker, agenda, faq, cta), drop a JSON file in page-types/. It shows up in list-page-types right away, with no code change. Reused sections must keep the fields their renderer needs:

{
  "slug": "product-launch",
  "label": "Product launch",
  "description": "Announces a new product and sends people to try it.",
  "sections": {
    "hero": {
      "label": "Hero",
      "description": "Product name, launch date and a main button.",
      "min": 1, "max": 1, "position": "first",
      "fields": {
        "headline":     { "type": "string", "required": true,  "max_length": 80 },
        "subheadline":  { "type": "string", "required": false, "max_length": 200 },
        "date_time":    { "type": "string", "required": true,  "max_length": 60 },
        "button_label": { "type": "string", "required": true,  "max_length": 30 },
        "button_url":   { "type": "url",    "required": true }
      }
    },
    "faq": {
      "label": "FAQ item",
      "description": "One question and answer. Optional; repeat for each question.",
      "min": 0, "max": 6,
      "fields": {
        "question": { "type": "string", "required": true, "max_length": 120 },
        "answer":   { "type": "text",   "required": true, "max_length": 400 }
      }
    },
    "cta": {
      "label": "Closing call to action",
      "description": "Final push to try the product.",
      "min": 1, "max": 1, "position": "last",
      "fields": {
        "headline":     { "type": "string", "required": true, "max_length": 80 },
        "button_label": { "type": "string", "required": true, "max_length": 30 },
        "button_url":   { "type": "url",    "required": true }
      }
    }
  }
}
  • sections: the section types the page may use, keyed by section name.
  • min / max: how many times the section may appear. min: 0 makes it optional, max above 1 makes it repeatable.
  • position: optional, first or last.
  • fields: each field has a type (string, text for longer text with paragraphs, url or list), required, and limits: max_length, and min_items / max_items for lists.

A new kind of section (say, a download form) needs the JSON plus one render_<name> method in includes/class-page-builder.php.

Project structure

ai-landing-pages.php          Plugin bootstrap, checks for the Abilities API, loads the CSS on landing pages only
includes/
  class-abilities.php         The three abilities exposed over MCP
  class-registry.php          Loads page types from page-types/*.json
  class-validator.php         Checks the AI's input against the schema and sanitizes it
  class-page-builder.php      Turns sections into core blocks and saves the draft
page-types/
  webinar.json                The example page type
assets/
  alp.css                     Layout-only styles built on theme presets
SOLUTION.md                   Solution document