mcpField
M
meeting-brief-generator

meeting-brief-generator

github.com/varnan-tech生産性68749 回インストール2 週間前に更新
リポジトリ

meeting-brief-generator について

meeting-brief-generatorは、営業や事業開発の会議に向けて企業を調査し、1ページの事前ブリーフを作成します。Tavilyの検索結果をGeminiでまとめ、任意でNotionに保存できます。

主な機能

  1. 01Tavilyによる企業調査
  2. 02ニュースや製品、技術などの検索
  3. 03Geminiによるブリーフ作成
  4. 04出典の提示と情報不足の明記
  5. 05任意のNotion保存

活用シーン

  1. 01企業との会議の準備
  2. 02営業電話前に最近の企業ニュースを確認
  3. 03担当者との会議向けに出典付きブリーフを作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/varnan-tech/opendirectory --skill meeting-brief-generator

インストール後、Claude Code で/meeting-brief-generatorを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

.env.example
README.md
evals/
evals.json
references/
brief-format.md
output-template.md

詳細

ミーティング概要の作成

会社名と任意の連絡先を入力します。Tavily を使って会社を調査し、Gemini で1ページの事前ミーティング概要をまとめます。必要に応じて Notion に保存できます。


重要なルール: 詳細を捏造しないでください。概要に記載する事実、数値、主張はすべて、Tavily の検索結果に基づいている必要があります。検索データがないセクションには「公開情報が限られています。」と記載してください。資金調達額、従業員数、製品の詳細を決して捏造しないでください。


ステップ 1:セットアップの確認

必須の環境変数を確認します。

echo "TAVILY_API_KEY: ${TAVILY_API_KEY:+set}"
echo "GEMINI_API_KEY: ${GEMINI_API_KEY:+set}"
echo "NOTION_TOKEN: ${NOTION_TOKEN:-not set}"
echo "NOTION_DATABASE_ID: ${NOTION_DATABASE_ID:-not set}"

TAVILY_API_KEY が設定されていない場合: 停止します。ユーザーに次のように伝えてください:「TAVILY_API_KEY が必要です。app.tavily.com で取得し、.env ファイルに追加してください。」

GEMINI_API_KEY が設定されていない場合: 停止します。ユーザーに次のように伝えてください:「GEMINI_API_KEY が必要です。aistudio.google.com で取得し、.env ファイルに追加してください。」

NOTION_TOKEN または NOTION_DATABASE_ID が設定されていない場合: 続行します。概要はテキストのみで出力します。Notion への保存はスキップします。

入力があることを確認します。 ユーザーは最低限、会社名を指定する必要があります。指定されていない場合は、「どの会社とのミーティングですか?」と尋ねてください。


ステップ 2:情報の収集

以下の情報を収集します。不足している情報だけを尋ねてください。

必須:

  • 会社名(ドメインまたは URL が指定されている場合は、それでも可)
  • ミーティングの日付

任意(不足していても進行を妨げない):

  • 連絡先の氏名と役職
  • ミーティングの種類(ディスカバリー、デモ、フォローアップ、QBR)
  • ユーザーが取り上げたい具体的なトピックや目標

ユーザーが会社の URL またはドメインを指定した場合は、Tavily のクエリをより正確にするために使用してください(例:site:example.com、または検索語にドメインを含める)。


ステップ 3:Tavily で調査

以下の検索を順番に実行します。それぞれ概要の1つのセクションを対象とします。各検索の上位結果(タイトル、URL、コンテンツの抜粋、スコア)を保存してください。

スコアが 0.5 以上の結果を使用します。条件を満たす結果がない検索については、そのセクションに「公開情報が限られています。」と記載してください。

検索 1:会社概要

curl -s -X POST "https://api.tavily.com/search" \
  -H "Content-Type: application/json" \
  -d '{
    "api_key": "'"$TAVILY_API_KEY"'",
    "query": "\"COMPANY\" overview founded employees headquarters",
    "search_depth": "advanced",
    "max_results": 5,
    "include_answer": true
  }'

検索 2:最近のニュース(過去 30 日間)

curl -s -X POST "https://api.tavily.com/search" \
  -H "Content-Type: application/json" \
  -d '{
    "api_key": "'"$TAVILY_API_KEY"'",
    "query": "\"COMPANY\" news announcement",
    "search_depth": "advanced",
    "max_results": 5,
    "include_answer": true,
    "topic": "news",
    "time_range": "month"
  }'

検索 3:技術スタック

curl -s -X POST "https://api.tavily.com/search" \
  -H "Content-Type: application/json" \
  -d '{
    "api_key": "'"$TAVILY_API_KEY"'",
    "query": "\"COMPANY\" technology stack engineering infrastructure tools",
    "search_depth": "advanced",
    "max_results": 5,
    "include_answer": true
  }'

検索 4:製品と価格

curl -s -X POST "https://api.tavily.com/search" \
  -H "Content-Type: application/json" \
  -d '{
    "api_key": "'"$TAVILY_API_KEY"'",
    "query": "\"COMPANY\" product features pricing use case",
    "search_depth": "advanced",
    "max_results": 5,
    "include_answer": true
  }'

