Skip to main content
Glama

wp-mcp-gateway (Cloudflare Workers版)

Node バージョンと同じ考え方です。1 つの MCP エンドポイントがあり、すべてのツール呼び出しが site_id を受け取るため、1 つの Claude コネクタで WordPress サイト群全体をカバーできます。このバージョンは VPS の代わりに Cloudflare Workers 上で動作します。パッチ適用が必要なサーバーはなく、無料枠で十分に賄えます。wrangler deploy を実行すると、数分以内に workers.dev の URL で公開されます。

Cloudflare が現在推奨するアプローチに基づいています。agents SDK の ステートレス な createMcpHandler を使用しています(古いステートフルな McpAgent / Durable Objects アプローチは新規サーバーでは非推奨です。このゲートウェイはすべてのツール呼び出しが独立しているため、そもそもセッション状態は必要ありません)。

引き渡し前にローカルでエンドツーエンドの検証済みです。Worker が起動し、/health が応答し、MCP の initialize ハンドシェイクが機能し、ベアラートークン認証が欠落/誤ったトークンを正しく拒否して正しいトークンを許可し、list_sites がテスト用の SITES_JSON から実データを返します。

1. 前提条件

npm install -g wrangler   # or just use npx wrangler as shown below
wrangler login            # opens a browser to authenticate with your Cloudflare account

まだ Cloudflare アカウントをお持ちでない場合は、https://dash.cloudflare.com/sign-up から無料でサインアップできます。無料枠(1日あたり100,000リクエスト)で、この用途には十分すぎるほどです。

2. 依存関係のインストール

cd wp-mcp-gateway-cf
npm install

3. サイトの設定

Node バージョンとは異なり、Workers にはファイルシステムがないため、サイトレジストリはファイルの代わりに シークレット(SITES_JSON)に保存されます。以前と同じ形式で、サイトごとに1エントリです:

{
  "town-green": {
    "label": "Town Green",
    "baseUrl": "https://town-green.org",
    "username": "mcp-agent",
    "appPassword": "xxxx xxxx xxxx xxxx xxxx xxxx",
    "host": "wpengine"
  },
  "cra": {
    "label": "CRA",
    "baseUrl": "https://cra.com",
    "username": "mcp-agent",
    "appPassword": "xxxx xxxx xxxx xxxx xxxx xxxx",
    "host": "gridpane"
  }
}

すべてのサイトの JSON を構築してください(各サイトの Application Passwords を生成すれば、スプレッドシートから JSON へ変換するスクリプトは簡単に作成できます。必要な場合はお知らせください)。その後、シークレットとして設定します:

npx wrangler secret put SITES_JSON
# paste the whole JSON blob when prompted, then press Ctrl+D

Application Passwords: wp-admin で Users → your user → Application Passwords の順に進みます。推奨事項も以前と同じです。個人の管理者アカウントではなく、サイトごとに専用の低権限 WP ユーザーを使用してください。漏洩したトークンがその役割で許可された範囲を超えて操作できないようにするためです。

4. ゲートウェイ認証トークンの設定

npx wrangler secret put GATEWAY_TOKEN
# paste a long random value, e.g. output of: openssl rand -hex 32

これを設定しない場合、エンドポイントは認証なしで動作します。最初のローカルテストでは問題ありませんが、デプロイ版では決して使用しないでください。

5. ローカルでテスト

npx wrangler dev

これによりローカル開発サーバーが起動します(デフォルトは http://localhost:8787)。ローカルテストでは、シークレットを代わりに .dev.vars ファイルに置いてください(決してコミットしないでください):

GATEWAY_TOKEN=some-local-test-token
SITES_JSON={"town-green":{"label":"Town Green","baseUrl":"https://town-green.org","username":"mcp-agent","appPassword":"xxxx"}}

動作しているか確認:

curl http://localhost:8787/health

6. デプロイ

npx wrangler deploy

Wrangler が公開 URL を出力します。例:

https://wp-mcp-gateway.<your-subdomain>.workers.dev

あなたの MCP エンドポイントは https://wp-mcp-gateway.<your-subdomain>.workers.dev/mcp です。

7. Claude にコネクタとして追加

カスタムコネクタを追加し、その /mcp URL を指定して、ヘッダー Authorization: Bearer <GATEWAY_TOKEN> を設定します(手順4で設定した値と同じもの)。

以降、「cra.com の下書き投稿を一覧表示」には、Claude が list_sites を呼び出す(または ID をすでに知っている)だけでよく、その後 site_id: "cra" を指定して list_posts を呼び出すだけです。Node バージョンと同じ動作ですが、エッジでホストされています。

後からサイトを更新する

新しいサイトを追加したり、認証情報を変更したりするには、再実行してください:

npx wrangler secret put SITES_JSON

再デプロイは不要です。シークレットは Worker コードとは独立して更新されます。

このデプロイ固有のメモ

  • ファイルシステムなし、長時間実行プロセスなし — レジストリ全体は SITES_JSON シークレット内にあり、リクエストごとに新たに解析されます。約80サイトでもコストはごくわずかです。

  • 設計上ステートレス — 各 MCP リクエストで新しいサーバーインスタンスが作成されます(Cloudflare の現在のガイダンスに従う)。リクエスト間のセッションを失う心配はありません。

  • マネージドホストでの WAF フラグ — Node バージョンと同じ注意点です。特に WP Engine は、馴染みのない IP 範囲から REST API を呼び出すトラフィックにフラグを立てる可能性があります。このゲートウェイ経由でアクセスしたときだけサイトが 403 を返す場合は、WP Engine サポートに確認する最初のポイントです。必要に応じて Cloudflare の egress 範囲を許可リストに追加する価値があります。

  • ツールの範囲 — これはコア WP REST API(/wp/v2/...)とのみ通信します。WP-CLI、SSH、データベースレベルでの操作はありません。Workers はそもそも外部への SSH ができないため、後で必要になった場合には、まったく別のコンポーネントが必要になります。

Claude をデプロイ済み URL に接続する前のセキュリティチェックリスト

  • GATEWAY_TOKEN を wrangler secret put で設定し、長くてランダムな値にする

  • SITES_JSON で各サイトに専用の低権限 WP ユーザーを使用する

  • .dev.vars(ローカルで使用した場合)を .gitignore に含め、コミットしない

  • シークレットを全約80サイトに拡大する前に、2〜3サイトでテスト済みである

Related MCP Connectors