Connecting Claude to a WordPress Site via MCP
Overview
WordPress has no first-party MCP server, but the EMCP Tools plugin (free,
WordPress.org-style install) turns any self-hosted WP install into one — exposing
posts, media, pages, users, plugins/themes, and (if Elementor is installed) full
page-building as MCP tools, reachable over HTTP with OAuth. This skill covers the
one-time connection; once connected, Claude uses the exposed tools normally.
Two sides to this: something a site owner with wp-admin access does once in the
browser, and something you (the agent) do in a real interactive terminal — not a
chat window, because the OAuth step needs an interactive picker.
When to Use
- User asks to publish/edit a WordPress site and no WordPress MCP tool is connected yet
- "Connect Claude to my blog/WordPress" or similar
- NOT for wordpress.com-hosted sites without plugin install access — EMCP Tools needs
to be installed as a plugin, which requires a self-hosted (or Business-tier
wordpress.com) site
Steps
1. Site owner installs EMCP Tools (wp-admin, in the browser)
- Download the packaged plugin ZIP from the
EMCP Tools releases page —
the asset named
emcp-tools-X.Y.Z.zip. Not "Source code (zip)" — that's the
raw repo, not an installable plugin.
wp-admin → Plugins → Adicionar novo/Add New → Enviar plugin/Upload Plugin → pick
the ZIP → Install → Activate.
- If a banner says something like "Complete EMCP Tools Activation Now", click it —
the plugin isn't fully wired up until that finishes.
- Open the EMCP Tools menu item → Connection tab. Note the Server URL,
shown in the form
https://SITE/wp-json/mcp/emcp-tools-server.
- Leave OAuth sign-in for AI clients enabled (it's the default) — this lets the
agent authenticate by signing in, with no static password/token to copy or store.
Destructive operations (delete content, change plugins/themes) default to
disabled; leave that off until there's a real need.
2. Register the server (agent side)
claude mcp add --scope user --transport http <name> https://SITE/wp-json/mcp/emcp-tools-server
--scope user makes it available in every project, not just the current one. Confirm
it was added:
claude mcp list
It shows up as ! Needs authentication — expected, next step fixes that.
3. Authenticate (must be an interactive terminal — chat UI can't do this)
This step needs a real terminal window (PowerShell, Terminal.app, etc.) running
claude interactively — a non-interactive session (like a chat-only agent surface)
can register the server but cannot complete OAuth, since it requires an interactive
picker and a browser popup.
- In that terminal, run
claude, then type /mcp — wait for the autocomplete
suggestion box to appear before pressing Enter. Typing it and hitting Enter too
fast sends /mcp as a plain chat message instead of running the command (the
agent will just reply conversationally — that's the tell something went wrong).
- Arrow down to the server's name, Enter.
- Select "1. Authenticate", Enter. A browser window opens to the site's login
page.
- Sign in and authorize. The browser redirects to a
localhost URL and may show a
connection error page — this is expected, not a failure; it's the OAuth
loopback redirect completing, and there's nothing listening on that port to serve
a nice page. Look for "Authentication successful" on the authorize page itself
before the redirect, or just check status in the next step.
- Back in the terminal, confirm:
claude mcp list
Now shows ✔ Connected.
Common Mistakes
| Symptom |
Cause |
Fix |
/mcp gets a conversational reply instead of a menu |
Typed too fast, sent as chat message |
Retype, pause until the autocomplete dropdown shows, then Enter |
| Terminal closed mid-flow |
Accidental close |
Reopen, run claude, /mcp again — the server registration persists, just re-select it and Authenticate again |
| Browser shows a connection error after login |
Normal OAuth loopback redirect to localhost with nothing serving it |
Ignore it, go back to the terminal and check claude mcp list |
| Downloaded the wrong ZIP from GitHub releases |
Grabbed "Source code (zip)" instead of the packaged emcp-tools-X.Y.Z.zip asset |
Re-download the correctly named asset — source-code zips aren't installable plugins |
Still shows needs authentication after login |
OAuth didn't complete, or session expired |
Run /mcp → select server → Authenticate again |
Notes
- This works for any MCP-exposing WordPress plugin with a Connection/Server URL
screen, not just EMCP Tools specifically — the registration and OAuth steps are
the same shape.
- If OAuth isn't offered and only a static token/API key is available, treat it like
any other secret: don't paste it into chat, register it as a header/env var, and
prefer a scoped WordPress user role over the site's main admin account.
1---2name: connect-wordpress-mcp3description: Use when the user wants Claude to publish posts, edit pages, or manage a self-hosted WordPress site directly — connecting Claude Code (or any MCP client) to a WordPress blog via an MCP server, especially when "connect Claude to my WordPress/blog", "let Claude publish articles", or "manage my site with AI" comes up.4---56# Connecting Claude to a WordPress Site via MCP78## Overview910WordPress has no first-party MCP server, but the **EMCP Tools** plugin (free,11WordPress.org-style install) turns any self-hosted WP install into one — exposing12posts, media, pages, users, plugins/themes, and (if Elementor is installed) full13page-building as MCP tools, reachable over HTTP with OAuth. This skill covers the14one-time connection; once connected, Claude uses the exposed tools normally.1516Two sides to this: something a **site owner with wp-admin access** does once in the17browser, and something you (the agent) do in a **real interactive terminal** — not a18chat window, because the OAuth step needs an interactive picker.1920## When to Use2122- User asks to publish/edit a WordPress site and no WordPress MCP tool is connected yet23- "Connect Claude to my blog/WordPress" or similar24- NOT for wordpress.com-hosted sites without plugin install access — EMCP Tools needs25 to be installed as a plugin, which requires a self-hosted (or Business-tier26 wordpress.com) site2728## Steps2930### 1. Site owner installs EMCP Tools (wp-admin, in the browser)31321. Download the packaged plugin ZIP from the33 [EMCP Tools releases page](https://github.com/msrbuilds/elementor-mcp/releases) —34 the asset named `emcp-tools-X.Y.Z.zip`. **Not** "Source code (zip)" — that's the35 raw repo, not an installable plugin.362. `wp-admin → Plugins → Adicionar novo/Add New → Enviar plugin/Upload Plugin` → pick37 the ZIP → Install → Activate.383. If a banner says something like "Complete EMCP Tools Activation Now", click it —39 the plugin isn't fully wired up until that finishes.404. Open the **EMCP Tools** menu item → **Connection** tab. Note the **Server URL**,41 shown in the form `https://SITE/wp-json/mcp/emcp-tools-server`.425. Leave **OAuth sign-in for AI clients** enabled (it's the default) — this lets the43 agent authenticate by signing in, with no static password/token to copy or store.44 Destructive operations (delete content, change plugins/themes) default to45 disabled; leave that off until there's a real need.4647### 2. Register the server (agent side)4849```50claude mcp add --scope user --transport http <name> https://SITE/wp-json/mcp/emcp-tools-server51```5253`--scope user` makes it available in every project, not just the current one. Confirm54it was added:5556```57claude mcp list58```5960It shows up as `! Needs authentication` — expected, next step fixes that.6162### 3. Authenticate (must be an interactive terminal — chat UI can't do this)6364This step needs a real terminal window (PowerShell, Terminal.app, etc.) running65`claude` interactively — a non-interactive session (like a chat-only agent surface)66can register the server but cannot complete OAuth, since it requires an interactive67picker and a browser popup.68691. In that terminal, run `claude`, then type `/mcp` — **wait for the autocomplete70 suggestion box to appear before pressing Enter.** Typing it and hitting Enter too71 fast sends `/mcp` as a plain chat message instead of running the command (the72 agent will just reply conversationally — that's the tell something went wrong).732. Arrow down to the server's name, Enter.743. Select **"1. Authenticate"**, Enter. A browser window opens to the site's login75 page.764. Sign in and authorize. The browser redirects to a `localhost` URL and may show a77 **connection error page — this is expected**, not a failure; it's the OAuth78 loopback redirect completing, and there's nothing listening on that port to serve79 a nice page. Look for "Authentication successful" on the authorize page itself80 before the redirect, or just check status in the next step.815. Back in the terminal, confirm:8283```84claude mcp list85```8687Now shows `✔ Connected`.8889## Common Mistakes9091| Symptom | Cause | Fix |92|---|---|---|93| `/mcp` gets a conversational reply instead of a menu | Typed too fast, sent as chat message | Retype, pause until the autocomplete dropdown shows, then Enter |94| Terminal closed mid-flow | Accidental close | Reopen, run `claude`, `/mcp` again — the server registration persists, just re-select it and Authenticate again |95| Browser shows a connection error after login | Normal OAuth loopback redirect to `localhost` with nothing serving it | Ignore it, go back to the terminal and check `claude mcp list` |96| Downloaded the wrong ZIP from GitHub releases | Grabbed "Source code (zip)" instead of the packaged `emcp-tools-X.Y.Z.zip` asset | Re-download the correctly named asset — source-code zips aren't installable plugins |97| Still shows `needs authentication` after login | OAuth didn't complete, or session expired | Run `/mcp` → select server → Authenticate again |9899## Notes100101- This works for any MCP-exposing WordPress plugin with a Connection/Server URL102 screen, not just EMCP Tools specifically — the registration and OAuth steps are103 the same shape.104- If OAuth isn't offered and only a static token/API key is available, treat it like105 any other secret: don't paste it into chat, register it as a header/env var, and106 prefer a scoped WordPress user role over the site's main admin account.