自社サービスの知識をClaude Codeに覚えさせたかったのでMCPサーバーを作ってみた

自社サービスの知識をClaude Codeに覚えさせたかったのでMCPサーバーを作ってみた

2026.02.20

はじめに

こんにちは、マッハチームの日吉です。

「Claude に自社サービスの知識を持たせて、提案業務やプロトタイプ作成などに活用できないか?」
そんな発想から、「グロースパック for LINE」のドキュメントを提供する MCP サーバーを作ってみました。

本記事はMCPサーバーの社内公開(private)についての紹介ですが、いずれ社外にも公開しようと思っています。
同じように自社の知識を AI に渡したいと考えている方の参考になれば幸いです。

何を作ったのか

背景

「グロースパック for LINE」は、会員証・クーポン・スタンプカードなどのアセットを活用しハーフスクラッチで提供するサービスです。営業・プリセールス、また要件整理の場面では、顧客の業種や課題に応じて最適な機能を提案する必要があります。

しかし、プロダクトの機能は多岐にわたり、すべてを把握するのは容易ではありません。そこで、プロダクト知識を MCP サーバーとして構造化し、Claude が提案支援を行える仕組みを作りました。

growthpack-context-mcp の概要

growthpack-context-mcp は以下の特徴を持つ MCP サーバーです。

  • GitHub の private リポジトリからドキュメントを動的に取得
  • ドキュメント更新は GitHub push で即時反映(ビルドし直し不要)
  • 顧客条件に合った機能マッチング、事例検索、機能比較などの提案支援ツールを提供

アーキテクチャ

全体構成

MCP サーバーのコードとドキュメントを同一の private リポジトリで管理しつつ、ドキュメントは GitHub から動的に取得する設計にしています。

Claude Code → MCP サーバー(ローカルビルド)→ GitHub リポジトリ(private / docs/)

リポジトリの構成は以下の通りです。

growthpack-context-mcp/
├── src/
│   └── index.ts           # MCP サーバー本体
├── docs/                  # プロダクトドキュメント(GitHub経由で動的取得)
│   ├── metadata.json
│   ├── product/
│   ├── features/
│   └── ...
├── dist/                  # ビルド成果物
├── package.json
└── tsconfig.json

MCP サーバーは起動時にドキュメントをバンドルせず、リクエストのたびにドキュメントを取得します。これにより、ドキュメントを更新して push するだけで、MCP サーバーの再ビルドなしに最新の情報が反映されます。

ドキュメント構造

ドキュメントは docs/ 配下に以下の構造で配置しています。

docs/
├── metadata.json              # メタデータ(機能一覧、提案条件など)
├── product/                   # プロダクト情報
├── features/                  # 機能アセット別ドキュメント
│   ├── membership/            # デジタル会員証
│   ├── coupon/                # クーポン配信
│   ├── stamp-card/            # スタンプカード
│   └── ...
├── scenarios/                 # 業種別シナリオ
├── use-cases/                 # 導入事例
└── sales/                     # 営業支援資料

各機能には index.md(概要)、requirements.md(要件定義)、architecture.md(システム構成)、screens.md(画面仕様)、sales.md(提案条件)の 5 種類のドキュメントを用意しています。

提供しているツール

基本ツール

ツール 説明
get_product_info プロダクト全体の情報を取得
list_features 機能アセット一覧を取得
get_feature_detail 特定機能の詳細を取得
search_documents キーワードでドキュメント検索
list_use_cases 活用事例一覧を取得
get_document 任意のドキュメントを取得
clear_cache キャッシュをクリア

提案支援ツール

ツール 説明
find_matching_features 顧客の業種・課題・条件に合った機能を提案
get_proposal_conditions 機能の提案条件・価格・差別化ポイントを取得
search_case_studies 業種・機能・キーワードで導入事例を検索
get_feature_requirements 機能要件・非機能要件を取得
compare_features 複数機能の比較表を生成

find_matching_features は、業種・店舗の有無・課題を渡すと、スコアリングによって最適な機能を提案してくれます。

実装のポイント

ドキュメント取得のローカル / リモート切り替え

開発時はローカルファイル、通常利用時は GitHub から取得するように、環境変数で切り替えられる設計にしました。

async function fetchDocument(relativePath: string): Promise<string> {
  const localDocsPath = getLocalDocsPath();

  // ローカルモード
  if (localDocsPath) {
    const filePath = path.join(localDocsPath, relativePath);
    const content = fs.readFileSync(filePath, "utf-8");
    return content;
  }

  // リモートモード(GitHub)
  const url = `${BASE_URL}/${relativePath}`;
  const response = await fetch(url);
  const content = await response.text();
  return content;
}

環境変数 GROWTHPACK_LOCAL_DOCS にパスを指定すればローカルモードで動作します。設定しなければ GitHub から取得します。ドキュメントの執筆・確認をローカルで行い、push 後に本番反映という開発フローが実現できます。

メタデータによる構造化

metadata.json に機能一覧・提案条件・導入事例のメタ情報を集約し、検索やマッチングに活用しています。各ドキュメントの全文を読まなくても、メタデータだけで高速にフィルタリングできます。

