mcpField
M
mcp-lever

mcp-lever

本地服务
github.com/smeet666商业与营销01 天前更新

关于 mcp-lever

mcp-lever 将聊天客户端连接到指定公司的公开 Lever 招聘板。它可解析公司站点名、搜索和筛选职位,并读取完整职位描述,无需 API 密钥或账户。

主要功能

  1. 01解析公司招聘板名称
  2. 02搜索多家公司的职位
  3. 03按职位信息筛选招聘
  4. 04读取完整职位描述
  5. 05列出公司筛选词

适用场景

  1. 01比较多家公司的职位空缺
  2. 02按地点和团队寻找远程职位
  3. 03查看职位完整描述和薪资

MCP 相关

向 MCP 客户端提供解析 Lever 招聘板、搜索和筛选职位、读取职位详情及列出公司筛选词的工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
npmmcp-lever2.1.0
mcpbmcp-lever-2.1.0.mcpb2.1.0

工具

4

收录的工具列表 · 更新于 2 天前

参数类型必填说明
namesarray是公司名称或已知的 Lever 站点名称列表,1 至 25 个。

详细介绍

README 配图

mcp-lever

npm CI license MCP Registry Glama M8ven LobeHub Install in Cursor Install in VS Code

Lever 是一款招聘软件,数千家公司用它来管理招聘流程,每位客户都会获得一个配套的公开职位板。每个职位板都列出该公司的空缺职位,包括职位名称、地点、所属团队和部门、用工承诺、完整招聘广告,以及公司选择公开的薪资范围。Lever 为每家公司托管一个职位板,使用其全球或欧洲实例之一,并且不会对这些职位板建立统一索引。

此服务可将聊天客户端连接到这些职位板。只需指定你感兴趣的公司,它就会将每个公司名称转换为用于访问其职位板的网站名称,搜索职位空缺,并按地点、团队、工作场所类型、国家/地区、薪资或发布时间筛选;查看单个职位的完整信息;还可列出各公司用于筛选的措辞。无需 API 密钥或账户。

Version française


安装

一键安装

Install in Cursor Install in VS Code

Claude Code

claude mcp add lever -- npx -y mcp-lever

Claude Desktop、Cursor 及任何使用标准配置格式的客户端

{
  "mcpServers": {
    "lever": {
      "command": "npx",
      "args": ["-y", "mcp-lever"]
    }
  }
}

需要 Node 24 或更高版本,无需设置环境变量。

使用 Docker
{
  "mcpServers": {
    "lever": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-lever:2.0.1"]
    }
  }
}

-i 会保持标准输入打开,协议通过该输入传输;省略 -t,因为 TTY 会改写数据流。容器只需通过 HTTPS 访问 api.lever.co 和 api.eu.lever.co,无需其他任何内容:不需要卷、端口或凭据。

使用 Bundle,无需 npm

从最新版本下载 mcp-lever-2.0.1.mcpb 并打开。支持 MCP bundles 的客户端会自动安装,无需 npm,也无需编辑配置文件。Bundle 已包含其依赖项,因此安装时不会获取任何内容。

可以询问的内容

  • “Included Health、Netlify 和 Ramp 中,哪些公司正在 Lever 上招聘?”
  • “帮我查找这三家公司的远程工程岗位。”
  • “把那个职位的完整内容读给我听。”
  • “Included Health 将哪些地点列为其职位所在地?”
  • “Netlify 过去两周发布了什么职位吗?”

每个问题都从公司开始,因为 Lever 不支持跨招聘网站搜索。 search_jobs 会解析你提供的名称,因此无需提前准备:

resolve_company(["Included Health"])  ->  includedhealth, global instance, publishing
search_jobs(["Included Health"], keyword: "therapist")
get_job("includedhealth", "6f97a19f-…")

工具

工具功能
resolve_company将公司名称转换为其招聘网站的 Lever 站点名称。
search_jobs搜索你指定公司的职位。
get_job读取一个职位的完整内容,包括招聘启事。
list_filter_values列出一家公司为其职位归类时使用的用语。

Lever 站点名称区分大小写,因此 Flex 有结果,而 flex 没有。 每个名称在两个实例上都会尝试四种拼写,结果会列出实际发送的拼写,因此没有找到结果并不能证明该公司不在 Lever 上。

resolve_company

将公司名称转换为 Lever 站点名称,并报告所有有响应的实例。该工具接受一个列表。

参数类型必填功能
names1 到 25 个字符串组成的数组是公司名称,或你已知的 Lever 站点名称。

