mcpField
N
notion-opportunity-database

notion-opportunity-database

github.com/arthurzakirov生产力0156 次安装5 周前更新
代码仓库

关于 notion-opportunity-database

将 Notion 数据库作为机会发现、去重、评分、申请交接及后续状态记录系统的技能。它定义字段、状态流转和逐条交接规则,并提供查询能力受限时的替代方法。

主要功能

  1. 01管理机会数据库字段与视图
  2. 02搜索并去重候选记录
  3. 03按候选人背景完善和评分
  4. 04按申请阶段维护状态
  5. 05逐条交接申请任务

适用场景

  1. 01整理并评估待申请职位
  2. 02筛选待处理记录并交给申请执行技能
  3. 03记录申请结果并更新机会状态

MCP 相关

使用 Notion MCP/API 获取数据库结构、查询和去重记录、创建或更新页面及属性。若 MCP 查询工具不可用,可使用筛选视图、搜索或官方 Notion API。

安装

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

$npx skills add https://github.com/arthurzakirov/opportunityos --skill notion-opportunity-database

安装后在 Claude Code 中输入/notion-opportunity-database确认已加载。

详细介绍

Notion 机会数据库

用途

当 Notion 数据库应作为机会工作流的唯一事实来源时,使用此技能。

数据库负责发现、去重、评分、记录依据、移交申请以及跟踪操作后的状态。它应一次向执行技能(例如 job-application-operator)提供一个选定的机会。

工具边界

使用 Notion MCP/API 工具来:

  • 获取数据库架构
  • 查询候选行
  • 检查重复项
  • 创建行
  • 更新行属性
  • 更改架构和视图
  • 回写申请状态

如果有 MCP/API 访问权限,不要使用浏览器自动化来编辑 Notion。

MCP 查询限制

某些 Notion MCP 环境会提供 SQL/数据源查询工具,但该工具在运行时会报错,例如 Tool notion-query-data-sources not found。遇到这种情况时,不要因无法进行全表 SQL 扫描而停滞。

改用以下方法:

  1. 创建或使用筛选后的 Notion 视图来显示确切的审查队列,例如 Status is empty、Status is Needs enrichment 或 Status is To do。
  2. 从该可见队列中获取/搜索行,并通过 MCP update_page 更新各个页面。
  3. 如果无法按视图枚举行,则在数据源中使用宽泛的职位/公司词进行 Notion 搜索,以发现可能的行,然后逐个获取/更新页面。
  4. 对于已知数据集,将先前收集的页面 ID 用作有界回填列表。
  5. 如果需要完整可靠性且具备凭据,请通过本地脚本使用官方 Notion API 数据库查询端点,而不要使用有问题的 MCP SQL 包装器。

尽可能优先使用临时审查视图,而不是搜索,因为它有明确可见的完成条件:视图变为空。

推荐架构

最低字段要求:

  • Role 或 Name:标题
  • URL:URL
  • Company:文本
  • Status:选择
  • Priority Score:数字,0-100
  • Rationale:富文本
  • Role Family:选择
  • Location:多选
  • Salary Range:文本
  • Salary Rationale:富文本
  • Source:选择

URL 应是最靠前的可见列之一,理想情况下紧接在标题之后。

状态语义

Status 表示申请/执行状态,而非优先级或匹配度标签。

推荐值:

  • Needs enrichment:已发现或导入,但匹配度、评分、依据、薪资或来源字段尚不完整
  • Enriching:Agent 正在研究并补全该行
  • Backlog:已补全并评分,尚未选入申请工作
  • To do:从待办池中选出,纳入下一批申请工作
  • In progress:正在检查、填写或准备申请表
  • Human blocked:需要用户操作、登录、验证码、缺失信息、未知必填字段或策略决策
  • Ready to apply:申请已准备就绪,等待最终提交/审核
  • Submitted:申请已提交
  • Waiting for response:已提交,正在等待公司回复
  • Interview invite:公司邀请候选人预约面试,但尚未安排
  • Interview scheduled:面试已加入日历或已通过其他方式确认
  • Interview completed:面试已完成,候选人正在等待后续回复
  • Assessment received:公司已发送在线评估/挑战,但尚未开始
  • Assessment in progress:正在进行评估/挑战
  • Assessment submitted:评估/挑战已提交,候选人正在等待后续回复
  • Rejected:申请后被拒,或候选人自行决定不再申请
  • Closed:职位已不再开放

