WPGuard MCP について
WPGuardは、WordPressサイトの運用者向けオープンソースMCPサーバーです。変更のプレビュー、対応する編集への範囲指定の修正チェック、変更証跡の記録を行い、ローカルまたはサーバー上でSSHか専用プラグイン経由でサイトに接続できます。
主な機能
- 01WordPressサイトの構成や設定を確認
- 02コンテンツ、設定、ファイルの変更をプレビュー
- 03記録済み修正ルールで対応編集を検査
- 04スナップショットと変更記録を保存
- 05デスクトップ・モバイル表示を検証
- 06リビジョンとコンポーネント更新を管理
活用シーン
- 01ページ編集を適用前に確認
- 02必要なテキストやリンクの削除を防止
- 03本番審査前にステージングサイトで変更をテスト
- 04過去の変更記録と証跡を確認
MCP 対応
MCPクライアントを登録済みのWordPressサイトに接続し、調査、編集、検証、変更記録のツールを提供します。クライアントとはMCP Streamable HTTPで通信し、サイトにはSSHまたは専用プラグイン経由で接続します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e WPGUARD_MCP_TOKEN ghcr.io/cgallic/wpguard-mcp:0.4.0WPGUARD_MCP_TOKENシークレットGenerate a strong secret for trusted operators. This token grants admin tool access.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/cgallic/wpguard-mcp:0.4.0Streamable HTTPツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
WPGuard
AI アシスタントに WordPress で作業させましょう。編集内容をプレビューし、重要な修正を保持します。
WPGuard は MCP クライアントを WordPress に接続し、サイトの調査、コンテンツや設定の更新、変更記録の返却を行います。対応する修正を教えると、以降その対象に対して行う編集は、適用前にチェックされます。
これは WP MCP Server の基盤となるオープンソースサーバーです。ご自身のマシンまたはサーバーで実行し、SSH または付属のプラグインを通じて WordPress サイトに接続できます。
はじめに · 製品サイト · セキュリティ · MIT ライセンス
確認できる、役立つ作業
アシスタントに次の作業を依頼できます。
- ページを変更する前に、有効なテーマ、プラグイン、コンテンツタイプ、利用可能なフィールドを調査します。
- 対象ページと承認済みの参照元を探し、保存済みの全コンテンツを比較して、範囲を限定したページ全体の差分をプレビューします。
- Gutenberg またはクラシックエディターのページ本文を置き換え、指定した文言が保持されることを確認し、人が後から行った編集の上書きを拒否します。
- Gutenberg ブロックを構造的に1つ更新し、書き込みによって作成された WordPress のネイティブリビジョンを確認します。
- 登録済みのステージングサイトでページ変更をテストし、本番環境への承認を求める前に、デスクトップとモバイルの証拠を取得します。
- プラグインまたはテーマを1つ更新し、バージョンを固定して、ヘルスチェックを行い、更新に失敗した場合は自動的に復元します。
- コンテンツの置換、設定の更新、ファイルの編集を、適用前にプレビューします。
- 同じ対象への後続の編集でも、承認済みのテキスト断片、フィールド値、リンクを保持します。
- 特定のクライアントに対する過去の作業を取得し、その根拠となる証拠を提示します。
- 変更パケットと、対応する変更ツールによって取得されたスナップショットを確認します。
ツールは WordPress へのアクセスと変更記録を提供します。アシスタントとその推論は、MCP クライアントが提供します。
一度教えれば、次の編集をチェック
たとえば、あるレストランの予約ページでは、テーブルを予約というラベルのリンクが /reserve を指し続ける必要があるとします。
却下例、承認例、およびその情報源を使って要件を記録します。WPGuard はまず、そのチェックで両方の例を区別できることを確認します。後でコンテンツを編集してリンクを削除すると、プレビュー時のチェックに失敗し、アシスタントが適用しようとしてもブロックされます。
この合成例では、サイトを登録した後に wp_correction_record MCP ツールを使います。
wp_correction_record(
site="restaurant-staging",
target="post:84:content",
human_correction="Keep the reservations link on this page.",
source_ref="review:reservation-link-example",
human_requested_basis="The site owner requested this link in the example review.",
kind="html_link",
expected={"href": "/reserve", "text": "Reserve a table"},
rejected_value="<p>Contact us to book.</p>",
accepted_value='<p><a href="/reserve">Reserve a table</a></p>',
)
この要件が適用されるのは、この登録済みサイトと、この投稿本文です。すべてのページや別のクライアントに適用されるルールにはなりません。修正を廃止しても、その履歴と廃止理由は保持されます。
対応するチェックは、特定のテキストの存在または不在、スカラー値の一致、JSON Pointer で指定した値、HTML アンカーのリンク先とテキストを対象とします。リンクチェックでは HTML 構造を調べますが、リンク先が動作することや、ブラウザー上でリンクが表示されることは確認しません。
ソースから始める
Python 3.10 以降が必要です。次のコマンドはこのリポジトリをインストールします。公開済みのパッケージやコンテナーイメージには依存しません。
git clone https://github.com/cgallic/wpguard-mcp.git
cd wpguard-mcp
python -m venv .venv
source .venv/bin/activate
python -m pip install ".[browser]"
playwright install chromium
export WPGUARD_TOKEN_ADMIN="$(python -c 'import secrets; print(secrets.token_hex(32))')"
wpguard-mcp
サーバーは http://127.0.0.1:8642/mcp でリッスンします。MCP Streamable HTTP と Authorization: Bearer <token> ヘッダーに対応するクライアントを接続し、サーバーの環境変数 WPGUARD_TOKEN_ADMIN の値を使用してください。
次にサイトを登録し、wp_site_context を呼び出します。登録によって接続情報が保存されますが、サイトのコンテンツがインポートまたは変更されることはありません。
セットアップガイドでは、Windows、Docker ビルド、2種類の WordPress 接続方法、および確認可能なプレビューを伴う最初の編集について説明しています。
含まれる機能
| 作業 | ツールと動作 |
|---|---|
| サイトを把握する | wp_site_context、wp_recon、wp_schema_recon、wp_design_context は、サイトの一覧と設定を公開します。プラグインが認識されても、ネイティブ連携が完全に備わっているとは限りません。 |
| 1 つのページを仕上げる | wp_page_list、wp_page_get、wp_page_compare で対象と参照先を特定します。wp_page_replace_content は完全な置き換えをプレビューし、保護対象のコピーと修正を確認して、レビュー済みの etag と正確なパケットを必須とし、スナップショットを取得したうえで、保存された結果を読み戻します。wp_page_render_verify は WordPress を変更せずに、ハッシュと DOM チェックを含むデスクトップとモバイルのスクリーンショットを取得します。 |
| 本番環境の前にテストする | wp_page_stage_and_test は、登録済みの両方のピアをプレビューし、別途承認されたステージングサイトにのみ適用して、レンダリング結果の証拠を取得し、本番環境向けの新しいプレビューを返します。自動で本番環境へ反映することはありません。 |
| コンテンツと設定を編集する | wp_mutate_post_content、wp_mutate_post_meta、wp_mutate_option は、デフォルトでプレビューを行い、該当する修正を確認し、承認された書き込みの前に以前の値を取得します。 |
| ファイルとブロックを扱う | ファイルツールでは、読み取りと編集のプレビューができます。wp_mutate_block は、同じダイジェスト、ETag、修正、スナップショット、パケットの制御のもとで、解析済みの Gutenberg ブロックを 1 つ選択してパッチを適用します。投稿の作成はデフォルトで下書きになります。 |
| コンポーネントを更新する | wp_vulnerability_scan は、キャッシュされた clean、vulnerable、unknown の検出結果を返します。SSH 接続されたサイトでは、プラグインやテーマの正確な更新をプレビューして適用でき、更新後のヘルスチェックも実行します。失敗した場合は以前のバージョンに自動で復元します。 |
| コンテンツを復元する | WordPress ネイティブのリビジョンを一覧表示して確認するか、wp_revert_to_revision をプレビューして承認します。WPGuard は、完全なコンテンツハッシュを使って結果のリビジョンを検証します。 |
| 無人で作業を実行する | 管理者は、サイト、ソース、正確な動詞、対象パターン、最大リスクに紐づけた、範囲を絞った事前承認ポリシーを作成できます。一致する実行には 1 つの正確なパケットが割り当てられます。一致しない作業はブロックされたままです。 |
| 修正内容を記録する | 正確な対象に対するチェックを記録、一覧表示、廃止します。該当するチェックに失敗するか評価できない場合、上記 3 つの変更ツールはブロックされます。 |
| 過去の作業を参照する | パケット CSV または修正エピソード JSONL をインポートし、インポートした文章を実行可能な指示に変えることなく、元の記録を取得します。 |
| 変更をレビューする | 変更パケットには、提案、承認、結果が記録されます。wpguard audit でローカルの台帳を表示できます。対応するスナップショットはロールバックツールで使用できます。 |
このサーバーは、高度な PHP、SQL、CLI、スニペット、アクセス用のツールも公開します。それぞれの権限と副作用は異なります。これらは上記の修正チェックの対象外です。
独自の履歴を取り込む
履歴をインポートすると、元の記録、ハッシュ、来歴がインスタンスの状態ディレクトリに保持されます。同一のインポートを繰り返しても結果は変わりません。変更された記録では、以前のバージョンも保持されます。
パケットのエクスポートでは、次の 3 つの CSV スキーマが使用されます。
packets: id,client_slug,site,status,risk,created_at,summary
status: client_canonical,total_packets,verified,open,blocked,rolled_back
categories: category,packets,distinct_clients,top_clients
python -m wpguard_mcp.history import \
--packets packets.csv --status status.csv --categories categories.csv \
--human-requested-basis "The operator confirmed these categories describe human-requested changes."
より詳細なセッション履歴の場合:
python -m wpguard_mcp.history import-episodes \
--episodes episodes.jsonl --lessons lessons.md --coverage coverage.md
各 JSONL レコードには、空でない episode_id、client、site の文字列が必要です。その他の証拠フィールドは保持されます。wp_history_episodes(client_slug=...) は、元の client 値と完全一致するものを検索します。パケットクエリは、パケットエクスポートの client_slug と完全一致するものを検索します。2 つのエクスポート間のエイリアスマッピングは推測されません。
インポートされたステータスと受け入れラベルは、過去の報告として保持されます。有効な修正を記録するには、チェックに失敗する例と成功する例が必要であり、これは別の操作です。呼び出し元から提供された受け入れ参照は証明として記録されますが、承認が独立して認証されるわけではありません。
インポートしたデータは、クエリされるか、運用者によって他の方法で共有されるまで、インスタンス内に保持されます。クエリを実行すると、選択された記録が接続先の MCP クライアントに送信されます。非公開の履歴を公開リポジトリや公開可能な成果物に含めないでください。
境界を理解する
- 修正対象の範囲は明示されています: オプション、投稿メタ、投稿本文、ページ全体、ブロック、標準のリビジョンに対するコンテンツ書き込みでは、該当する対象ルールが評価されます。生の PHP、SQL、ファイルの編集、新規投稿、コンポーネントの更新、WPGuard の外部で行われた変更には、別の保護措置が適用されます。
- レンダリングの検証には限界があります。
wp_page_render_verifyは、解決された公開中のページをデスクトップとモバイルのサイズで確認し、HTTP エラー、横方向のはみ出し、レンダリングされた画像の破損、任意で指定された期待テキストを検査します。ハッシュ化されたスクリーンショットと JSON のレシートをstate/render-evidence/に保存します。視覚的な品質の評価や、インタラクションとリンクの動作確認は行いません。 - 権限は人による承認ではありません。 mutate スコープの呼び出し元はパケットを承認できます。admin スコープの呼び出し元は修正を記録または無効化できます。それぞれを誰に許可するかは、周囲のワークフローで判断してください。
- スナップショットはツールごとに異なります。 公開されているすべての操作を元に戻せる保証はありません。サイトの通常のバックアップを維持してください。
- コンパニオンプラグインには管理機能があります。 専用の管理者が所有する WordPress アプリケーションパスワードを使用してください。既存のインストールでは、従来の共有キーも引き続き使用できます。サーバー側のトークン階層では、プラグインに直接アクセスする呼び出し元を保護できません。
- ローカル台帳は単一の書き込み元を前提としています。 複数の書き込み元で共有するデータベースではありません。リプレイやテストが成功しても、本番環境へのデプロイが行われたことにはなりません。
コンテンツ修正のチェックには、更新されたコンパニオンプラグインが必要です。プレビュー時にソースコンテンツを返し、コンテンツの置換を適用する前にそのダイジェストを確認します。古いプラグインの応答では、この機能チェックを満たせません。
開発
python -m pip install -e ".[dev]"
ruff check .
mypy
pytest -q
CI では Python 3.10–3.12 でリンティング、型チェック、テストを実行します。コンパニオンハンドラーのテストを実行するには PHP CLI が必要です。PHP CLI がない場合、それらのテストはスキップされます。公開されているテスト例はすべて合成データです。
WPGuard は MIT ライセンスです。LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。