WordPressをMCPでAIにつなぐには、公式のプラグイン「MCP Adapter」を入れ、アプリケーションパスワードで認証して専用のURLに送ります。
当方の検証用WordPressで実際に入れて送ったところ、接続はできましたが、本体だけで使える操作はサイト情報などの読み取り3つでした。
投稿の作成や編集は、プラグインがその操作を登録しない限りできません。
この記事では、導入からやりとりの中身、つまずいたエラー、権限の絞り方までを実測の記録でまとめました。
検証の条件は、当方の検証用WordPress(WordPress 7.1.4・PHP 8.3・MCP Adapter 0.7.1)、2026年10月30日です。
アプリケーションパスワード・MCP・SSHのどれを選ぶかは、別記事で比べています:WordPressとAIを接続する方法まとめ
| 確かめたこと | 結果 |
|---|---|
| 認証なしで送る | 401(rest_forbidden) |
| アプリケーションパスワードで initialize | 200(MCP Adapter Default Server) |
| 2回目以降にプロトコルの版のヘッダーを付けない | 400 |
| AIから見えるツール | 3つ(探す・調べる・実行する) |
| 本体だけで使える ability | 読み取り専用の3つ |
| 投稿の作成・編集 | 本体だけではできない |
| WP-CLI(STDIO)でつなぐ | 応答あり。initialize が先に要る |
WordPress MCP(MCP Adapter)とは
MCP Adapterは、WordPressの「できること」をMCPの形でAIに見せる、WordPress公式の橋渡し役のプラグインです。
MCPとabilityのしくみ
MCP(Model Context Protocol)は、AIのアプリが外部の機能を呼び出すための共通の決まりです。
WordPress側では、6.9から本体に入ったAbilities APIで、プラグインやテーマが「できること」を ability として登録します。
MCP Adapterは、登録された ability をMCPのツールとして外に出します。
WordPressの開発者が進める「AI Building Blocks」の一部で、WordPress.orgで配布されています。
出典:MCP Adapter(Make WordPress AI)/AI Building Blocks for WordPress
AIに見えるのは公開した ability だけ
readmeには、ability は public の印を付けたものだけがMCPから呼べる、自分で選んで出す仕組みだと書かれています。
登録された機能が、黙って全部AIに出るわけではありません。
対応するMCPの版は、2025-11-25 と 2026-07-28 の2つです。
出典:MCP Adapter(WordPress.org プラグインディレクトリ)(2026年10月30日確認)
必要な環境
| 項目 | 条件 |
|---|---|
| WordPress | 6.9以上 |
| PHP | 7.4以上 |
| 認証 | アプリケーションパスワード(HTTPSが前提) |
| つなぎ方 | HTTP または WP-CLI(STDIO) |
| 配布 | WordPress.org と GitHub |
アプリケーションパスワードは、ローカルの開発環境を除いてHTTPSのサイトでしか発行できません。
出典:Getting Started(WordPress/mcp-adapter)
MCP Adapterを入れてエンドポイントを確かめる
入れて有効にすると、REST APIの下にMCPの受け口が1つでき、WP-CLIからも中身を確かめられます。
プラグインを入れる
WordPress.orgで配布されているので、管理画面の「プラグインを追加」で探して入れられます。
WP-CLIを使える環境なら、次の1行でも入ります。
wp plugin install mcp-adapter --activateGitHubのリリースにある zip から入れる方法も、公式の手順に載っています。
エンドポイントとサーバーの一覧
有効にすると、REST APIに次の受け口ができました。
https://(サイトのURL)/wp-json/mcp/mcp-adapter-default-serverWP-CLIでサーバーの一覧を出すと、既定のサーバーが1つだけあり、ツール3・リソース0・プロンプト0でした。
wp mcp-adapter listWordPress 7.1.4の本体には「設定 > コネクタ」という画面もありますが、本記事では扱いません。
接続用のユーザーとアプリケーションパスワード
アプリケーションパスワードは、管理画面の「ユーザー > プロフィール」の下の方で発行します。
発行した文字列は一度しか表示されないので、その場で控えます。
公式のガイドは、AI用に別のユーザーを作り、仕事に足りる一番低い権限を与えるよう勧めています。
今回は検証のため管理者で発行しましたが、後で述べる理由から、本番ではおすすめしません。
JSON-RPCを送ってみた結果
HTTPでは、JSON-RPCという形式の文をPOSTで1つずつ送ります。
当方はPythonで送り、行きと帰りをそのまま記録しました。
認証なしは401で止まる
認証ヘッダーを付けずに tools/list を送ると、401が返りました。
{"code":"rest_forbidden","message":"その操作を実行する権限がありません。","data":{"status":401}}MCPの受け口も、WordPressのREST APIの権限確認を通る作りです。
initializeは200で通った
アプリケーションパスワードをBasic認証で付け、最初のあいさつにあたる initialize を送りました。
{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"test-client","version":"0.1"}},"id":1}返ってきたのは200で、サーバー名は「MCP Adapter Default Server」でした。
{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-11-25","capabilities":{"prompts":{"listChanged":false},"resources":{"subscribe":false,"listChanged":false},"tools":{"listChanged":false}},"serverInfo":{"name":"MCP Adapter Default Server","version":"v1.0.0"},"instructions":"Default MCP server for WordPress abilities discovery and execution"}}応答のヘッダーにはセッションIDが付いていて、次からのリクエストに付けて送りました。
続けて送った notifications/initialized は、本文なしの202でした。
プロトコルの版のヘッダーが無いと400
initialize の後、MCP-Protocol-Version ヘッダーを付けずに tools/list を送ると、400で次の文が返りました。
Invalid Request: MCP-Protocol-Version header is required for a 2025-11-25 sessionヘッダーに 2025-11-25 を付けて送り直すと、通りました。
MCPの仕様でも、HTTPでは2回目以降のリクエストにこのヘッダーを付けると決められています。
出典:Transports(Model Context Protocol 仕様 2025-11-25)
自作のスクリプトで試すとき、いちばん踏みやすいのがここでした。
AIに見えるツールは3つ
tools/list で返ってきたツールは、次の3つだけでした。
| ツール名 | 役割 | 応答に付いた注釈 |
|---|---|---|
| mcp-adapter-discover-abilities | 使える ability の一覧を出す | 読み取り専用 |
| mcp-adapter-get-ability-info | ability の入力と出力の形を調べる | 読み取り専用 |
| mcp-adapter-execute-ability | ability を実行する | 書き込みあり(破壊的) |
ability を1つずつツールとして並べるのではなく、AIはこの3つを通して「探す→調べる→実行する」の順に使います。
本体だけでできるのは読み取り3つ
discover-abilities で一覧を出すと、本体の ability は読み取り専用の3つで、投稿を作る・直すものはありませんでした。
登録されていた ability
| ability | 返す中身 | 出どころ |
|---|---|---|
| core/get-site-info | サイト名・URL・管理者メール・言語・バージョン | 本体 |
| core/get-user-info | 接続しているユーザーのプロフィール | 本体 |
| core/get-environment-info | PHP・データベース・WordPressの版などの環境 | 本体 |
| wp-mail-smtp/get-debug-events | WP Mail SMTP の送信エラーの記録 | プラグイン |
検証用サイトにはメールの検証で WP Mail SMTP を入れていたので、その分が1つ増えていました。
このように、対応したプラグインを入れると、AIからできることが増えていきます。
逆に言えば、記事の作成をAIに任せたいなら、その ability を出すプラグインか自作のコードが要ります。
get-site-infoを実行した結果
execute-ability で core/get-site-info を実行すると、次の中身が返りました(URLとメールは伏せています)。
{"success":true,"data":{"name":"トラブル検証","description":"","url":"https://example.com/lab","wpurl":"https://example.com/lab","admin_email":"admin@example.com","charset":"UTF-8","language":"ja","version":"7.1.4"}}管理者メールまで返るので権限を絞る
接続したユーザーが見られる情報は、そのままAIにも渡ります。
読み取りだけの今でも管理者メールが返るので、プラグインで書き込みの ability が増えたときの影響はさらに大きくなります。
公式のガイドが勧めている対策は、次の5つです。
- AI用のユーザーを別に作る
- 権限は仕事に足りる一番低いもの(管理者ではなく編集者など)にする
- アプリケーションパスワードはクライアントや端末ごとに1つずつ発行する
- 使わなくなったパスワードはプロフィール画面で取り消す
- 新しい ability はステージングで試し、バックアップを取っておく
出典:Site Owner Guide(WordPress/mcp-adapter)/ステージングの作り方はWordPressのステージング環境の作り方にまとめています。
WP-CLIのSTDIOでもつないでみた
サーバーでWP-CLIを動かせるなら、HTTPを通さず、標準入出力(STDIO)でもつなげます。
serveコマンドで起動する
公式の手順では、次のコマンドでMCPサーバーとして起動します。
wp mcp-adapter serve --user=(ユーザー名) --server=mcp-adapter-default-server起動した後は、JSON-RPCの文を1行ずつ標準入力に流します。
initializeを先に送らないとエラー
initialize を送らずにいきなり tools/list を流すと、次の文で断られました。
The 2025 lifecycle requires initialization before this requestHTTPと同じく、最初のあいさつを済ませてから命令を送る決まりです。
HTTPとSTDIOの違い
| 項目 | HTTP | STDIO(WP-CLI) |
|---|---|---|
| 認証 | アプリケーションパスワード | WP-CLIでユーザーを指定 |
| 必要なもの | HTTPSのサイト | WP-CLIを動かせる環境 |
| 当方の見立て | 手元のAIから本番につなぐ | ローカルや開発用のサイト |
公式のガイドは、ローカルのサイトならパスワードなしでWP-CLIから起動できると案内しています。
プラグインを足したら、AIに渡る操作を見直す
MCP Adapterの既定のサーバーでAIが実行できるのは、「MCPに公開」の印が付いたabilityだけです。
印は各abilityの設定(meta.mcp.public、無ければmeta.public)で決まり、本体の3つは公開、MCP Adapter自身の3つは道具として別扱いになっています(0.7.1のコードで確認)。
あとからプラグインを入れると、そのプラグインが登録したabilityも公開されることがあります。
プラグインを足したら、公開されているabilityの中に、削除や設定変更のような元に戻せない操作が無いかを確かめてください。
各abilityには「読み取りだけか(readonly)」「元に戻せない操作か(destructive)」の印も付いているので、次のファイルを作ってWP-CLIで読み込むと一覧できます。
<?php
foreach ( wp_get_abilities() as $a ) {
$m = $a->get_meta();
printf( "%s\treadonly=%s\tdestructive=%s\tmcp=%s\n", $a->get_name(),
var_export( $m['annotations']['readonly'] ?? null, true ),
var_export( $m['annotations']['destructive'] ?? null, true ),
var_export( \WP\MCP\Abilities\McpAbilityExposure::is_public( $a ), true ) );
}wp eval-file abilities.php検証用サイト(MCP Adapter 0.7.1を有効にした状態)では、次のように出ました。
core/get-site-info readonly=true destructive=false mcp=true
core/get-user-info readonly=true destructive=false mcp=true
core/get-environment-info readonly=true destructive=false mcp=true
mcp-adapter/discover-abilities readonly=true destructive=false mcp=false
mcp-adapter/get-ability-info readonly=true destructive=false mcp=false
mcp-adapter/execute-ability readonly=false destructive=true mcp=falsemcp=trueで、destructive=trueのものがあれば、AIから実行できる「元に戻せない操作」です。
実行のときは、つないだユーザーがそのabilityの権限の判定を通る必要があります。
AIからつなぐユーザーは管理者にせず、必要な操作だけができる権限で作っておくと、公開の設定を見落としたときの被害を小さくできます。
ClaudeやChatGPTからつなぐときの公式の案内
当方はAIのアプリ側の設定を実測していないので、公式ガイドの要点だけを載せます(2026年10月30日確認)。
デスクトップのアプリとClaude Code
- Claude Desktop・Cursor・VS Code などは、補助のパッケージ @automattic/mcp-wordpress-remote を手元で動かしてつなぐ
- 補助には、受け口のURL・ユーザー名・アプリケーションパスワードを環境変数で渡す
- URLと任意のヘッダーを設定できるアプリ(例:Claude Code)は、補助なしで直接つなげる
Webのclaude.aiとChatGPT
公式ガイドによると、Web版のclaude.aiとChatGPTはOAuthでのログインが前提です。
アプリケーションパスワードを入れる欄がないため、今はつなげないと書かれています。
設定の書き方は変わりやすいので、つなぐ前に公式のページで確かめてください。
出典:Site Owner Guide(WordPress/mcp-adapter)
つながらないときの確認
当方の検証で出たエラーと、REST APIで確かめた事例から、確かめる順番をまとめます。
正しいパスワードでも401になる
検証用サイトでは、.htaccess に認証ヘッダーを渡す1行が無かったため、正しいアプリケーションパスワードでもREST APIが401を返しました。
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]この1行を足すと200になり、MCPの受け口もREST APIの上にあるので同じ確認が効きます。
パスワードが違う場合も同じ401なので、メッセージだけでは区別できません。
→ 詳しく:WordPressのREST APIエラーの直し方
エラーと確かめる場所
| 症状 | 考えられる原因 | 確かめる場所 |
|---|---|---|
| 401(rest_forbidden) | 認証ヘッダーが届いていない・パスワード違い | .htaccess、ユーザーとパスワード |
| 400(MCP-Protocol-Version) | 2回目以降に版のヘッダーが無い | クライアントやスクリプトのヘッダー |
| lifecycle requires initialization | initialize を送っていない | 送る順番 |
| ツールが3つしか出ない | 正常(ability は3つのツールの奥にある) | discover-abilities の結果 |
| 投稿を書けない | 書き込みの ability が登録されていない | 対応プラグインか自作のコード |
ほかのエラーも出ているとき
サイト自体が重大なエラーや500で落ちていると、MCPも当然つながりません。
画面やメッセージから原因を探すときは、WordPressのエラー一覧から該当する記事へ進んでください。
まとめ
MCP Adapterを入れると、WordPressはMCPのサーバーとしてAIからつなげるようになります。
ただし本体だけで使えるのは読み取り3つで、投稿を書かせるには対応した ability が要ります。
- 認証はアプリケーションパスワード、受け口は /wp-json/mcp/mcp-adapter-default-server
- 2回目以降のHTTPリクエストには MCP-Protocol-Version ヘッダーが要る
- get-site-info でも管理者メールが返るので、AI用のユーザーの権限を絞る
- 正しいパスワードで401なら、.htaccess の認証ヘッダーの行を確かめる
次にやることは、AI用のユーザーを作り、読み取りの ability で手元のAIから呼べるかを試すことです。
記事の読み書きまで自動化したいなら、今のところはREST APIが確実です:WordPress REST APIとは/WordPressのAI自動化
WordPressとAIの連携の設計を相談したい方は、サービス一覧からどうぞ。