返回内容: 每个名称对应一条结果,包含 input;found,一个由 { slug, instance, publishes } 组成的列表,其中,如果某个站点存在但今天没有发布任何内容,publishes 为 false;tried,按顺序发送的拼写;以及 cached,如果本次会话已解析过该名称,则为 true。如果某个名称在两个实例上都有结果,返回内容会包含两者,且不会自动选择其中一个:请将你要使用的那个传给其他工具。

search_jobs

搜索指定公司的职位空缺。Lever 会按照其支持的原始措辞应用筛选条件,本服务则会对读取到的职位空缺应用其余筛选条件。

ArgumentTypeRequiredWhat it does
companiesarray of 1 to 25 stringsyes公司名称或 Lever 站点名称。每个名称都在此解析。
keywordstringno在职位名称和招聘信息中查找的词语。
locationarray of 1 to 20 stringsno地点,必须与 Lever 中的写法完全一致。
teamarray of 1 to 20 stringsno团队,必须与 Lever 中的写法完全一致。
departmentarray of 1 to 20 stringsno部门,必须与 Lever 中的写法完全一致。
commitmentarray of 1 to 20 stringsno用工类型,必须与 Lever 中的写法完全一致。
workplace_typearray of 1 to 4 stringsnoremote、hybrid、onsite 或 unspecified。
countryarray of 1 to 20 two-letter codesno国家/地区的 ISO 代码,例如 FR 或 US。
salary_minnumber, 0 or moreno保留职位所需的薪资范围最低上限。
salary_intervalstringnosalary_min 使用的周期,例如 per-year-salary。
currencythree-letter codenosalary_min 使用的货币,例如 EUR。
posted_within_daysinteger, 1 to 3650no职位发布的最长期限。
limitinteger, 1 to 100, default 25no每家公司读取的职位空缺数。
skipinteger, 0 to 100000, default 0no每家公司跳过的职位空缺数。

Lever 自身会应用 location、team、department 和 commitment;本服务会对读取到的职位空缺应用 keyword、workplace_type、country、salary_min、salary_interval、currency 和 posted_within_days。list_filter_values 会列出前四项可接受的措辞;如果 Lever 不认识某种措辞,就会返回空列表。

返回内容: jobs,其中每项都包含 id 和 company_slug,供 get_job 使用,还包含 title、location、all_locations、country、workplace_type、team、posted_at、url 和 apply_url。如果公司记录中没有 commitment 或 department,则不会返回这些字段。对于未公布薪资的职位,salary 为 null,这绝不等同于零;它还包含 Lever 记录的 interval,不会转换或折算成年薪。per_company 会为每家公司提供一个结果,其 status 为 read、unresolved、empty 或 failed,这四种状态含义各不相同;还会提供筛选前后的 read 和 returned 数量。total_available 始终为 null:Lever 不会公布结果总数。结果不包含招聘信息正文,因为有些公司的职位板内容可能达到数 MB。

limit 按公司分别生效;如果某公司的职位空缺达到此上限,该公司可能还有更多职位。本服务会在备注中说明是否发生这种情况,并指出在该范围内统计的数量只反映此范围。posted_within_days 会遍历每家公司最多 5 页;Lever 按职位名称分页,因此昨天发布的职位可能出现在职位板的任何位置。

get_job

完整读取一个职位:招聘广告、命名的各个部分,以及发布的薪资。

ArgumentTypeRequiredWhat it does
company_slugstringyesLever 站点名称,与 resolve_company 返回的值相同。
job_idstringyes一个职位的标识符,与搜索返回的值相同。
instanceglobal or euno该条记录来自哪个实例。默认使用 global 实例。

返回内容: job,包含搜索结果行中的字段,以及 description、格式为 { heading, items } 的 sections、记录公司在薪资范围旁所写内容的 salary_note,以及包含检索来源地址的 source。

list_filter_values

列出一家公司使用的团队、地点和雇佣类型表述。筛选前请先读取:Lever 会匹配其自身的表述,而每家公司的用词各不相同;一家写 Full-time,另一家可能写 EE Full-Time。

ArgumentTypeRequiredWhat it does
company_slugstringyesLever 站点名称,与 resolve_company 返回的值相同。
instanceglobal or euno该站点所在的实例。默认使用 global 实例。
fieldsarray of 1 to 3 of team, location, commitmentno要读取哪些词汇表。每项会消耗一次请求,默认读取全部三项。

返回内容: company_slug、instance 和 fields,其中包含所请求的每个词汇表对应的 { value, count } 列表。如果 Lever 未发布类别对应的数量,count 则为 null。

