「AIに記事を書かせて、そのままWordPressに下書き保存できたら楽なのに」と思ったことはないですか?
今回は Claude Code と MCP を使って、XserverのWordPressに記事を自動で下書き投稿する仕組みを作ったので、その作り方と使い方をまとめておきます
AIにブログの下書きを書いてもらう人は増えてきましたが、出来上がった文章を管理画面にコピペして、見出し整えて、カテゴリ付けて…という地味な作業は意外と面倒です
そこに「MCP(Model Context Protocol)」という新しい仕組みを噛ませると、Claudeに頼むだけで下書きが管理画面に届くようになります
今回のMCPサーバー自体、私がPythonを一行ずつ書いたというよりClaude Code本人に「こういうサーバーを作って」と頼んで作ってもらったものです
なのでこの記事は、完成したコードを丸ごとコピペする話というよりClaudeにどう頼めばMCPサーバーができあがるのか、どうテストすれば安心して使えるのかを中心にまとめていきます
Claude CodeでWordPress自動投稿|何ができるようになるか
まずは完成形のイメージから紹介します
セットアップが終わると、Claude Codeに対してこんなお願いができるようになります
「VLOOKUP関数について、初心者向けに1000字くらいで解説記事を書いて、下書きで保存しておいて」
これだけで、WordPress管理画面の「投稿一覧」に下書きの記事が勝手にできあがっています
主に次のようなことができるようになります
- テーマを伝えるだけで記事の下書きをWordPressに自動投稿
- アイキャッチ画像のアップロードと設定
- カテゴリ・タグの設定(既存から選ぶ・足りなければ新規作成)
- メタディスクリプション(SEO用の説明文)の登録
- テーマ独自のブロック(SWELLのステップ・FAQ・注意ボックスなど)での装飾
- 記事ごとのカスタムCSS(SWELLの投稿別CSS欄)の設定
- 既存記事の取得・編集も会話で完結(タイトル変更・本文追記など)
- 下書き一覧を出してもらって、書きかけ記事の整理も簡単
要するに 下書きから装飾までの面倒な手作業をAIとの会話で済ませられるようになります
もちろん公開前のプレビュー確認は管理画面で行いますが、それ以外の編集作業をブラウザでぽちぽち進めなくて済むのが地味に効きます
テーマ独自のブロックは「見本ページ」を読ませて覚えさせる
1つだけコツがあります、「SWELLのステップブロックで書いて」と頼むだけでは、Claudeはあなたのテーマの正確なブロックの形までは分かりません、ブロックの中身(HTML)はテーマごとに違うからです
そこで効くのが、使いたいブロックを並べた見本用の固定ページを1枚だけ作っておく方法です
その見本ページをClaudeに読み取らせると、実際のブロックのHTMLを覚えて、同じ形を記事の中で再現できるようになります
私の場合は、ステップ・FAQ・吹き出し・各種ボックスなどを1ページにまとめた見本を作って、それをClaudeに読ませてから装飾してもらう、という流れにしています
逆に苦手なこと|任せきれない部分は人がやる
万能ではないので、苦手なところも正直に書いておきます
いちばんはっきりしているのが画像です、「この記事に合うスクショを貼って」と頼んでも、AIは記事の見た目を見ているわけではないし、必要なスクショを自分で撮ることもできません
ローカルの画像をアップロードするにしても、メディアライブラリから選ぶにしても、「どれが適切か」の判断はAIには難しいです、特に、まだ存在しないスクショを用意することはできないので、ここは人の出番になります
代わりに「キャプチャのメモ」を入れてもらう
まるごと任せられないだけで、下ごしらえは頼めます
「ここにスクショを入れる」という場所と、「何を写したスクショにするか」のメモを、該当箇所に書いておいてもらう使い方です、そうすれば人は、メモ通りにスクショを撮って貼るだけで済みます
実際この記事の画像も、先にAIが「ここにアプリケーションパスワード発行画面のスクショ」とメモを置いておいて、その場所に私が撮ったものを入れています
WordPress REST APIにないことはできない
このMCPはWordPressのREST API(記事・固定ページ・メディア・カテゴリなどを操作する窓口)を通して動いているので、そこに用意されていないこと——サイト全体に効くCSSやJavaScript、プラグインの設定、メニューやサイト構成の変更などは反映できません(記事1本ごとのCSSのほうは、後で触れる補助プラグインを入れれば設定できます、JSも技術的には可能ですが、安全のためおすすめしません)
「こう変えたい」と相談すれば書き方や手順の提案はしてくれますが、実際に反映するのはテーマ・カスタマイザー・プラグイン側の作業で、MCPの守備範囲の外になります
あえて「触れる範囲」は絞っている
逆に、REST API経由で触れるメタ情報(SEOのディスクリプションなど)は、できる中でもあえて最小限に絞っています、SEOのタイトルやog:imageなども、開放すればMCPから設定できるようにはできます、ただ自動で書き換えられる範囲が広いほど、うっかり上書きや、認証情報が漏れたときの被害も大きくなります、なので「実際に自動化したいものだけ開けておく」のが安全だと考えています
具体的には、SEOプラグインのメタディスクリプションやSWELLの投稿別CSSは、標準のWordPressでは外部から書き込めません、これらを書き込めるようにするための補助プラグインを、Claudeに作ってもらって自分で設置しています
置き場所は通常のプラグインフォルダではなく、mu-plugins(must-use plugins)という特別なフォルダです、ここに置くと管理画面に項目すら出ないうえに、置くだけで自動で有効化されて、テーマやプラグインの更新でも消えません、自作の小さな仕組みを安全に常駐させる用途にちょうど良い場所です(普通にブログを運営しているとフォルダ自体が無いことも多いので、その場合は wp-content/ の下に新しく mu-plugins フォルダを作って置きます)
このあたりの「Claudeに作ってもらって自分で置く」流れは、MCPサーバー本体を作るときと同じです、補助プラグインは1ファイルの短いPHPなので、依頼すればすぐ作ってもらえます
それから、これは「できない」というより最後は人が見ておきたいところですが、仕上がりの見た目です、AIはブロックのHTMLを組むところまでで、テーブルの幅やモバイルでの崩れといった実際の表示までは見えていません、ファクトの裏取りと同じ感覚で、公開前にプレビューでさっと目視しておくのが安心です
もう1つ、これはMCPというよりAIに記事を書かせるとき全般のコツですが、「リストには下線を付ける」「画像は影付きスタイルにする」のような自分ルールを決めておくと、AIはそれに合わせて作ってくれます、このあたりのAI執筆側のコツは、機会があったら別記事でまとめようと思います
そもそもMCPって何|AIと外部サービスを繋ぐ共通規格
「MCP」はModel Context Protocolの略で、Anthropic(Claudeを作っている会社)が提唱しているAIアシスタント業界の新しい標準仕様です
ざっくり言うと、AIに外部のサービスを操作させるための共通言語のようなものになります
MCPで何が変わるのか
これまでもAIに「○○をやって」と頼むことはできましたが、AI自身は実際にWordPressを操作したりファイルを読み書きしたりはできませんでした
MCPサーバーを間に挟むことで、AIから外部システムを「ツール」として呼び出せるようになり、AIが実作業まで進められるようになります
今回作る仕組みの全体像
図にするとこんな流れになります
[あなた] ⇄ [Claude Code] ⇄ [MCPサーバー] ⇄ [WordPress REST API] ⇄ [WordPress]
- Claude Code が「下書きを保存して」というあなたの指示を理解する
- MCPサーバー(自分のPCで動く小さなプログラム)がそれをWordPressが分かる形に翻訳する
- WordPress REST API が実際に記事を作成する
WordPress公式のMCPサーバーはまだ無いので、今回はPythonで自作しました、といっても最初は200行ほどの小さなものをClaudeに作ってもらって、そこから少しずつツールを足していった形です
Claude Code自体の基本的な使い方はまた別記事で書こうと思いますが、その前段としてClaudeの使い方を初心者向けに解説した記事もあるので、Claudeに触ったことがない人はそちらから読んでもらえると入りやすいです
Claudeに「WordPress操作のMCPサーバーを作って」と頼む
ここがこの記事の本題です、MCPサーバーは自分でゼロからコードを書かなくてもClaude Code本人に作ってもらえます
コツは一度に全部を作らせないことで、1つのツールを作る → 動かしてテスト → 次のツールを足すという小さいサイクルで育てていくと失敗しにくいです
最初に「接続確認だけするツール」を作ってもらうと、すぐ動作確認できて手応えがつかめます
最初の依頼:土台と接続確認だけ
まずはこんなふうに、使う技術と認証の方針を伝えて土台を作ってもらいます
PythonでWordPressを操作するMCPサーバーを作りたいです
・FastMCP(mcp.server.fastmcp の FastMCP)を使う
・WordPress REST API(/wp-json/wp/v2/)を叩く
・認証はアプリケーションパスワードで、認証情報は .env から読む(python-dotenv)
・まずは接続確認のツール(サイト名とログインユーザーを返す)だけ作って
ここで認証情報は .env から読むと最初に指定しておくのが地味に大事です、こうしておくとコードの中にパスワードが残らないので、あとでそのまま公開しても問題ない形になります
ツールを1つずつ足していく
接続確認が通ったら、記事を作るツールから順番に足していきます
接続確認が通ったので、記事を下書き保存するツール create_post を追加して
デフォルトのstatusはdraft、publishは明示したときだけにして
同じ調子でlist_posts(一覧取得)、update_post(更新)、get_post(取得)と1つずつ頼んでいきます、カテゴリやタグの一覧取得・新規作成も同じやり方で足せます
うまく作ってもらうための小さなコツ
- 一度に全機能を作らせない、1ツールずつ作ってテストしてから次を足す
- 認証情報は最初に「.envから読む」と指定する(コードに直書きさせない)
- 接続確認のツールから作ると、最初の動作確認がすぐできる
- エラーが出たらエラーメッセージをそのまま貼ると、原因を見つけて直してくれる
- 「デフォルトはdraft」のような安全側の仕様も、最初の依頼文に入れておく
Claude Code×WordPress自動投稿のセットアップ手順
ここから実際の構築手順です
用意するもの
| 必要なもの | 補足 |
|---|---|
| Claude Code(Desktop版) | ClaudeのPro / Maxプランで利用可能 |
| WordPress(自己ホスト型) | Xserver、ロリポップ、ConoHaなど、バージョンは5.6以上 |
| Python 3.10以上 | Windows 11なら公式インストーラーで導入 |
| PowerShell | Windows 11標準搭載、コマンドを数行打つだけ |
Claude Codeは有料プラン専用なので、無料で試したい場合はClaudeのコネクタ機能を使う代替手段もあります
Step1:プロジェクトフォルダを作る
任意の場所にフォルダを作ります、私はデスクトップに作りました
C:\Users\ユーザー名\Desktop\blog\Step2:必要なファイルをClaudeに作ってもらう
前の章で作ってもらったwp_mcp_server.pyに加えて、動かすために次の3ファイルが必要です、いずれもClaudeに頼めばそのまま作って配置までやってくれます
- requirements.txt(必要なライブラリ一覧)
- .mcp.json(Claude CodeにMCPサーバーの場所を教える設定)
- .env(WordPressの認証情報を書く、中身は次のステップで自分で書く)
こんな感じで頼めばまとめて作ってくれます
このサーバーを動かすのに必要な requirements.txt と .mcp.json も作って、同じフォルダに置いて
.env は中身が認証情報なので、空のテンプレート(WP_BASE_URL / WP_USERNAME / WP_APP_PASSWORD の3つを書く枠)だけ作っておいて
.envの中身(=認証情報)だけは人が書きます、ここはClaudeに渡さない情報なので、空のテンプレートだけ作ってもらって、値は次のステップで自分で埋めるのが安全です
Step3:Pythonライブラリのインストールも頼める
requirements.txtができたら、ライブラリのインストールもClaudeに頼めます
requirements.txt のライブラリをインストールして
これで mcp、requests、markdown などのパッケージが入ります、自分で実行したい場合は、PowerShellで次のコマンドでもOKです
cd C:\Users\ユーザー名\Desktop\blog\
python -m pip install -r requirements.txtStep4:WordPressでアプリケーションパスワードを発行
ここが今回の肝になる部分です、普段のログインパスワードではなく API専用の使い捨てパスワードを発行します
- WordPress管理画面にログインして「ユーザー → プロフィール」を開く
- ページ最下部にある「アプリケーションパスワード」欄まで移動
- 名前を入力(例:Claude MCP)して「新しいアプリケーションパスワードを追加」をクリック
- xxxx xxxx xxxx xxxx xxxx xxxx 形式の文字列が表示されるのでコピー


