MCP Wordpress について
MCP WordPress CrunchTools は、WordPress の投稿、ページ、メディア、コメントを管理する開発者向けのローカル MCP サーバーです。保存済みソースを対象とする編集や書き込み前のバージョン確認に加え、入力検証と SSRF 対策を備えています。
主な機能
- 01投稿、ページ、メディア、コメントの管理
- 02投稿予約とリビジョン確認
- 03保存済みソースの部分置換編集
- 04更新前の期待バージョン確認
- 05入力検証と SSRF 防止
活用シーン
- 01技術ブログ記事の下書きや公開予約
- 02古い内容を上書きせずに WordPress ページを更新
- 03メディアのアップロードとコメントのモデレーション
MCP 対応
stdio でローカル実行し、サイト URL、ユーザー名、アプリケーションパスワードを使って MCP クライアントを WordPress に接続します。コンテンツ管理ツールを提供し、認証情報はローカルマシンに保持します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP WordPress CrunchTools
WordPress コンテンツ管理用のセキュアな MCP(Model Context Protocol)サーバーです。開発者が自身の取り組みについて発信するために設計されています。
概要
この MCP サーバーは、次の特長を備えています。
- デフォルトでセキュア - 入力検証、認証情報の保護、SSRF の防止
- サードパーティサービス不要 - stdio 経由でローカル実行され、認証情報がマシンの外に出ることはありません
- クロスプラットフォーム - Linux、macOS、Windows で動作します
- 自動更新 - GitHub Actions が CVE を監視し、依存関係を更新します
- コンテナ化 -
quay.io/crunchtools/mcp-wordpressで利用できます
命名規則
| コンポーネント | 名前 |
|---|---|
| GitHub リポジトリ | crunchtools/mcp-wordpress |
| コンテナ | quay.io/crunchtools/mcp-wordpress |
| Python パッケージ(PyPI) | mcp-wordpress-crunchtools |
| CLI コマンド | mcp-wordpress-crunchtools |
| モジュールのインポート | mcp_wordpress_crunchtools |
機能
- 投稿、固定ページ、メディア、コメント用の 33 個のツール
- セキュリティ重視:認証情報の保護、入力検証、SSRF の防止
- 開発者向けワークフロー:予約投稿、リビジョン、検索
- 簡単に統合可能:Claude Code やその他の MCP クライアントで動作します
インストール
uvx を使用(推奨)
uvx mcp-wordpress-crunchtools
pip を使用
pip install mcp-wordpress-crunchtools
mcp-wordpress-crunchtools
コンテナを使用
# Create a shared upload directory (required before first run)
mkdir -p ~/.local/share/mcp-uploads-downloads
podman run -v ~/.local/share/mcp-uploads-downloads:/tmp/mcp-uploads:z \
-e WORDPRESS_URL=https://example.com \
-e WORDPRESS_USERNAME=admin \
-e WORDPRESS_APP_PASSWORD='xxxx xxxx xxxx xxxx' \
quay.io/crunchtools/mcp-wordpress
SELinux に関する注意:
:Z(大文字、プライベート)の代わりに:z(小文字、共有)を使用してください。 MCP サーバーは長時間稼働する stdio プロセスとして実行されます。:Zを使用すると、コンテナの起動後に ディレクトリへコピーしたファイルにはコンテナのプライベート MCS ラベルが付かず、 コンテナ内から見えなくなります。:zフラグは、すべてのコンテナとホストが読み書きできる共有container_file_tコンテキストを設定します。ヒント: 複数の MCP コンテナサーバー(例:mcp-wordpress と mcp-gemini)間で同じ共有ディレクトリ(
~/.local/share/mcp-uploads-downloads/) を使用すると、生成したファイルをコピーせずにすぐアップロードできます。
ソースからインストール
git clone https://github.com/crunchtools/mcp-wordpress.git
cd mcp-wordpress
uv sync --all-extras
uv run mcp-wordpress-crunchtools
設定
次の環境変数を設定します。
| 変数 | 説明 | 例 |
|---|---|---|
WORDPRESS_URL | WordPress サイトの URL | https://example.com |
WORDPRESS_USERNAME | WordPress のユーザー名 | admin |
WORDPRESS_APP_PASSWORD | アプリケーションパスワード | xxxx xxxx xxxx xxxx |
MCP_UPLOAD_DIR | コンテナ内のアップロードディレクトリ(任意) | /tmp/mcp-uploads(デフォルト) |
アプリケーションパスワードの作成
- WordPress の管理画面にログインします
- ユーザー → プロフィールに移動します
- アプリケーションパスワードまでスクロールします
- 名前(例:「MCP Server」)を入力し、新規追加をクリックします
- 生成されたパスワードをコピーします(表示されるのは一度だけです)
Claude Code での使用方法
uvx を使用(推奨)
claude mcp add mcp-wordpress-crunchtools \
--env WORDPRESS_URL=https://example.com \
--env WORDPRESS_USERNAME=admin \
--env WORDPRESS_APP_PASSWORD="xxxx xxxx xxxx xxxx" \
-- uvx mcp-wordpress-crunchtools
pip を使用
pip install mcp-wordpress-crunchtools
claude mcp add mcp-wordpress-crunchtools \
--env WORDPRESS_URL=https://example.com \
--env WORDPRESS_USERNAME=admin \
--env WORDPRESS_APP_PASSWORD="xxxx xxxx xxxx xxxx" \
-- mcp-wordpress-crunchtools
コンテナを使用
# Create a shared upload directory (required before first run)
mkdir -p ~/.local/share/mcp-uploads-downloads
claude mcp add mcp-wordpress-crunchtools \
--env WORDPRESS_URL=https://example.com \
--env WORDPRESS_USERNAME=admin \
--env WORDPRESS_APP_PASSWORD="xxxx xxxx xxxx xxxx" \
-- podman run -i --rm \
-v ~/.local/share/mcp-uploads-downloads:/tmp/mcp-uploads:z \
-e WORDPRESS_URL \
-e WORDPRESS_USERNAME \
-e WORDPRESS_APP_PASSWORD \
quay.io/crunchtools/mcp-wordpress
利用可能なツール
サイトツール
| ツール | 説明 |
|---|---|
wordpress_get_site_info | サイトのタイトル、説明、URL、タイムゾーンを取得します |
wordpress_test_connection | API 認証情報が機能することを確認します |
編集モデル
読み取りでは、レンダリングされたページではなく、エディターが保存したソース(context=edit)を返すため、エージェントが読み取った内容は安全に書き戻せます。変更は edit_* ツールを介して行います。エージェントが置換対象のテキストと置換後のテキストを正確に送信し、サーバーが現在のソースに適用するため、投稿がエージェントを経由して往復することはありません。投稿と固定ページの更新・編集ツールは、省略可能な expected_version(get_post または get_page が返す version)を受け取ります。これを指定した場合、対象が変更されていれば書き込みは拒否されます。update_* はレンダリング済みの出力を含むコンテンツを拒否します。edit_draft は下書きまたは保留中の投稿のみを編集するため、ゲートウェイは公開済みの投稿を変更する権限を与えずに、リビジョンの権限を付与できます。
投稿ツール
| ツール | 説明 |
|---|---|
wordpress_list_posts | フィルター(ステータス、カテゴリー、検索)を指定して投稿を一覧表示します |
wordpress_get_post | ID を指定して単一の投稿を取得します。保存済みのソース(ブロックマークアップを含む)とバージョンも取得します |
wordpress_search_posts | キーワードで投稿を検索します |
wordpress_create_post | 新しい投稿を作成します(予約投稿に対応) |
wordpress_update_post | 既存の投稿を更新します。レンダリング済み HTML と、指定された場合は古い expected_version を拒否します |
wordpress_edit_post | 投稿を再送信せずに、投稿のソース内のテキストを置換します |
wordpress_edit_draft | edit_post と同じですが、下書きまたは保留中の投稿のみを対象とします。それ以外のステータスは拒否します |
wordpress_delete_post | 投稿を削除またはゴミ箱に移動します |
wordpress_list_revisions | 投稿のリビジョンを一覧表示します |
wordpress_get_revision | 指定したリビジョンの内容を取得します |
wordpress_list_categories | 利用可能なカテゴリーを一覧表示します |
wordpress_list_tags | 利用可能なタグを一覧表示します |
固定ページツール
| ツール | 説明 |
|---|---|
wordpress_list_pages | フィルターを指定して固定ページを一覧表示します |
wordpress_get_page | ID を指定して単一の固定ページを取得します。保存済みのソースとバージョンも取得します |
wordpress_create_page | 新しい固定ページを作成します |
wordpress_update_page | 既存の固定ページを更新します。レンダリング済み HTML と、指定された場合は古い expected_version を拒否します |
wordpress_edit_page | 固定ページを再送信せずに、ページのソース内のテキストを置換します |
wordpress_delete_page | 固定ページを削除またはゴミ箱に移動します |
wordpress_list_page_revisions | 固定ページのリビジョンを一覧表示します |
メディアツール
| ツール | 説明 |
|---|---|
wordpress_list_media | メディア項目を一覧表示します |
wordpress_get_media | メディア項目の詳細を取得します |
wordpress_upload_media | ローカルパスからファイルをアップロードします |
wordpress_update_media | メディアのメタデータを更新します |
wordpress_delete_media | メディア項目を削除します |
wordpress_get_media_url | メディアの公開 URL を取得します |
コメントツール
| ツール | 説明 |
|---|---|
wordpress_list_comments | フィルターを指定してコメントを一覧表示します |
wordpress_get_comment | 単一のコメントを取得します |
wordpress_create_comment | 投稿にコメントを追加します |
wordpress_update_comment | コメントの内容またはステータスを更新します |
wordpress_delete_comment | コメントを削除します |
wordpress_moderate_comment | 承認、保留、スパム指定、またはゴミ箱への移動を行います |
例
下書きの投稿を作成する
Create a new WordPress post titled "My Technical Article" with the content below. Keep it as a draft.
投稿を予約する
Update post ID 123 to publish on December 25, 2024 at 10:00 AM.
画像をアップロードする
Upload this image to WordPress and set the alt text to "Architecture diagram".
コメントを検索してモデレートする
List all comments in "hold" status and approve the legitimate ones.
セキュリティ
- 認証情報の保護:すべての認証情報は
SecretStrとして保存され、ログに記録されることはありません - SSRF の防止:REST API のパスはハードコードされており、上書きできません
- 入力の検証:すべての入力は Pydantic モデルを使用して検証されます
- レート制限:WordPress のレート制限を適切に処理します
- TLS の適用:すべてのリクエストで、証明書検証付きの HTTPS を使用します
- サイズ制限:メモリの問題を防ぐため、レスポンスサイズを 10MB に制限します
- タイムアウト:すべてのリクエストは 30 秒後にタイムアウトします
開発
# Install dev dependencies
uv sync --all-extras
# Run tests
uv run pytest
# Run linting
uv run ruff check src tests
# Run type checking
uv run mypy src
# Format code
uv run ruff format src tests
ライセンス
AGPL-3.0-or-later
クレジット
crunchtools.com によって開発されました
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。