Appearance
有料記事 AI データ取得 MCP(Cursor)
Cursor エージェントから、管理画面有料記事 AI と同じデータ取得 Tool を呼び出すための MCP です。生成 LLM ループの再現は対象外で、ローカル WP-CLI 経由のデータ取得が中心です。不足月の月次差分同期だけは MCP が bash スクリプトを直接起動します(ensure_local_month_data)。
投稿 meta の新規作成・可変セクション操作は対象外です。 既存 draft の固定セクション考察の書き戻しだけ update_paid_article_draft で行えます(Issue #3494)。汎用 WordPress MCP サーバー本体は未導入です。会話下書きの手順は paid-article-draft-workflow.md を参照してください。
関連: Issue #3410 / Issue #3484 / Issue #3494 / Issue #3739 / 設計 docs/design/有料記事/paid-article-ai-tools-design.md・docs/design/店舗調査/hall-investigation-ai-tools-design.md
前提
- Local Sites 等の ローカル WordPress が起動していること
- テーマの
core_*(または開発時_src)が読み込まれ、wp slot-kouryaku paid-article-toolが使えること(WP-CLI 接続手順) - リポジトリで
npm install済み(@modelcontextprotocol/sdk) - 本番 DB を MCP から直接触る運用は推奨しない(ローカル検証前提)
本番相当データを使うとき(DB のみ同期)
MCP が見るのは WP_ROOT のローカル DB です。本番に近い数値・考察が必要なら、先に本番 DB をローカルへ取り込みます。
bash
# 不足月だけ(推奨・軽い / MCP ensure_local_month_data もこれ)
./scripts/sync-db-month-from-production.sh 2026-08
# 任意期間・日別記事投稿の部分コピーは CLI のみ(MCP 未対応)
./scripts/sync-db-month-from-production.sh --from 2026-08-01 --to 2026-08-15 --with-daily-article-posts
# 初回・スキーマ変更・破損復旧(重い・破壊的)
./scripts/sync-db-from-production.shローカルでは本番と違うプラグインを無効にしていることが多いため、テーマ/プラグイン同期は既定にしない(DB のみ)。詳細は データベース同期 と DB同期の安全ガイド。
チャットで「ローカルを最新化して」と言われた場合も、特に指定がなければ上記の DB のみ同期を実行します。執筆中に日付が足りないときは、まず check_local_data_coverage で確認し、不足月ならユーザー許可のうえ ensure_local_month_data(または手動で月次差分スクリプト)を優先します。任意期間や日別記事投稿のコピーは DB 同期 の CLI 手順を使います。
設定(WP_ROOT / WP_CLI_BIN)
.cursor/mcp.json.exampleを.cursor/mcp.jsonにコピーする(.cursor/mcp.jsonは gitignore。実パスをコミットしない)- 自分の環境の
WP_ROOT/WP_CLI_BINに書き換える
| 変数 | 必須 | 説明 |
|---|---|---|
WP_ROOT | はい | WordPress ドキュメントルート(wp-config.php があるディレクトリ) |
WP_CLI_BIN | 任意 | wp 実行ファイルのパス。未設定時は wp。alias ではなく実体パス |
bash
cp .cursor/mcp.json.example .cursor/mcp.json
# エディタで WP_ROOT 等を編集Local by Flywheel の例:
json
{
"mcpServers": {
"paid-article-tools": {
"command": "node",
"args": ["scripts/mcp-paid-article-tools.mjs"],
"env": {
"WP_ROOT": "/Users/あなたのユーザー名/Local Sites/slotkouryaku/app/public",
"WP_CLI_BIN": "wp"
}
}
}
}config/local.env に既に WP_ROOT / WP_CLI_BIN がある場合は、同じ値を mcp.json の env にコピーしてください(Cursor MCP は local.env を自動読込しません)。
Host のターミナルから wp が DB に繋がらない場合は、Local の サイトシェル用ラッパーを WP_CLI_BIN に指定するか、サイトシェル内で動く wp の絶対パスを使ってください。
設定変更後は Cursor を再読み込みし、MCP paid-article-tools が有効になっていることを確認します。
利用可能な Tool
Contextual Tool(fetch_past_paid_articles / fetch_paid_article_sections)は 載せていません(意図的)。
| MCP Tool name | 主な引数 | 用途 |
|---|---|---|
fetch_hall_daily_results | date_from, date_to, 任意 halls | ホール別差枚ランキング(日次トップ 10) |
fetch_period_kishu_samai | date_from, date_to, kishu または kishu_ids, 任意 halls / include_daily | 指定機種の期間差枚サマリ(トップ 10 外可) |
resolve_kishu_name | kishu(string) | 略称・通称を正式名称 / kishu_id へ解決 |
fetch_hall_avg_samai_ranking | date_from, date_to, 任意 halls / min_count / limit | ホール別の平均差枚ランキング(店内上位帯の確認) |
fetch_event_info | date_from, date_to, 任意 halls | ホール別イベント名 |
fetch_daily_considerations | date_from, date_to, 任意 hall | 日別記事の考察本文 |
fetch_next_month_machines | target_month(YYYY-MM) | 翌月導入台一覧 |
fetch_target_month_articles | target_month(YYYY-MM) | 指定月の有料記事・保存済み考察 |
fetch_birthday_machine_results | date(Y-m-d)、任意 halls | 指定日の誕生日キャラ・関連機種の差枚等 |
fetch_kishu_count_delta | date_from, date_to, 任意 halls | 機種台数前日比変化(増台・減台)一覧 |
fetch_what_days_by_period | date_from, date_to, 任意 mode | 期間内のエスパス〇〇の日(掲載実績 / マスタ) |
fetch_dates_by_what_day | name, 任意 mode / year / date_from / date_to | 〇〇の日名から該当日を逆引き |
fetch_hall_x_posts | query / username / halls のいずれか、任意 date_from / date_to / max_results | 店舗まわりの X 投稿(生投稿・要約なし)。X API 従量課金 |
investigate_hall_with_grok | question、任意 halls / usernames / date_from / date_to | Grok(xAI)の x_search で店舗の話題を調査・要約 |
check_local_data_coverage | target_month(YYYY-MM) | 指定月のローカル DB 充足確認(欠損日等) |
ensure_local_month_data | target_month(YYYY-MM)、任意 dry_run | 不足月の月次差分同期(bash を直接起動) |
update_paid_article_draft | post_id, markdown_path | 既存 draft の固定セクション考察をマージ更新(公開しない) |
戻り値は管理画面 AI と同じ JSON 契約です(成功時はデータ、失敗時は {"error":"..."})。ensure_local_month_data / update_paid_article_draft のみ { success, stdout, stderr, ... } 形式です。
店舗調査 Tool(fetch_hall_x_posts / investigate_hall_with_grok)の注意
- ローカル WordPress に保存された X Bearer Token(ADM-009) と Grok キー(ADM-032) を使う。未設定なら
{"error":"..."}が返る。手順は 店舗調査(X / Grok)セットアップ - どちらも 外部 API の従量課金が発生する。1 回で調べる範囲を
halls/usernames/ 期間で絞る fetch_hall_x_postsのキーワード検索は直近 7 日のみ(X API の制約)で、hallsを付けるとホール名を含む投稿に絞る。usernameだけ指定するとユーザータイムラインを取る- Grok の
summaryは一次情報ではない。記事に書く事実はcitationsの投稿で確認する - 契約の正本: 店舗調査 AI ツール
update_paid_article_draft の注意
- 対象:
post_status=draftのpaid_articleのみ。公開・ステータス変更はしない - 対象 meta: 固定セクション(
paid_article_*)のみ。可変・特定機種・sections_orderは管理画面 - 実装:
scripts/create-paid-article-draft.mjs --post-id=… --via=wp-cli(Application Password 不要) - Markdown:
## paid_article_*/*.comment_before/*.comment_after見出し(会話用の日本語見出しだけでは不可)
json
{
"success": true,
"post_id": 26043,
"markdown_path": "/…/docs/_drafts/paid-article/2026-08/2026-08.md",
"stdout": "… edit: http://…/wp-admin/post.php?post=26043&action=edit"
}check_local_data_coverage の出力例
json
{
"target_month": "2026-08",
"db2023_max_day": "2026-08-22",
"db2023_month_max_day": "2026-08-22",
"db2023_day_count": 22,
"db2023_missing_days": ["2026-08-23"],
"kishu_summary_exists": true,
"link_day_count": 22,
"sufficient_for_writing": false,
"suggested_sync_command": "./scripts/sync-db-month-from-production.sh 2026-08"
}sufficient_for_writing が false のときは、ユーザー許可のうえ ensure_local_month_data を呼ぶか、返ってきた suggested_sync_command をプロジェクトルートで実行してください(フル同期は不要なことが多い)。
ensure_local_month_data の出力例
json
{
"success": true,
"target_month": "2026-08",
"dry_run": false,
"exit_code": 0,
"stdout": "...",
"stderr": "",
"suggested_check_command": "wp slot-kouryaku paid-article-tool check_local_data_coverage --args='{\"target_month\":\"2026-08\"}'"
}- 本番 DB への書き込みは行いません(本番から読み取り → ローカル upsert)
- タイムアウトは 5 分。同時実行はスクリプト側のロックで拒否されます
dry_run: trueなら取得・インポートせず対象テーブルと WHERE のみ表示します- 実行後は
check_local_data_coverageで充足を再確認してください
WP-CLI 単体での確認
MCP の前に CLI が通るか確認します。
bash
cd "$WP_ROOT"
wp slot-kouryaku paid-article-tool fetch_hall_daily_results \
--args='{"date_from":"2026-08-01","date_to":"2026-08-07"}'
wp slot-kouryaku paid-article-tool fetch_period_kishu_samai \
--args='{"date_from":"2026-08-17","date_to":"2026-08-23","halls":["espasu"],"kishu":["喰霊-零-Re"]}'
wp slot-kouryaku paid-article-tool fetch_hall_avg_samai_ranking \
--args='{"date_from":"2026-08-01","date_to":"2026-08-31","halls":["espasu"],"min_count":100,"limit":20}'
wp slot-kouryaku paid-article-tool fetch_birthday_machine_results \
--args='{"date":"2026-08-21"}'
wp slot-kouryaku paid-article-tool fetch_kishu_count_delta \
--args='{"date_from":"2026-08-01","date_to":"2026-08-07","halls":["espasu"]}'
wp slot-kouryaku paid-article-tool check_local_data_coverage \
--args='{"target_month":"2026-08"}'
wp slot-kouryaku paid-article-tool fetch_hall_x_posts \
--args='{"halls":["espasu"],"max_results":10}'
wp slot-kouryaku paid-article-tool investigate_hall_with_grok \
--args='{"question":"今週の新台導入の話題","halls":["espasu"]}'ensure_local_month_data は WP-CLI には無く、MCP または手動で ./scripts/sync-db-month-from-production.sh YYYY-MM を実行します。
会話執筆 Skill との関係
有料記事をチャットで書くときは Skill paid-article-conversational-draft(Issue #3408)を使います。数値・ランキング・イベントを書く前に、上記 MCP Tool で実データを取得してください。捏造禁止。
完成した Markdown を 既存 draft に反映するときは update_paid_article_draft(または同等の create-paid-article-draft.mjs --post-id=… --via=wp-cli)を使います。データ取得 MCP ≠ 汎用 WordPress MCP です。新規 draft の REST 作成は .env.local + スクリプト(--post-id なし)です。
トラブルシューティング
| 症状 | 確認 |
|---|---|
WP_ROOT が未設定 | .cursor/mcp.json の env.WP_ROOT(example からコピーしたか) |
WordPress ルートではない | パスが .../app/public までか |
command not found: wp | WP_CLI_BIN に絶対パスを指定 |
許可されていない tool_name | Contextual Tool は対象外 |
| JSON が空 / exit 非 0 | サイトシェルで同じ CLI を手動実行し、stderr を確認 |
| WP-CLI タイムアウト | Local 起動・DB 接続・WP_ROOT を確認 |
| 月次同期タイムアウト | SSH・本番負荷を確認。タイムアウト時は MCP がロック掃除を試行するが、残る場合は rm -rf /tmp/sync-db-month.lock.d |
| 月次同期がロックで失敗 | 別プロセスの同期完了を待つか、孤児ロックディレクトリを削除 |
実装メモ
- 本体:
scripts/mcp-paid-article-tools.mjs - データ取得 Tool は内部で
wp slot-kouryaku paid-article-tool <name> --args=...を実行(PaidArticleAiCliToolDispatcher再利用) ensure_local_month_dataのみscripts/sync-db-month-from-production.shを直接起動(PHP / WP-CLI 非経由)
関連設計(カウンター履歴)
パチスロカウンターは WP 外(Supabase)で管理する。記事執筆時に履歴を読む Tool(fetch_slot_counter_history)の入出力契約は パチスロカウンター — 記事執筆時の履歴取得契約 を正とする。