Skip to content

有料記事 AI データ取得ツール ​

有料記事の AI 考察生成および編集画面 AI 相談(Claude Tool Use / Gemini Function Calling)が呼ぶデータ取得ツールの契約を定義する。生成サービス・相談サービス・admin-ajax・編集画面・設定画面の画面仕様は対象外(相談 UI・履歴は paid-article-ai-chat-design.md)。

配置 ​

項目値
ディレクトリcore_src/Service/paid_article_ai_generation/Tools/
DispatcherAiToolDispatcher(PaidArticleAiToolDispatcherInterface)
呼び出し元PaidArticleAiGenerationService(一括/単欄生成)、PaidArticleAiChatService(編集画面相談)
Tool 契約PaidArticleAiToolInterface / PaidArticleAiContextualToolInterface
共通日付・ホールPaidArticleAiToolDateRange
共通 JSONPaidArticleAiToolJson
エラー文言PaidArticleAiToolCopy

Dispatcher ​

AiToolDispatcher は登録済み Tool を name() で引き、Claude Tool Use の tool_use を実行する。

メソッド入力出力
definitions()なしClaude Messages API の tools 配列(name / description / input_schema)
dispatch(name, arguments)ツール名と引数オブジェクトTool の戻り JSON 文字列
set_post_context(post_id, target_month, field)生成対象の投稿 ID・対象月(YYYY-MM)・生成中の target_fieldなし。PaidArticleAiContextualToolInterface 実装へ転送する
set_selected_halls(halls|null)AI 相談で選択したホール slug 一覧。null / 空は制約なしなし
clear_selected_halls()なしなし。選択ホール制約を解除する

投稿コンテキスト:

  • post_id / 対象月 / 生成中フィールドは 呼び出し側サービスがバインドする。LLM の tool 引数には post_id を含めない。
  • PaidArticleAiGenerationService は対象月を解決した直後、LLM 呼び出しの前に set_post_context() する。
  • PaidArticleAiChatService も対象月を解決した直後に set_post_context() する。対象欄が複数のときは第 3 引数を空文字、単一のときはその target_field を渡す。
  • コンテキスト付き Tool は PaidArticleAiContextualToolInterface を実装する。通常の Tool には転送しない。
  • 日別記事専用の DailyArticleAiToolDispatcher はこのカタログとは別契約であり、有料記事の生成・相談からは呼び出さない。

AI 相談のホール制約:

  • PaidArticleAiChatService は送信処理の間だけ set_selected_halls() し、終了時に clear_selected_halls() する。
  • 制約があるとき、dispatch は input_schema.properties に halls がある Tool について、引数の halls が省略・空・選択外を含む場合に UI 選択ホールへ交差または置換する(選択外へ広げない)。
  • 制約が無いとき(一括生成・CLI / MCP)は従来どおり PaidArticleAiToolDateRange::parse_optional_halls() が省略・空を全日別記事対象ホールとして扱う。

エラー方針:

条件戻り JSON例外ログ
未登録のツール名{"error":"unknown_tool"}投げないなし
Tool 実行中の例外{"error":"tool_execution_failed"}外へ出さないerror_log にツール名と例外メッセージ
引数不正(各 Tool 内){"error":"<日本語メッセージ>"}投げないなし

共通制約 ​

全ツールで共通する入力・出力ルール。

項目契約
date_from必須(期間指定ツール)。Y-m-d。開始日は終了日以前
date_to必須(期間指定ツール)。Y-m-d
date必須(fetch_birthday_machine_results)。単一日 Y-m-d
min_count任意(fetch_hall_avg_samai_ranking)。延べ台数下限。0 以上の整数。省略時は除外なし
limit任意(fetch_hall_avg_samai_ranking)。ホールごとの上位件数。1〜50。省略時 20
期間上限開始日・終了日を含む最大 62 日
ホール slugisland / espasu / bigapple のみ。uno は不正
target_monthfetch_next_month_machines / fetch_target_month_articles。有料記事の対象月 YYYY-MM
不正引数例外にせず {"error":"..."}
JSON エンコードJSON_UNESCAPED_UNICODE と JSON_UNESCAPED_SLASHES

日付不正時の error 文言:

