はじめに
コピー&ペーストで編集する手間をなくし、Claude から WordPress の記事を操作したいと考えました。
調べると、Claude の WordPress.com 用コネクタは WordPress.com で作ったサイト専用で、レンタルサーバーに設置した WordPress では使えません。そこで、WordPress に MCP サーバーの役割を持たせるプラグインを入れ、Claude のカスタムコネクタとして接続する方法を採りました。
本記事では、エックスサーバー上の WordPress にプラグイン「Easy MCP AI」を導入し、WordPress MCP で Claude と連携して記事一覧を取得できるまでの手順を解説します。途中でつまずいた点も、原因と対処をあわせて紹介します。

本記事のまとめ
- WordPress は、MCP プラグインと Claude のカスタムコネクタで連携できる。Easy MCP AI なら OAuth のクライアント ID を入力せずに接続できる。
- AI に渡すのは編集者ロールの専用ユーザーにし、「作成した記事は必ず下書き」「削除系ツールは無効」にしてから繋ぐ。
- 接続前に、サイトアドレスの
https://・Authorization ヘッダーの受け渡し・国外アクセス制限の 3 点を確認する。 - エックスサーバーでは REST API の国外アクセス制限が既定で有効なため、Claude からの接続が 403 になる。
WordPress を Claude に繋ぐ方法とプラグインの選び方
WordPress を Claude に繋ぐには、WordPress 自体を MCP サーバーにするプラグインが必要です。MCP(Model Context Protocol)は、AI アプリが外部ツールを呼び出すための共通規格のことです。MCP サーバーは、AI から呼び出せる操作(記事の取得や下書きの作成など)を提供する側を指します。
2026 年に入って WordPress 向けの MCP プラグインは一気に増えました。私が比較した候補は次のとおりです。
| プラグイン | 特徴 | 判断 |
| Easy MCP AI | 244 ツールが既定で有効。OAuth 2.1 対応。WordPress 上の PHP だけで動く | 採用 |
| Agent Abilities for MCP | 全 ability(AI に公開する機能の単位)が既定で OFF。設計は堅いが利用実績の情報が少ない | 見送り |
| Enable Abilities for MCP | 初回有効化で全 ability が ON になる。MCP Adapter(WordPress 公式の MCP 接続用プラグイン)が別途必要 | 見送り |
| WPVibe | 外部のクラウドリレーとアカウント登録が必須。無料プランは操作回数に上限あり | 不採用 |
なお、以前は Automattic の wordpress-mcp を紹介する記事が多くありましたが、このリポジトリは 2026 年 1 月にアーカイブされ、WordPress 公式の MCP Adapter への移行が案内されています。古い手順を参考にする場合は注意してください。
どれも登場から日が浅く、インストール数は実績の指標として機能しません。そこで個人ブログという前提で、「参考情報の多さ」と「接続してすぐエージェントから動かせるか」を軸に選びました。
Easy MCP AI は MCP サーバーが WordPress 上の PHP として動き、外部の中継サービスやベンダーアカウントを必要としません。認証は OAuth 2.1 です。OAuth は、パスワードを渡さずに「この操作を許可する」と承認して接続する仕組みのことです。Claude の Web・デスクトップ・Cowork・Claude Code から同じ URL で接続できます。
仕様は Easy MCP AI の公式サイトと WordPress.org のプラグインページで確認できます。

導入前に決めた安全設計(専用ユーザー・下書き強制・ツール制限)
AI に書き込み権限を渡す前に、AI が使える機能と権限を絞り、AI が作った記事は必ず下書きになるように設定しました。本番サイトで直接試すため、ここを最初に固めています。
- MCP 専用ユーザーを編集者ロールで作る。管理者アカウントは AI に渡しません。
- Force Draft on Create を ON にする。AI が作成した投稿は、指定に関係なく下書きになります。この設定は既定で OFF です。
- 監査ログと変更履歴を ON にする。ツール呼び出しと、AI による変更の前後の内容が記録されます。
- 危険なツールをグローバルに無効化する(Disabled Tools)。
- OAuth 承認に必要な権限を引き上げる。Minimum Capability to Authorize を
publish_postsからedit_others_posts(編集者相当)に変更しました。
無効化したツールは次の 19 個です。削除系、ユーザー管理、サイト設定、テーマ編集をまとめて止めています。
wp_delete_post / wp_delete_page / wp_delete_media / wp_delete_comment
wp_delete_category / wp_delete_tag / wp_delete_block / wp_delete_cpt_item
wp_delete_menu / wp_delete_menu_item / wp_delete_revision / wp_delete_user_meta
wp_create_user / wp_update_user / wp_delete_user / wp_update_user_meta
wp_update_site_settings
wp_update_template / wp_update_global_styles

