Claude Desktop
One-click bundle (recommended)
Section titled “One-click bundle (recommended)”The fastest path, no config files to edit. In WordPress, open EMCP Tools → Connection, generate your credentials, pick Claude Desktop, and click Download .mcpb bundle. Double-click the downloaded .mcpb file to install the server in Claude Desktop.
The bundle is an MCPB package with your site URL and a fresh Application Password baked in. It’s fully self-contained: it ships a single server/index.js (the proxy compiled to CommonJS with your credentials embedded) that runs on Claude Desktop’s built-in Node.js: nothing to install, no npx, no separate Node.js on your machine, no PATH setup.
The
.mcpbfile contains a live credential. Delete it after importing. Revoke or rotate the password any time under Users → Profile → Application Passwords.
If you’d rather configure it by hand, the manual options below still work.
Sign in with OAuth (custom connector)
Section titled “Sign in with OAuth (custom connector)”For a remote HTTPS site, add EMCP Tools as a custom connector: sign in through the browser, with no password or proxy to set up.
-
In Claude Desktop, open Settings → Connectors and click Add custom connector.
-
Give it a name (e.g.
emcp-tools) and paste your server URL:https://your-site.com/wp-json/mcp/emcp-tools-server -
Leave the OAuth Client ID and Secret (under Advanced) empty, then save.
-
When your browser opens, approve the connection from your WordPress login.
Requires an HTTPS site with OAuth enabled (EMCP Tools → Connection: on by default on HTTPS). Only administrators can approve; revoke any time under Connected apps. Custom connectors need a recent Claude Desktop build, if you don’t see the option, use the bundle above or the manual config below.
Manual configuration
Section titled “Manual configuration”Claude Desktop reads MCP server configs from claude_desktop_config.json. Location:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
Claude Desktop uses stdio-only, no HTTP. So you need either WP-CLI on the same machine or the bundled Node.js proxy.
stdio via WP-CLI (best for local WordPress)
Section titled “stdio via WP-CLI (best for local WordPress)”{ "mcpServers": { "emcp-tools": { "command": "wp", "args": [ "mcp-adapter", "serve", "--server=emcp-tools-server", "--user=admin", "--path=/absolute/path/to/wordpress" ] } }}On Windows with Laragon, use the full path to php.exe and wp-cli.phar:
{ "mcpServers": { "emcp-tools": { "command": "C:\\laragon\\bin\\php\\php-8.4.15-nts-Win32-vs17-x64\\php.exe", "args": [ "C:\\wp-cli\\wp-cli.phar", "mcp-adapter", "serve", "--server=emcp-tools-server", "--user=admin", "--path=C:\\laragon\\www\\your-site" ] } }}Restart Claude Desktop after editing the config.
Node.js HTTP proxy (best for remote WordPress)
Section titled “Node.js HTTP proxy (best for remote WordPress)”Use this when WordPress is on a remote server (e.g. shared hosting) but Claude Desktop is on your laptop. Claude Desktop launches the proxy as a local subprocess and talks to it over stdio, so the proxy file must live on the same machine as Claude Desktop, not on the server. There’s no way for Claude Desktop to execute a file that only exists on your WordPress host.
You have two ways to run it: the zero-install npx runner (recommended), or a local copy of the proxy file.
Option 1: npx runner (recommended, nothing to maintain)
Section titled “Option 1: npx runner (recommended, nothing to maintain)”npx downloads and runs the proxy on demand and always fetches the latest version, so there’s nothing to copy or keep in sync as the plugin updates:
{ "mcpServers": { "emcp-tools": { "command": "npx", "args": ["-y", "@msrbuilds/emcp-proxy@latest"], "env": { "WP_URL": "https://your-site.com", "WP_USERNAME": "admin", "WP_APP_PASSWORD": "xxxx xxxx xxxx xxxx xxxx xxxx", "MCP_PROTOCOL_VERSION": "2024-11-05" } } }}Requires Node 18+ on the laptop running Claude Desktop. The first launch on a cold cache takes a moment while npx fetches the package; subsequent launches are cached.
Option 2: local copy of the proxy file
Section titled “Option 2: local copy of the proxy file”If you’d rather not use npx, the proxy ships in the plugin ZIP at bin/mcp-proxy.mjs. Extract that one file from the ZIP, save it anywhere on your laptop (e.g. C:\mcp\mcp-proxy.mjs or ~/mcp/mcp-proxy.mjs), and point args at that local path, not at the copy inside wp-content/plugins/... on your server:
{ "mcpServers": { "emcp-tools": { "command": "node", "args": ["C:\\local\\path\\to\\mcp-proxy.mjs"], "env": { "WP_URL": "https://your-site.com", "WP_USERNAME": "admin", "WP_APP_PASSWORD": "xxxx xxxx xxxx xxxx xxxx xxxx", "MCP_PROTOCOL_VERSION": "2024-11-05" } } }}The proxy is a single zero-dependency file, so a local copy keeps working against newer plugin versions as long as the server endpoint is unchanged, but you’ll need to re-extract it manually to pick up proxy fixes. Use Option 1 if you’d rather not track that.
Why MCP_PROTOCOL_VERSION?
Section titled “Why MCP_PROTOCOL_VERSION?”The MCP Adapter reports protocol version 2025-06-18, which some Claude Desktop builds reject during initialize. Setting MCP_PROTOCOL_VERSION to 2024-11-05 makes the proxy rewrite the version in the handshake so the connection succeeds. If your Claude Desktop build connects without it, you can drop the line.
The proxy handles WordPress’s Mcp-Session-Id header lifecycle automatically, and auto-detects pretty vs. plain permalinks. Node 18+ required on the client.
Verify
Section titled “Verify”After restarting Claude Desktop, click the slider icon next to the chat input. You should see emcp-tools listed under “Available tools” with a non-zero tool count.
If the server doesn’t appear, open the Claude Desktop logs:
- Windows:
%APPDATA%\Claude\Logs\mcp.log - macOS:
~/Library/Logs/Claude/mcp.log
Common errors:
wp: command not found→ use full paths tophp.exeandwp-cli.phar.Connection refused→ WordPress isn’t running or the URL is wrong.401 Unauthorized→ application password is wrong or has expired.