
自社サービスの知識をClaude Codeに覚えさせたかったのでMCPサーバーを作ってみた
はじめに
こんにちは、マッハチームの日吉です。
「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 ツールで業種を絞り込み、関連する導入事例を返してくれます。
ドキュメント更新フロー
この仕組みの大きなメリットは、ドキュメントの更新が即座に反映されることです。
- リポジトリの
docs/配下の Markdown を編集 - main ブランチに push
- MCP サーバーが次回リクエスト時に最新のドキュメントを取得(キャッシュは 5 分で自動失効)
MCP サーバーの再ビルドや再起動は不要です。営業資料の更新や新機能の追加があっても、ドキュメントを更新して push するだけで Claude が最新の情報をもとに回答できます。
すぐに反映したい場合は、Claude Code 上で「キャッシュをクリアして」と伝えれば clear_cache ツールが実行されます。
自社で同様の MCP サーバーを作るには
今回のアプローチは、以下のような構成で汎用的に応用できます。
GitHub private リポジトリ
├── src/ # MCP サーバーのロジック
└── docs/ # 自社ドキュメント
├── metadata.json # 構造化されたメタ情報
└── *.md # Markdown ドキュメント群
ポイントは以下の 3 つです。
- メタデータで構造化する — ドキュメントの全文検索だけでなく、メタデータによる高速なフィルタリングを可能にする。AI がどのドキュメントを読むべきか効率的に判断できる
- ドキュメントを動的に取得する — ドキュメントをビルド成果物に含めず GitHub から動的取得する設計にすることで、ドキュメント更新時の再ビルド・再デプロイを不要にする
- ドキュメントの更新運用をシンプルに保つ — Markdown + GitHub という既存のワークフローに乗せることで、ドキュメント更新のハードルを下げる
まとめ
MCPサーバー(growthpack-context-mcp)を構築するにあたり、大量のドキュメント整理を手伝ってくれた かめだしんいち さん、ありがとうございました。
今回は自社サービスの知識をMCPサーバー化することで、営業やプロトタイプを支援するClaudeのPluginに知識を渡すことを目的としました。MCPサーバーは「AIに自社の知識を渡す」ためにも有効な仕組みだと考えています。
プロダクトの知識、社内ドキュメント、ナレッジベースなど、構造化されたドキュメントをお持ちであれば、MCP サーバー化を検討してみてはいかがでしょうか。










