AIにWordPressの記事を書かせたい、と考えたことのある人は多いはずだ。
手軽なのは、WordPressのREST APIとアプリケーションパスワードをAIツールから使えるようにする方法である。実際それで動く。しかし、アプリケーションパスワードは操作ごとに権限を絞る仕組みではない。発行元のWordPressユーザーに許可された範囲で、投稿の公開や削除を含む広い操作ができる。
筆者が欲しかったのは、「何をどこまでやらせるか」を機能単位で決められる仕組みだった。それに答えるのが、WordPress公式の MCP Adapter である。
ただし、これは wordpress.org のプラグインディレクトリに並ぶ公式プラグインではない。管理画面の「プラグインを追加」で検索しても出てこない。Core AIチームがGitHubで公開しており、導入はリリースページ(https://github.com/WordPress/mcp-adapter/releases) から「mcp-adapter.zip」をダウンロードして行う。最新版のzip(https://github.com/WordPress/mcp-adapter/releases/latest/download/mcp-adapter.zip) を直接取得してもよい。
そもそもMCPとは何か
MCP(Model Context Protocol) は、AIと外部サービスをつなぐための共通規格である。もともとAnthropicが公開したもので、いまはClaude・Codex・Cursorなど主要なAIツールが対応している。
イメージとしては AIにとってのUSB端子 が近い。以前はAIとサービスの組み合わせごとに専用の接続方法が必要だったが、端子の形を共通化すれば、対応するもの同士を同じ考え方でつなげられる。
WordPressとMCPをつなぐときは、次の3語を押さえればよい。
| 用語 | 役割 |
|---|---|
| MCP | AIと外部サービスをつなぐ共通規格 |
| Abilities API | WordPressに「外部から呼べる機能」を登録する仕組み。WordPress 6.9からコアに標準搭載された |
| MCP Adapter | 登録した機能をMCP経由で利用できるようにする公式パッケージ。コア未同梱で、GitHubからプラグインとして導入する |
登録する1つ1つの機能を 能力(ability) と呼ぶ。「投稿一覧を返す」「指定した投稿の本文を書き換える」といった単位である。
なお、筆者が最初に検証したMCP Adapterは0.5.0だったが、執筆時点の最新版は 0.6.1 である。0.6系はWordPress 6.9以上が必須となり、WordPress 6.8と単体版Abilities APIを組み合わせる方法はサポート対象外になった。導入時は古い解説ではなく、必ずGitHubの公式リリース(https://github.com/WordPress/mcp-adapter/releases) の要件を確認したい。
MCP Adapterで作れる境界
MCP Adapterの魅力は、AIにMCP経由で見せる機能を自分で決められる点にある。
REST APIへ直接アクセスさせる場合、操作の可否は認証したWordPressユーザーの権限と各エンドポイントの権限判定に委ねられる。一方、MCP Adapterでは、AIクライアントに公開する能力を機能単位で絞り込める。
鍵をそのまま渡すのではなく、通ってよいドアを1枚ずつ作るイメージだ。「削除しないで」とプロンプトでお願いするのではなく、削除能力を用意しなければ、少なくともMCPの窓口からは削除できない。
ただし、これはMCP経由の操作範囲を狭める仕組みであり、アプリケーションパスワード自体を低権限に変えるものではない。AIが同じOSユーザーのシェルやファイルを自由に読める環境では、資格情報を別経路で取得される可能性がある。能力の制限と、資格情報の隔離は別々に考える必要がある。
実際に作った7つの能力
筆者は練習用のlogsサイトに、7つの能力を持つ小さなプラグインを作った。
| 能力 | できること |
|---|---|
list-posts | 記事一覧を返す。本文は返さない |
get-post | 記事を1本取得し、生のブロック本文を返す |
create-post | 記事を必ず下書きで作成する |
update-post | タイトル・本文・抜粋だけを書き換える |
list-terms | 利用できるカテゴリーとタグを調べる |
list-media | メディアライブラリを検索する |
get-media | 画像の実寸とWordPressが生成した srcset を返す |
安全弁は、運用ルールではなくコード側に持たせた。
- 削除、ゴミ箱への移動、公開状態変更の能力は作らない
create-postは下書き固定にし、公開状態を受け取る項目自体を持たせない- カテゴリーとタグは既存のものだけを使い、勝手に分類を増やさない
update-postは取得時の更新日時を照合し、他所で編集されていたら上書きを拒否する- 更新直前の内容をリビジョンとして保存し、戻し先を確保する
そして、この記事自体もMCP経由で取得・編集している。WordPress管理画面を開かなくても、「読む・直す・書き戻す」という流れで更新できるようになった。
地味に効いたのは画像の能力だった
意外と効果が大きかったのが get-media である。
WordPressは画像をアップロードすると縮小版を自動生成するが、どのサイズが存在するかは画像によって異なる。筆者は以前、それを推測して srcset を手書きし、画像10本を404にしたことがある。高解像度端末でしか再現せず、発見も遅れた。
get-media は、WordPress自身が組み立てた srcset と、実在するサイズの寸法を返す。AIが推測しなくて済む窓口を用意することも、安全設計の一部なのだと実感した。
導入の全体像
導入作業は、大きく4段階に分かれる。
- WordPress 6.9以上へ更新し、GitHubの最新リリース(https://github.com/WordPress/mcp-adapter/releases/latest) からMCP Adapterを導入する
- 専用の低権限WordPressユーザーとアプリケーションパスワードを用意する
wp_register_ability()で必要な能力だけを登録する- MCPクライアントから接続し、能力の発見・仕様確認・実行を試す
プラグインの最小コード、クライアント設定、動作確認方法は、WordPress MCP Adapterの導入手順|Abilities APIで自作機能を安全に公開するに分けた。この記事では、実際につまずいた点をもう1つだけ残しておく。
つまずいたのは「一覧に出てこない」ことだった
能力を登録しても、既定サーバーのツール一覧に get-post などが1つずつ並ぶわけではない。MCP Adapterの既定サーバーは、次の3つの窓口を見せる設計になっている。
- 公開されている能力を探す
- 能力の入出力や権限を調べる
- 能力名と入力値を指定して実行する
AIは「探す・調べる・実行する」という順番を踏む。能力が増えてもツール一覧が膨れない合理的な設計だが、知らずに触ると登録失敗だと誤解しやすい。
専用クライアントを使わず、Streamable HTTPを直接扱う場合はセッションにも注意が必要である。initialize の応答で Mcp-Session-Id が返されたら、以降のリクエストにはその値を付ける必要がある。
資格情報は「同じユーザーからも読ませない」
アプリケーションパスワードをGitリポジトリに置いてはいけない。さらに、ホームディレクトリのファイルを chmod 600 にするだけでも十分ではない。これは他のOSユーザーから守る設定であり、同じユーザー権限で動くAIツールへのアクセス制限にはならないからである。
実運用では、次を組み合わせたい。
- WordPress側に専用の低権限ユーザーを作る
- 資格情報をプロンプトやリポジトリへ書かない
- MCP接続プロセスだけが資格情報を読める構成にする
- AIツールのシェル・ファイルアクセス範囲を必要最小限にする
- 不要になったアプリケーションパスワードは失効させる
MCP Adapterは強力な境界になる。しかし、その外側にある資格情報まで自動的に守ってくれるわけではない。
まとめ
- MCP はAIと外部サービスをつなぐ共通規格である
- WordPressでは Abilities API に機能を登録し、MCP Adapter がそれをAIへ公開する
- 削除や公開の能力を作らなければ、MCP経由の操作範囲をコードで狭められる
- 既定サーバーでは「探す・調べる・実行する」の3窓口を経由する
- 能力を絞るだけでなく、低権限ユーザーと資格情報の隔離も必要である
- AIに書かせることより先に、どこまで触らせるかを決めるほうが先である
