Skip to content

Hosted multi-site gateway

The hosted gateway lets you add one MCP connection to your AI client and reach every WordPress site in your EMCP Cloud workspace — no per-site config, no passwords on your machine. It’s the cloud-hosted counterpart to the proxy site registry, aimed at agencies managing many client sites.

The gateway reaches every site connected to your workspace, up to your plan’s connected-site limit:

PlanConnected sitesMulti-site gateway
Free3
Freelancer25
Agency100
Enterprise1000

Connecting a site beyond your plan’s limit is refused — disconnect a site or upgrade to add another.

Proxy site registryHosted gateway
Where it runsOn your machine (npx @msrbuilds/emcp-proxy)Hosted at gateway.emcptools.com
CredentialsYou store an App Password per site in envNone on your side — each site self-issues a revocable token
Which sitesWhatever you list in EMCP_SITESEvery site connected to your Cloud workspace
Setup per clientA JSON registry in each client configOne connector URL + sign in
Broadcast to allsite: "all"

Both expose the same emcp_list_sites / emcp_use_site tools, so switching feels the same.

  • An EMCP Cloud account on a paid plan that includes the gateway (Freelancer or Agency).
  • Each site you want to reach is running EMCP Tools 3.10.0+ and connected to that Cloud workspace with the gateway consent enabled (below).
  • An AI client that supports remote MCP servers with OAuth (Claude, Cursor, VS Code, …).
Section titled “Step 1 — Connect each site with the gateway consent”

On every site, go to EMCP Tools → Connection → Connect to EMCP Cloud. The connect form shows a checked-by-default box:

Also let me manage this site through the EMCP gateway (recommended)

Leave it checked and complete the connection. The site then self-issues a scoped, revocable “gateway” credential and hands it to EMCP Cloud. No password ever leaves the site — it’s an OAuth token issued by the site’s own server, and you can revoke it at any time (see Revoking access). Unchecking the box still connects the site for backup/sync, but it won’t appear in the gateway.

The “EMCP Gateway” entry shows up under Users → Authorized Apps on each site once provisioned.

Step 2 — Add the gateway to your AI client

Section titled “Step 2 — Add the gateway to your AI client”

Add a single remote MCP server pointing at:

https://gateway.emcptools.com/mcp

Your client discovers authentication automatically (via /.well-known/oauth-protected-resource) and walks you through signing in to EMCP Cloud. There are no per-site credentials to paste.

For example, in Claude Code:

Terminal window
claude mcp add --transport http emcp-gateway https://gateway.emcptools.com/mcp

then run /mcp and complete the sign-in. Other clients accept the same URL in their “add remote MCP server / connector” flow.

Once connected, the gateway advertises the standard EMCP tool catalog plus three helpers:

  • emcp_list_sites — list the sites in your workspace (id, name, URL).
  • emcp_use_site — set the active site for the rest of the session: { "site": "acme" } (accepts the site id or its URL).
  • describe-site — a site’s fingerprint (Elementor version, Pro, active integrations, tool count) so the agent knows what a specific site supports.

You can also target a single call without switching the active site by passing site in any tool’s arguments:

{ "site": "acme", "post_id": 42 }

If a tool isn’t available on the targeted site (a Pro tool on a free site, or one you’ve disabled), the gateway returns a clear tool_unavailable instead of failing silently. A site that’s offline returns site_unavailable — one site being down never breaks the others.

Broadcasting to every site — site: "all"

Section titled “Broadcasting to every site — site: "all"”

Pass site: "all" to run a call against every site in the workspace at once. You get back a per-site status array (which succeeded, which were unreachable, which lack the tool):

{ "site": "all" }

Reads (list, get, search, audit, …) broadcast freely. Writes are gated twice, on purpose:

  1. Workspace opt-in — off by default. Enable it in the Cloud dashboard under Account → Sites → “Allow broadcast writes”.
  2. Per-call confirm — even with the opt-in on, a write broadcast must include confirm: true.

If either is missing, the gateway refuses the write and calls no sites. Broadcasts are concurrency-capped, so a large workspace fans out in controlled batches.

  • No passwords. The gateway holds a per-site OAuth refresh token, encrypted at rest, that the site itself issued and can revoke. Tokens rotate on use.
  • Scoped. A gateway call acts with your site’s normal MCP permissions and honours each site’s per-tool enable/disable grid — it can’t do more than a direct connection could.
  • Entitlement-gated. If a workspace drops below the required plan, the gateway stops serving its sites.

Cut a site off from the gateway from either end:

  • On the site: Users → Authorized Apps → EMCP Gateway → Revoke. Immediate, works even if Cloud is unreachable.
  • From Cloud: Account → Sites → Disconnect. This deletes the stored credential and best-effort revokes it on the site.

Either way the credential dies — a disconnect tears it down on both ends.

  • emcp_list_sites is empty. The site isn’t connected with the gateway consent, the workspace isn’t on a plan that includes the gateway, or the site is still provisioning. Re-check Connection → Connect to EMCP Cloud with the box ticked.
  • A write broadcast is refused. Enable Allow broadcast writes in the Cloud dashboard and pass confirm: true.
  • One site errors but others work. Expected — site_unavailable / tool_unavailable are per-site; the rest of the broadcast still runs.