Model Context Protocol(MCP)は、AIを活用したツールと非公開のデータソースを安全に接続するためのオープン標準です。簡単に言えば、MCPはAIアシスタントとデータソースを安全につなぐ橋渡しの役割を果たし、AIモデルがシステム上で直接操作を実行できるようにします。これにより、APIやデータベースごとにカスタム連携を一から構築する手間を省くことができます。

MCPを利用すると、ClaudeやChatGPTなどのツールからデータに直接アクセスできるようになります。AIが推測に頼るのではなく、ファイルシステム、社内ドキュメント、データベースなどからリアルタイムで情報を取得し、普段使用しているアプリ上でさまざまな操作を実行できます。

オンラインビジネスにとっても、大きな可能性が広がります。WordPressサイトをClaude DesktopなどのMCPクライアントに接続することで両者が連携し、WordPressサイトに登録されたAbilitiesを通じてAIエージェントの機能を活用できるようになります。

少し複雑に感じるかもしれませんが、今回はWordPressサイトとClaude MCPクライアントの設定方法から、Claude Desktopを使ってサイト上で操作を実行する方法まで、手順を追ってご紹介します。

具体的な手順に入る前に、まずはModel Context Protocolの基本的な概念を押さえておきましょう。

MCPの基本概念と用語

Model Context Protocolを通じてWordPressサイトをAIモデルと連携する場合、どのようなコンポーネントが連携して動作するのかを理解しておくことが重要です。

MCPクライアントAIホストをMCPサーバーに接続するソフトウェアコンポーネント。AIホストとは、Claude Desktopなど、ユーザーが実際に操作するアプリケーションを指し、MCPクライアントはサーバーとの接続を担うプロトコルレベルのコンポーネント。

MCPサーバー:標準化されたプロトコルを通じて、特定の機能をAIアプリケーションに提供するソフトウェアアプリケーション(またはプロセス)。ファイルシステムサーバー、データベースサーバー、カレンダーサーバーなどがある。

MCPアダプター:MCPクライアントとWordPressサイトのコアを双方向につなぐ変換レイヤー。WordPressサイトのAbilitiesをModel Context Protocolの仕様に変換することで、AIエージェントがサイトの機能をMCPツールとして検出・実行したり、サイトのデータをMCPリソースとして読み取ったりできるようになる。

Abilities API:WordPressコアとプラグインを含むすべてのコンポーネントが、その機能を人間とマシンの両方にとって理解しやすい統一された形式で公開できるようにするアーキテクチャレイヤー。開発者は、厳密な入出力スキーマを持つ標準化された自己記述型のアクションを登録でき、AIはそれらを検出して自律的に実行できる。