{
  "features": [
    {
      "id": "membership",
      "name": "デジタル会員証",
      "targetIndustries": ["アパレル", "飲食", "小売"],
      "solvesChallenges": ["会員獲得", "リピート促進"],
      "proposalConditions": {
        "recommended": ["オフライン店舗あり", "会員管理をデジタル化したい"],
        "notRecommended": ["ECのみ"]
      }
    }
  ]
}

このメタデータがあることで、find_matching_features ツールが業種・課題のマッチングをスコアリングし、最適な機能を提案できます。

キャッシュ

GitHub への過度なリクエストを避けるため、5 分間の TTL キャッシュを実装しています。clear_cache ツールで明示的にクリアすることも可能です。

セットアップ

リポジトリの clone とビルド

チームメンバーはまずリポジトリを clone してビルドします。

git clone git@github.com:<org>/<repo>.git
cd <repo>
pnpm install
pnpm run build

Claude Code への設定

プロジェクトの .claude/claude_code_config.json、または ~/.claude/claude_code_config.json に以下を追加します。

{
  "mcpServers": {
    "growthpack": {
      "command": "node",
      "args": ["/path/to/growthpack-context-mcp/dist/index.js"],
      "env": {
        "GROWTHPACK_GITHUB_OWNER": "<GitHub Organization名>",
        "GROWTHPACK_GITHUB_REPO": "<リポジトリ名>",
        "GROWTHPACK_GITHUB_BRANCH": "main",
        "GITHUB_TOKEN": "<GitHub Personal Access Token>"
      }
    }
  }
}

GITHUB_TOKEN には、対象の private リポジトリの contents:read 権限を持つ Personal Access Token を設定します。

ローカルのドキュメントを直接参照したい場合は、GROWTHPACK_LOCAL_DOCS を設定すれば GitHub へのアクセスなしで動作します。

{
  "mcpServers": {
    "growthpack": {
      "command": "node",
      "args": ["/path/to/growthpack-context-mcp/dist/index.js"],
      "env": {
        "GROWTHPACK_LOCAL_DOCS": "/path/to/growthpack-context-mcp/docs"
      }
    }
  }
}

使ってみる

顧客に合った機能を提案してもらう

Claude Code で以下のように話しかけるだけで、プロダクト知識に基づいた回答が得られます。

アパレル100店舗、会員獲得が課題の顧客に提案したい

Claude が find_matching_features ツールを呼び出し、業種・課題に合った機能をスコアリングして提案してくれます。

機能を比較する

会員証とスタンプカードの違いは?

compare_features ツールにより、価格・ターゲット業種・提案条件などの比較表を生成します。

導入事例を検索する

アパレル業界の導入事例を見たい

search_case_studies ツールで業種を絞り込み、関連する導入事例を返してくれます。

ドキュメント更新フロー

この仕組みの大きなメリットは、ドキュメントの更新が即座に反映されることです。

  1. リポジトリの docs/ 配下の Markdown を編集
  2. main ブランチに push
  3. MCP サーバーが次回リクエスト時に最新のドキュメントを取得(キャッシュは 5 分で自動失効)

MCP サーバーの再ビルドや再起動は不要です。営業資料の更新や新機能の追加があっても、ドキュメントを更新して push するだけで Claude が最新の情報をもとに回答できます。

すぐに反映したい場合は、Claude Code 上で「キャッシュをクリアして」と伝えれば clear_cache ツールが実行されます。

自社で同様の MCP サーバーを作るには

今回のアプローチは、以下のような構成で汎用的に応用できます。

GitHub private リポジトリ
├── src/              # MCP サーバーのロジック
└── docs/             # 自社ドキュメント
    ├── metadata.json # 構造化されたメタ情報
    └── *.md          # Markdown ドキュメント群

ポイントは以下の 3 つです。

  1. メタデータで構造化する — ドキュメントの全文検索だけでなく、メタデータによる高速なフィルタリングを可能にする。AI がどのドキュメントを読むべきか効率的に判断できる
  2. ドキュメントを動的に取得する — ドキュメントをビルド成果物に含めず GitHub から動的取得する設計にすることで、ドキュメント更新時の再ビルド・再デプロイを不要にする
  3. ドキュメントの更新運用をシンプルに保つ — Markdown + GitHub という既存のワークフローに乗せることで、ドキュメント更新のハードルを下げる

まとめ

MCPサーバー(growthpack-context-mcp)を構築するにあたり、大量のドキュメント整理を手伝ってくれた かめだしんいち さん、ありがとうございました。

今回は自社サービスの知識をMCPサーバー化することで、営業やプロトタイプを支援するClaudeのPluginに知識を渡すことを目的としました。MCPサーバーは「AIに自社の知識を渡す」ためにも有効な仕組みだと考えています。
プロダクトの知識、社内ドキュメント、ナレッジベースなど、構造化されたドキュメントをお持ちであれば、MCP サーバー化を検討してみてはいかがでしょうか。

この記事をシェアする

FacebookHatena blogX

関連記事