配置

无需进行任何配置。服务不会读取环境变量,上面的 mcpServers 块已完整可用。

请求间隔、超时和缓存均由客户端层设置,作为库使用部分介绍了如何传入这些设置。可以在此处延长两次请求之间的间隔,但不能缩短。

错误

每种失败都会附带六种代码之一、一条消息,以及在有帮助时附上原本可接受的值。

CodeWhat happenedWhat to do
not_foundLever 已响应,但不存在此站点或职位。使用 resolve_company 检查站点名称。
invalid_input请求发出前,参数已被拒绝。阅读消息,其中会指出参数及其接受的值。
rate_limitedLever 要求此客户端放慢请求速度。等待后使用相同的参数再次调用。该职位仍在招聘列表中。
parse_failureLever 已响应,但返回的数据格式无法由此客户端读取。在问题跟踪器中报告。
network_error请求未能完成。稍后重试。
timeout请求超过了截止时间。减少公司数量,或使用更小的 limit。

作为库

读取 Lever 的这一层单独发布,拥有自己的节流机制、缓存和错误处理,且不附带任何协议。

import { Client } from "mcp-lever/client";

const client = new Client({ minIntervalMs: 2000 });
const resolved = await client.resolveCompany("Included Health");
const jobs = await client.listPostings(resolved.found[0], { limit: 10 });
console.log(jobs.length);

ClientOptions 接受 minIntervalMs、timeoutMs、cacheTtlMs 和 fetchImpl。 低于已公布下限的间隔会被忽略,因此这里同样遵守该下限。

节流与署名

两个 API 主机都公布了 Crawl-delay: 1,因此请求会逐个发出,且两次请求之间至少间隔 1 秒;无论如何配置客户端,这一下限都始终有效。User-Agent 中包含项目名称和一个可联系到项目维护者的地址,且不会伪装成浏览器。

读取请求会发送到 api.lever.co 和 api.eu.lever.co,这是 Lever 为其职位数据指定的主机。jobs.lever.co 招聘页面不会被访问。

每个职位都会附带其 Lever 页面地址和申请 URL。展示职位时,请注明所属公司并链接到该页面。

此 MCP 服务是一个非官方项目,与 Lever 以及其读取招聘信息的公司均无关联。

隐私

此服务不会收集任何关于你的信息,也不会向作者发送任何内容。它在你的计算机上运行,只会联系 api.lever.co 和 api.eu.lever.co,并在运行期间将响应保存在内存中,不会向磁盘写入任何内容。 PRIVACY.md 说明了请求会携带哪些信息,以及哪些设置会改变这些信息。

开发

npm install
npm run build:fixtures
npm test
npm run check

测试使用生成的夹具运行,不会发出网络请求。实时测试套件 npm run test:live 会对每条路由发出一个请求,并在每晚直接针对服务运行。

贡献

错误报告、问题和想法请提交到问题跟踪器。欢迎提交拉取请求;先创建问题有助于就改动方案达成一致。请参阅 CONTRIBUTING.md。

许可证

MIT,详见 LICENSE。职位信息归发布它们的公司所有。


mcp-lever(法语版)

英文版

Lever 是一款招聘软件,数千家公司使用它开展招聘;每位客户都会获得一个公开的职位网站。每个网站列出该公司的空缺职位及其名称、地点、所属团队和部门、所需合同类型、完整招聘信息,以及公司选择公布的薪资范围。Lever 为每家公司托管一个网站,位于其全球实例或欧洲实例上,并且不发布任何跨站点索引。

此服务将对话客户端连接到这些网站。你指定感兴趣的公司,服务会将每个名称转换为用于访问其网站的标识符,在职位信息中搜索,按地点、团队、工作模式、国家/地区、薪资或发布时间筛选,读取完整职位信息,并列出每家公司对职位进行分类时使用的字段。无需 API 密钥,也无需帐户。

安装

一键安装

在 Cursor 中安装 在 VS Code 中安装

Claude Code

claude mcp add lever -- npx -y mcp-lever

Claude Desktop、Cursor 及所有采用标准配置格式的客户端

{
  "mcpServers": {
    "lever": {
      "command": "npx",
      "args": ["-y", "mcp-lever"]
    }
  }
}

需要 Node 24 或更高版本,无需设置任何环境变量。

使用 Docker
{
  "mcpServers": {
    "lever": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-lever:2.0.1"]
    }
  }
}

