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. 03通过 Apollo 和 Clay 补充信息
  4. 04输出含分级与抑制状态的联系卡
  5. 05支持 CSV 交接或 Gmail 草稿

适用场景

  1. 01查找某公司特定职位的联系人
  2. 02核验并补充已有联系人资料
  3. 03整理拨打名单或序列导入 CSV

MCP 相关

该技能通过 MCP 工具调用 HubSpot、Apollo 和 Clay,搜索联系人、执行资格审查并丰富联系资料。联系卡片、CSV 交接或 Gmail 草稿是其输出形式。

安装

复制下面的命令,在终端中运行。

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

安装后在 Claude Code 中输入/contact-hunter-skill确认已加载。

附带文件config.json

详细介绍

联系人猎手

使用实时 MCP 工具调用 HubSpot、Apollo 和 Clay,查找、补充并筛选特定人员或公司的联系信息。返回联系人卡片,包含电子邮件、电话、职务、ATL/BTL 层级和抑制状态,可直接用于 BDR 拨号名单或序列加载。 关键词:`contact hunter`、`find contacts`、`who works at`、`enrich contact`

<quick_start> 触发条件:“查找 [Company] 的销售副总裁”或“获取 [Name] 在 [Company] 的联系信息”或“搜寻 [Company] 的联系人” **输入:**人员姓名、公司、职位、所在地或 LinkedIn URL **输出:**经过筛选的联系人卡片,包含电子邮件、电话、LinkedIn、ATL/BTL 层级、抑制状态和 HubSpot 记录链接

工具顺序:

  1. hubspot_search_contacts(Epiphan AI)——联系人 / 公司是否已存在?
  2. qualify_lead(Epiphan AI)——对每个候选对象执行 Gate Q:排除 / STALE AE LEAD / ATL-BTL 层级。未经判定,不得将任何对象送去补充信息。
  3. apollo_contacts_search(Apollo 插件)→ find-and-enrich-contacts-at-company(Clay)——仅对通过 Gate Q 的联系人使用瀑布式查找。
  4. 交付:联系人卡片 + 摘要行;如果请求是拨号名单(Gate D),则为每个潜在客户使用 Gmail create_draft;否则将 CSV 交接给 sequence-load-skill。 </quick_start>

<house_rules> 面向客户的技能。输出前,按顺序执行各道关卡(详情:~/.claude/skills/epiphan-house-rules-skill/reference/gates.md): S:在提出任何产品相关声明前,使用 Epiphan AI 的 search_product_catalog 或 Epiphan Knowledge 搜索。 B:对每条面向客户的文本使用 check_my_copy。 Q:拉取候选对象后立即执行 qualify_lead,先于层级划分 / 信息补充 / 草稿创建。 D:外发文本必须创建 Gmail 草稿,绝不发送。 标识符(所有者 ID、portal、电子邮件、席位)请从该技能的 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 仅提供电子邮件,则运行 Clay 信息补充以获取电话 / LinkedIn
  • ATL/BTL 层级采用 qualify_lead 的判定结果(不得通过内联关键词匹配)
  • 输出包含 HubSpot 记录 URL 的联系人卡片;摘要行注明排除 / 抑制数量
  • 在摘要和 sidecar 中区分空结果与工具错误
  • 写入结果 sidecar + 运行日志行 </success_criteria>

第 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

无论是否找到结果,每个候选对象(现有记录或搜索目标本身)都进入第 2 阶段。如果此时确认目标公司是现有客户,则停止操作并告知 Tim,不要补充信息。

阶段 2:Gate Q — qualify_lead(去重、分层和抑制的事实来源)

MCP 工具: mcp__claude_ai_Epiphan_Ai__qualify_lead — 每位候选联系人调用一次(寻找某个职位时,则每家公司调用一次,然后对返回的每位人员再调用一次)。

判定结果按以下顺序决定:

  • 排除 — 现有客户、渠道合作伙伴、仅与产品互动的对象、近期有活动的 AE 负责人(< 90 天)、已抑制对象,或位于美国/加拿大以外的对象(除非请求指定了其他地理区域)。
  • 过时的 AE 线索 — 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。

如果重试一次后 qualify_lead 仍不可用:停止此次搜寻,报告“Gate Q unavailable”, 通知 Tim。绝不输出未经 Gate Q 审核的名单。

在 HubSpot 中找到且通过 Gate Q 的联系人,直接进入阶段 4(其数据丰富程度已足够)。 在 HubSpot 中找不到匹配项的职位搜寻则继续进入阶段 3。

阶段 3:数据丰富流程(仅限通过 Gate 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 个匹配项”“Clay:无电话号码”)。某一层发生错误(身份验证、速率限制、超时)时,重试一次,然后跳过并在摘要中注明 — 绝不能报告为“找到 0 个”。 不要猜测电子邮箱模式,也不要使用网络搜索技巧:仅使用已验证来源(HubSpot、Apollo、Clay)。

阶段 4:输出联系人卡片

对于每位通过 Gate Q 的联系人,输出一张卡片(统一格式):

┌─────────────────────────────────────────────────────┐
│ 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:交付(Gate D)

  • 呼叫名单请求(“搜寻联系人并设置外联”):为每张卡片,通过 mcp__claude_ai_Gmail__create_draft 使用 [email protected] 创建 Gmail 草稿。草稿中提及的任何产品线 都必须先通过 Gate S;正文必须通过 check_my_copy(Gate B)。绝不发送。
  • 序列请求:将 CSV 交给 sequence-load-skill(先确认再加入)。
  • 仅查询:输出卡片和摘要行,不创建草稿。

合规性: 所有数据均来自 HubSpot(现有 CRM 记录)、Apollo(公开的职业数据)或 Clay(已验证的数据丰富来源)。不得抓取数据。外联须遵守 CAN-SPAM。

<self_healing> partial = 已生成卡片,但某个阶段降级:某个数据丰富层出错后被跳过、Clay 未返回电话号码,或草稿跳过了 Gate B/S(分别加上前缀 [brand check skipped] / [spec unverified])。error = 未生成卡片,且没有附带原因的零结果摘要(HubSpot 搜索重试后仍失败,或无法将输入解析为个人/公司)。halt = qualify_lead 不可用 → 停止、通知 Tim 并写入状态。按 ~/.claude/skills/epiphan-house-rules-skill/reference/self-healing.md 中的流程处理:重试一次 → 降级并添加标记 → 通知 Tim → 停止。每次运行都向 ~/.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"。

评论

支持 Markdown