MCP図(画像出典:Model Context Protocol)
MCP図(画像出典:Model Context Protocol

WordPressとMCPでできること

AIエージェントをWordPressサイトに接続すると、AIの機能を活用して、AIホストアプリケーションから直接データを読み取ったり、複雑な操作を実行したりできるようになります。

AIホストを通じて、コンテンツの管理、管理・メンテナンス作業、サイトの状態監視、ユーザー管理、商品カタログの更新、注文の分析など、さまざまな操作を行えます。単に個々の操作を実行するだけでなく、WordPress管理画面を開くことなく、サイトの運用全体を管理できるようになります。

たとえば、記事の長さやトーン、分析の詳しさなどの大まかな条件を指定して、AIに記事の下書きを作ってもらうなど。さらに、画像の生成やリアルタイムの計算を行い、割合や実数値をまとめた表を記事に追加するよう指示することも可能です。

さまざまな作業を自動化することで、運用効率も高まります。たとえば、新規ユーザーのオンボーディング時に組織内での役割に応じて権限を自動的に割り当てたり、過去四半期の商品別売上を分析したり、チーム向けのサマリーレポートを自動生成したりできます。

Abilities APIを活用すれば、さらに高度な自動化も可能で、WordPressをAIが管理する自動化ワークフローにシームレスに組み込まれた、AIエージェントのハブとして機能させることができます。AIエージェントは、市場動向、価格変動、気象状況などの外部情報を監視しながら、データベースから在庫状況や購入履歴を確認し、そのデータに基づいて自律的に判断を下します。

サイト所有者側が行うのは、AIエージェントに自然言語で指示を出すことのみで、その後はAIエージェントが一連の作業を組み合わせ、ワークフロー全体を実行します。

MCPを使用してAIエージェントをWordPressサイトに接続する方法

コードの記述や設定に入る前に、まずはシステム要件を確認しておきます。MCPを使用してWordPressサイトをAIクライアントに接続するには、以下が必要です。

  • 開発用WordPressサイト:最低要件はWordPress 6.9だが、7.0以降の使用を推奨
  • ローカル環境にインストールしたNode.js
  • Claude Desktop:Anthropic公式のMCPホストアプリケーション
  • 任意のコードエディター:このチュートリアルではVS Codeを使用
  • テスト用のAPIクライアント(Postmanなど)

WordPressを設定する

WordPressのAbilities APIを使用するため、WordPress 6.9以降をインストールしたステージング環境または開発環境が必要です。ローカル環境で作業する場合は、URL書き換えが有効になっていることを確認してください。

ステップ1. WordPress MCP Adapterプラグインをインストールする

まず、GitHubからMCP Adapterのプラグインの.zipファイルをダウンロードし、WordPressサイトにインストールします。プラグインを有効化すると、デフォルトのMCPサーバーが自動的に登録され、以下のアドレスからアクセスできるようになります。

https://yoursite.com/wp-json/mcp/mcp-adapter-default-server

このサーバーへのリクエストには認証が必要です。認証せずにリクエストを送信すると、以下のレスポンスオブジェクトが返されます。

{"code":"rest_forbidden","message":"Sorry, you are not allowed to do that.","data":{"status":401}}

認証については、後ほどご説明します。

次に、mcp名前空間が正しく登録されていることを確認します。ブラウザまたはPostmanから、以下のリクエストを送信してください。

https://yoursite.com/wp-json/

レスポンス内にmcp名前空間があることを確認します。

{
	"name": "WordPress 7.0",
	"description": "",
	"url": "http://yoursite.com",
	"home": "https://yoursite.com",
	"gmt_offset": "0",
	"timezone_string": "",
	"page_for_posts": 0,
	"page_on_front": 345,
	"show_on_front": "page",
	"namespaces": [
		"oembed/1.0",
		"mcp",
		"wp/v2",
		"wp-site-health/v1",
		"wp-block-editor/v1",
		"wp-abilities/v1"
	],
	...
}

mcp名前空間が表示されていれば、MCPサーバーは正常に動作しています。表示されない場合は、プラグインが有効になっているか、対応するバージョンのWordPressを使用しているかを確認してください。

これでWordPressサイトをMCPサーバーとして利用する準備が完了です。続いて、Claude DesktopのMCPクライアントがサイトと通信して操作を実行できるよう、必要なAbilityを登録します。今回の例では、投稿の下書きを作成するAbilityを登録します。

ステップ2. プラグインでAbilityを登録する

任意のコードエディターを開き、新しいファイルを作成して、以下のコードを記述します。

<?php
/**
 * Plugin Name: My MCP Test Plugin
 * Description: Demonstration plugin for creating posts via MCP.
 * Version: 1.0.0
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

add_action( 'wp_abilities_api_init', 'kinsta_mcp_register_simple_draft_ability' );

/**
 * Registers a minimal ability to create post drafts.
 * This acts as a formal contract between the underlying PHP logic and the AI client.
 *
 * @return void
 */
function kinsta_mcp_register_simple_draft_ability(): void {

	if ( ! function_exists( 'wp_register_ability' ) ) {
		return;
	}

	wp_register_ability(
		'kinsta-plugin/create-draft',
		array(
			'category'	=> 'post',
			'label'	   => __( 'Create Post Draft', 'kinsta-mcp-draft' ),
			'description' => __( 'Creates a new post draft with a title and content provided by the AI agent.', 'kinsta-mcp-draft' ),
			'input_schema'  => array(
				'type'	   => 'object',
				'properties' => array(
					'title'   => array(
						'type'		=> 'string',
						'description' => __( 'The headline or title of the post draft.', 'kinsta-mcp-draft' ),
					),
					'content' => array(
						'type'		=> 'string',
						'description' => __( 'The body text or content generated for the draft.', 'kinsta-mcp-draft' ),
					),
				),
				'required'   => array( 'title', 'content' ), // Mandatory fields for the AI payload
			),
			'permission_callback' => function(): bool {
				return current_user_can( 'edit_posts' );
			},
			'execute_callback'	=> function( array $args ): array {
				$post_id = wp_insert_post( array(
					'post_title'   => sanitize_text_field( $args['title'] ),
					'post_content' => wp_kses_post( $args['content'] ),
					'post_status'  => 'draft',
					'post_type'	=> 'post',
				) );

				if ( is_wp_error( $post_id ) ) {
					return array( 
						'success' => false, 
						'error'   => $post_id->get_error_message() 
					);
				}

				return array( 
					'success' => true, 
					'message' => __( 'Draft saved successfully!', 'kinsta-mcp-draft' ),
					'post_id' => $post_id 
				);
			},

			// Explicitly flag this ability as public to expose it through the default MCP Server
			'meta' => array(
				'mcp' => array(
					'public' => true, 
				),
				// Also expose within the native WordPress REST API
				'show_in_rest' => true,
			),
		)
	);
}

このプラグインの要点は以下のとおりです。

  • Abilityの登録:wp_register_ability()関数をwp_abilities_api_initアクションにフック
  • 1つ目の引数:名前空間を含むAbility名(kinsta-plugin/create-draft)を指定
  • 2つ目の引数:Abilityの設定パラメータを指定
  • input_schema:Abilityが受け取る入力形式を定義する配列。この例では、titlecontentという2つの必須テキスト文字列を含むオブジェクトを受け取る
  • permission_callback:エージェントがAbilityの実行に必要な権限(edit_posts)を持っているかを確認する関数
  • execute_callback:Abilityの実行時に呼び出されるコールバック関数。この例では、wp_insert_postを使用して新しい投稿の下書きを作成
  • meta.mcp.public:MCP Adapterのデフォルトサーバー経由でAbilityを利用可能にするフラグ(詳しくはこちら

ここでは、Abilities APIの詳細までは掘り下げませんが、気になる方はこちらのAbilities API入門をご覧ください。

最後にファイルを保存してzip形式に圧縮し、プラグインとしてサイトにアップロードします。有効化したら、次のステップに進みましょう。

ステップ3. アプリケーションパスワードを生成する

WordPress MCPサーバーに送信するすべてのリクエストは、アプリケーションパスワードを使用して認証する必要があります。アプリケーションパスワードを生成するには、WordPress管理画面で「ユーザー」>「プロフィール」に移動し、下部にある「アプリケーションパスワード」セクションまでスクロールします。「新しいアプリケーションパスワード名」フィールドにパスワードを入力して、「アプリケーションパスワードを追加」をクリックします。

アプリケーションで使用するパスワードが生成されます。このパスワードが表示されるのは一度だけなので、必ずコピーして安全な場所に保管してください。紛失した場合は、パスワードを再度作成する必要があります。

WordPressでアプリケーションパスワードを生成するには、HTTPS接続が必要です。ユーザープロフィールにこのセクションが表示されない場合は、サイトがHTTPSで配信されていることを確認してください。詳しくは、WordPress公式ドキュメントをご覧ください。

Postmanで一連の接続をテストする

Claude Desktopを設定する前に、Postmanを使用して一連の接続をテストしておくことをおすすめします。問題が発生した場合に、原因をすばやく特定しやすくなります。

ステップ1. 最初のハンドシェイクをテストする

まず、以下のPOSTリクエストを送信して、最初のハンドシェイクをテストします。

https://yoursite.com/wp-json/mcp/mcp-adapter-default-server

リクエストには認証が必要です。PostmanでHTTPリクエストを作成したら、「Authorization(認証)」>「Basic Auth(基本認証)」を選択し、WordPressのユーザー名とアプリケーションパスワードを入力します。

PostmanでBasic Auth(基本認証)を設定
PostmanでBasic Auth(基本認証)を設定

次に、以下のヘッダーを追加します。

Content-Type: application/json
Accept: application/json, text/event-stream
Postmanでのリクエストヘッダーの設定
Postmanでのリクエストヘッダーの設定

Body(リクエストボディ)」タブに切り替え、「raw」>「JSON」を選択して、以下のリクエストボディを設定します。

{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"postman","version":"1.0"}}}
Postmanでのリクエストボディの設定
Postmanでのリクエストボディの設定