Easy MCP AI を導入して Diagnostics を通す
プラグインをインストールして有効化したら、Claude に接続する前に、Easy MCP AI の Diagnostics(診断)画面の指摘をすべて解消します。指摘が残ったままだと、接続や認証がどこで失敗しているのか切り分けにくくなるためです。
検証環境は WordPress 7.1.1、PHP 8.2、エックスサーバーのスタンダードプランです。PHP は FastCGI(fpm-fcgi)で動いていました。FastCGI は、Web サーバー(Apache)とは別のプロセスで PHP を動かす実行方式です。Apache に組み込んで PHP を動かす方式とはリクエスト情報の受け渡し方が異なり、これが 2 つ目の指摘に関係します。
診断では 3 つの指摘が出ましたが、対処後は 47 項目中 41 項目が通過し、失敗は 0 件になりました。残りのうち 5 件は時間のかかるチェックで未実行、1 件はサーバーの仕組み上この画面からは確認できないという判定です。

HTTPS 判定で OAuth が失敗する: サイトアドレスを確認する
最初の指摘は、OAuth が使えないという致命的なものでした。
This site is not using HTTPS. The OAuth 2.1 specification requires it
ブラウザでは https で表示されているため、SSL 終端の問題を疑いたくなります。SSL 終端とは、HTTPS の暗号化を WordPress の手前にある別のサーバー(リバースプロキシ)で解く構成のことで、この場合 WordPress には http でアクセスが届くため、HTTPS と判定されないことがあります。しかし原因は、設定 → 一般 の「サイトアドレス (URL)」だけが http:// のままだったことでした。「WordPress アドレス (URL)」は https だったので気づきにくい状態です。
サイトアドレスを https に直して保存するだけで解消しました。エラー文は「HTTPS で配信してください」という定型文で、片方だけ http という実際の原因は示しません。wp-config.php を触る前に、一般設定の 2 つの URL を確認してください。

Authorization ヘッダーの警告: FastCGI では CGIPassAuth を追記する
2 つ目は、Authorization ヘッダーを PHP に渡す rewrite が無いという警告です。Authorization ヘッダーは、Claude が OAuth で受け取った認証トークンを載せて送る HTTP ヘッダーです。これが PHP まで届かないと、接続できても「認証されていない」扱いになります。
rewrite ルールは、.htaccess に書くリクエストの書き換え設定です。パーマリンク設定を保存し直しても警告は消えず、.htaccess を見ると rewrite ルールは最初から入っていました。
原因は PHP の実行方式です。FastCGI で動くサイトでは、rewrite ルールではなく CGIPassAuth がヘッダーを PHP に渡します。CGIPassAuth は Apache の設定項目で、Authorization ヘッダーを CGI や FastCGI で動くプログラムへ渡すかどうかを決めます。そこで .htaccess の先頭に次を追記しました。
CGIPassAuth On
<IfModule mod_setenvif.c>
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
</IfModule>
追記後もサーバーエラーは出ず、判定は Warning から Skipped(FastCGI のためここからは確認できない)に変わりました。実際に接続したところトークンは正しく届いたので、この追記で足りています。エックスサーバーでは、サーバーパネルの「.htaccess編集」から編集すると安全です。
PHP のエラーがレスポンスに混ざる: display_errors を OFF にする
3 つ目は、PHP のエラー表示がレスポンスに混ざるという指摘です。display_errors は PHP のエラーを画面(レスポンス)に出力する設定で、ON のままだと MCP の応答にエラー文が混ざり、Claude が応答を読めなくなる恐れがあります。サーバーパネルの「php.ini設定」で display_errors を OFF にしました。wp-config.php の編集は不要でした。
エックスサーバーで REST API が 403 になる原因と対処
Diagnostics を通しても、Claude からは接続できませんでした。エックスサーバーの「国外アクセス制限」が REST API への接続を止めていたためです。
REST API は、外部のプログラムから WordPress を操作するための窓口(/wp-json/ 以下の URL)です。Easy MCP AI の MCP サーバーもこの窓口の中にあるため、ここが塞がれると Claude は接続できません。403 は「アクセスが拒否された」ことを示す HTTP のステータスコードです。
カスタムコネクタを追加すると、「サーバーに接続しています」のあと 403 で失敗します。外部から確認すると、OAuth の情報を返す /.well-known/oauth-protected-resource は 200 で JSON を返すのに、/wp-json/ だけが 403 でした。日本のブラウザからは /wp-json/ も正常に表示されます。同じ切り分けは次のように再現できます(example.com は自分のドメインに置き換えてください)。
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/.well-known/oauth-protected-resource
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/wp-json/海外やクラウド上の環境から実行して 200 と 403 に分かれれば、国外アクセス制限を疑ってよいでしょう。OAuth の情報を返すファイルは /wp-json/ の外に置かれるため、「入口の情報だけ取れて本体が 403」という紛らわしい状態になります。
エックスサーバーの「WordPressセキュリティ設定」には国外アクセス制限があり、REST API も対象です。公式マニュアルによると、国外 IP に加えて海外の主要クラウドサービスが持つ日本国内の IP アドレスからのアクセスも制限されます。Claude のサーバーからの接続は、これに該当したと考えられます。
対処として、国外アクセス制限のうち「REST API アクセス制限」だけを OFF にしました。ダッシュボード、XML-RPC、wlwmanifest.xml の制限は ON のまま残しています。

