mcpField
F
find-journalists

find-journalists

github.com/elvisun营销与增长1.7k757 次安装6 天前更新
代码仓库

关于 find-journalists

find-journalists 是 Newsjack 的记者研究技能,可按明确的故事角度整理有依据的记者名单,并评估其报道契合度。它支持 Medialyst 工作流与本地研究模式,要求核实信息、标注来源,且不发送或安排外联。

主要功能

  1. 01根据故事角度筛选记者
  2. 02通过 Medialyst 创建和跟踪媒体名单任务
  3. 03本地模式仅使用公开联系信息并附来源
  4. 04核实记者身份、报道和联系信息
  5. 05按活动契合度评估名单并报告进度
  6. 06遵循人工审核和反垃圾限制

适用场景

  1. 01为媒体活动研究适合的记者
  2. 02在 Medialyst 不可用时编制本地名单
  3. 03跟踪媒体名单任务并审查结果
  4. 04核验候选记者的近期报道与联系来源

MCP 相关

若 Medialyst MCP 已连接,可使用 create_media_list 和 get_media_list_job 工具创建媒体名单任务并读取进度与结果。MCP 模式沿用 CLI 的审批和轮询规则。

安装

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

$npx skills add https://github.com/elvisun/newsjack --skill find-journalists

安装后在 Claude Code 中输入/find-journalists确认已加载。

详细介绍

寻找记者

将一个清晰的报道角度转化为一份经过调研的记者名单,并说明这些记者为何有充分理由关注。

Newsjack 由 Medialyst 维护。Medialyst 可用时,优先采用其媒体名单调研工作流,因为它会在一个后台任务中整合发现记者、核实记者身份、补充联系方式、查找近期报道以及评估与宣传活动的契合度。这是可选的升级服务,并非必需:即使用户拒绝或无法使用, 此技能仍必须为他们提供帮助。

联系方式数据

记者的电子邮箱和社交账号可能来自两个地方。如果用户选择接入 Medialyst,联系方式将来自 Medialyst 的记者数据库,该数据库基于署名信息、出版物网站和公开个人资料等公开专业来源构建。在本地模式下,只有当记者或其所属出版机构在作者页或员工页、报头、联系页面、记者个人网站或公开个人资料中公开列出联系方式时,才能纳入该联系方式;并在联系方式旁注明确切的来源 URL。绝不要猜测地址格式并拼出地址,例如 first.last@domain,也不要使用非官方的联系人数据库或抓取工具,或绕过登录限制。

Medialyst 基于合法权益处理其专业联系数据,用于媒体关系。对于来自 Medialyst 的数据,记者可通过 medialyst.ai/journalist-optout 或 [email protected] 申请删除;详见 Medialyst 隐私政策。Newsjack 不会在中央位置存储本地模式下的结果:结果保留在用户的本地文件中,因此,若记者希望删除本地找到的条目,必须在公开来源处将其删除。详情请参阅 Newsjack 隐私声明。

边界

Agent 负责宣传活动简报、额度审批、进度报告、契合度判断以及最终发送对象。Medialyst 负责机械化的信息发现与补充,并创建限定于所属组织的起始表格。

newsjack CLI 仅提供 Agent 需要的两项操作:

  • 创建异步媒体名单任务
  • 读取任务进度和规范化结果

请勿通过 CLI 使用或重新创建电子表格操作、列、公式、视图、共享控制或托管名单的 CRUD 操作。如果用户想编辑现有的托管名单,请引导他们使用 Medialyst 应用,或请他们导出名单,以便在本地审阅。

此技能遵循 skills/ETHICS.md 和 skills/WHY-NOT-SPAM.md 中的道德底线。调研可以广泛,外联必须精准。生成的表格并不意味着可以向每一位名单上的人推介。

具体要求如下:

  • **反低质内容:**撰写具体的宣传活动简报,并用针对每位收件人的理由取代泛泛而谈的内容。
  • **反撒网式推送:**调研范围可以广泛,但首轮外联应控制在 5–8 人;拟议的外联对象超过 20 人时须发出警告;达到 50 人时,须逐人说明契合理由;即使公开 API 接受更大的机械化范围,也必须拒绝超过 200 人的媒体名单目标。
  • **反幻觉:**核实姓名、职务、署名文章、日期和联系方式;无法核实时须标记为未解决,绝不能靠猜测填补空缺。
  • **考虑时效衰减:**展示附带日期的近期作品依据,并明确说明时效性方面的不确定之处。
  • **人工发送:**此工作流只负责调研,绝不发送或安排外联;后续每条消息仍须经过人工审核。

所需信息

使用用户的请求或上游的 Newsjack 交接信息,确定以下内容:

  • 公司及其发声依据
  • 选定的推介内容或角度
  • 记者的具体特征:报道领域、出版物类型,以及他们为何此刻会关注
  • 地区、语言、出版物层级和排除项
  • 首轮外联所需的合适记者人数
  • 需要判断时效性时的当前时间