検索 5:競合他社

curl -s -X POST "https://api.tavily.com/search" \
  -H "Content-Type: application/json" \
  -d '{
    "api_key": "'"$TAVILY_API_KEY"'",
    "query": "\"COMPANY\" competitors alternatives vs",
    "search_depth": "advanced",
    "max_results": 5,
    "include_answer": true
  }'

検索 6:資金調達と成長

curl -s -X POST "https://api.tavily.com/search" \
  -H "Content-Type: application/json" \
  -d '{
    "api_key": "'"$TAVILY_API_KEY"'",
    "query": "\"COMPANY\" funding raised valuation growth",
    "search_depth": "advanced",
    "max_results": 5,
    "include_answer": true
  }'

連絡先の氏名が指定されている場合は、さらに2件検索します:

検索 7:連絡先のプロフィール

curl -s -X POST "https://api.tavily.com/search" \
  -H "Content-Type: application/json" \
  -d '{
    "api_key": "'"$TAVILY_API_KEY"'",
    "query": "\"CONTACT_NAME\" \"COMPANY\" role title",
    "search_depth": "advanced",
    "max_results": 5,
    "include_answer": true
  }'

検索 8:連絡先の経歴

curl -s -X POST "https://api.tavily.com/search" \
  -H "Content-Type: application/json" \
  -d '{
    "api_key": "'"$TAVILY_API_KEY"'",
    "query": "\"CONTACT_NAME\" background career LinkedIn",
    "search_depth": "advanced",
    "max_results": 5,
    "include_answer": true
  }'

ステップ 4:Gemini で情報をまとめる

references/brief-format.md を最後まで読みます。references/output-template.md を読み、そのテンプレートを使用します。

Gemini へのリクエストを一時ファイルに書き込みます。

cat > /tmp/meeting-brief-request.json << 'ENDJSON'
{
  "system_instruction": {
    "parts": [{
      "text": "You are a GTM research analyst preparing a 1-page pre-call brief for a sales or business development meeting. Rules: Every claim must cite a source URL from the provided research. Use the format 'Because [finding from research], mention [point] to [goal]' for talking points. No invented data. If a section has no research data, write 'Limited public information found.' No em dashes. No banned words. Under 400 words total. The brief must be scannable in 3 minutes."
    }]
  },
  "contents": [{
    "parts": [{
      "text": "RESEARCH_RESULTS_AND_INSTRUCTIONS_HERE"
    }]
  }],
  "generationConfig": {
    "temperature": 0.3,
    "maxOutputTokens": 2500
  }
}
ENDJSON
curl -s -X POST \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d @/tmp/meeting-brief-request.json \
  | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['candidates'][0]['content']['parts'][0]['text'])"

RESEARCH_RESULTS_AND_INSTRUCTIONS_HERE を以下の内容に置き換えます。

  • Tavily の検索結果すべて(各結果のタイトル、URL、コンテンツの抜粋)
  • output-template.md に記載された概要のテンプレート構成
  • 会社名、連絡先の氏名(指定されている場合)、ミーティングの日付、ミーティングの種類(指定されている場合)

ステップ 5:品質の自己確認

提示する前に確認します。

  • データを捏造していない。すべての事実に Tavily の検索結果のソース URL がある。
  • トーキングポイントが「[調査結果]を踏まえ、[目標]のために[ポイント]に触れる」の形式になっている。
  • どの行にも em ダッシュを使っていない。
  • 禁止語を使っていない。
  • 概要が 400 語未満である。
  • 連絡先が指定されていない場合、「意思決定者」セクションに「未指定」と記載している。
  • データがないセクションには推測ではなく「公開情報が限られています。」と記載している。
  • 未解決の質問が一般的なものではなく、この会社に即した具体的な内容になっている。

違反があれば、提示する前に修正します。


ステップ 6:出力または Notion に保存

概要全体をコードブロックに入れて提示します。

NOTION_TOKEN と NOTION_DATABASE_ID の両方が設定されている場合は、「この概要を Notion に保存しますか?」と尋ねます。

確認を得たら:

cat > /tmp/notion-brief-payload.json << 'ENDJSON'
{
  "parent": { "database_id": "NOTION_DATABASE_ID_HERE" },
  "properties": {
    "Name": {
      "title": [{ "text": { "content": "Meeting Brief: COMPANY, DATE" } }]
    },
    "Date": {
      "date": { "start": "YYYY-MM-DD" }
    }
  },
  "children": [
    {
      "object": "block",
      "type": "paragraph",
      "paragraph": {
        "rich_text": [{ "type": "text", "text": { "content": "BRIEF_CONTENT_HERE" } }]
      }
    }
  ]
}
ENDJSON
curl -s -X POST "https://api.notion.com/v1/pages" \
  -H "Authorization: Bearer $NOTION_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Notion-Version: 2022-06-28" \
  -d @/tmp/notion-brief-payload.json

投稿後:「概要を Notion に保存しました。データベースを確認してください。」

Notion が設定されていない場合は、概要のみを提示します。Notion については言及しないでください。

コメント