条件error
形式不正・開始 > 終了date_from と date_to は Y-m-d 形式で、開始日が終了日以前である必要があります。
単一 date 不正date は Y-m-d 形式で指定してください。
62 日超期間は62日以内にしてください。
単一 hall 不正hall は island / espasu / bigapple のいずれかを指定してください。
halls 配列不正halls は island / espasu / bigapple の配列で指定してください。
target_month 不正target_month は YYYY-MM 形式で指定してください。
kishu / kishu_ids 未指定kishu または kishu_ids のいずれかを指定してください。
kishu 不正kishu は空でない文字列の配列で指定してください。
kishu_ids 不正kishu_ids は 1 以上の整数の配列で指定してください。
include_daily 不正include_daily は boolean(または 0/1 / true/false)で指定してください。
min_count 不正min_count は 0 以上の整数で指定してください。
limit 不正limit は 1〜50 の整数で指定してください。

ツール一覧 ​

nameクラスデータ源ホール引数
fetch_daily_considerationsDailyConsiderationFetchTool公開済み daily_article の考察 post meta(DailyArticleConsiderationMetaKeys)。HTML はプレーンテキスト化任意の単一 hall。省略時は全日別記事対象ホール
fetch_hall_daily_resultsHallDailyResultTool日×ホールの機種別サマリ。合計差枚ランキング上位 10 機種任意の halls 配列。省略または空なら全日別記事対象ホール
fetch_period_kishu_samaiPeriodKishuSamaiToolSC-010 相当の期間差枚(PeriodSamaiSummaryService)。指定機種の期間合計・平均・日数・台数・任意で日別任意の halls 配列。省略または空なら全日別記事対象ホール
resolve_kishu_nameResolveKishuNameTool共通 ArticleAiKishuNameResolver で略称・通称を正式名称 / kishu_id へ解決(差枚は取得しない)なし
fetch_hall_avg_samai_rankingHallAvgSamaiRankingToolPUB-005 / SC-016 と同じ PeriodKishuSamaiRankingService。平均差枚降順。min_count で延べ台数除外任意の halls 配列。省略または空なら全日別記事対象ホール
fetch_event_infoEventInfoFetchTooldb_Link_day(LinkDayRepositoryInterface)。EventMasterRepository は使わない任意の halls 配列。省略または空なら全日別記事対象ホール
fetch_next_month_machinesNextMonthMachinesToolPaidArticleNextMonthMachinesServiceInterface::resolve_rows(編集画面「来月の導入台」と同じ一覧)なし
fetch_birthday_machine_resultsBirthdayMachineResultsToolSC-005 相当の誕生日機種結果(BirthDayMachineResultService)任意の halls 配列。省略または空なら全日別記事対象ホール
fetch_kishu_count_deltaKishuCountDeltaToolSC-015 相当の機種台数前日比(KishuCountDeltaListService)任意の halls 配列。省略または空なら全日別記事対象ホール
fetch_what_days_by_periodWhatDaysByPeriodTool掲載実績: espasu_what_day_manual + kousatsu_date。マスタ: WhatDayMasterRepository::select_visibleなし
fetch_dates_by_what_dayDatesByWhatDayTool同上(名称から日付逆引き)なし
fetch_target_month_articlesTargetMonthPaidArticlesTool対象月(YYYY-MM)を明示指定して公開済み有料記事の保存済み考察を返す(投稿コンテキスト不要)なし
fetch_paid_article_sectionsCurrentArticleSectionsTool同じ有料記事の保存済み考察(PaidArticleAiTargetField 許可リスト)。未保存エディタ内容は見えないなし(投稿は生成サービスがバインド)
fetch_past_paid_articlesPastPaidArticlesTool対象月の相対指定で過去号の公開済み有料記事を 1 件ずつ引き、保存済み考察を返すなし(投稿と対象月は生成サービスがバインド)
fetch_hall_x_postsHallXPostsToolX API v2 の投稿(店舗調査)。契約は 店舗調査 AI ツール任意の halls 配列。キーワード未指定時の検索語
investigate_hall_with_grokHallGrokInvestigationToolGrok(xAI)x_search による調査要約。契約は同上任意の halls 配列。プロンプトにホール名を入れる

店舗調査ツール(fetch_hall_x_posts / investigate_hall_with_grok)は core_src/Service/hall_investigation/ に置き、日別記事 AI 相談の DailyArticleAiToolDispatcher にも同じインスタンスを登録する。入出力・エラー・レート制限は 店舗調査 AI ツール を正とし、本書の共通制約(62 日上限・ホール slug)と同じ範囲で解釈する。

