WordPress公式の MCP Adapter を使うと、Abilities APIに登録した機能をClaude・Codex・Cursorなどから呼び出せるようになる。
しかし、プラグインを有効化しただけで記事編集ツールが自動的に生えるわけではない。WordPress側に能力を登録し、AI側にMCP接続を追加し、権限と資格情報の置き場所まで設計する必要がある。
この記事では、MCP Adapterを導入し、自作の能力をAIから呼べる状態にするまでを順番にまとめる。
対応バージョンを確認する
執筆時点の最新版は MCP Adapter 0.6.1 で、WordPress 6.9以上が必要である。WordPress 6.8と単体版Abilities APIを組み合わせる構成は、0.6系ではサポート対象外になった。
古い記事では6.8向けの手順が残っているため、導入前に公式リリースページの必要条件を確認しておきたい。
1. 専用のWordPressユーザーを用意する
最初に考えるべきなのはプラグインではなく権限である。
アプリケーションパスワードは、それを発行したWordPressユーザーとして認証する。パスワードごとに「記事取得だけ」「下書き作成だけ」と細かく制限する仕組みではない。
そのため、普段使っている管理者ではなく、MCP接続専用の低権限ユーザーを作るのが安全である。必要な記事だけを扱える役割にし、不要な管理権限を与えない。
ユーザーのプロフィール画面からアプリケーションパスワードを発行したら、次のルールを守る。
- Gitリポジトリや記事本文へ書かない
- AIへのプロンプトへ直接貼らない
- 不要になったらWordPress側で失効させる
- 管理者ユーザーの資格情報を使い回さない
2. MCP Adapterを導入する
公式GitHubの最新リリースから mcp-adapter.zip を取得し、通常のWordPressプラグインとしてインストールする。WP-CLIを使える場合は、公式READMEにある次の方法も使える。
wp plugin install https://github.com/WordPress/mcp-adapter/releases/latest/download/mcp-adapter.zip --activate
プラグインを有効化すると、既定のMCPサーバーが次のエンドポイントに作られる。
https://example.com/wp-json/mcp/mcp-adapter-default-server
この時点では、まだ自分の記事操作能力は登録されていない。
3. 能力を登録するプラグインを書く
能力のカテゴリーは wp_abilities_api_categories_init、能力本体は wp_abilities_api_init で登録する。
次は、ログイン中のユーザーが編集権限を持つ場合だけ、サイト名を返す最小例である。
<?php
/**
* Plugin Name: My MCP Abilities
*/
defined( 'ABSPATH' ) || exit;
add_action( 'wp_abilities_api_categories_init', 'my_mcp_register_category' );
add_action( 'wp_abilities_api_init', 'my_mcp_register_abilities' );
function my_mcp_register_category() {
wp_register_ability_category(
'my-site',
array(
'label' => 'My Site',
'description' => 'Abilities for my site.',
)
);
}
function my_mcp_register_abilities() {
wp_register_ability(
'my-site/get-site-name',
array(
'label' => 'Get Site Name',
'description' => 'Return the WordPress site name.',
'category' => 'my-site',
'output_schema' => array(
'type' => 'object',
'properties' => array(
'name' => array( 'type' => 'string' ),
),
),
'permission_callback' => function() {
return current_user_can( 'edit_posts' );
},
'execute_callback' => function() {
return array( 'name' => get_bloginfo( 'name' ) );
},
'meta' => array(
'mcp' => array( 'public' => true ),
),
)
);
}
ここで重要なのは次の4点である。
- カテゴリー名と能力名は重複しない固有名にする
permission_callbackで実行権限を必ず判定するoutput_schemaと、入力がある場合はinput_schemaを実際の値と一致させる- 既定サーバーから公開する能力には
meta.mcp.publicを設定する
投稿更新の能力を作る場合は、公開状態や削除まで一緒に扱う万能ツールにしないほうがよい。「本文だけ更新」「下書きだけ作成」のように目的を分けるほど、事故の範囲を小さくできる。
4. AIクライアントから接続する
リモートのWordPressへ接続する場合は、公式READMEで案内されている @automattic/mcp-wordpress-remote を利用できる。
設定に必要なのは、主に次の3つである。
WP_API_URL=https://example.com/wp-json/mcp/mcp-adapter-default-server
WP_API_USERNAME=専用ユーザー名
WP_API_PASSWORD=アプリケーションパスワード
実際の設定形式はClaude・Codex・Cursorで異なるが、接続先と資格情報は同じである。資格情報はクライアント設定をGit管理せず、MCP接続プロセスだけが読める場所に置く。
シェルから環境変数ファイルを source する構成では、スペースを含むアプリケーションパスワードを引用符で囲む必要がある。ただし、.env の読み方はツールによって異なるため、常にシングルクォートが必要とは限らない。
また、ファイルを chmod 600 にしても、同じOSユーザーとして動くAIツールがそのファイルを読めるなら秘密にはならない。AIのシェル・ファイルアクセス範囲も合わせて制限したい。
5. 能力を確認する
MCP Adapterの既定サーバーでは、自作能力が tools/list に1件ずつ並ぶわけではない。最初に見えるのは、次の3つの窓口である。
mcp-adapter/discover-abilitiesで能力を探すmcp-adapter/get-ability-infoで入出力と権限を確認するmcp-adapter/execute-abilityで能力を実行する
先ほどの例なら、一覧に my-site/get-site-name が現れ、実行結果としてサイト名が返れば成功である。
HTTPを直接扱う場合、initialize の応答で Mcp-Session-Id が返されたら、以降のすべてのリクエストへ同じ値を付ける。これを忘れると、能力の登録が正しくてもリクエストが拒否される。
公開前の安全チェック
- MCP専用の低権限WordPressユーザーを使っているか
- 削除や公開など、不要な能力を登録していないか
- 各能力に
permission_callbackがあるか - 入出力スキーマと実際の値が一致しているか
- 資格情報がGitやプロンプトに含まれていないか
- AIが資格情報ファイルを直接読めない構成か
- 書き込み能力を本番記事以外で試したか
- アプリケーションパスワードをすぐ失効できる状態か
まとめ
MCP Adapterの導入で難しいのは、接続そのものよりも「どの能力を、どの権限で、どこまで公開するか」を決めることである。
低権限ユーザー、用途を絞った能力、資格情報の隔離を組み合わせれば、AIにWordPress全体を預けず、必要な仕事だけを任せられる。
最初は読み取り専用の小さな能力から始め、確認できた範囲だけ少しずつ広げるのが安全である。
