MCP Setup
Connect Claude Code, Claude Desktop or any MCP client to your site — one command or one config block — plus what to do when it says “Server disconnected”.
What MCP is here
The plugin ships an MCP server on a single endpoint of your own site, protected by a bearer token. Any MCP-capable client can connect to it and use all 85 tools — reading your design tokens, writing sections, managing versions.
Protocol revisions 2025-06-18, 2025-03-26 and 2024-11-05 are supported; the server picks the newest revision your client understands.
Get a token
Design Pages → MCP Connection (any role granted Design Page access), or Settings → MCP Connection for administrators managing everyone's tokens. Non-administrators see and revoke only their own.
The plaintext token is shown exactly once. It is stored hashed. Copy it before you navigate away.
Claude Code / VS Code — one command
The MCP Connection screen generates a ready-made command:
claude mcp add ...
The CLI writes the entry into .mcp.json itself — nothing to locate, no braces to balance, and no way to
land the entry in the wrong place. This is the recommended path.
Prefer to edit the file yourself? The screen also gives you a full config and an add-to-existing-config
snippet. The server type must be http.
View full sizeClaude Desktop
Copy the whole entry from the MCP Connection screen into your Claude Desktop config, including the env
block — that block holds the token the ${PPD_AUTH_HEADER} reference stands in for. Dropping it sends an
empty login.
The config launches the bridge via npx -y mcp-remote. You need Node installed; verify with:
node --version
npm install -g mcp-remote is optional — npx fetches it on demand.
About the endpoint address
The address in your config comes from WordPress itself, so it already matches whichever form your site
answers on. On sites with Plain permalinks, WordPress serves its API from index.php?rest_route=…
rather than /wp-json/…, and the generated address will look longer.
Do not "tidy" that address into
/wp-json/…. On a Plain-permalink site that address is a flat 404, and it is the single edit most likely to break a working config. To get the shorter form, change to any permalink structure other than Plain at Settings → Permalinks, then re-copy the config.
Subdirectory installs are handled the same way.
Troubleshooting
| Symptom | Cause and fix |
|---|---|
| The server never appears, and there is no error | The entry landed outside the mcpServers object. The file is still valid JSON, so nothing complains. Check the nesting. |
Server disconnected in Claude Desktop |
Almost always a wrong address or a stale config. Re-copy the config from the MCP Connection screen; your token stays valid. |
status 404 in the MCP log |
The address doesn't exist on your site. Quick test: if /feed/ and /wp-sitemap.xml also 404, no pretty URL works on the site and it's a site-wide permalink problem, not an MCP one. |
spawn mcp-remote ENOENT / 'mcp-remote' is not recognized |
The bridge was launched bare. It must be launched as npx -y mcp-remote. Re-copy the config. |
spawn npx ENOENT |
Node isn't installed or isn't on PATH. Install the LTS build and restart your computer. |
not valid MCP server configurations |
The entry declares a server type Claude Code doesn't accept. It must be http — not url. |
401 Unauthorized with a freshly generated token |
Some servers strip the Authorization header before PHP can read it, so every request looks anonymous. Add RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] to .htaccess, or the equivalent for your server. |
rest_forbidden |
The token's owner doesn't have Design Page access. Check Settings → Access. |
Bad Request on a local site over plain HTTP |
Add --allow-http to the bridge arguments. |
Invalid URL from mcp-remote --help |
Not a fault. mcp-remote treats its first argument as the server URL, so --help always fails. Verify your install with node --version instead. |
After changing a Claude Desktop config, quit the app fully from the tray — closing the window is not enough.
Next
- AI Best Practices — how to brief the AI once it's connected
- Getting Started