-i 会保持标准输入打开,这是协议的通道;省略 -t,因为 TTY 会重写数据流。容器只需能够通过 HTTPS 访问 api.lever.co 和 api.eu.lever.co,除此之外不需要任何东西:无需卷、无需端口、无需凭据。

Bundle,无需 npm

从最新发布版本 下载 mcp-lever-2.0.1.mcpb 并打开。支持 MCP bundle 的客户端会自动安装,无需 npm,也无需修改配置文件。bundle 包含其依赖项,因此安装时不会下载任何内容。

可以询问什么

  • “Included Health、Netlify 和 Ramp 中,哪些公司正在 Lever 上招聘?”
  • “帮我找找这三家公司有哪些远程工程岗位。”
  • “把这份职位完整读给我听。”
  • “Included Health 按哪些地点对职位进行分类?”
  • “Netlify 最近十五天发布了什么职位?”

每个问题都要从一家公司开始,因为 Lever 不支持跨站点搜索。search_jobs 会自行解析提供的名称,因此无需提前准备:

resolve_company(["Included Health"])  ->  includedhealth, instance mondiale, publie
search_jobs(["Included Health"], keyword: "therapist")
get_job("includedhealth", "6f97a19f-…")

工具

工具功能
resolve_company将公司名称转换为 Lever 站点标识符。
search_jobs搜索指定公司的职位。
get_job完整读取一份职位信息,包括招聘公告。
list_filter_values列出公司用于分类的选项。

Lever 站点标识符区分大小写,因此 Flex 有结果,而 flex 则没有。每个名称都会在两个实例上尝试四种拼写,响应中会列出尝试过的拼写:搜索不到结果,并不能证明某家公司不在 Lever 上。

resolve_company

将公司名称转换为 Lever 站点标识符,并标明每个有响应的实例。该工具接受一个列表。

参数类型必需功能
names1 至 25 个字符串组成的数组是公司名称或已知标识符。

返回内容: 每个名称对应一条记录,包含 input;found,一个由 { slug, instance, publishes } 组成的列表,其中对于存在但当前没有列出任何职位的站点,publishes 为 false;tried,按顺序尝试过的拼写;以及 cached,当本次会话已解析过此名称时为 true。如果一个名称在两个实例上都有结果,则会同时返回两项,不会选择其中任何一项:请将你要查询的那一项传给其他工具。

search_jobs

搜索指定公司的职位。Lever 会按其管理的精确选项应用筛选条件;此服务则会对已读取的职位应用其他筛选条件。

参数类型必填作用
companies1 到 25 个字符串的数组是公司名称或标识符。每个值都会在此解析。
keyword字符串否在职位名称和招聘信息中搜索的词语。
location1 到 20 个字符串的数组否地点,必须与 Lever 中的写法完全一致。
team1 到 20 个字符串的数组否团队,必须与 Lever 中的写法完全一致。
department1 到 20 个字符串的数组否部门,必须与 Lever 中的写法完全一致。
commitment1 到 20 个字符串的数组否合同类型,必须与 Lever 中的写法完全一致。
workplace_type1 到 4 个字符串的数组否remote、hybrid、onsite 或 unspecified。
country1 到 20 个双字母代码的数组否ISO 国家代码,例如 FR 或 US。
salary_min大于或等于 0 的数字否保留职位的最低薪资范围上限。
salary_interval字符串否salary_min 使用的薪资周期,例如 per-year-salary。
currency三字母代码否salary_min 使用的货币,例如 EUR。
posted_within_days1 到 3650 的整数否职位发布的最长期限。
limit1 到 100 的整数,默认值为 25否每家公司读取的职位数。
skip0 到 100000 的整数,默认值为 0否每家公司跳过的职位数。

Lever 会自行应用 location、team、department 和 commitment;此 服务会对读取到的职位应用 keyword、workplace_type、country、salary_min、 salary_interval、currency 和 posted_within_days。 list_filter_values 会提供前四个筛选项所采用的写法;Lever 忽略的写法会返回空列表。

返回值: jobs,其中每项都带有 id 和 company_slug,可供 get_job 使用;此外还包括 title、location、all_locations、country、workplace_type、 team、posted_at、url 和 apply_url。公司未提供时,不会包含 commitment 和 department。 对于已发布但未提供薪资范围的职位,salary 为 null,这绝不表示零;它会保留 Lever 使用的 interval,不会转换或折算为年薪。per_company 会为每家公司提供 一个结果,其 status 为 read、unresolved、empty 或 failed,这代表四种不同的情况; 并提供筛选前后的 read 和 returned 计数。total_available 始终为 null:Lever 不会公布结果总数。职位条目不包含招聘信息,因为公司网站的内容可能达到数 MB。 limit 按公司计算,如果某家公司的职位数量达到该上限,实际发布的职位可能更多:备注会说明这一点,并指出在此范围内获取的账号所测量的就是该范围。posted_within_days 会为每家公司遍历最多 5 页,而 Lever 按职位名称分页,因此昨天发布的职位可能出现在网站的任何位置。

