mcpField
C
contact-hunter-skill

contact-hunter-skill

github.com/scientiacapitalマーケティング・グロース2844 回インストール3 週間前に更新
リポジトリ

contact-hunter-skill について

contact-hunter-skillは、HubSpot、Apollo、Clayを使って人物や企業の連絡先を検索、補完、判定するスキルです。BDRや営業向けに、補完前の資格審査を行い、連絡先カードまたはCSVを出力します。

主な機能

  1. 01既存連絡先をHubSpotで先に検索
  2. 02補完前に候補者を資格審査
  3. 03ApolloとClayによる情報補完
  4. 04区分と配信抑制状態付きカードの出力
  5. 05CSV連携またはGmail下書きに対応

活用シーン

  1. 01企業内の特定職種の連絡先検索
  2. 02既存連絡先情報の確認と補完
  3. 03架電リストやシーケンス用CSVの作成

MCP 対応

HubSpot、Apollo、ClayのMCPツールを呼び出し、連絡先の検索、候補者の資格審査、情報補完を行います。連絡先カード、CSV連携、Gmail下書きを出力します。

インストール

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

$npx skills add https://github.com/scientiacapital/skills --skill contact-hunter-skill

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

同梱ファイルconfig.json

詳細

Contact Hunter

HubSpot、Apollo、Clay へのライブ MCP ツール呼び出しを使用して、特定の人物または企業の連絡先情報を見つけ、エンリッチし、適格性を評価します。メール、電話番号、役職、ATL/BTL ティア、抑制ステータスを含むコンタクトカードを返します — BDR のダイヤルリストやシーケンスへのロードにすぐ使える状態です。 Keywords: `contact hunter`, `find contacts`, `who works at`, `enrich contact`

<quick_start> トリガー: 「[Company] の VP of Sales を見つけて」または「[Company] の [Name] の連絡先情報を取得して」または「[Company] の連絡先を探して」 入力: 人物名、企業、役職、所在地、または LinkedIn URL 出力: メール、電話番号、LinkedIn、ATL/BTL ティア、抑制ステータス、HubSpot レコードリンクを含む適格なコンタクトカード

ツールの順序:

  1. hubspot_search_contacts (Epiphan AI) — その連絡先 / 企業はすでに存在するか?
  2. qualify_lead (Epiphan AI) — すべての候補に対して Gate Q: exclude / STALE AE LEAD / ATL-BTL ティア。判定なしでエンリッチに進むものはありません。
  3. apollo_contacts_search (Apollo plugin) → find-and-enrich-contacts-at-company (Clay) — Gate Q を通過した連絡先のみにウォーターフォールを実行。
  4. 配信: コンタクトカード + サマリー行。リクエストがコールリストの場合はリードごとに Gmail create_draft (Gate D)、または sequence-load-skill への CSV ハンドオフ。 </quick_start>

<house_rules> 顧客対応スキルです。出力前に、ゲートを順番に実行します (詳細: /.claude/skills/epiphan-house-rules-skill/reference/gates.md): S: 製品に関する主張の前に search_product_catalog (Epiphan AI) または Epiphan Knowledge 検索。 B: 顧客対応のすべての文字列に対して check_my_copy。 Q: 候補の抽出直後、ティアリング/エンリッチ/ドラフトの前に qualify_lead。 D: アウトバウンドテキストは Gmail ドラフトになり、送信されることはありません。 識別子 (オーナー ID、ポータル、メール、シート) はそのスキルの reference/identifiers.md から取得します — ここに再掲しないでください。 ゲートが失敗した場合は reference/self-healing.md に従い (リトライ、フラグ付きでデグレード、Tim へのアラート、停止)、/.claude/skill-runs/.jsonl に行を追記します。 </house_rules>

