Skip to main content
Glama
jnot807

recruitee-mcp

by jnot807

Recruitee MCP

在 Claude 中操作你的 Recruitee / Tellent 招聘管道。查找职位、查看候选人及其所有已记录信息、添加你寻源到的人,并写下你的面试评估——全程无需离开对话。

它在你自己的机器上、以自己的 Recruitee API 令牌运行,因此它写入的所有内容都会以你的名义归档,就像你自己点击过一样。


它能做什么

十四个工具。九个读取,五个写入,而且每次写入都会在操作前准确显示它将做什么。

读取

工具

你会得到什么

rt_list_offers

你的职位及其 ID、状态和候选人数量。可按标题筛选。

rt_get_stages

某个职位的管道阶段,以及每个阶段的实时数量。

rt_offer_candidates

某个职位上的所有人——他们所处的阶段、是否被淘汰,以及任何评分。真正限定在该职位范围内,而非整个公司。

rt_get_candidate

完整记录:联系方式、标签、他们所在的每个职位,以及他们的申请回答。

rt_search_candidates

按姓名查找一个人。

rt_source_candidates

搜索你的整个数据库,包括简历文本——见下文。

rt_get_rating_scale

你的账户所配置的评分量表,因此评价结果绝不会靠猜测。

rt_get_evaluations

候选人上的所有评估——评分、备注、阶段、评估人和日期——扁平化为一个列表。

rt_get_notes

候选人上已有的备注,最新的在前。

申请中的回答值得一提:薪资期望等信息会按职位返回,因为申请过三个职位的人会回答该问题三次,而扁平列表无法区分这些回答。

写入

工具

它的作用

rt_create_candidate

创建一个人并将其放到某个职位上,一步完成。接受邮箱、电话、链接、标签、求职信块、来源渠道以及要附加的文件。默认将其放入 Sourced(已寻源)。

rt_submit_evaluation

将拇指评分和你的理由写入候选人在某一职位上的记录——即其个人资料的 Evaluation(评估)标签页。

rt_set_stage

将候选人移动到其某个职位的另一阶段。拒绝已淘汰的安置,因此无法让任何人重新获得资格。

rt_attach_file

将本地文件附加到现有候选人,可选地将其设为该候选人的简历。

rt_add_note

添加一条备注,公开或私有。用于不属于评价的背景信息——通话纪要、寻源理由、总结。

写入操作的行为

它们接受名称,而不是 ID。 "Dana Whitfield"、"Regional Sales Manager"。如果一个名称匹配到两个人,它会停下来列出这些人,而不是挑选一个——把评价归档到错误的人头上,才是这里真正要紧的失败。

每次写入都会先预览。 第一次调用会准确返回将要写入的内容,并且不写入任何内容。只有在你批准之后,才会有内容真正写入。对于新候选人,预览还会进行重复检查,并告诉你缺少哪些详细信息,以便你在记录存在之前就发现,而不是之后。

评估归档到候选人真实的当前阶段,这正是评估的意义。你可以有意覆盖它,但永远不必自己推算。

你的段落会保留。 Recruitee 的备注字段接受纯文本,但其界面会将该文本渲染为 HTML,所以用段落写成的备注否则会以一大段连写文本的形式出现。换行会在传输过程中转换,而且文本会先被转义,因此你写作中一个多余的 < 不会被吞掉或被渲染。

评分会被检查,而不是四舍五入。 有效值取决于你配置的量表——4 点拇指量表没有“neutral(中性)”,5 点量表有。量表不包含的值会被拒绝,而不是悄悄变成邻近的值。


Related MCP server: Recruitee MCP Server

从你自己的数据库寻源

rt_source_candidates 运行的是 Candidates(候选人)界面所运行的同一搜索,而它和 rt_search_candidates 是两回事:后者匹配姓名,前者匹配所有内容,包括简历文本,并支持布尔运算符。

query: "renewals AND churn"
query: "(SaaS OR B2B) AND \"net revenue retention\" NOT \"vice president\""

这很重要,因为职位名称在不同公司之间并不一致,而一个人实际做过什么写在他们的简历里。搜索证据胜过搜索职位名称。

筛选条件可以组合:offerexcludeOfferjobStatusstagestatustagssourcesexcludeOffer 是让它成为寻源工具而非搜索框的关键——当你在为一个职位补充人选时,它会把已经在该职位上的人排除在结果之外。

每个结果都带有匹配原因——去掉 HTML 后的实际句子——以及这个人已经所在的每个职位,包括阶段;如果他们被拒绝过,还会给出原因。最后这一点不是装饰:一个成熟的 ATS 中,大多数人曾被拒绝过。两年前的“地点不符”今天可能不再适用;“评估未通过”则仍然适用。任何人都不应该在缺少这一信息的情况下被当作全新发现来呈现。