fetch_daily_considerations ​

公開済み日別記事の考察本文(ホール別の前半・後半)を返す。

入力 ​

フィールド必須型説明
date_fromはいstring開始日(Y-m-d)
date_toはいstring終了日(Y-m-d)
hallいいえstringisland / espasu / bigapple。省略時は全日別記事対象ホール

出力 ​

成功時:

フィールド型説明
itemsarray考察が空でない日×ホールの配列
items[].datestring考察日(Y-m-d)
items[].hallstringホール slug(引数契約。本文には使わない)
items[].hall_namestring日本語のホール名(HallEnum::to_japanese())
items[].prestring前半考察(プレーンテキスト)
items[].afterstring後半考察(プレーンテキスト)

依存: DailyArticleConsiderationRepositoryInterface、WordPressPostMetaReaderInterface。

fetch_hall_daily_results ​

日×ホールごとに合計差枚ランキング上位 10 機種を返す。

入力 ​

フィールド必須型説明
date_fromはいstring開始日(Y-m-d)
date_toはいstring終了日(Y-m-d)
hallsいいえarrayホール slug の配列。省略または空なら全日別記事対象ホール

出力 ​

成功時:

フィールド型説明
itemsarrayランキング対象行がある日×ホールの配列(未登録の日は省略)
items[].datestring対象日(Y-m-d)
items[].hallstringホール slug(引数契約。本文には使わない)
items[].hall_namestring日本語のホール名(HallEnum::to_japanese())
items[].machinesarray上位 10 機種以下(少なければ 10 未満。順位昇順)
items[].machines[].kishustring機種名
items[].machines[].countnumber台数
items[].machines[].avg_samainumber平均差枚
items[].machines[].total_samainumber合計差枚

依存: DailyArticleKishuSingleDaySummaryRepositoryInterface。

fetch_period_kishu_samai ​

指定機種の期間合計差枚・平均差枚・集計日数・延べ台数を返す。日次トップ 10 外の機種も取得できる。kishu(機種名または通称・略称)と kishu_ids(マスタ ID)は少なくとも一方必須。両方指定時は OR。

kishu は共通の ArticleAiKishuNameResolver でマスタ ID へ解決し、差枚取得は 解決済み kishu_ids で照合する(マスタ正式名称と日別表記の不一致で空結果にしない)。参照データ源は機種マスタ name、ヒートマップ略称 heatmap_abbreviation、機種表示マッピング data_kishu。完全一致のあと部分一致を行い、複数件に当たった場合は決め打ちせず ambiguous を返す。kishu 側が未解決でも、同時に有効な kishu_ids があれば ID 側のみで取得を続行する(OR)。

入力 ​

フィールド必須型説明
date_fromはいstring開始日(Y-m-d)
date_toはいstring終了日(Y-m-d)
hallsいいえarrayホール slug の配列。省略または空なら全日別記事対象ホール
kishu条件付きarray機種名/通称/略称の配列。kishu_ids と少なくとも一方必須
kishu_ids条件付きarray機種マスタ ID(1 以上の整数)の配列。kishu と少なくとも一方必須
include_dailyいいえboolean日別内訳を含めるか。省略時は true

出力 ​

成功時:

フィールド型説明
statusstringok
itemsarrayデータがあるホール×機種の配列(無い組み合わせは省略)
items[].hallstringホール slug
items[].hall_namestring日本語のホール名
items[].kishustring機種名
items[].kishu_idnumber|null機種マスタ ID。不明なときは null
items[].total_samainumber期間合計差枚(SC-010 total_coins と同定義)
items[].avg_samainumber台毎平均差枚(SC-010 avg_coins_per_unit と同定義)
items[].day_countnumber集計日数(データがある distinct 日付数)
items[].aggregated_countnumber延べ台数(SC-010 aggregated_count と同定義)
items[].dailyarray日別内訳(include_daily が false のときは無し)
items[].daily[].datestring日付(Y-m-d)
items[].daily[].total_samainumberその日の合計差枚
items[].daily[].countnumberその日の台数
items[].daily[].avg_samainumberその日の平均差枚

機種名が未解決・曖昧なとき(差枚は取得しない):

フィールド型説明
statusstringunresolved または ambiguous
itemsarray常に空配列
querystring解決できなかった(または曖昧だった)入力機種名
candidatesarray候補の正式名称(最大 5)。無い場合は空配列

