MCP WordPress Remote

Local stdio bridge from an MCP client to a WordPress site's MCP Adapter endpoint, with sign-in handled

Official · Automattic TypeScript Local · stdio ProductivityE-commerce

76 popularity score ★ 187 ↓ 54k/wk

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs WP_API_URL. Replace each <NAME> with your value.

Claude CodeTerminal
claude mcp add wordpress-remote -e WP_API_URL=<WP_API_URL> -- npx -y @automattic/mcp-wordpress-remote
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "wordpress-remote": {
      "command": "npx",
      "args": [
        "-y",
        "@automattic/mcp-wordpress-remote"
      ],
      "env": {
        "WP_API_URL": "<WP_API_URL>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "wordpress-remote": {
      "command": "npx",
      "args": [
        "-y",
        "@automattic/mcp-wordpress-remote"
      ],
      "env": {
        "WP_API_URL": "<WP_API_URL>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "wordpress-remote": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@automattic/mcp-wordpress-remote"
      ],
      "env": {
        "WP_API_URL": "<WP_API_URL>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.wordpress-remote]
command = "npx"
args = ["-y", "@automattic/mcp-wordpress-remote"]

[mcp_servers.wordpress-remote.env]
WP_API_URL = "<WP_API_URL>"
Gemini CLITerminal
gemini mcp add --scope user -e WP_API_URL=<WP_API_URL> wordpress-remote npx -- -y @automattic/mcp-wordpress-remote
Local (from source)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs WP_API_URL. Replace each <NAME> with your value.

FirstTerminal
git clone https://github.com/Automattic/mcp-wordpress-remote.git
cd mcp-wordpress-remote
npm install
npm run build
Claude CodeTerminal
claude mcp add wordpress-remote -e WP_API_URL=<WP_API_URL> -- node '<ABSOLUTE_PATH_TO_CLONE>/dist/proxy.js'
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "wordpress-remote": {
      "command": "node",
      "args": [
        "<ABSOLUTE_PATH_TO_CLONE>/dist/proxy.js"
      ],
      "env": {
        "WP_API_URL": "<WP_API_URL>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "wordpress-remote": {
      "command": "node",
      "args": [
        "<ABSOLUTE_PATH_TO_CLONE>/dist/proxy.js"
      ],
      "env": {
        "WP_API_URL": "<WP_API_URL>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "wordpress-remote": {
      "type": "stdio",
      "command": "node",
      "args": [
        "<ABSOLUTE_PATH_TO_CLONE>/dist/proxy.js"
      ],
      "env": {
        "WP_API_URL": "<WP_API_URL>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.wordpress-remote]
command = "node"
args = ["<ABSOLUTE_PATH_TO_CLONE>/dist/proxy.js"]

[mcp_servers.wordpress-remote.env]
WP_API_URL = "<WP_API_URL>"
Gemini CLITerminal
gemini mcp add --scope user -e WP_API_URL=<WP_API_URL> wordpress-remote node -- '<ABSOLUTE_PATH_TO_CLONE>/dist/proxy.js'

Settings 12

WP_API_URL Required: Full URL of the site's MCP Adapter server, e.g. https://site/wp-json/mcp/mcp-adapter-default-server; a bare domain resolves to the default server.
OAUTH_ENABLED Optional: Set to true to sign in through the browser with OAuth 2.1; off by default.
JWT_TOKEN Optional: JWT sent to the site instead of OAuth.
WP_API_USERNAME Optional: WordPress username for application-password sign-in.
WP_API_PASSWORD Optional: WordPress application password, used with WP_API_USERNAME.
CUSTOM_HEADERS Optional: Extra headers on every request, as JSON or Name:value pairs separated by commas.
WOO_CUSTOMER_KEY Optional: WooCommerce consumer key, used with WOO_CUSTOMER_SECRET.
WOO_CUSTOMER_SECRET Optional: WooCommerce consumer secret.
OAUTH_CALLBACK_PORT Optional: Fixed port for the local OAuth callback; picked automatically when unset.
WP_API_TIMEOUT_MS Optional: Timeout for forwarded requests, 120000 ms by default.
HTTPS_PROXY Optional: Proxy for outgoing requests; SOCKS_PROXY, ALL_PROXY and HTTP_PROXY also work.
LOG_FILE Optional: Path of a log file; LOG_LEVEL 0-3 sets the detail, 2 by default.

What it does

MCP WordPress Remote is a small Node program from Automattic. It runs on your machine and passes messages back and forth between an MCP client that speaks stdio and the HTTP MCP endpoint on a WordPress site. That endpoint comes from the MCP Adapter plugin, which by default serves at /wp-json/mcp/mcp-adapter-default-server. The proxy has no tools of its own. The tools, resources and prompts the assistant sees are whatever the site's MCP Adapter exposes. The proxy forwards messages as they are and does not negotiate the protocol version itself.

What it adds is the connection layer. It can sign in by running an OAuth 2.1 browser flow with PKCE and saving the tokens. It can also send a JWT, a WordPress application password, WooCommerce consumer keys or any custom headers. Traffic can go through a SOCKS or HTTP proxy, or the macOS system proxy. Request and initialize timeouts can be tuned, and a file log can be kept. The README says to skip the proxy when your client can connect to the site's HTTP endpoint and sign in by itself.

One thing the README gets wrong: it lists 7665 as the default OAuth callback port and elsewhere says 3000. In the v0.5.1 source (src/lib/config.ts, src/lib/port-utils.ts), the port is left unset unless OAUTH_CALLBACK_PORT is given. The proxy then reuses a port saved from an earlier sign-in, or else picks one from a hash of the site URL in the range 3335-49151, and falls back to a random free port. The default OAuth scopes are read and write, which can be changed with OAUTH_SCOPES, a setting the README's table leaves out.

What it needs

RuntimeNode.js

Node.js (the README says 22+; the v0.5.1 start-up check accepts 18 or later). A WordPress site with the MCP Adapter plugin installed and active, and a WordPress user account with enough permissions. One way to sign in: OAuth enabled on the site, a JWT that the site accepts, an application password, or custom headers. The OAuth flow opens a browser on the same machine.

Limits

It relays only what the site's MCP Adapter exposes and adds no tools itself. It does not translate between MCP protocol revisions. If the connection fails during initialize, it returns a degraded response with no capabilities, refuses later requests locally, and does not retry. The method-only request format of the archived wordpress-mcp plugin was removed, so sites still on that plugin need the MCP Adapter. OAuth is off unless OAUTH_ENABLED=true. The README says the licence is GPL v2 or later, but package.json and npm say MIT. The README's callback-port defaults (7665, 3000) do not match the code.

Who it suits

Suits people whose MCP client can only start local commands, or cannot sign in to their WordPress site, and who want OAuth, JWT, application-password or WooCommerce-key auth plus proxy and timeout settings. If your client already supports Streamable HTTP with headers, the README says to connect it straight to the site's MCP Adapter endpoint instead (listed here as mcp-adapter). That is the WordPress plugin that actually serves the tools, and you need it either way. What the assistant can do depends on that site's configuration, not on this package.

Similar servers