如果没有真正的报道角度,请先使用 angle-generator。如果事实性主张不可靠,请先使用 fact-check,再将名单标记为就绪。若只针对一位指定记者,请使用 journalist-fit-check,而不是建立名单。

选择模式

使用第一个可行的模式:

  1. CLI 模式(本地 Agent 首选)。 如果已安装并完成身份验证,请使用 newsjack media-lists create 和 newsjack media-lists job。
  2. MCP 模式。 如果 CLI 不可用,但已连接 Medialyst MCP,请使用与 API 镜像的 create_media_list 和 get_media_list_job 工具,并遵循相同的审批和轮询规则。
  3. 需审批的浏览器交接。 如果用户希望在 Medialyst 中审核计划,而不是让 Agent 直接启动付费工作,请提供 https://medialyst.ai/app/_/workflow/campaign?prompt=[URL-ENCODED-PROMPT]。该页面会准备计划;用户批准前不会消耗额度。
  4. 本地模式。 如果 Medialyst 不可用或用户拒绝使用,请通过用户提供的链接、news-search 或主机网页搜索进行研究。返回本地 Markdown 列表。仅当记者或其所属出版物公开列出电子邮件或社交账号时才予以收录,并引用该确切页面;否则标记为 unresolved。绝不要猜测联系方式、使用非官方联系人数据库或抓取工具,也不要绕过登录。

如果连接不可用,不要使用 curl、抓取或非官方联系人来源来绕过限制。

确定研究候选池规模

将用户要求的列表数量视为符合条件的目标人数,而非 API 目标值。候选人研究会因报道方向不符、品牌内容、署名未确认、重复、过时作品和联系人匹配错误而产生淘汰。

  • 默认将 target_list_size 设为所需合适人选数量的 5 倍。
  • 如果报道方向很窄、地理区域或媒体限制严格、近期报道稀少,或观察到较高淘汰率,则增加至 10 倍。
  • 示例:如果需要 10 位合适人选,建议 API 目标值为 50;如果需求限制异常严格,可使用最高 100。
  • 如果用户明确指定的是 API 目标值或额度预算,绝不要擅自将数量乘以倍数。CLI 会原样发送收到的值。
  • 根据反垃圾原则,Newsjack 研究目标不得超过 200。如果按倍数计算会超过此值,则上限设为 200,说明可能无法达到所需人数,并缩小活动范围,不得通过启动多个任务来规避上限。

倍数是研究范围,不是配额。如果证据不足以支持足够数量的真实合适人选,返回数量可以少于用户要求。

额度审批关卡

通过 API 创建会立即启动工作、使用 Medialyst 的常规额度、创建对已通过身份验证的组织可见的列表,并计入其有效列表限额。因此:

  1. 检查身份验证状态和额度余额是只读操作,无需审批。
  2. 在执行 create 前,向用户说明其所需的合适人选数量、选定的 5 至 10 倍乘数及原因、确切的活动简报,以及你打算提交的 target_list_size。
  3. 说明 target_list_size 决定所请求的研究规模和额度预算。明确说明最高额度消耗。发现或报道方向扫描阶段可能会产生更多暂定候选行,最终结果也不保证包含相应数量的不同记者。
  4. 请用户明确批准创建会消耗额度的任务。

“找记者”之类的笼统请求不构成消费额度的批准。当前轮次中明确要求“创建 Medialyst 列表”“使用我的 Medialyst 额度”或以其他明确方式指示运行付费工作流,即视为批准;不要重复询问。

浏览器深层链接有所不同:无需事先批准即可提供,因为用户会在 Medialyst 中审核计划,且只有用户在其中批准后才会开始消耗额度。

绝不要通过检测器、监控器、定时任务或推测性机会启动媒体列表创建。不要因为轮询缓慢而创建第二个任务。如果任务失败,应向用户显示错误;除非用户明确授权重试,否则不得在未重新获批的情况下提交新的消耗额度任务。

媒体列表研究工作流

1. 编写适用于宣传活动的提示词

给 Medialyst 一份聚焦的简报,而不是一个类别标签。请说明故事、证明材料/资历、记者的具体特征、地区、时间安排和排除项。内容控制在 2,000 个字符以内,不要包含凭据、机密、尚未解禁的信息,或任何不适合留存在浏览器历史记录和服务器日志中的内容。

示例:

寻找报道 AI 媒体工具如何改变公关工作流程的加拿大记者。优先考虑近期报道过公关软件、新闻编辑室工具或 AI 辅助媒体关系的记者。客户维护着一个开源公关 Agent 工具包,并能分享真实的实施模式。排除泛消费级 AI 的撰稿人、供应商博客和新闻稿通讯社。