依存: PeriodSamaiSummaryServiceInterface(get_grouped_summaries_with_daily)、ArticleAiKishuNameResolver。

resolve_kishu_name ​

機種名または通称・略称を、共通の ArticleAiKishuNameResolver でマスタ正式名称と kishu_id へ解決する。差枚は取得しない。他ツールへ正式名称 / ID を渡す前の事前解決用。参照データ源・完全一致→部分一致・曖昧時の候補返却は fetch_period_kishu_samai の kishu 解決と同一。管理画面 AI・WP-CLI / Cursor MCP の双方に登録する。

入力 ​

フィールド必須型説明
kishuはいstring機種名または通称・略称(1 件)

出力 ​

フィールド型説明
statusstringok / ambiguous / unresolved
namesarray解決できた正式名称(ok 時は 1 件)。それ以外は空配列
kishu_idsarray解決できたマスタ ID(ok 時は 1 件)。それ以外は空配列
candidatesarray曖昧・未解決時の候補正式名称(最大 5)。ok 時は空配列
querystring入力した機種指定(trim 後)

kishu が空でない文字列でないときは error(kishu は空でない文字列で指定してください。)。

依存: ArticleAiKishuNameResolver。

fetch_hall_avg_samai_ranking ​

指定期間のホール別・機種別平均差枚ランキングを返す。集計は PUB-005 / SC-016 と同じ PeriodKishuSamaiRankingService。少台数除外は延べ台数(aggregated_count)に対する min_count で行う。WP-CLI / Cursor MCP 専用(管理画面 AI 生成の definitions() には載せない)。

入力 ​

フィールド必須型説明
date_fromはいstring開始日(Y-m-d)
date_toはいstring終了日(Y-m-d)
hallsいいえarrayホール slug の配列。省略または空なら全日別記事対象ホール
min_countいいえinteger延べ台数の下限。未満は除外。省略時は除外しない。暦月通しの目安 100、半月程度 50
limitいいえintegerホールごとの上位件数。省略時 20、上限 50

出力 ​

成功時:

フィールド型説明
date_fromstring開始日(Y-m-d)
date_tostring終了日(Y-m-d)
min_countnumber|null指定した下限。省略時は null
limitnumberホールごとの上限件数
hallsarray要求ホール順の配列
halls[].hallstringホール slug
halls[].hall_namestring日本語のホール名
halls[].itemsarray平均差枚降順。データ無しは空配列(エラーにしない)
halls[].items[].ranknumberホール内順位(1 始まり)
halls[].items[].kishustring機種名
halls[].items[].avg_samainumber平均差枚
halls[].items[].total_samainumber合計差枚
halls[].items[].aggregated_countnumber延べ台数
halls[].items[].count_on_period_endnumber期間末日の台数

依存: PeriodKishuSamaiRankingServiceInterface。

fetch_event_info ​

db_Link_day に記録されたホール別イベント名を返す。イベントマスタは参照しない。

入力 ​

フィールド必須型説明
date_fromはいstring開始日(Y-m-d)
date_toはいstring終了日(Y-m-d)
hallsいいえarrayホール slug の配列。省略または空なら全日別記事対象ホール

出力 ​

成功時:

フィールド型説明
itemsarrayイベントがある日×ホールの配列
items[].datestring対象日(Y-m-d)
items[].hallstringホール slug(引数契約。本文には使わない)
items[].hall_namestring日本語のホール名(HallEnum::to_japanese())
items[].eventsarrayイベント名(文字列)の配列

依存: LinkDayRepositoryInterface。

fetch_next_month_machines ​

編集画面の「来月の導入台」と同じ翌月導入台一覧を返す。入力の target_month は有料記事の対象月であり、返るのはその翌月の導入予定機種。

入力 ​

フィールド必須型説明
target_monthはいstring有料記事の対象月(YYYY-MM)。翌月の導入台を返す

出力 ​

成功時:

フィールド型説明
machinesarray導入日・機種名順の一覧
machines[].machine_namestring機種名(紐付け済みは機種マスタ表示名、未紐付けはスクレイプ名)
machines[].release_datestring導入日(空のときは —)

依存: PaidArticleNextMonthMachinesServiceInterface。

fetch_birthday_machine_results ​

