---
title: AI MCP Server
description: Connect AI agents to your WordPress sites via Model Context Protocol.
url: https://developers.wpengine.com/docs/ai/api/mcp/
image: https://developers.wpengine.com/og/docs/ai/api/mcp.png
---

# AI MCP Server

The **AI MCP service** lets you connect AI agents (like Claude Code CLI) to your WordPress sites using the [Model Context Protocol](https://modelcontextprotocol.io/). Search abilities, run WordPress operations, and manage sites — all from natural language conversations.

> **Closed beta**
>
> The MCP server is in closed beta. Endpoints, tools, and authentication may change before general availability.

[Connect Claude Code](https://developers.wpengine.com/docs/ai/api/mcp/how-to/configure-claude-code/)One command registers the server. Sign in, WordPress account, and first ability.

[Connect Claude Desktop](https://developers.wpengine.com/docs/ai/api/mcp/how-to/configure-claude-desktop/)Add a custom connector and sign in.

## What you can do

- **List your WordPress sites** — see all sites registered to your WP Engine account
- **Search abilities** — find WordPress operations by keyword across all your sites
- **Run abilities** — execute WordPress actions (create posts, manage plugins, etc.) from your AI agent
- **Manage content** — create, update, and delete posts and pages

All through natural language conversations in Claude Code CLI or any MCP client.

## How it works

1. **You configure** Claude Code CLI with the AI MCP service URL, then sign in with your WP Engine account
2. **Claude connects** to the MCP server when you start a session
3. **You ask Claude** to perform a WordPress operation in natural language
4. **Claude calls the MCP server** with the appropriate tool (`list_account_sites`, `search_abilities`, `run_site_ability`)
5. **The gateway verifies** your identity, checks permissions, and executes the ability on your WordPress site
6. **Claude returns** the result to you

The MCP server acts as a bridge between AI agents and your WordPress sites, translating natural language requests into WordPress API calls.

## Available tools

| Tool                            | Needs                        | Purpose                                                           |
| ------------------------------- | ---------------------------- | ----------------------------------------------------------------- |
| `list_account_sites`            | Site connection              | List active sites by default, or filter by registration status    |
| `search_abilities`              | WordPress account connection | Find abilities by keyword                                         |
| `list_site_abilities`           | WordPress account connection | List all abilities for a site                                     |
| `run_site_ability`              | WordPress account connection | Execute a WordPress ability                                       |
| `get_site_knowledge_base`       | Site connection              | Get a site’s knowledge base identity and searchable filter values |
| `search_knowledge_base`         | Site connection              | Search a site’s knowledge base for content that grounds an answer |
| `fetch_knowledge_base_document` | Site connection              | Fetch one full document from a site’s knowledge base by ID        |

All tools accept JSON-RPC 2.0 requests over Streamable HTTP. Exact input/output shapes are not duplicated here — fetch them live via `tools/list`, or inspect them interactively with [MCP Inspector](https://github.com/modelcontextprotocol/inspector).

## Example conversations

### List your sites

Terminal window

```bash
claude "Use the wpengine MCP server to list all my active WordPress sites"
```

Claude calls `list_account_sites` and returns, something like:

```text
You have 3 sites:
1. example.com - Active, WordPress account connected
2. staging.example.com - Active, needs a WordPress account connection
3. dev.example.com - Active, WordPress account connected
```

### Create a post

Terminal window

```bash
claude "Use the wpengine MCP server to create a draft post on example.com titled 'Hello from Claude' with the content 'This was created via MCP.'"
```

Claude:

1. Searches for the site’s **Create Post** ability (`wp-engine-ai/create-posts`)
2. Runs it with your input
3. Returns the new post ID and admin link

### Search abilities

Terminal window

```bash
claude "Use the wpengine MCP server to find WordPress abilities for managing comments"
```

Claude searches across your connected sites and returns matching abilities.

## Supported MCP clients

Any MCP client that speaks Streamable HTTP can connect. We test against:

| Client             | Client docs                                                                                                                               | Setup guide                                                                                                |
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| **Claude Code**    | [MCP in Claude Code](https://code.claude.com/docs/en/mcp)                                                                                 | [Connect Claude Code](https://developers.wpengine.com/docs/ai/api/mcp/how-to/configure-claude-code/)       |
| **Claude Desktop** | [Custom connectors using remote MCP](https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp) | [Connect Claude Desktop](https://developers.wpengine.com/docs/ai/api/mcp/how-to/configure-claude-desktop/) |
| **MCP Inspector**  | [Inspector](https://github.com/modelcontextprotocol/inspector)                                                                            | —                                                                                                          |

### Any other client

A client we don’t test needs three things from you:

- **Endpoint** — `https://api.ai.wpengine.com/v1/mcp`
- **Transport** — Streamable HTTP, JSON-RPC 2.0 (not stdio). `POST` carries requests; `GET` opens the server-to-client SSE stream and `DELETE` ends the session, both optional for a client that only needs request/response
- **Authentication** — MCP OAuth. The client finds the sign-in details from the server’s `401` response, signs you in, and sends `Authorization: Bearer <access token>` on every request

Everything else is the protocol’s, not ours. MCP OAuth is the supported way to sign in. The server still accepts API keys for now, but that support is deprecated and will stop. A client that cannot do MCP OAuth will lose access when it does. See [Authentication](https://developers.wpengine.com/docs/ai/api/authentication/#mcp-clients-authenticate-with-oauth).

## One server entry covers every site

The connection is scoped to your WP Engine account, not to one site, so you configure the server once no matter how many sites you have. There is no “select site” step: every site-scoped tool takes a `site_id`, and each call stands on its own. An agent can act on two of your sites in the same conversation without reconnecting, and there is no active site to forget or stale selection to clear.

---

[Authentication](https://developers.wpengine.com/docs/ai/api/authentication/#mcp-clients-authenticate-with-oauth)MCP clients authenticate a user with OAuth, so every call runs as the user who authenticated.

[Site and WordPress account connections](https://developers.wpengine.com/docs/ai/api/site-and-account-connections/)Registering a site grants nobody the ability to act on it, including the administrator who registered it. Which tools need which connection.

[Errors](https://developers.wpengine.com/docs/ai/api/mcp/troubleshooting/)Tools report failure as a normal response carrying an error.code, not an HTTP error. Fixes by symptom, and what each code means.

[Rate limits](https://developers.wpengine.com/docs/ai/api/mcp/troubleshooting/#youre-being-rate-limited)Reads and ability execution have separate per-minute budgets, both provisional. You are unlikely to reach either by hand; an agent in a loop will.

## Was this helpful?

Thanks for the feedback!

```json
{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://developers.wpengine.com/#website","name":"WP Engine Product Documentation","url":"https://developers.wpengine.com/","description":"Resources for developing, deploying, and scaling on WP Engine.","inLanguage":"en-US","keywords":["API documentation","product documentation","headless WordPress","managed WordPress hosting"],"publisher":{"@id":"https://wpengine.com/#organization"}}]}
```