<success_criteria>

  • 最初に HubSpot を検索 (連絡先がすでに存在するか確認)
  • エンリッチ前にすべての候補に対して qualify_lead を実行 — 顧客、チャネルパートナー、製品のみのエンゲージャー、アクティブな AE 所有、抑制済み、非 NA は除外。陳腐化した AE リードは STALE AE LEAD として表面化
  • HubSpot が結果を返さず、かつ Gate Q を通過した場合のみ Apollo ウォーターフォールを実行
  • Apollo にメールしかない場合は電話/LinkedIn のために Clay エンリッチを実行
  • ATL/BTL ティアは qualify_lead の判定から取得 (インラインのキーワードマッチングは行わない)
  • HubSpot レコード URL 付きのコンタクトカード出力。除外/抑制件数を含むサマリー行
  • 空の結果とツールエラーをサマリーとサイドカーで区別
  • アウトカムサイドカー + 実行ログ行を書き込み

</success_criteria>

Stage 1: 最初に HubSpot を検索

MCP ツール: mcp__claude_ai_Epiphan_Ai__hubspot_search_contacts

Search by: company name OR person name OR email domain
Return: contactId, firstName, lastName, email, phone, jobtitle, hubspot_owner_id,
        lifecyclestage, device_count, bdr_suppression_until, last_activity_date, country

見つかったかどうかに関わらず、すべての候補 (既存レコードまたは検索対象そのもの) は Stage 2 に進みます。この時点で対象企業が既存の顧客に解決される場合は、停止し、Tim に伝え、エンリッチしないでください。

ステージ 2: ゲート Q — qualify_lead (重複排除、ティア、抑制の信頼できる唯一の情報源)

MCP ツール: mcp__claude_ai_Epiphan_Ai__qualify_lead — 候補コンタクトごとに 1 回の呼び出し(またはロールを探している場合は企業ごとに 1 回、その後、返された人物ごとに再度)。

判定は、この順序で決定します:

  • 除外 — 既存顧客、チャネルパートナー、製品のみのエンゲージャー、AE 所有でアクティビティが 90 日未満、抑制済み、または米国/カナダ外(リクエストが別の地域を指定している場合を除く)。
  • STALE AE LEAD — AE 所有でアクティビティが 90 日超(Lex と Phil は北米のみ): ティアと推奨アクションを添えて Tim に提示します。Tim が判断します。彼がそう言うまでエンリッチしないでください。
  • ティア — power_level の atl / btl / unknown がカード上の ATL/BTL ティアです。unknown → 手動レビューのため GRAY とマークします。キーワードテーブルを再実装しないでください。それらは CLAUDE.md にあります。

ゴールデンルールの詳細と AE オーナー ID: ~/.claude/skills/epiphan-house-rules-skill/reference/gates.md および reference/identifiers.md。qualify_lead はデフォルトでドライランです — このスキルから writeToHubSpot: true を絶対に渡さないでください。

1 回のリトライ後も qualify_lead が利用できない場合: このハントを停止し、「Gate Q unavailable」を報告し、Tim に警告します。ゲートが確認していないリストは決して出力されません。

HubSpot で見つかりゲート Q を通過したコンタクトはステージ 4 へスキップします(すでに十分にエンリッチされています)。HubSpot の一致がないロールハントはステージ 3 へ続きます。

ステージ 3: エンリッチメントウォーターフォール(ゲート Q 通過のみ)

MCP ツール: mcp__plugin_sales_apollo__apollo_contacts_search

Search by: person_title OR organization_name
Filters: country IN [US, CA], seniority IN [director, vp, c_suite, owner]
Limit: 10 results

Apollo から返された新規人物は、さらにエンリッチされる前、または表示される前に、ステージ 2 (qualify_lead) を再度通過します。

Apollo にメールがあるが電話がない場合 → Clay エンリッチメントを実行します:

MCP ツール: mcp__claude_ai_Clay__find-and-enrich-contacts-at-company

company: [company name]
title_keywords: [from search parameters]
enrich_phone: true

ティアのはしご: あるティアで結果なし → 次のティアへ。すべてのティアが空 → ティアごとの理由を添えてゼロを報告します(「Apollo: 0 matches」、「Clay: no phone」)。エラーになったティア(認証、レート制限、タイムアウト)は 1 回リトライし、その後はスキップしてサマリーで名前を挙げます — 「0 found」として報告しないでください。 メールパターンの推測なし、ウェブダーキングなし: 検証済みの情報源のみ(HubSpot、Apollo、Clay)。