指定日の誕生日キャラクターと関連機種の台数・差枚・回転(ホール別)を返す。日別記事 SC-005(BirthDayMachineResultService::get_data_with_daily_results)と同じデータ源。誕生日マスタが無い日は空配列で成功する(error にしない)。

入力 ​

フィールド必須型説明
dateはいstring対象日(Y-m-d)
hallsいいえarrayホール slug の配列。省略または空なら全日別記事対象ホール

出力 ​

成功時:

フィールド型説明
datestring要求した対象日(Y-m-d)
actual_data_datestringサービスが採用した基準日(Y-m-d)
has_result_databoolean対象日に差枚等の結果があるか
charactersarray当該月日の誕生日キャラ一覧(ピックアップ相当)
characters[].divistringキャラ誕 / 声優誕
characters[].characterstringキャラクター名
characters[].actorstring声優名
characters[].original_workstring原作タイトル
characters[].titlestring紐付け機種名
machine_resultsarray統計ありの関連機種行(ホール別)
machine_results[].divistringキャラ誕 / 声優誕
machine_results[].characterstringキャラクター名
machine_results[].original_workstring原作タイトル
machine_results[].titlestring機種名
machine_results[].hallstring|nullホール slug
machine_results[].machine_countnumber|null台数
machine_results[].total_coinsnumber|null合計差枚
machine_results[].average_rotationnumber|null平均回転
machine_results[].machine_count_reference_datestring|null台数基準日(Y-m-d)

依存: BirthDayMachineResultServiceInterface。

fetch_what_days_by_period ​

指定期間のエスパス〇〇の日を返す。掲載実績の正本は日別記事 post meta espasu_what_day_manual(JSON 文字列配列)と考察日 kousatsu_date。db_daily_article_what_day は使わない。

入力 ​

フィールド必須型説明
date_fromはいstring開始日(Y-m-d)。最大 62 日
date_toはいstring終了日(Y-m-d)
modeいいえstringpublished(既定)/ master / both。掲載実績・マスタ・両方を選択

出力 ​

成功時:

フィールド型説明
itemsarray名称がある日× source の配列(空の日は省略)
items[].datestring考察日またはカレンダー日(Y-m-d)
items[].sourcestringpublished または master
items[].namesarray〇〇の日名称の配列

依存: DailyArticleConsiderationRepositoryInterface、WordPressPostMetaReaderInterface、WhatDayMasterRepositoryInterface。

fetch_dates_by_what_day ​

〇〇の日の名称(部分一致)から、掲載実績および/またはマスタ上の該当日を返す。

入力 ​

フィールド必須型説明
nameはいstring名称(前後空白除去。空不可)
modeいいえstringpublished(既定)/ master / both
yearいいえint対象年(YYYY)
date_fromいいえstring開始日(Y-m-d)。date_to とセット。上限 366 日
date_toいいえstring終了日(Y-m-d)

期間の決め方: year のみはその年の 1/1〜12/31。date_from/date_to はその範囲。両方あるときは交差。どちらも無いときは直近 366 日(current_time( 'Y-m-d' ) 基準)。

出力 ​

成功時:

フィールド型説明
querystring正規化した検索語
itemsarray一致行
items[].datestring該当日(Y-m-d)
items[].sourcestringpublished または master
items[].matched_namestring一致した名称
items[].mmddnumber|nullマスタ行のみ。月日整数
items[].yyyymmddnumber|nullマスタ行のみ。特定日 8 桁

依存: DailyArticleConsiderationRepositoryInterface、WordPressPostMetaReaderInterface、WhatDayMasterRepositoryInterface。

fetch_target_month_articles ​

対象月(YYYY-MM)を明示指定し、その月の公開済み有料記事の保存済み考察を返す。投稿コンテキスト(set_post_context)は不要。WP-CLI / Cursor MCP 専用(管理画面 AI 生成の definitions() には載せない。CLI 専用 Dispatcher 経由でのみ実行する)。

fetch_past_paid_articles(相対月・現在投稿除外・生成サービスがコンテキストバインド)とは役割が異なる。

入力 ​

フィールド必須型説明
target_monthはいstring有料記事の対象月(YYYY-MM)

出力 ​

成功時:

フィールド型説明
articlesarray最大 1 件(該当月の公開記事)
articles[].target_monthstring対象月
articles[].post_idint | null見つかった投稿 ID。無いときは null
articles[].issue_numberstring|null号数。無いときは null
articles[].sectionsarrayPaidArticleAiArticleSectionsReader と同じ考察一覧

