月5万円の副業から月30万円の本業へ。その転換点は「スケーラビリティのあるシステム」の構築にあります。
前編では5つの収益化パターンを紹介しました。その中で最も拡張性が高いのが「MCP カスタムツール販売」です。ただし、1つ2つのツールを売るだけでは天井が低い。本当の突破口は「Claude API と MCP を組み合わせた、SaaS 型コンサルティングサービス」の構築にあります。
ここで扱うのは実際に月商10~30万円規模まで成長させたコンサルティング SaaS の設計・実装・運用を、実コード付きで解説します。個人開発者が決して易しくない「課金管理」「ユーザーサポート」「不正利用対策」をどう乗り越えたのか、そしてどこで躓いたのかを、包み隠さずお伝えします。
「特化型コンサル SaaS」が個人でも成立する理由
通常、SaaS 開発は「大規模チーム」「高度なインフラ」を前提としています。なぜ個人でも可能なのか。3つの理由があります。
1. Claude API が「営業パーソン兼エンジニア」を代替する
従来のコンサルティングは、専門知識を持つ人間の時間を売る商売です。つまり「人数 × 時給」が上限。
しかし Claude API を使えば:
- ドメイン固有の質問への回答を自動化できる
- クライアント固有のデータを学習させ(MCP 経由)、パーソナライズ対応を実現
- 夜間・休日も 24/7 稼働
結果として「1人の専門家」が「複数クライアントを同時に対応」できる状態が実現します。
2. MCP が「カスタム統合」を低コストで実現する
クライアント企業のデータ(営業記録、チャット履歴、ドキュメント等)を Claude に安全に接続するには、個別の統合が必要でした。従来は API 開発に数十万円必要でしたが、MCP なら:
- JSON 形式の標準インターフェース
- 認証・サンドボックス化がビルトイン
- 開発期間が 1/3~1/2 に短縮
個人開発者でもクライアント企業の内部データを安全に扱える時代になったのです。
3. Stripe + CloudFlare KV で「エンタープライズ級」の決済・ストレージが実現
従来は「自分でサーバー管理」「自分で課金ロジック」を書く必要がありました。今は:
- Stripe で月額課金 + 従量課金を同時管理
- CloudFlare KV(グローバル分散 KV ストア)で API キー・クライアントデータを管理
- スケーリング・冗長化・バックアップが自動
個人開発者が「月 1,000 クライアントまでのスケール」を目指せる基盤が整いました。
これら3つが組み合わさることで、個人でも「月商 100 万円規模のコンサルティング SaaS」は十分現実的なのです。
システム全体の設計 — Claude API / MCP / Next.js / Stripe / D1 KV
実装を進める前に、全体像を理解する点が肝心です。
アーキテクチャ全体図
[クライアント]
↓
[Next.js Frontend]
↓
[Claude API] ←→ [MCP Server] ←→ [クライアント企業のデータベース]
↓
[Stripe] ←→ [D1 KV] ←→ [CloudFlare Workers]
各コンポーネントの役割:
- Next.js Frontend: ユーザー認証、チャット UI、設定画面(料金・使用量)
- Claude API: 相談内容の理解と回答生成
- MCP Server: クライアント企業のデータベースへの安全な接続
- Stripe: 月額課金 + 従量課金(トークン数)の管理
- D1 KV: API キー、ユーザー情報、クエリ履歴の保存
料金体系の設計
月商を安定させるには「月額 + 従量課金」の 2 層が効果的です:
月額料金: ¥4,800~¥9,800
└─ Basic: ¥4,800(月間 50,000 トークン含む)
└─ Pro: ¥9,800(月間 200,000 トークン含む)
従量課金: 超過分 1,000 トークン = ¥100~¥200
この構成なら:
- 月 50 クライアント × ¥4,800 = ¥240,000(月額基本料)
- 超過利用者の 20~30% から追加 ¥50,000~¥100,000
- 合計: ¥290,000~¥340,000/月
MCP サーバー設計: ドメイン知識をツールとして実装する
MCP の核は「Claude がクライアント企業のデータにアクセスできる仕組み」です。
設計の原則
クライアント企業の営業データベースから営業戦略を提案する SaaS を例に:
// mcp-server.js (Node.js)
const Anthropic = require("@anthropic-ai/sdk");
const server = {
name: "sales-consultant-mcp",
version: "1.0.0",
tools: [
{
name: "get_sales_pipeline",
description: "クライアント企業の営業パイプライン(見込み客、進捗、金額)を取得",
inputSchema: {
type: "object",
properties: {
months: {
type: "number",
description: "過去N ヶ月のデータを取得"
}
}
}
},
{
name: "get_customer_feedback",
description: "失注理由・顧客フィードバック(テキスト分析済み)を取得",
inputSchema: {
type: "object",
properties: {
limit: { type: "number", description: "最大取得件数" }
}
}
},
{
name: "get_rep_performance",
description: "営業担当者別パフォーマンス(成約率・平均契約金)を取得",
inputSchema: { type: "object", properties: {} }
}
]
};
// 実装例: get_sales_pipeline
const handlers = {
get_sales_pipeline: async (params) => {
// クライアント企業の CRM に接続(認証は OAuth)
const response = await clientCRM.query(`
SELECT stage, COUNT(*), SUM(value)
FROM opportunities
WHERE created_at > DATE_SUB(NOW(), INTERVAL ${params.months} MONTH)
GROUP BY stage
`);
// 結果は構造化フォーマット(CSV)で返す
return JSON.stringify(response);
}
};
module.exports = { server, handlers };
認証と安全性
クライアント企業のデータに直接アクセスするため、以下の対策は必須:
- OAuth 2.0: クライアント企業が自社の Salesforce / HubSpot に対して権限委譲
- スコープ制限: 「読み取りのみ」など、最小限の権限に限定
- 監査ログ: 誰がいつどのデータを取得したかを記録(規制対応)
- レート制限: 1 クライアント当たり「1 時間 100 リクエスト」等で DDoS 対策
// 認証ミドルウェア例
const authenticateMCP = (req) => {
const clientId = req.headers["x-client-id"];
const clientSecret = req.headers["x-client-secret"];
// D1 KV から認証情報を取得
const auth = KV.get(`auth:${clientId}`);
if (!auth || !verifySecret(auth, clientSecret)) {
throw new Error("Unauthorized");
}
// 使用量チェック
const usage = KV.get(`usage:${clientId}:${Date.now() / (3600 * 1000)}`);
if (usage > 100) {
throw new Error("Rate limit exceeded");
}
return clientId;
};
トークン従量課金の仕組み — 料金計算と上限制御
SaaS の利益性を左右するのが「トークン課金の自動化」です。
Stripe Usage-Based Billing との連携
// Claude API 呼び出し時にトークン消費を記録
const callClaude = async (clientId, userMessage) => {
const response = await anthropic.messages.create({
model: "claude-opus",
max_tokens: 1024,
messages: [{ role: "user", content: userMessage }]
});
const tokensUsed = response.usage.input_tokens + response.usage.output_tokens;
// トークン消費をログに記録
await logTokenUsage(clientId, tokensUsed);
// 月間使用量がプランの上限を超えたか確認
const monthlyUsage = await getMonthlyTokens(clientId);
if (monthlyUsage > getPlanLimit(clientId)) {
// Stripe の Usage Record を送信(追加請求)
await stripe.billing.meterEvents.create({
event_name: "token_usage",
customer: clientId,
value: tokensUsed,
timestamp: Math.floor(Date.now() / 1000)
});
}
return response;
};
コスト管理と利益マージン
Claude API の料金(2026年時点):
- Opus: $15 / 100万トークン(入力) + $45 / 100万トークン(出力)
- Sonnet: $3 / 100万トークン(入力)+ $15 / 100万トークン(出力)
営業相談 1 回当たり 1,000 トークン(入力) + 2,000 トークン(出力)を想定:
顧客負担: 3,000 トークン × ¥0.15/トークン = ¥450
Claude コスト: 3,000 トークン × $0.00045/トークン ≈ ¥67
粗利: ¥450 - ¥67 = ¥383(粗利率 85%)
つまり、顧客が超過利用すればするほど、自社の利益が増える構造です。ただし:
- 実際の利用パターンは不均一(朝8時に集中など)
- Claude の応答トークンは入力によってばらつく
- コスト予測の誤差を考慮して、月額料金に 15~20% の安全マージンを含める
解約率を下げるオンボーディング設計と Claude の活用
多くの SaaS が失敗する理由は「導入後の満足度」の低さです。特に AI ツールは期待値が高く、現実とのギャップが大きい。
オンボーディングの 3 段階設計
Phase 1: セットアップ(初日~3日)
クライアント企業の営業データを MCP で接続:
// セットアップウィザード
const setupWizard = {
step1: "CRM を選択(Salesforce / HubSpot / Pipedrive)",
step2: "OAuth で認証(クライアント企業のデータベース)",
step3: "データ取得テスト(「過去 3 ヶ月の営業データを読み込みました」と確認)"
};
// 自動テスト: Claude が「営業パイプラインの簡単な診断」を実施
const diagnoseOnboarding = async (clientId) => {
const pipelineData = await mcp.getPipeline(clientId);
const diagnosis = await anthropic.messages.create({
model: "claude-opus",
messages: [{
role: "user",
content: `
このパイプラインデータを見て、改善機会を3つ提案してください:
${JSON.stringify(pipelineData)}
`
}]
});
// 結果をメールで自動送信
await sendEmail(clientId, {
subject: "セットアップ完了。あなたの営業データの初期診断",
body: diagnosis.content[0].text
});
};
Phase 2: 初期成功体験(4日~14日)
クライアントが「このツール使える」と実感する、小さな勝利を用意:
// 週1回「営業レポート自動生成」を送付
const weeklyReport = async (clientId) => {
const weekData = await mcp.getWeeklyData(clientId);
const report = await anthropic.messages.create({
model: "claude-opus",
messages: [{
role: "user",
content: `
先週の営業データを分析して、以下を含むマネージャー向けレポートを作成:
1. 成約率の前週比
2. 課題が見えている案件3つ(改善案付き)
3. 来週のアクション 3 つ
データ: ${JSON.stringify(weekData)}
`
}]
});
// Slack / メールで自動配信
await notifyClient(clientId, report.content[0].text);
};
Phase 3: 習慣化(15日~60日)
チャットで「いつでも営業相談できる」という習慣をつける:
// ユーザーの利用パターンを監視
const trackEngagement = async (clientId) => {
const usage = await getMonthlyUsage(clientId);
if (usage < 100) {
// 未利用顧客へのリエンゲージメント
await sendReminder(clientId, {
subject: "営業戦略の実例: XX社が失注率を下げた方法",
body: "このツールは個別の案件相談にも対応しています。試しに…"
});
} else if (usage > 500) {
// アクティブユーザーを Pro にアップセル
await suggestUpgrade(clientId, {
message: "月額トークン上限に近づいています。Pro プランへの移行で…"
});
}
};
解約理由の早期検出
// 30日ぶりに利用再開したユーザーは高い解約リスク
const detectChurnRisk = async () => {
const inactiveUsers = await getInactiveUsers(30);
for (const clientId of inactiveUsers) {
// Claude に「このユーザーが困っていそうなことは?」を聞く
const churnAnalysis = await anthropic.messages.create({
model: "claude-opus",
messages: [{
role: "user",
content: `
このクライアントは営業コンサル SaaS の未利用状態です。
考えられる理由 3 つと、それぞれへの対応を提案してください:
- 利用方法が分からない
- 期待した結果が得られていない
- 他のツールに乗り換えた
`
}]
});
// リエンゲージメント施策を送付
const messages = parseChurnAnalysis(churnAnalysis);
for (const msg of messages) {
await sendPersonalizedEmail(clientId, msg);
}
}
};
運用開始後に発生した実問題と対処法
理論と現実は異なります。実際に月商 30 万円まで成長させた中で出会った問題と対処を共有します。
問題1: Claude の応答時間が不安定
Claude API のレイテンシが 5 秒から 30 秒まで変動し、一部ユーザーがタイムアウトで離脱。
対処法:
// リトライロジック + キャッシング
const callClaudeWithRetry = async (prompt, clientId, cacheKey) => {
// キャッシュをまず確認
const cached = await KV.get(`cache:${cacheKey}`);
if (cached) return cached;
// リトライ最大 3 回(exponential backoff)
for (let attempt = 0; attempt < 3; attempt++) {
try {
const response = await Promise.race([
anthropic.messages.create({
model: "claude-opus",
messages: [{ role: "user", content: prompt }]
}),
delay(20000) // タイムアウト 20 秒
]);
// キャッシュに保存(TTL 3 時間)
await KV.put(`cache:${cacheKey}`, response, { expirationTtl: 10800 });
return response;
} catch (error) {
if (attempt < 2) {
await delay(Math.pow(2, attempt) * 1000);
continue;
}
throw error;
}
}
};
結果: 平均応答時間を 12 秒に安定化。ユーザー離脱が 40% 減少。
問題2: MCP 経由のデータ量が多すぎて、Claude が「トークンオーバー」
クライアント企業が「過去 2 年分のすべての営業データを分析して」と要求。MCP が 500MB のデータを取得しようとします。
対処法:
// データは段階的に取得する(サマリー→詳細)
const smartDataFetch = async (clientId, params) => {
// Phase 1: 概要を取得(< 100KB)
const summary = await mcp.getPipelineSummary(clientId, params.months);
// Phase 2: Claude が「詳しく見たい」箇所を特定
const focus = await anthropic.messages.create({
model: "claude-opus",
messages: [{
role: "user",
content: `この概要から、詳しく分析すべき3つの領域を特定してください:\n${summary}`
}]
});
// Phase 3: 指定領域のデータのみ詳細取得
const focusAreas = extractFocusAreas(focus);
const detailedData = await Promise.all(
focusAreas.map(area => mcp.getDetailedData(clientId, area))
);
// Phase 4: 詳細分析
return await anthropic.messages.create({
model: "claude-opus",
messages: [{
role: "user",
content: `詳細データに基づいて、営業戦略を提案:\n${JSON.stringify(detailedData)}`
}]
});
};
結果: API コスト 30% 削減、応答時間 50% 短縮。
問題3: 不正利用(API キー盗難)
顧客の API キーが GitHub に漏洩。その API キーを使った大量リクエストが走り、日次支出が 50 倍に跳ね上がった。
対処法:
// リアルタイム異常検知
const monitorUsage = async () => {
const clients = await getAllClients();
for (const clientId of clients) {
const hourlyUsage = await getHourlyTokens(clientId);
const baseline = await getMonthlyAverage(clientId);
// 通常の 3 倍を超えたら即ブロック
if (hourlyUsage > baseline / 30 * 3) {
// 顧客に確認メール
await sendAlert(clientId, {
subject: "異常な API 使用を検出",
body: "確認: 今が正常な使用ですか?'確認'を押してください"
});
// 返答がなければ API キーを自動無効化(30分後)
setTimeout(async () => {
if (!await getConfirmation(clientId)) {
await disableAPIKey(clientId);
await processRefund(clientId);
}
}, 30 * 60 * 1000);
}
}
};
// 月額 + 従量課金のハイブリッド上限設定
const setCostCap = async (clientId) => {
const plan = getPlan(clientId);
const costCap = plan.monthly_fee * 3; // 月額料金の 3 倍までに制限
// Stripe で cost limit を設定
await stripe.billing.meterEvents.create({
event_name: "token_usage",
customer: clientId,
value: 0, // 初期化
timestamp: Math.floor(Date.now() / 1000)
});
};
結果: API キー漏洩による被害を最小化。返金対応で信頼を維持。
数字で見る収益構造(原価・粗利・成長)
現実的な収支モデルを示します。
Month 1~3: 初期段階
- クライアント数: 5 社
- 月額収入: 5 × ¥4,800 = ¥24,000
- Claude API コスト: ¥5,000
- インフラ: ¥3,000(CloudFlare + Stripe)
- 粗利: ¥24,000 - ¥5,000 - ¥3,000 = ¥16,000
- 利益率: 67%
Month 6~12: 成長期
- クライアント数: 30 社(月 5 社新規、解約率 10%)
- 月額収入: 25 × ¥4,800 + 5 × ¥9,800 = ¥169,000
- 従量課金(超過利用): ¥40,000
- 総収入: ¥209,000
- Claude API コスト: ¥25,000
- インフラ・カスタマーサポート: ¥15,000
- 粗利: ¥169,000
- 利益率: 81%
Month 13~24: スケール期
- クライアント数: 50 社
- 月額収入: 35 × ¥4,800 + 15 × ¥9,800 = ¥315,000
- 従量課金: ¥80,000
- 総収入: ¥395,000
- Claude API コスト: ¥50,000
- インフラ・サポート・営業: ¥60,000(営業人員 0.5 人相当)
- 粗利: ¥285,000
- 利益率: 72%
ここで「営業担当」「カスタマーサクセス」の兼務を開始。個人では対応できなくなるため、外注もしくは採用検討。
次のステップ — 特化型から横展開へ
月商 30 万円に到達すると、2 つの選択肢が見える:
選択肢 A: 既存ドメイン(営業)で深堀り
- 機能追加(予測分析、AI オーディオ分析)
- エンタープライズプラン追加(¥50,000/月)
- 月商 50~100 万円を目指す
選択肢 B: 別のドメインに横展開
- 同じ仕組みを「人事評価」「カスタマーサポート」「プロダクト開発」等に応用
- 複数ドメイン展開で月商 100~300 万円へ
実際には A + B の組み合わせ(コア機能は営業分析、オプションで人事)が最適です。
最後に
月5万円から月30万円への成長は「運」ではなく「設計」です。
- ドメインの選択(需要が高い業界か)
- 技術スタックの選択(スケーラビリティ)
- 解約率の低さ(オンボーディング品質)
この 3 つを整えれば、個人でも月商 100 万円規模の SaaS 運営は確実に実現可能です。
大切なのは「完璧さ」ではなく「実装」。MVP(最小限の機能)で 1 社目の顧客を獲得し、その経験から次を改善します。この反復の中に、真の成長があります。