Build in Public Day41 - MCP の経営者向け Tool を 1 日で 8 個拡張した話 (Phase 2B 完備宣言)
tasteck MCP の経営者向け Tool 拡張 8 step pipeline を Day41 (2026-06-20) に完備宣言。 update_order / update_guest / nomination heuristic / payment + course duration / Levenshtein fuzzy / course.name LIKE / ambiguous integration を 1 日で全 PR raise + 連続 deploy cadence 構築。
ご機嫌よう、tasteck 運営です。
このシリーズは tasteck のサービス開発を build in public で記録する DEV log です。 今回は Day41 (2026-06-20) の話。
TL;DR
tasteck MCP の経営者向け Tool を 1 日で 8 個拡張 + 7 PR raise + 連続 deploy cadence 構築まで完遂しました。
経営者が ChatGPT / Claude にコピペした「LINE で来た予約自由文」 を、 tasteck の受注画面に自動登録するときの 自動推定 hit 率を大幅向上 する仕組みです。
具体的には:
- 「本でお願いします」 → 本指名と自動推定 (略語)
- 「彩花ちゃん希望」 → 該当キャストを照合 + 本指名と推定 (文脈推定)
- 「VIP コース」 → コース名 LIKE 検索でヒット
- 「90 分」「1.5 時間」 → duration 抽出 + course 自動絞り込み
- 「PayPay」「auPay」「Suica」 → 電子マネー自動 mapping
- 「本指明」「Webm 指名」 → Levenshtein fuzzy で typo 1-2 文字許容
複数候補ヒット時は 構造化された ambiguous response で経営者に選択 dialog として返す設計です。
なぜ 1 日で 8 個拡張したのか
理由は単純で、 ★ ★ 業界経営者の LINE/メール自由文表現は 想像以上に多様 だからです。
これまで tasteck MCP の経営者向け Tool は「フォーマット通りの予約自由文」 にしか対応していませんでした:
6/22 21:00 60 分 サクラ (本指名) 山田様 080-1234-5678 現金
これは Phase 2A までの実装で問題なく動いていました。
しかし実際の業界経営者の LINE/メール 自由文は:
21時に本でお願い・サクラちゃん希望、彩花でお願い・現金で・VIP コース、80分くらい・PayPay
…のような口語・略語・タイポ・コース名指定・支払い方法多様化が日常的に混じります。
これを 1 件ずつ tasteck 側で手入力していると、 結局スタッフが「LINE 予約を受注画面に書き写す手間」 から解放されません。
経営者本人が ChatGPT に LINE 予約をコピペして「これを受注に」 と言うだけで完了する という体験を実現するには、 自動推定 hit 率を 80% 以上 に持っていく必要があります。
Phase 2B 8 step pipeline
そこで Day41 で一気に着手した 8 step:
| Phase | Tool 拡張 | Day deploy candidate |
|---|---|---|
| 2B-2 | update_order に 4 field 追加 (payment_type / order_address / order_address2 / course_id) | Day42 |
| 2B-3 | update_guest に guest_category_id 追加 (VIP/常連/新規 segment 変更) | Day43 |
| 2B-4 | nomination heuristic 拡張 (「本」 単独 + cast name 文脈推定) | Day44 |
| 2B-5 | payment + course duration 自動抽出 (口語 + 国際ブランド + 交通系) | Day45 |
| 2B-6 | Levenshtein fuzzy match (typo 1-2 文字許容) | Day46 |
| 2B-7 | course.name LIKE 検索 (VIP/特別/プレミアム/人気) | Day47 |
| 2B-8 | ambiguous caller 統合 (structured response) | Day48 |
| 2B-9 (設計 prep) | search_order tool (経営者の照会対応) | Day49+ |
PR は #10〜#16 まで raise 済。 全 tsc clean 確認済み。 連続 7 days 本番 deploy cadence の道筋ができました。
細かい工夫
nomination 拡張で気をつけたこと
「本指名」 を「本」 単独でも推定したいけれど、 「本番」「本気」「本当」「本日」「本店」 を誤検出するわけにはいきません。 正規表現は lookahead + lookbehind で:
{
pattern: /(?<![一-龠々ぁ-んァ-ヴ])本(?!.{0,3}(?:番|気|当|日|店))/,
mode: "nominate",
targetName: "本指名"
}
漢字直前は除外 + 「本」 の後 3 文字以内に「番/気/当/日/店」 があれば除外。 「本で」「本指名」「本指」 は通過、 「本番」「本気で」「本日」 はブロックします。
Levenshtein fuzzy で typo を吸収する
npm dep を増やしたくないので、 自前で 40 LOC ほど書きました。
private computeLevenshteinDistance(s1: string, s2: string): number {
if (s1.length === 0) return s2.length;
if (s2.length === 0) return s1.length;
const matrix: number[][] = [];
for (let i = 0; i <= s1.length; i++) matrix[i] = [i];
for (let j = 0; j <= s2.length; j++) matrix[0][j] = j;
for (let i = 1; i <= s1.length; i++) {
for (let j = 1; j <= s2.length; j++) {
const cost = s1[i - 1] === s2[j - 1] ? 0 : 1;
matrix[i][j] = Math.min(
matrix[i - 1][j] + 1,
matrix[i][j - 1] + 1,
matrix[i - 1][j - 1] + cost
);
}
}
return matrix[s1.length][s2.length];
}
しきい値 0.8 (5 文字中 1 文字 typo 許容) で「本指明」 → 本指名 hit、 「Webm 指名」 → Web 指名 hit が動くようになりました。
ambiguous return を構造化する
複数候補ヒットした場合、 経営者の手元 ChatGPT / Claude に そのまま選択 dialog として表示できる形 で返したい。 そこで:
return this.textContent({
dry_run: dryRun,
applied: false,
ambiguous: {
type: "course_selection_required",
reason: "コース時間 hint から複数候補が一致しました。 どのコースですか?",
course_candidates: courseResolution.candidates.map((c) => ({
course_id: c.course_id,
name: c.name,
time: c.time,
})),
},
note: "コース ID を明示して再度 create_order を呼び出してください。",
});
これで ChatGPT / Claude が「以下のコースが候補です: 1) スタンダード 60 分 / 2) VIP 60 分 / 3) プレミアム 60 分」 という選択肢を経営者に提示します。
Day42-48 で連続 7 days 本番 deploy
Day41 終了時点で全 PR raise 済 + 全 tsc clean + 全 QA E2E case 設計済。 Day42 から Day48 までの 7 days で 1 PR ずつ本番 deploy する cadence になっています。
本番 deploy 枠は朝 04-07 時を厳守 (業務時間中の deploy 禁止)。 各 deploy には完全 backup + cold restart を組み込みます。
連続 7 days 本番 deploy という cadence は社内的にも初めての挑戦です。 失敗パターンを想定して各 PR は 独立して動く ように設計しました (連結 deploy が必要なのは Day43 の 2B-2+2B-3 連結のみ)。
次の話: Phase 2B 完備後の経営者体験
Day48 で Phase 2B 8/8 完備宣言した後、 経営者の実感としては:
- LINE 予約自由文 → 自動推定 hit 率 80%+
- typo / 略語 / 口語 / 名前指定 / コース名指定 全部吸収
- 複数候補時は経営者選択 dialog として返却
この状態で「経営者本人 × ChatGPT × tasteck」 の最小チーム編成が完成します。
スタッフ多人数権限ではなく、 経営者の AI 使いをスーパーパワー化するという tasteck のスタンスを最も体現する形になります。
関連リンク
tasteck について
ナイトレジャー業界 (出張型メンエス / 来店型 / キャバ / ホスト) に特化した顧客管理 SaaS。 LINE / 電話予約 → 受注登録 → 配車 → 精算まで業態別 column 込みで対応。 MCP 連携で経営者の AI 使いをスーパーパワー化。