依存: WordPressPostMetaReaderInterface / get_posts。

fetch_paid_article_sections ​

同じ有料記事の他の考察欄(保存済み post meta)をプレーンテキストで返す。生成中の欄は is_current で区別する。未保存のエディタ内容は見えない(保存済み meta のみ)。特定機種結果は新キー(paid_article_section_smr_*)を優先し、空なら旧 paid_article_section_tm_* にフォールバックする。

post_id は LLM 引数に含めない。生成サービスが set_post_context() でバインドする。未バインド時は {"error":"生成対象の投稿がバインドされていません。"}。

入力 ​

フィールド必須型説明
(なし)——properties は空オブジェクト。PHP の [] を JSON のリストにしない。post_id は渡させない

Gemini Function Calling へ渡すときは parameters.properties をマップ(JSON オブジェクト)にする。空でも [] ではなく {}。リストだと HTTP 400(Cannot bind a list to map for field 'properties')になる。

出力 ​

成功時:

フィールド型説明
itemsarray本文が空でない考察欄の配列
items[].target_fieldstringPaidArticleAiTargetField の許可キー
items[].labelstring欄ラベル
items[].textstring考察本文(HTML はプレーンテキスト化)
items[].is_currentboolean生成中の欄なら true。current_field が空のときは付与しない

依存: WordPressPostMetaReaderInterface、PaidArticleAiArticleSectionsReader。

fetch_past_paid_articles ​

現在号の対象月から見て先月・先々月などの過去号の考察を返す。見つからない月はエラーにせず空で含める。現在の生成対象投稿は exclude する。

post_id と対象月は LLM 引数に含めない。生成サービスがバインドする。未バインド時は {"error":"生成対象の投稿がバインドされていません。"}。

未保存のエディタ内容は見えない(保存済み meta のみ)。

入力 ​

フィールド必須型説明
months_agoはいarray整数の配列。1=先月、2=先々月。値は 1〜12、重複なし、最大 3 件。JSON の 1.0 や "1" も整数として受け付ける

不正時の error: months_ago は 1〜12 の整数を最大3件、重複なく指定してください。

出力 ​

成功時:

フィールド型説明
articlesarraymonths_ago の順。見つからない月も含む
articles[].target_monthstring過去号の対象月(YYYY-MM)
articles[].post_idnumber|null公開済み投稿 ID。無ければ null
articles[].issue_numberstring|null号数。無ければ null
articles[].sectionsarray考察一覧(target_field / label / text)

検索条件は PaidArticleTemplateService::resolve_adjacent_month_link と同じ(paid_article・publish・TARGET_MONTH・ID 昇順 1 件・現在投稿を除外)。

依存: WordPressPostMetaReaderInterface、PaidArticleAiArticleSectionsReader。

呼び出し側 ​

生成サービスと相談サービスは対象月解決後に set_post_context() し、PaidArticleAiToolDispatcherInterface::definitions() を Claude / Gemini の tools に渡し、tool 呼び出しを dispatch() する。欄ごと生成(EP-021)・一括生成(EP-022)・編集画面相談(EP-029)が同じ管理画面カタログを使う。一括時および相談で複数欄選択時の current_field は空。本ドキュメントはツール層の契約のみを扱う(相談 UI・履歴は paid-article-ai-chat-design.md)。

WP-CLI(slot-kouryaku paid-article-tool)と Cursor MCP は PaidArticleAiCliToolDispatcherInterface を使う。こちらは非 Contextual の Tool(fetch_hall_daily_results / fetch_period_kishu_samai / resolve_kishu_name / fetch_hall_avg_samai_ranking / fetch_event_info / fetch_daily_considerations / fetch_next_month_machines / fetch_birthday_machine_results / fetch_kishu_count_delta / fetch_what_days_by_period / fetch_dates_by_what_day / fetch_hall_x_posts / investigate_hall_with_grok)に加え fetch_target_month_articles / check_local_data_coverage を登録し、管理画面生成の definitions() とは分離する(fetch_birthday_machine_results / fetch_kishu_count_delta / fetch_what_days_by_period / fetch_dates_by_what_day / resolve_kishu_name / fetch_hall_x_posts / investigate_hall_with_grok は管理画面 AI 側にも登録する。fetch_hall_avg_samai_ranking は CLI / MCP のみ)。

関連ドキュメント ​