get_job

读取完整职位信息:招聘启事、命名版块,以及发布的薪资信息。

参数类型必填说明
company_slug字符串是网站标识符,由 resolve_company 返回。
job_id字符串是职位标识符,由搜索返回。
instanceglobal 或 eu否职位所在的实例。默认为全球实例。

返回: job,包含搜索结果行的字段,以及 description、格式为 { heading, items } 的 sections、公司在薪资范围旁填写的 salary_note,以及记录职位读取来源地址的 source。

list_filter_values

列出公司使用的团队、地点和合同类型表述。 筛选前请先读取:Lever 会匹配其自身的表述,而各公司的用词各不相同;一家使用 Full-time,另一家则使用 EE Full-Time。

参数类型必填说明
company_slug字符串是网站标识符,由 resolve_company 返回。
instanceglobal 或 eu否该网站所在的实例。默认为全球实例。
fieldsteam、location、commitment 中的 1 至 3 项组成的数组否要读取的词汇。每项需一次请求;默认读取全部三项。

返回: company_slug、instance,以及 fields;其中每个请求的词汇都对应一个 { value, count } 列表。如果 Lever 未在类别旁发布数字,count 就是 null。

配置

无需进行任何配置。服务不会读取任何环境变量,上面的 mcpServers 代码块无需修改即可使用。

请求频率、延迟和缓存均由客户端层配置,作为库使用会展示如何传入这些设置。可以扩大两次请求之间的间隔,但不能缩短。

错误

每次失败都会带有六种代码之一、一条消息,以及在有帮助时说明哪些值会被接受。

代码发生了什么该怎么做
not_foundLever 已响应,但没有这个站点或职位。使用 resolve_company 检查标识符。
invalid_input请求发出前,参数就已被拒绝。阅读消息,其中会指出参数及其接受的内容。
rate_limitedLever 要求此客户端放慢速度。等待后使用相同参数重试。职位仍在线。
parse_failureLever 的响应格式无法被此客户端读取。请在问题跟踪页报告。
network_error请求未能完成。稍后重试。
timeout请求超时。减少企业数量,或使用更小的 limit。

作为库使用

读取 Lever 的部分单独发布,包含自己的节奏、缓存和错误处理,且不绑定任何协议。

import { Client } from "mcp-lever/client";

const client = new Client({ minIntervalMs: 2000 });
const resolved = await client.resolveCompany("Included Health");
const jobs = await client.listPostings(resolved.found[0], { limit: 10 });
console.log(jobs.length);

ClientOptions 接受 minIntervalMs、timeoutMs、cacheTtlMs 和 fetchImpl。 低于已公布下限的间隔会被忽略,因此此处同样会遵守该下限。

请求节奏与归属信息

两个 API 主机都发布了 Crawl-delay: 1,因此请求会逐个发出,且间隔至少为一秒;无论客户端如何配置,都会遵守此下限。User-Agent 会注明项目和可联系到相关人员的地址,不会伪装成浏览器。

读取请求会发送到 Lever 为职位数据指定的主机 api.lever.co 和 api.eu.lever.co。不会访问招聘页面 jobs.lever.co。

每个职位都带有其 Lever 页面地址和申请地址。展示职位时,请注明所属企业并链接到该页面。

此 MCP 项目为非官方项目,与 Lever 及其读取网站的企业均无关联。

隐私

此服务不会收集你的任何信息,也不会向其作者发送任何内容。它在你的计算机上运行,只连接 api.lever.co 和 api.eu.lever.co,会在运行期间将响应保留在内存中,也不会写入磁盘。PRIVACY.md 说明了请求会携带哪些信息,以及哪些设置会改变这些信息。

开发

npm install
npm run build:fixtures
npm test
npm run check

测试使用生成的 fixtures 运行,不会发出任何请求。实时测试套件 npm run test:live 会为每个路由发出一个请求,并且每晚针对服务本身运行。

贡献

问题、疑问和想法都可以提交到问题跟踪页。欢迎提出修改建议;先创建议题有助于就修改方案达成一致。请参阅 CONTRIBUTING.md。

许可证

MIT,详见 LICENSE。职位信息归发布它们的企业所有。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。