最近Claude codeを組み込んだ開発体制が確立してきたおかげで、開発のスパンは短く、複数PJの並行作業も日常的になってきました。そのためリリース頻度も上がり、いっそその記事もClaudeに書かせたい、と思うようになりました。文章自体はもとより本文の貼り付け、画像の個別アップロード、カテゴリ・タグ設定、プレビューと、開発の外堀的な作業の割に思いのほか細かい手数がかかります。
そこで、WordPress への下書き投稿を Claude に任せるために簡潔な MCP サーバーを自作し、wp-blog-poster-mcpとして GitHub に v0.2.0 を public 公開しました。

MCP(Model Context Protocol)は Anthropic が主導しているプロトコルで、乱暴にまとめると「AI のチャットウィンドウの外側にある機能を、自然言語の指示から呼び出すための共通インターフェース」です。このプロトコルに則ったMCP サーバーを 1 本用意すれば、Claude DesktopやClaude Codeがその機能を自分のツール箱に加え、対話の中で勝手に使うようになります。
自動で動けるのは便利な反面、任せた AI が調子に乗って本番記事を差し替える、古い公開記事を書き換えるといった事故も起こしかねません。Opus 4.7になろうがやらかす時はやらかします。wp-blog-poster-mcp では、新規投稿は常に draft ステータスで保存する、更新・削除は「下書き」になっている記事にしか効かない、というガードを入れて、「公開」ボタンを押す最後の一手だけは私、という形式にしてあります。
用意したツールは 7 つで、用途別にざっくりこんな感じです。
1. create_draft_post — タイトル・本文・タグ・アイキャッチ画像を渡して下書きを 1 件立ち上げ。ステータスは常に draft 固定。
2. upload_media — PNG / JPEG / GIF / WebP のいずれかを base64 で渡すと、メディアライブラリに登録。返ってくる画像 URL は本文中への埋め込みやアイキャッチ指定に利用可能。alt_text も同時に設定。
3. update_post — 既存記事の一部差し替え用ですが、対象記事が下書きでない場合は更新を拒否。
4. get_post — ID 指定で記事を 1 件取得。
5. list_posts — キーワードや日付での記事探索用。本文は返さず、目当ての記事 ID を引くための下調べ用。
6. list_drafts — 現在ログイン中のユーザーが所有する下書き一覧。update_post に渡す投稿 ID 取得用。
7. delete_draft_post — ゴミ箱送りが既定、force_delete で完全削除。こちらも「下書き」のみ対象。
当然ながら今ご覧いただいているこのページ自体が、wp-blog-poster-mcp の最初の実地投入で書き上げられたものです。タイトルを考え、章立てを決め、各段落を起案したのはClaude Codeで、今文面の校正をちまちまやっているのが私、この後公開するのも私です。
作業は通常通り対話ベースで、Claude Codeに「wp-blog-poster-mcp のリリース記事を、この会社サイトの文体に寄せて書いてほしい」と頼むと、まず list_posts で本サイトの公開記事を走査し、直近のリリース告知記事(DouCoCo の記事など)を見つけてきます。そこから get_post で本文を Gutenberg 込みで取得、文体を学習した上で章立ての叩き台と段落ドラフトを生成。対話の中で方向を調整しつつ、合意できた段階で upload_media と create_draft_post を Claude Code 自身が呼び出して下書き登録、という流れです。最初の提出は過去記事を真似しすぎていて、いわば「Claude が書いたつもりの私の記事っぽい文章」になっていたので、逆に「過去記事の雰囲気は踏襲、使用済みの文体は使わないように」で一段書き直してもらったものを、さらに私が校正したのがこの記事です。
舞台裏の技術構成はシンプルでNode.js 22+ と TypeScript による単なるMCP サーバーです。凝ったことなどは一切なし。プロトコル部分は Anthropic 公式の @modelcontextprotocol/sdk をそのまま、ツール引数の型チェックは zod です。WordPress との通信は、アプリケーションパスワード機能で発行したトークンによる Basic 認証で、REST API を ?rest_route=/wp/v2/... 形式の URL 経由で叩く構成です(この形式はパーマリンク設定に依存しないので、本サイトのように「基本」設定のままでも動作します)。導入手順や全ツールの入出力仕様は README を参照してください。
ご質問、カスタマイズのご相談、別途開発のご依頼も承っておりますので、お気軽にどうぞ。