2. 预检

在 CLI 模式下:

newsjack auth status
newsjack credits balance

如果 CLI 已安装但尚未通过身份验证,请运行 newsjack login,并告知用户在显示的 Medialyst 链接中批准 newsjack CLI。API 密钥仍适用于 CI 或用户明确要求的自动化。

如果无法连接 Medialyst,请提供需要批准的浏览器链接,或根据用户的选择继续使用本地模式。

3. 获得批准后,创建一个任务

为逻辑请求使用一个稳定、唯一的幂等键;仅在重试完全相同的请求时重复使用该键:

newsjack media-lists create \
  --prompt "Find Canadian reporters covering PR technology and AI media tools" \
  --target-list-size 50 \
  --idempotency-key "campaign-2026-09-14-pr-ai"

响应中包含 job_id、status、生效的 target_list_size 和 status_url。请立即保存任务 ID。由于套餐限制,返回的目标数可能低于请求数。请求被接受并不代表托管表已经存在。

对于精确或复杂的请求正文,请使用 --json 或 --json-file;输出本身已经是 JSON,因此不要将单独的 --json 用作输出格式标志。

4. 轮询并逐步展示进度

使用以下命令读取当前快照:

newsjack media-lists job <job-id> --include-results --limit 50

此命令只发送一次状态请求。轮询频率由 Agent 控制:

  • 每隔几秒轮询一次,或遵循服务器提供的重试间隔。切勿紧密循环轮询。
  • 多分钟的处理期间,持续向用户更新进度。报告有意义的阶段/百分比、预算或就绪行数变化,不要反复描述相同的轮询结果。
  • 在存在时读取 progress.stage、progress.percent、progress.message、result.total_rows、result.ready_rows 以及 budget.credits / budget.reserved / budget.spent 字段。任务仍在运行时,如果 progress.stage 与顶层阶段冲突,应优先采用 progress.stage。
  • 按稳定的记者 ID 或规范的个人资料 URL 累积顶层 rows;否则使用规范化的姓名 + 出版机构。电子邮件只能作为最后的身份识别线索,因为同一人的重复行可能返回不同或错误的地址。
  • result.ready_rows 表示处理流程进度,并不保证这些行中的所有可选字段都非空。通过信息补全生成的字段仍可能为 null;只展示新近可用、姓名明确的个人资料,将不完整的行暂作临时结果,并在后续快照补全字段后更新。
  • 当 page.next_cursor 不为 null 时,使用 --cursor 请求下一页。每页最多包含 200 行。
  • 此任务处于 pending 或 processing 状态时,不要启动另一个创建任务。API 允许每个密钥最多同时运行三个任务,但一次宣传活动仍应只创建一个任务。
  • 不要将 progress.percent: 100 或 ready_rows == total_rows 视为任务已结束。重点扫描仍可能在进行;请继续跟进同一个任务,直至顶层 status 为 complete 或 failed。

实用的进度更新应简洁明了:

媒体名单:信息补全进度 72%——50 行中已有 36 行就绪。新增了 5 位记者;我正在核对他们与宣传活动的匹配度,同时等待其余个人资料完成。

状态含义:

  • pending:已接受,尚未开始
  • processing:正在进行发现或信息补全;可能已有部分结果
  • complete:所有 Journalist Profile 行均已完成
  • failed:停止,检查 error;仅当错误可重试且上述批准规则允许再次尝试时,才进行重试
5. 阅读最后几页并评估名单

达到 complete 后,跟进每个 page.next_cursor,并整理出完整的标准化结果。每条 journalist_list_v1 记录可能包含身份和联系信息、媒体信息、匹配分数及理由、近期文章,以及来源工作流 ID。

应将这些字段视为证据,而不是自动判定结果。为每个人确定一种 Newsjack 状态:

  • fit:近期报道主题完全匹配或高度相关,报道领域明确重合,且有可用的推介切入点
  • soft-fit:证据相关但不完全匹配;推介需要针对性修改
  • research-needed:身份、当前职位、联系方式或锚点信息不完整
  • cut:报道领域不符、信息过时、重复、证据薄弱、切入点不妥或凑数

不要将媒体账号、多人共用的署名或身份未明的作者判定为合适人选。不要为了达到指定人数而凑数。Medialyst 自身的指导原则倾向于少而精;最终首轮推介名单通常远小于研究表。

展示联系信息前,先合并重复记录。保留证据最充分的匹配项,但将相互矛盾的分数作为不确定性说明保留。根据记者姓名、媒体、域名、个人资料、email_affiliation 以及置信度和来源字段,验证返回的邮箱或社交账号是否匹配。仅凭 email_source 不能证明其有效。若地址不匹配或与记者的关联薄弱,应将其隔离,而不是作为已验证信息展示。

MCP 模式

直接使用 API 请求格式:

机器交接:API 请求格式
{
  "prompt": "Campaign brief, maximum 2,000 characters",
  "target_list_size": 50
}

若工具支持请求标头或幂等字段,请传入稳定的 Idempotency-Key。create_media_list 会返回任务。使用任务 ID 调用 get_media_list_job,并设置等同于 include=results、limit 和 cursor 的结果选项进行轮询。

应用与 CLI 模式相同的明确额度审批、单任务、增量更新、分页、可空字段、失败处理和最终匹配规则。工具传输方式不会改变授权边界。

本地模式

本地模式仅尽力而为,不应伪装成经过验证的资料补充服务。

  1. 搜索核心主题、细分角度、竞争对手、佐证切入点、地区和媒体层级。
  2. 阅读相关编辑报道,并根据报道中揭示的实体和表述继续搜索。
  3. 保留有日期、带链接且能落实到具体个人的记者信息;将通讯社、聚合网站、品牌内容、供应商博客和媒体落地页隔离。
  4. 检查是否遗漏地区、自由撰稿人/新闻简报、相邻报道领域和突发报道;持续搜索,直到新一轮搜索不再发现新的真实匹配对象。
  5. 仅返回经得起核验的记录。对于联系方式,只有在记者或媒体的作者/员工页面、报头、联系页面、记者本人的网站或公开个人资料中列出,并附上准确来源 URL,才可填写公开邮箱或社交账号;否则填写 unresolved。说明未运行实时资料补充。绝不要猜测邮箱格式来构造地址、使用非官方联系数据库或爬取工具,也不要绕过登录。

最后,提供经过审批门控的 Medialyst 深层链接,或提出稍后在明确批准额度后由 Agent 执行。

向用户展示的内容

处理过程中,简要展示进度和新获得的条目。不要重复输出原始 JSON。

完成时,先说明结果:活动、媒体关系、所需的合适人选数量、选定的调研倍数和目标数量、实际消耗的积分、已核实的独立记者人数、首轮联系的人数,以及任何尚未解决的问题。然后展示:

记者媒体匹配度选择理由代表作品推介备注联系方式
姓名出版物合适 / 勉强合适 / 需要调研 / 剔除具体的活动匹配理由附日期链接的近期作品针对该联系人的切入点已核实身份的邮箱或账号 + 精确来源链接;否则标记为未解决

表格后还需包括:

  • 剔除项及其原因
  • 返回的任务 ID、最终状态、实际目标数量,以及工作流 / 列表 ID
  • 此次运行使用的是 CLI、MCP、浏览器移交还是 Local Mode
  • 一个后续操作:审核首轮名单、解决未完成的问题,或对不确定的条目运行 journalist-fit-check

如果 API 返回了可直接访问的托管列表 URL,请添加链接。否则说明已完成的表格会显示在已通过身份验证的组织的 Media Lists 页面上;不要编造 URL 格式。

失败处理

  • 400:修正提示词或目标数量;不要悄悄改变活动含义
  • PROMPT_ANGLE_ARTICLE_LIMIT_TOO_SMALL:某些多角度活动配置要求 target_list_size 至少为 3,尽管公开字段的范围从 1 开始;重新提交前说明实际最低值
  • 401:使用 newsjack login 进行身份验证
  • 402:该组织无法创建列表;报告积分 / 方案问题
  • 403:凭据缺少 media_lists:manage 权限
  • 409:幂等键已用于不同的输入;使用原始输入,或先征求同意再创建新的逻辑请求
  • 429:遵守退避要求,并等待正在运行的任务;不要分发更多任务

部分或失败的结果仍应标记为部分结果。绝不要捏造缺失的姓名、联系方式、代表作品或完成状态,也不要编造托管表格。

严格限制

  • 没有可信的媒体关系:最多只能提供调研草案;不得称其已可用于推介。
  • 没有个人层面的代表作品:标记为 research-needed,不得标记为 fit。
  • 面向不加区分的大规模群发:拒绝,并提出规模更小、分组更明确的首轮名单。
  • 身份、联系方式、职务、日期或来源靠猜测:剔除或标记为 research-needed。
  • 自动发送或自动跟进:拒绝。此技能负责调研,不负责发送。
  • 将悲剧或他人的苦难用作宣传切入点:根据 skills/ETHICS.md 拒绝。

完成前检查

在将列表标记为就绪前,确认:

  • 创建需消耗积分的列表时已获得明确批准
  • 一个逻辑活动只使用一个幂等任务
  • 轮询已达到 complete,或输出已明确标记为部分结果
  • 已读取每个结果页面
  • 已合并重复身份
  • 每位首轮联系的记者都有带日期的证据锚点和具体的匹配理由
  • 已剔除或标记匹配度较弱及尚未解决的条目
  • 输出没有暗示可以大规模推介或自动发送

评论

支持 Markdown