Send(送信)」をクリックします。MCPサーバーが正常に動作していれば、「200 OK」のステータスコードと、以下の画像のようなJSONレスポンスが表示されます。

The MCP server response body in Postman
Postman での MCP サーバーのレスポンス本文

レスポンスには「mcp-session-id」ヘッダーが含まれています。次のテストで使用するため、この値をコピーしておいてください。

PostmanにおけるMCP サーバーのレスポンスヘッダー
PostmanにおけるMCP サーバーのレスポンスヘッダー

ステップ 2. Abilityが認識されていることを確認する

次に、登録したAbilityが正しく認識されていることを確認します。先ほどと同じURLとBasic Authを使用し、設定済みのヘッダーに「mcp-session-id」ヘッダーを追加します。リクエストボディには、以下のJSONオブジェクトを使用します。

{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"mcp-adapter-discover-abilities","arguments":{}}}

以下のスクリーンショットは、MCPサーバーのレスポンス本文です。

PostmanでのMCPサーバーのレスポンスボディ
PostmanでのMCPサーバーのレスポンスボディ

JSONレスポンスには、登録したAbilityの名前(今回の例ではkinsta-plugin/create-draft)が含まれているはずです。

ステップ 3. PostmanからAbilityを実行する

最後に、PostmanからAbilityを実行してみましょう。URL、Basic Auth、ヘッダーはそのままで、リクエストボディのみ以下の内容に変更します。