为什么筛选条件的构建看起来如此多虑

/search/new/candidates 会静默忽略它无法识别的任何内容,并返回未过滤的结果,而不是报错。有四种方式会得到看似合理却大错特错的答案,这些都已在真实账户上得到确认:

错误类型

API 的行为

未知的实体名称

返回整个数据库

nin 而不是 not_in

返回整个数据库

未知的排序方式

静默回退到相关度

同一实体的两个筛选对象

第二个会替换第一个

最后一种最阴险:将一个职位和一个职位状态作为两个对象发送,会返回所有具有该职位状态的人,而且没有任何地方说明职位筛选被丢弃了。因此,同一实体上的每个约束都会被合并到单个对象中,且调用方提供的任何键都不会到达 API——名称会被映射到一套已对照真实 API 验证过的词汇表,词汇表之外的任何内容都会抛出异常。

相比之下,错误的是安全的:它会返回零,这对任何读到的人来说都明显是错误的。零结果还会附带你真实的阶段名称返回,因此输错阶段与空阶段是可以区分的。

node sourcing-test.js 会检查所有这些,包括客户端会拒绝上述四种错误中的每一种。

设置

只需一次,五分钟。你需要 Node 18 或更高版本(用 node -v 检查)以及 Claude CodeClaude 桌面应用

1. 安装

npm install

2. 创建你自己的 API 令牌

在 Recruitee 中:Settings → Apps and plugins → API tokens,停留在 Personal API tokens 标签页,然后点击 + Add token。它会要求你输入密码,然后一次性显示该值。

在该页面时,从顶部的 Current company details 面板记下你的公司。数字形式的 IDsubdomain 都可以。

这必须是你的令牌,而不是共享的。Recruitee 令牌会以创建它的用户的身份运作,因此用你的令牌写入的评估会显示为你的——这正是关键所在。切勿将其粘贴到聊天、电子邮件或工单中。

3. 保存它

npm run set-token -- <paste-your-token-here> <your-company>

之后更换令牌只需运行 npm run set-token -- <new-token>——公司信息会被记住。

它会被写入 session/token.json,只有你可以读取,并且已被 gitignore。RECRUITEE_API_TOKEN 环境变量会覆盖该文件,如果你更希望把它保存在密码管理器中的话。

4. 验证它能用

npm run check

你会看到 authenticated: true 以及你的几个职位。

5. 连接 Claude

在这个文件夹内运行以下命令,然后重启 Claude:

claude mcp add recruitee -- node "$PWD/server.js"

改用 Claude 桌面应用?打开 Settings → Developer → Edit Config,并添加以下内容,使用你的真实绝对路径(pwd 会打印它):

{
  "mcpServers": {
    "recruitee": {
      "command": "node",
      "args": ["/absolute/path/to/recruitee-mcp/server.js"]
    }
  }
}

然后问 Claude:“列出 Recruitee 中的空缺职位”


实际使用时的样子

你: 谁在 Regional Sales Manager 的候选人管道里?

你: 调出 Dana Whitfield——她的薪资期望填了什么,已经有哪些评估?

你: 为她在该职位上写一份评估。给出肯定意见:续约和扩展方面很强,带过九人团队,没有 PLG 经验。

Claude 会显示评分、备注、职位和阶段,并且不写入任何内容。

你: 好的,发送吧。


它刻意不能做什么

Recruitee API 令牌带有生成它的用户的完全权限——文档明确指出,它可以“以该用户的名义执行 Web 或移动应用程序中的相同操作”。不存在可签发的只读令牌。

因此,克制体现在这段代码中。淘汰、恢复资格、删除、隐藏和匿名化都是真实存在且有文档记录的端点,但此服务器并未实现它们。不是藏在标志后面,也不是注释掉——而是不存在,所以任何指令、提示或 bug 都无法触达它们。拒绝候选人仍然是由你在 UI 中做出的决定。

阶段移动是唯一被允许的操作。 rt_set_stage 会沿某个职位的管道推进候选人,因为这是簿记而非判断;如果你无法从这里推进管道,它就会与你其他任何跟踪管道的地方脱节。界限划在淘汰处,并且是强制执行的,而不只是在文档里写明:该移动拒绝一个已被淘汰的安置,因为改变它的阶段会让人重新获得资格——作为簿记调用的副作用来撤销某人的拒绝。

npm run smoke 在每次运行时都会断言这些属性:没有暴露破坏性工具;阶段移动器拒绝已淘汰的安置并且限定在单个职位内;每次写入都会声明其确认门槛。最后一项检查是从工具模式中推导出写入操作,而不是从名称模式列表中推导——早期版本会静默地停止覆盖新工具,并让 rt_set_stage 在完全没有测试的情况下通过。