ステージ 4: 出力コンタクトカード

ゲート Q を通過した各コンタクトについて、1 枚のカードを出力します(単一フォーマット):

┌─────────────────────────────────────────────────────┐
│ JOHN SMITH  [ATL — VP]                              │
│ VP of Engineering @ Acme Corp                       │
├─────────────────────────────────────────────────────┤
│ Email:    [email protected]   (Apollo, verified)  │
│ Phone:    +1 (415) 555-0123     (Clay waterfall)    │
│ LinkedIn: linkedin.com/in/johnsmith                 │
│ Location: San Francisco, CA                         │
├─────────────────────────────────────────────────────┤
│ HubSpot:  <contact URL per identifiers.md>          │
│ Owner:    Unowned (eligible for BDR outreach)       │
│ Qualify:  pass · tier ATL · not suppressed          │
└─────────────────────────────────────────────────────┘

一括出力(シーケンスロード用の CSV フォーマット):

First,Last,Title,Company,Email,Phone,LinkedIn,ATL_Tier,HubSpot_ID
John,Smith,VP Engineering,Acme Corp,[email protected],+14155550123,linkedin.com/in/johnsmith,ATL,{id}

各ハント後のサマリー行: Found: [N] contacts | [A] ATL | [G] Gray | [B] BTL | [X] excluded by qualify_lead | [S] stale AE surfaced | tiers skipped: [none|Apollo error|Clay error]

ステージ 5: 配信(ゲート D)

  • コールリストリクエスト(「コンタクトを探してアウトリーチを設定して」): すべてのカードについて、[email protected] から mcp__claude_ai_Gmail__create_draft 経由で Gmail の下書きを準備します。下書き内の製品ラインはまずゲート S を通過します。本文は check_my_copy(ゲート B)を通過します。絶対に送信しないでください。
  • シーケンスリクエスト: CSV を sequence-load-skill に渡します(確認優先の登録)。
  • 検索のみ: カード + サマリー行、下書きなし。

コンプライアンス: すべてのデータは HubSpot(既存の CRM レコード)、Apollo(公開の専門データ)、または Clay(検証済みエンリッチメント)から取得されます。スクレイピングは行いません。アウトリーチでは CAN-SPAM に従ってください。

<self_healing> partial = カードは生成されたが、あるステージが低下した場合: エンリッチメントティアがエラーになりスキップされた、Clay が電話を返さなかった、下書きでゲート B/S がスキップされた([brand check skipped] / [spec unverified] を先頭に付けます)。error = カードもなく、理由付きのゼロサマリーもない場合(HubSpot 検索がリトライ後も失敗した、または入力を人物/企業に解決できなかった)。halt = qualify_lead が利用不可 → 停止し、Tim に警告し、状態を書き込みます。はしごは ~/.claude/skills/epiphan-house-rules-skill/reference/self-healing.md に従います: 1 回リトライ → フラグを付けて低下 → Tim に警告 → 停止。実行ごとに 1 行を ~/.claude/skill-runs/contact-hunter-skill.jsonl に追記します。 </self_healing>

結果サイドカーの出力

最終ステップとして、~/.claude/skill-analytics/last-outcome-contact-hunter-skill.json に書き込みます:

{"ts":"[UTC ISO8601]","skill":"contact-hunter-skill","version":"<frontmatter version>","variant":"default",
 "status":"[success|partial|error]","runtime_ms":[estimated ms from start],
 "metrics":{"contacts_searched":[n],"contacts_found":[n],"phones_found":[n],"emails_found":[n],"excluded_by_qualify":[n],"stale_ae_surfaced":[n],"tiers_errored":[n]},
 "error":null,"session_id":"[YYYY-MM-DD]"}

一部のステージが失敗しても結果が生成されている場合は、ステータスに「partial」を使用してください。error にはステージ名を指定する必要があります。出力がまったく生成されなかった場合にのみ「error」を使用してください。

コメント