{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"mcp-adapter-execute-ability","arguments":{"ability_name":"kinsta-plugin/create-draft","parameters":{"title":"Postman test","content":"Test content from Postman"}}}}
  • method:MCPサーバーにデフォルトのサーバーツールの1つ(tools/call)を使用するよう指示
  • params.name:後述するAbilityを実行するための汎用ツール(mcp-adapter-execute-ability
  • params.arguments.ability_name:実行するAbilityの完全な識別子(kinsta-plugin/create-draft
  • params.arguments.parameters:Abilityのinput_schemaで必須とされている引数(titlecontent)を含むオブジェクト

Send」をクリックしてリクエストを送信します。正常に実行されると、「200 OK」のステータスと以下のレスポンスが返されます。

Postmanでの正常なレスポンスボディ
Postmanでの正常なレスポンスボディ

次に、WordPress管理画面を開いて、「Postman test」という下書きが作成されていることを確認します。

ここまで問題やエラーなく進められたら、最後のステップとなるClaude Desktopの設定に進みます。

Claude Desktopを設定する

次に、公式の@automattic/mcp-wordpress-remoteプロキシを使用して、Claude DesktopをWordPressサイトに接続します。このプロキシは、STDIO経由のMCP呼び出しを、WordPress REST APIへの認証済みHTTPリクエストに変換します。

ステップ 1. 設定ファイルを編集する

Claude Desktopから直接設定ファイルを開きます。画面左下にある自分の名前のアイコンをクリックし、「Settings(設定)」>「Developer(開発者)」>「Edit Config(設定ファイルを編集)」の順に移動します。

Claude Desktopの設定ファイルへのアクセス
Claude Desktopの設定ファイルへのアクセス

claude_desktop_config.jsonファイルが保存されている場所が開きます。ファイルを開き、現在の内容を以下のコードに置き換えます。

{
  "mcpServers": {
	"wordpress-kinsta": {
	  "command": "npx",
	  "args": ["-y", "@automattic/mcp-wordpress-remote@latest"],
	  "env": {
		"WP_API_URL": "https://yoursite.com/wp-json/mcp/mcp-adapter-default-server",
		"WP_API_USERNAME": "your-wp-username",
		"WP_API_PASSWORD": "xxxx xxxx xxxx xxxx xxxx xxxx",
		"OAUTH_ENABLED": "false"
	  }
	}
  }
}

プレースホルダーを実際の情報に置き換えてからファイルを保存し、Claude Desktopを完全に終了してください。ウィンドウを閉じるだけでは、バックグラウンドで動作し続ける可能性があるため、システムトレイから終了してください。

ステップ 2. Claude Desktopで接続を確認する

Claude Desktopを再度開き、(自分の名前)>「Settings」>「Developer」に移動します。ここにローカルMCPサーバーの一覧が表示されます。ここまでの手順が正しく完了していれば、wordpress-kinstaサーバーの概要タブが表示され、ステータスが「running(稼働中)」になっていることを確認できます。

Claude Desktop内のローカルMCPサーバー
Claude Desktop内のローカルMCPサーバー

次に、wordpress-kinstaサーバーで利用できるツールの一覧を表示するようClaudeに指示します。Claude Desktopから、以下のように利用可能なツールの一覧が返されます。

Claude DesktopがMCPサーバー上で利用可能なツールを一式提示
Claude DesktopがMCPサーバー上で利用可能なツールを一式提示

前述のとおり、すべてのAbilityの識別子を把握しておく必要はありません。AIに実行してほしい内容を伝えるだけで、モデルが登録済みのAbilityを検出し、適切なAbilityとそのパラメータを特定したうえで、正しい値を使って実行します。

Claude Desktopでの自然言語によるリクエスト
Claude Desktopでの自然言語によるリクエスト

特定のAbilityについて詳しい情報を取得する際には、wordpress-kinsta MCPサーバーの「Get Ability Info(Ability情報を取得)」をClaudeが使用することへの許可を求められます。リクエストを承認すると、そのAbilityの詳細情報がClaudeに表示されます。

リクエストされた機能の詳細情報を表示するClaude
リクエストされた機能の詳細情報を表示するClaude

AIにAbilityの実行を依頼する

最後に、Claudeに最初のリクエストを送り、投稿の下書きを作成してみましょう。もちろん、具体的な条件を指定したプロンプトを使って、本文の生成もClaudeに依頼できます。以下はその一例です。

WordPressサイトでの下書き生成を依頼するプロンプトの例
WordPressサイトでの下書き生成を依頼するプロンプトの例

ClaudeによるAbilityの実行を許可すると、数秒後に結果が返されます。処理が完了すると、チャットには以下のような内容が表示されます。

Claudeが投稿の下書き作成を確認
Claudeが投稿の下書き作成を確認

次に、WordPress管理画面を開き、「投稿」画面に移動します。指定したタイトルで下書きが作成されていることを確認してください。下書きを開くと、エディターには以下のように生成された内容が表示されます。

ブロックエディタに表示されたリクエストした下書き
ブロックエディタに表示されたリクエストした下書き

わずか数秒で生成されたことを考えると、かなり完成度の高い仕上がりになっています。

ただし、生成されたコンテンツはすべてHTML形式です。これは、今回作成したプラグインに、コンテンツの各セクションをGutenbergブロックに変換する処理が含まれていないためです。

投稿コンテンツはGutenbergブロックで構成されていない
投稿コンテンツはGutenbergブロックで構成されていない

そこで今度は、コンテンツをGutenbergブロック形式にするようClaudeに指示して、同じリクエストを実行してみました。チャットには以下のような回答が返されました。

投稿コンテンツをGutenbergブロック形式で構成したことを伝えるClaude
投稿コンテンツをGutenbergブロック形式で構成したことを伝えるClaude

WordPressのコードエディターで下書きを確認すると、以下のように表示されます。

投稿コンテンツがGutenbergブロック形式で構成された状態
投稿コンテンツがGutenbergブロック形式で構成された状態

AIエージェントと連携するWordPressサイトには高性能なインフラが不可欠

Model Context Protocolを通じてWordPressサイトをAIモデルに接続すると、サイトの性質は大きく変わります。キャッシュから静的ページを配信したり、ユーザーからの個々のリクエストに応答したりするだけではありません。MCPを介してAIクライアントと通信するには、これまでとはまったく異なる種類のリクエスト負荷をWordPressで処理する必要があります。

AIエージェントは、わずか数秒の間に数十件ものRESTリクエストを実行することがあります。人間のユーザーでは考えられないほど短時間に、大量のリクエストが連続して発生することになります。さらに、MCPリクエストはページキャッシュを完全に迂回し、ハンドシェイクのたびにPHPスレッドを直接使用します。そのため、PHPとデータベースの処理性能が十分に最適化されていなければ、投稿の下書きをプログラムで作成するといった重要な処理の途中でタイムアウトが発生する可能性があります。

公開するAbilityでは、セキュリティも重要です。MCP経由で公開されるAbilityはそれぞれエンドポイントとなるため、適切に保護する必要があります。APIではpermission_callbackを定義でき、アプリケーションパスワードによるリクエストの認証も必須ですが、ウェブアプリケーションファイアウォール(WAF)隔離コンテナ技術SSL証明書の自動化、IPアドレスのブロックといった強固なセキュリティ対策を提供するサーバーサービスを利用することで、攻撃対象領域を大幅に縮小し、不正アクセスのリスクを軽減できます。

サイトに登録したAbilityを本番環境に導入する前にテストするには、本番サイトとまったく同じ技術スタックで動作し、HTTPSに対応したステージング環境が欠かせません。また、MCPを利用して信頼性の高いAI連携を構築するには、SSHWP-CLIなどの開発者向けツールも重要です。

AIツールと継続的に通信するサイトでは、可観測性も重要になります。APMツールサーバーログを利用できれば、バックグラウンドで何が起きているのかを把握し、HTTPリクエストがエラー表示なしに失敗する原因を調査したり、サイトのアーキテクチャ内でボトルネックになっている箇所を特定したりできます。

こうした理由から、現代のWordPressサイトに必要なアーキテクチャ、ツール、手厚いサポートを備えたインフラサーバーサービスを選ぶことが、これまで以上に重要になっています。Kinstaでは、これらすべてを一元化されたコントロールパネルから利用できます。

ダッシュボードからサイトに直接アクセスし、パフォーマンス監視を開始したり、SSHのログイン情報を確認したり、サイトログをダウンロードしたり、専門知識を持つサポートチームに問い合わせたりできます。AIによる自動化でさらに高い処理能力が必要な場合は、PHPパフォーマンスを最適化したり、プレミアムステージング環境アドオンを追加したりすることで、テスト環境と本番環境の両方で高い応答性を確保できます。

WordPressの未来を切り開くAIエージェント

WordPressは、従来のCMSから本格的なAIエージェント活用のハブへと進化しつつあります。Abilities APIやAI Clientの登場からもわかるように、これからのウェブは人間による操作だけでなく、バックグラウンドで自律的に動作するマシンやAIエージェントとの連携を前提としたものになっていきます。

音声ファイルを投稿に変換したり、GitHub Actionsを使ってワークフローを自動化したり、WordPressサイトとClaude Desktopクライアントをシームレスに連携したりと、WordPressは複雑なリクエストを処理し、入力データをGutenbergブロックに変換できる環境を備えています。こうしたアプリケーションに必要な処理能力、セキュリティ、拡張性を確保するには、高性能なサーバーを選ぶことも重要です。

Kinstaのサーバーにご興味がありましたら、ぜひプラン一覧をご覧ください。また、プラン選びやサーバー周りの課題でお悩みでしたら、営業担当にお気軽にご相談ください。

Carlo Daniele Kinsta

ウェブデザインとフロントエンド開発をこよなく愛し、WordPress歴は10年以上。イタリアおよびヨーロッパの大学や教育機関とも共同研究を行う。WordPressに関する記事を何十件も執筆しており、イタリア国内外のウェブサイトや雑誌に掲載されている。詳しい仕事情報はXとLinkedInで公開中。