使用 Priority Score 进行排序,并使用 Rationale 说明匹配依据。

预期流程:

Needs enrichment -> Enriching -> Backlog -> To do -> In progress -> Ready to apply -> Submitted -> Waiting for response

Human blocked 是从 In progress 分出的分支;问题解决后,返回 In progress 或 Ready to apply。

提交后的公司回复分支:

Waiting for response -> Interview invite -> Interview scheduled -> Interview completed -> Waiting for response
Waiting for response -> Assessment received -> Assessment in progress -> Assessment submitted -> Waiting for response
Waiting for response -> Rejected

丰富信息的标准

完整丰富信息需要候选人背景。在评估匹配度或撰写针对候选人的理由之前,请先确认是否可以获取:

  • 简历或经验方面的证据
  • 目标职位偏好
  • 地点/远程办公限制
  • 薪酬期望(如相关)
  • 求职策略或不可妥协的条件

如果无法获取这些背景,请询问是否改为部分丰富信息。部分丰富信息仍可补充公司公开信息,例如 URL、公司、职位类别、地点、来源、薪资范围和薪资理由,但应将 Priority Score 和候选人匹配度 Rationale 留空,或明确标注需要候选人背景。

当一行包含以下内容时,即可认为其信息丰富程度足以进入 Backlog:

  • 有效的 URL
  • Company
  • Role Family
  • Location
  • 数值型 Priority Score
  • 汇总后的 Rationale
  • Source
  • 有可信数值时填写 Salary Range,否则留空
  • Salary Rationale,说明信息来源、可信度,或薪资未知的原因

原始导入和信息不完整的职位使用 Needs enrichment。Agent 正在积极研究某行时使用 Enriching。除非用户明确接受部分丰富信息,否则不要在缺少候选人背景、未完成完整信息丰富时,将某行移至 Backlog 以便基于匹配度筛选职位。除非用户明确选择在信息尚未完整丰富时申请,否则不要在某行进入 Backlog 之前将其移至 To do。

Rationale 字段

保留一个汇总的 Rationale 字段,不要拆分为以下多个列:

  • 匹配度理由
  • 经验信号
  • 申请角度
  • 主要风险

推荐结构:

Fit: ...
Experience signal: ...
Application angle: ...
Main risk: ...

薪资字段

将薪资数值与相关说明分开:

  • Salary Range:仅填写实际范围或数值,例如 EUR 80k-100k base;未知时留空
  • Salary Rationale:信息来源、可信度,或数值未知的原因

不要在 Salary Range 中填写诸如 not captured; verify directly 的句子。

逐个职位移交申请

调用执行技能之前:

  1. 获取数据库架构。
  2. 按状态和评分选择一行,通常选择 Status 为 To do 且 Priority Score 最高的一行。
  3. 确认该行包含有效的 URL。
  4. 将 Status 更新为 In progress。
  5. 向 job-application-operator 传递精简的移交对象。

移交对象:

source: notion
pageId:
role:
company:
applicationUrl:
priorityScore:
rationale:
salaryRange:
salaryRationale:
roleFamily:
location:
statusBefore:

申请操作员应只处理这一个职位,然后返回结构化结果。

申请后回写

执行后,更新 Notion 行:

  • Status:Ready to apply、Submitted、Human blocked、Closed 或其他申请阶段值
  • Rationale:如果申请结果实质性地影响了决策,则追加简洁的申请结果备注
  • Salary Range 和 Salary Rationale:仅在申请过程中发现可靠的薪酬信息时更新

不要用申请日志覆盖来源理由。详细字段清单和敏感申请信息应保存在私有日志中。

发现职位时的插入规则

创建行之前,按以下条件去重:

  • 完全相同的 URL
  • 规范化后的 URL 域名/路径
  • 公司 + 职位名称

如果已存在重复项,则补充缺失字段;除非职位已关闭或重新开放,否则保留申请状态。

输出

返回:

  • 使用的数据库
  • 选中的行
  • 移交对象
  • 更新前后的状态
  • 已更新的字段
  • 阻碍事项

评论

支持 Markdown