Claude にカスタムコネクタを追加して OAuth 承認する
Claude の設定からカスタムコネクタを追加します。入力するのは名前と URL だけです。
名前: 任意(例: my-blog)
URL: https://example.com/wp-json/easy-mcp-ai/v1/mcp
OAuth クライアント ID / シークレット: 空欄
クライアント ID とシークレットは空欄で構いません。Easy MCP AI は動的クライアント登録に対応しているためです。動的クライアント登録は、接続時に Claude が自分のクライアント情報を WordPress 側へ自動で登録する仕組みで、ID やシークレットを手で発行する必要がありません。
承認の前に、一度 WordPress からログアウトしてください。承認画面はブラウザの WordPress のログイン状態を使うため、管理者でログインしたまま承認すると管理者権限で繋がります。承認画面で専用ユーザーとしてサインインし、「Acting as」の表示でユーザー名と editor ロールを確認します。
スコープは、Claude に許可する操作の範囲です。承認画面下部の「Read Only」を押してすべて読み取りに揃えてから、書き込みを次の 5 つだけ追加しました。
- Posts & Pages
- Media
- Taxonomies
- Term Meta
- All in One SEO
ユーザー管理、サイト設定、テーマ、コメント、メニューの書き込みは渡していません。読み取りはすべて許可しているので、変更履歴や監査ログも会話から参照できます。

接続後、Claude から記事一覧の取得(wp_list_posts)と件数の取得(wp_count_posts)が正常に返ることを確認しました。Authorization ヘッダーも問題なく届いていました。
REST API を開くときの補償策
国外アクセス制限を外すと、海外からも REST API に届くようになります。ただしこの制限は国外だけが対象で、日本の IP からは元々開いていました。完全に守られていたものが開くのではなく、フィルタが 1 段粗くなると考えるのが正確です。
それでも無策ではよくないので、主なリスク 2 つに対して補償策を入れました。1 つは /wp-json/wp/v2/users からのユーザー名の列挙、もう 1 つはプラグイン由来の未認証エンドポイントへの到達です。
- プラグインを更新し、停止中のプラグインを削除する。
- エックスサーバーの「ログイン試行回数制限」を ON にする。
- XO Security(WordPress のセキュリティ設定プラグイン)で投稿者アーカイブの無効化、oEmbed(記事の埋め込み表示用データ)からのユーザー名削除、バージョン情報と readme.html の削除を ON にする。
- 管理者の投稿者スラッグ(
user_nicename)をログイン名と別の文字列に変える。
最後の項目が最も効きます。/wp-json/wp/v2/users が返す slug は初期状態ではログイン名と同じなので、ここからログイン名が推測されます。スラッグを変えれば切り離せます。

逆に、XO Security で次の 3 つは ON にしてはいけません。
- 「REST API の無効化」: MCP が動かなくなります。
- 「ログインページの変更」: OAuth の承認が
wp-login.phpへリダイレクトするため、失敗する恐れがあります。 - 「2 要素認証」の編集者への適用: 専用ユーザーのサインインが止まります。
まとめ
Easy MCP AI を使うと、エックスサーバー上の WordPress を Claude から操作できるようになりました。編集者ロールの専用ユーザー・下書き強制・危険ツールの無効化を先に入れておけば、書き込み権限を渡しても事故の影響を小さく抑えられます。
つまずきの多くは、サイトアドレスの https、FastCGI での Authorization ヘッダー、国外アクセス制限の 3 点に集約されます。接続できないときは、この順に確認してください。
これから試す方は、まず Read Only のスコープで記事一覧が取れるところまで確認し、必要になった書き込みだけを足していくのがおすすめです。