この画面を閉じると二度と表示されません、すぐ次のステップで貼り付けてください
Step5:.envファイルに認証情報を書く
Step2でClaudeに枠だけ作ってもらった.envファイルを開いて、次の3つの値を自分で埋めます
WP_BASE_URL=https://あなたのドメイン
WP_USERNAME=WordPressのログインユーザー名
WP_APP_PASSWORD=xxxx xxxx xxxx xxxx xxxx xxxxアプリケーションパスワードはスペース込みのままで大丈夫です、わざわざスペースを削る必要はありません
Step6:Claude Codeで動作確認
このフォルダでClaude Codeを起動すると、.mcp.json が自動で検出されてMCPサーバーの起動許可を求められます、「Allow」を押してください
その後Claude Codeに次のように頼みます
「WordPressの接続確認をして」
サイト名とログインユーザー名が返ってくれば接続成功です、お疲れさまでした
作ってもらったサーバーの動作テスト手順
MCPサーバーのテストはClaudeに実際に実行させて、会話で結果を確認するのが一番早いです
ツールを1つ足すたびに次の流れを回しておくと、どこかが壊れた瞬間に気づけます、本格的なテストコード(pytestなど)を書くのは仕様が固まってからで十分です
「WordPressの接続確認をして」と頼んで、サイト名とログインユーザー名が返ってくればまず合格です
「テスト用の下書きを1件作って、投稿IDを教えて」と頼みます、WordPress管理画面の投稿一覧に下書きが増えていれば作成は成功です
「下書き一覧を出して」「さっきの投稿の中身を見せて」と頼んで、取得系のツールがちゃんと動くかを見ます
「さっきのテスト投稿を削除して」で後片付けまでできれば、作成から削除まで一通り通ったことになります
.envのパスワードを1文字だけ変えて、401(認証失敗)が分かりやすく返るかも見ておきます、エラーのときに何が起きたか分かる作りになっていれば安心です、確認できたらパスワードは元に戻します
この「会話で1ツールずつ叩く」テストの積み重ねが、結局いちばん速くて確実でした
Claude Codeで実際に記事を投稿する流れ
セットアップが終わったら、基本はチャットで会話しながら書いてもらうだけです
「ExcelのVLOOKUPについて、初心者向けに1000字程度で解説記事を書いて、下書きで保存しておいて」
これだけで、Claudeが記事本文を生成してcreate_postツール経由でWordPressに下書きとして投稿してくれます
あとは管理画面でプレビューして、必要なら手直しして「公開」を押すだけです
運用上の3つの注意点
便利な仕組みですが、AIに丸投げで運用する前にいくつか注意点があります
- 下書き保存を原則とする:AIが書いた記事は人間が目視チェックしてから公開する、私のセットアップではデフォルトをdraftに固定しています
- 認証情報はコミットしない:.envには認証情報が入るので、GitHubなどに公開しないよう.gitignoreに原則追加
- ハルシネーション対策:固有名詞・日付・数字・出典は鵜呑みにせず裏取りを推奨
特にハルシネーション対策は Claudeの使い方記事 でも書いた通り、生成AI全般で気をつけたいポイントです
まとめ|AIに任せる作業と人間がやるべき作業
今回作った仕組みを整理するとこんな感じになります
| やったこと | できるようになったこと |
|---|---|
| MCPサーバー本体をClaudeに作ってもらう | Claude CodeからWordPressを直接操作(記事・カテゴリ・タグ・メタ・アイキャッチ) |
| アプリケーションパスワードで認証 | 普段のログインパスワードを使わずに済む |
| 補助プラグインで触れる範囲を選ぶ | 必要な項目(メタディスクリプション・投稿別CSS)だけ安全に開放 |
最初のセットアップでは認証まわりで少し手こずりましたが、一度動いてしまえば「テーマを伝える → 下書きが管理画面にできてる」という流れがとても快適です
個人的に思うのは、「AIに全部任せる」じゃなくて、手間のかかる部分をAIに渡して、最後の判断は人間がする、この役割分担がちょうど良い距離感でした
ここまで読むと細かい手順や注意点が多く見えるかもしれませんが、実際にはこの記事で書いたほど細かく指示しなくても、Claudeが自分で判断してよしなに進めてくれる場面が多いです、必要なら途中で「ここはこうして」と相談すれば直してくれます、まずは小さく頼んで動かしてみるところから始めてみてください
同じくWordPress×AIの自動投稿を試したい方の参考になれば嬉しいです
コード本体と仕組み|GitHubにサンプル公開しました
参考までに、今回作ったMCPサーバーの主要な構成も載せておきます
記事に載せているのは説明用に切り出した一部で、実際に動く完全版(18個のツール・840行ほど)はGitHubで公開しました
javeo2022/wordpress-mcp-server(GitHub)
そのまま使う場合は.env.exampleをコピーして.envを作り、自分のサイトのURLとアプリケーションパスワードを書けば動きます、.env自体は.gitignoreで除外してあるので、認証情報がうっかり一緒に公開される心配はありません
requirements.txt
mcp>=1.2.0
requests>=2.32.0
python-dotenv>=1.0.0
markdown>=3.6
python-frontmatter>=1.1.0.mcp.json
{
"mcpServers": {
"wordpress": {
"command": "python",
"args": ["C:\\path\\to\\wp_mcp_server.py"],
"env": {}
}
}
}wp_mcp_server.py(主要部分の抜粋)
from mcp.server.fastmcp import FastMCP
import os, requests
from dotenv import load_dotenv
load_dotenv()
WP_BASE_URL = os.getenv("WP_BASE_URL", "").rstrip("/")
WP_USERNAME = os.getenv("WP_USERNAME", "")
WP_APP_PASSWORD = os.getenv("WP_APP_PASSWORD", "")
API_BASE = f"{WP_BASE_URL}/wp-json/wp/v2"
mcp = FastMCP("wordpress")
@mcp.tool()
def create_post(title: str, content: str, status: str = "draft") -> dict:
"""新しい記事をWordPressに作成する(デフォルトは下書き)"""
resp = requests.post(
f"{API_BASE}/posts",
auth=(WP_USERNAME, WP_APP_PASSWORD),
json={"title": title, "content": content, "status": status},
timeout=30,
)
resp.raise_for_status()
return resp.json()
if __name__ == "__main__":
mcp.run()短いコードですが、仕組みのポイントはこのあたりです
- FastMCP(“wordpress”) でサーバーを1つ定義する
- @mcp.tool() を付けた関数が、そのままClaudeから呼べるツールになる
- 関数の説明文(docstring)が「このツールは何をするか」のClaude向けの説明になるので、日本語で丁寧に書いておく
- 認証・タイムアウト・エラー処理は共通の関数にまとめて、各ツールはそれを呼ぶだけにすると見通しが良い
- 接続先のサイトを引数で切り替えられるようにすると、複数サイトの運用にも対応できる
完成版ではこの形で、create_postやupdate_post、upload_mediaなど合計18個のツールを登録しています
このサーバーをそっくり真似しなくても、「こういうツールが欲しい」とClaudeに伝えて1つずつ足していくやり方なら、自分の運用に合った形が作れます



コメント