值得了解的事情

新候选人会进入"Sourced"(已搜寻)状态。 Recruitee 的创建端点总是把候选人放入"Applied"(已申请),这会把所有你搜寻到的人和真正的申请者混在一起,因此系统会在创建后立即移动他们,如果移动未生效会告知你。传入 stage 可覆盖此行为——对于真正申请的人传 "Applied",对于已在流程中的人传任意后续阶段。之后要移动他们,使用 rt_set_stage

设置 CV 会替换已有文件。 Recruitee 的 set_as_cv 不会添加 CV,而是交换槽位,将之前的文件降级为普通附件。因此,rt_attach_file 会拒绝为已有 CV 的候选人设置 CV,除非你传入 replaceCv——文件中的 CV 是某人的决定,覆盖它的唯一痕迹是附件列表中的额外一行。

评估记在你的名下。 它们显示为"你已评估",与手动点击的无法区分。绝不要为你没有进行过或没有读过的对话编写评估,如果判断来自同事,请在备注中说明。

返回的归因信息不可靠。 通过任何 API 令牌写入的内容都归属于该令牌的所有者,因此某人同步的评估上的审核人可能是同步它的人,而不是进行面试的人。备注通常会标明真正的人。

不支持问卷评分卡。 仅支持普通评分卡。API 在每个响应中都记录了逐题答案,但从未在请求体中包含,因此写入格式必须先从真实提交中观察。对于你的账户来说可能也无所谓:如果 /results/scorecards 对经历过面试阶段的人返回空,那么使用的就是普通评分卡,没有遗漏任何内容。在任何人投入问卷路径之前,值得检查一下。


适用环境

这是一个本地 stdio MCP 服务器——Claude 将其作为你机器上的进程启动,你的令牌永远不会离开它。

  • Claude Code(终端、桌面应用、IDE 扩展)✅

  • Claude 桌面应用 ✅

  • 浏览器中的 claude.ai ❌——它只连接可通过 HTTPS 访问的远程 MCP 服务器,这意味着需要托管它并将所有人的 Recruitee 令牌存储在该主机上。


配置

变量

用途

RECRUITEE_API_TOKEN

使用环境中的令牌而不是存储的令牌

RECRUITEE_COMPANY_ID

使用环境中的公司而不是存储的公司

故障排除

你看到的内容

该怎么做

"No Recruitee API token"

第 3 步未运行,或在不同的文件夹中运行。cd 回此处并尝试 npm run check

"authenticated": false

令牌输入错误或已被吊销。生成新令牌并重做第 3 步。

Claude 看不到工具

正确重启 Claude——退出,而不仅仅是关闭窗口。检查第 5 步是否在此文件夹内运行。

"That name matches two candidates"

符合预期。在 Recruitee 中打开该人员,并将 URL 末尾的数字给 Claude。

其他任何问题

npm run smoke,然后发送它打印的任何内容。

开发

npm run smoke     # self-check: tool list, no destructive tools, confirm gates, one live read
npm run sourcing  # 20 checks on the search filters, including the four silent-failure modes
npm run check     # prove the token
npm start         # run the server directly (it speaks JSON-RPC on stdin/stdout)

两条实现说明,都是通过探测而非文档发现的:

  • 文件上传没有文档说明。 参考文档描述了一个携带服务器端 path 的 JSON 请求体,但从未解释如何获取该路径。普通的 multipart POST 即可工作,文件部分命名为 attachment[file]——裸的 file 会返回 500,而将候选人 id 作为查询参数传递会创建一个不关联任何人的附件。将文件提升到 CV 槽位会用新的 id 和生成的文件名替换它,因此上传会根据候选人的 CV URL 进行验证,而不是刚刚上传的 id。

  • /search/new/candidates 忽略了自己的查询参数,返回公司中的每条记录,因此名称搜索改为通过 /candidates?query= 进行。管道阶段来自 /offers/{id}/placements,按阶段分组,而不是来自 /offers/{id}/pipeline_templates,后者列出的是角色可用的模板,不包含其阶段。

Install Server
F
license - not found
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables extraction and analysis of candidate profiles from Recruitee recruitment pipelines, optimized for LLM evaluation with clean, bias-free data.
    3
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Connects your Ashby recruiting data to Claude, enabling natural language queries and management of candidates, applications, jobs, interviews, offers, and team information.
    36
    MIT
  • F
    license
    B
    quality
    C
    maintenance
    Enables Claude to manage Zoho Recruit ATS operations including candidates, jobs, interviews, analytics, email, and AI-assist through natural language.
    20

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jnot807/recruitee-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server