mcpField
M
mcp-ashby

mcp-ashby

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

关于 mcp-ashby

mcp-ashby 将聊天客户端连接到指定公司的公开 Ashby 招聘页面。它可解析公司对应的页面、搜索和筛选职位、读取完整招聘信息,并比较已公布的薪酬,无需 API 密钥或账户。

主要功能

  1. 01将公司名称解析为招聘页面
  2. 02搜索并筛选职位
  3. 03读取完整职位描述
  4. 04列出页面专属筛选值
  5. 05比较已公布的薪酬

适用场景

  1. 01查找指定公司的远程职位
  2. 02按地点、团队或发布时间筛选职位
  3. 03阅读完整招聘广告
  4. 04比较薪资或其他薪酬项目

MCP 相关

MCP 服务提供解析 Ashby 招聘页面、搜索职位、读取职位详情、列出页面筛选值和比较薪酬的工具。它访问公开页面,无需 API 密钥或账户。

配置

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

暂未收录安装方式

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

代码仓库
安装包
npmmcp-ashby2.1.0
mcpbmcp-ashby-2.1.0.mcpb2.1.0

工具

5

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

参数类型必填说明
namestring是公司名称,或你已知的 Ashby 看板令牌。

详细介绍

README 配图

mcp-ashby

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

Ashby 是一款招聘软件,每家使用它的公司都会获得一个配套的公开职位看板。每个看板列出该公司的开放职位,包括职位名称、部门和团队、雇佣类型、工作地点、是否远程办公、完整招聘信息,以及公司选择公开的薪酬信息:薪资范围、股权、佣金或奖金,并注明对应的周期。Ashby 为每家公司设有一个看板,但不会发布汇总所有看板的索引。

此服务可将聊天客户端连接到这些看板。你只需指定感兴趣的公司,它就会将每个公司名称转换为对应看板的标识,搜索职位信息,按部门、团队、地点、国家、雇佣类型、远程办公情况、发布时间或薪酬筛选,读取完整职位信息,列出各看板实际使用的词语,并并排比较多个职位的薪酬。无需 API 密钥或账户。

Version française


安装

一键安装

Install in Cursor Install in VS Code

Claude Code

claude mcp add ashby -- npx -y mcp-ashby

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

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

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

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

-i 会保持 stdin 打开,协议通过它传输;省略 -t,因为 TTY 会改写数据流。容器需要能够通过 HTTPS 访问 api.ashbyhq.com,除此之外无需其他配置:不需要卷、端口或凭据。

打包版本,无需 npm

从最新版本下载 mcp-ashby-2.0.1.mcpb 并打开。支持 MCP 捆绑包的客户端会自行安装,无需 npm,也无需编辑配置文件。捆绑包包含所有依赖,因此安装时不会下载任何内容。

可以询问的内容

  • “Ramp 在 Ashby 上招聘吗?”
  • “帮我找找 Ramp 和 Linear 的远程设计职位。”
  • “把那则招聘信息从头到尾读给我听。”
  • “那个招聘板按哪些部门归类职位?”
  • “把那些工程职位的薪资并排列出来。”

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

resolve_board(["Ramp"])          ->  ramp, publishing
search_jobs(["Ramp"], query: "designer", is_remote: true)
get_job("ramp", "b0c8…")

工具

工具功能
resolve_board将公司名称转换为 Ashby 招聘板令牌。
search_jobs搜索你指定公司的招聘信息。
get_job阅读一则完整的招聘信息,包括广告内容。
list_filter_values列出一个招聘板使用的词语,以及每个词对应的招聘信息数量。
compare_compensation并排列出多则招聘信息中的某个薪酬组成部分。

每个招聘板都有自己的部门和团队,因此使用另一个招聘板的词汇编写筛选条件会导致筛选结果为空。list_filter_values 会公布招聘板实际使用的词语。

resolve_board

将公司名称转换为用于访问其 Ashby 招聘板的令牌。

参数类型必填功能
namestring是公司名称,或你已知的 Ashby 招聘板令牌。

返回内容:found、作出响应的招聘板,以及按顺序实际尝试过的形式 tried。每个名称会尝试 4 种形式,因此未找到结果并不能证明该公司不在 Ashby 上。

search_jobs

搜索指定公司的招聘信息。Ashby 一次提供整个招聘板,以下所有限制条件都会应用于已读取的内容。

参数类型必填说明
companies由 1 到 10 个字符串组成的数组是公司名称或职位板标记。
query字符串否要查找的词语。
search_intitle 或 title_and_description,默认值为 title否在何处查找 query。
department一个字符串或最多包含 10 个字符串的列表否职位板上使用的部门名称。
team一个字符串或最多包含 10 个字符串的列表否职位板上使用的团队名称。
employment_type一个字符串或最多包含 6 个字符串的列表否雇佣类型。
workplace_type一个字符串或最多包含 4 个字符串的列表否工作场所类型。
is_remote布尔值否仅保留标记为远程的职位。
country一个国家/地区或最多包含 10 个国家/地区的列表否职位板上使用的国家/地区名称。
location_contains字符串否地点文本行中的部分内容。
published_afterISO 8601 日期否职位发布的时间下限。
has_compensation布尔值否仅保留公司公布了薪酬范围的职位。
salary_min大于或等于 0 的数字否薪资部分的下限。
currency三字母代码否薪资下限所用的货币。
salary_interval字符串,默认值为 1 YEAR否薪资下限对应的周期。
sortpublished_desc、published_asc 或 title,默认值为 published_desc否行的排序方式。
limit1 到 100 之间的整数,默认值为 20否返回的职位数量。
offset0 到 10000 之间的整数,默认值为 0否跳过的职位数量。
返回内容: jobs,每项包含 board 和 id,可将二者一起传给 get_job,还包含 title、department、team、employment_type、location、country、secondary_location_count、workplace_type、is_remote、带有 Ashby 发布时偏移量的 published_at、compensation_summary、job_url 和 apply_url。无论限制条件如何设置,结果行都不包含招聘广告正文。
total_on_board 统计所读取的招聘板上的职位数,total_matched 统计符合条件的职位数,returned 统计本次答复中的职位数:这是三个不同的数字。
per_company 为每家公司提供一项结果及其 status;filters_applied 会回显已应用的筛选条件;undeclared 统计在被筛选字段上未声明任何信息的职位,因此限制条件不会悄然将其排除。
get_job

读取一条职位信息的完整内容。

参数类型必填作用
boardstring是公司名称或 Ashby 招聘板标记。
job_idstring是搜索结果行中的职位标识符。
descriptionplain、html 或 none,默认值为 plain否招聘广告的呈现方式。
include_compensationboolean,默认值为 true否包含公司发布的薪酬信息。

招聘广告可能长达数千个字符;html 是公司原始标记,不会经过改写。

返回内容: 搜索结果行中的职位信息,包括其描述、地点以及公司发布的薪酬组成部分。

list_filter_values

列出某个招聘板实际使用的词项及各自对应的职位数量。

参数类型必填作用
boardstring是公司名称或招聘板标记。
facetdepartments、teams、locations、countries、employment_types、workplace_types 或 all,默认值为 all否要读取的词项类别。

返回内容: facets,其中列出各个词项及包含该词项的职位数量;以及 undeclared,即在该类别上未声明任何信息的职位。sibling_spellings 列出仅大小写或空格不同的写法,否则筛选时会将它们视为不同内容。

compare_compensation

并排比较多个职位中的一项薪酬组成部分。

参数类型必填说明
boardstring是公司名称或招聘板块标识。
job_ids最多包含 50 个字符串的数组否要比较的职位。
department一个字符串或最多包含 10 个字符串的列表否改为比较某个部门。
team一个字符串或最多包含 10 个字符串的列表否改为比较某个团队。
querystring否在职位名称中查找的词语。
componentSalary、EquityCashValue、EquityPercentage、Commission 或 Bonus,默认为 Salary否要比较的组成部分。
intervalstring,默认为 1 YEAR否比较的周期。
limit整数,范围为 1 到 100,默认为 25否要比较的职位数量。

一次比较一项组成部分: 股权和薪资不能相加。 按其他周期标注的职位会单独列出,不进行换算。

返回内容: rows,每个职位对应一行,其中包含用于比较的 component 和 interval、列出答案中所有货币的 currencies_present,以及列出公司未发布任何薪酬信息的职位的 not_published;未发布绝不等于零。

薪酬数字的含义

公司自行决定发布哪些信息。未提供薪酬范围的职位会返回空值,绝不会返回零。薪酬范围以 Ashby 记录的货币和周期返回,绝不换算或折算成年薪:对于按不同周期标注的两个职位,如何比较取决于了解比较目的的人。

配置

无需进行任何配置。服务不会读取环境变量,上方的 mcpServers 配置块按当前内容即可完整使用。

请求间隔、超时时间和缓存均为客户端层设置,作为库使用一节展示了如何传入这些设置。可以在那里延长两次请求之间的间隔,但不能缩短。

错误

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

代码发生了什么应对方法
not_foundAshby 已响应,但没有此类职位板或职位。使用 resolve_board 检查令牌。
invalid_input请求发出前,参数已被拒绝。阅读消息,其中会指出相关参数及其可接受的内容。
rate_limitedAshby 要求此客户端降低请求频率。等待后使用相同参数再次调用。该职位仍在职位板上。
parse_failureAshby 的响应格式不受此客户端支持。在问题跟踪页报告此问题。
network_error请求未能完成。稍后重试。
timeout请求超出截止时间。减少公司数量,或调小 limit。

作为库使用

读取 Ashby 的这一层会单独发布,包含自身的请求间隔、缓存和错误处理,不附带任何协议。

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

const client = new Client({ minIntervalMs: 2000 });
const resolved = await client.resolveBoard("Ramp");
console.log(resolved.found);

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

请求间隔与署名

请求会逐个发出,间隔至少为一秒,无论如何配置客户端,此下限始终有效。Ashby 会在一个响应中提供整个职位板,数据量可能达到数 MB,因此,查询一家公司的信息只需一个请求;此服务会短暂保留响应,而不会再次请求。 User-Agent 中包含项目名称和联系地址,且不会伪装成浏览器。

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

此 MCP 服务是一个非官方项目,与 Ashby 以及使用其职位板的公司均无关联。

隐私

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

开发

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

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

贡献

Bug、问题和想法请提交到问题跟踪页。欢迎提交 Pull Request;先创建问题有助于商定更改方案。请参阅 CONTRIBUTING.md。

许可证

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


mcp-ashby(法语)

英文版

Ashby 是一款招聘软件,每家使用它的公司都会获得一个公开的职位网站。每个网站都列出该公司的开放职位,包括职位名称、部门和团队、合同类型、工作地点和远程办公情况、完整职位描述,以及公司选择公开时提供的薪酬信息:薪资范围、股权、佣金或奖金,并注明各项薪酬对应的周期。Ashby 为每家公司托管一个网站,且不发布跨网站的索引。

此服务将对话客户端连接到这些网站。您只需指定感兴趣的公司,它就会将每个名称转换为对应网站的标识符,在其职位中搜索,按部门、团队、地点、国家、合同类型、远程办公情况、发布时间或薪酬进行筛选,阅读全文,列出各网站实际使用的词语,并并排比较多个职位的薪酬。无需 API 密钥,也无需账户。

安装

一键安装

在 Cursor 中安装 在 VS Code 中安装

Claude Code

claude mcp add ashby -- npx -y mcp-ashby

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

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

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

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

-i 会保持标准输入处于打开状态,它是协议通道;省略 -t 是因为 TTY 会改写数据流。容器需要能够通过 HTTPS 访问 api.ashbyhq.com,除此之外不需要任何内容:无需卷、端口或凭据。

Bundle,无需 npm

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

可以询问什么

  • “Ramp 在 Ashby 上有招聘职位吗?”
  • “帮我找 Ramp 和 Linear 的远程设计职位。”
  • “把这个职位的完整内容读给我。”
  • “这个网站按哪些部门对职位进行分类?”
  • “并排比较这些工程职位的薪资。”

每个问题都从一家公司开始,因为 Ashby 不提供跨网站搜索。search_jobs 会自行解析提供的名称,因此无需预先准备:

resolve_board(["Ramp"])          ->  ramp, publie
search_jobs(["Ramp"], query: "designer", is_remote: true)
get_job("ramp", "b0c8…")

工具

工具功能
resolve_board将公司名称转换为 Ashby 网站标识符。
search_jobs搜索指定公司的职位。
get_job阅读职位的完整内容,包括职位描述。
list_filter_values列出网站实际使用的词语,以及包含这些词语的职位数量。
compare_compensation并排比较多个职位中的某一项薪酬。

每个网站都有自己的部门和团队,因此使用其他网站的词汇编写筛选条件不会匹配到任何结果。list_filter_values 会列出网站实际使用的词语。

resolve_board

将公司名称转换为用于访问其 Ashby 网站的令牌。

参数类型必填作用
name字符串是公司名称,或已知的 Ashby 令牌。

返回: found、有响应的网站,以及按顺序实际发送的 tried 形式。每个名称会尝试四种形式,因此未找到结果并不能证明某家公司不在 Ashby 上。

search_jobs

搜索指定公司的职位。Ashby 会一次性提供整个网站,以下每项限制均适用于已读取的内容。

参数类型必填说明
companies1 到 10 个字符串组成的数组是公司名称或令牌。
query字符串否要搜索的词语。
search_intitle 或 title_and_description,默认值为 title否query 的搜索范围。
department一个字符串或最多包含 10 个字符串的列表否网站上使用的部门名称。
team一个字符串或最多包含 10 个字符串的列表否网站上使用的团队名称。
employment_type一个字符串或最多包含 6 个字符串的列表否雇佣类型。
workplace_type一个字符串或最多包含 4 个字符串的列表否工作方式。
is_remote布尔值否仅保留远程办公的职位。
country一个国家或最多包含 10 个国家的列表否网站上使用的国家名称。
location_contains字符串否地点行中的一部分内容。
published_afterISO 8601 日期否职位的最长期限。
has_compensation布尔值否仅保留公司公布了薪酬范围的职位。
salary_min数字,必须大于或等于 0否薪资部分的下限。
currency三字母代码否薪资下限所用的货币。
salary_interval字符串,默认值为 1 YEAR否薪资下限对应的周期。
sortpublished_desc、published_asc 或 title,默认值为 published_desc否行的排序方式。
limit整数,范围为 1 到 100,默认值为 20否返回的职位数量。
offset整数,范围为 0 到 10000,默认值为 0否跳过的职位数量。
返回: jobs,每项包含 board 和 id,可一起传给 get_job,以及 title、department、team、employment_type、location、country、secondary_location_count、workplace_type、is_remote、带有 Ashby 发布时所用时区偏移量的 published_at、compensation_summary、job_url 和 apply_url。无论设置什么上限,列表都不包含职位描述。 total_on_board 统计所读取招聘网站上的职位数,total_matched 统计符合条件的职位数,returned 统计此响应中返回的职位数:这是三个不同的数字。per_company 为每家公司提供一个结果及其 status,filters_applied 列出实际应用的筛选条件,undeclared 统计未声明任何筛选字段信息的职位,确保筛选条件不会悄无声息地将它们排除。
get_job

读取完整职位信息。

参数类型必填说明
board字符串是公司名称或 Ashby 令牌。
job_id字符串是列表项中的标识符。
descriptionplain、html 或 none,默认值为 plain否职位描述的返回方式。
include_compensation布尔值,默认值为 true否是否包含已发布的薪酬信息。

职位描述可能有数千个字符;html 是公司的原始标记,不会经过改写。

返回: 搜索结果列表中的职位信息,包含描述、地点,以及公司发布的薪酬组成部分。

list_filter_values

列出招聘网站实际使用的词语,以及每个词语对应的职位数量。

参数类型必填说明
board字符串是公司名称或令牌。
facetdepartments、teams、locations、countries、employment_types、workplace_types 或 all,默认值为 all否要读取的词汇类别。

返回: facets,其中每个值都附有对应的职位数量;以及 undeclared,即未声明此类别任何信息的职位。sibling_spellings 列出仅大小写或空格不同的写法,否则筛选器会将它们视为不同的值。

compare_compensation

并排比较多个职位的一项薪酬组成部分。

参数类型必填作用
board字符串是公司名称或令牌。
job_ids最多包含 50 个字符串的数组否要比较的职位。
department一个字符串或最多包含 10 个字符串的列表否比较某个部门。
team一个字符串或最多包含 10 个字符串的列表否比较某个团队。
query字符串否要在职位名称中搜索的词语。
componentSalary、EquityCashValue、EquityPercentage、Commission 或 Bonus,默认值为 Salary否要比较的组成部分。
interval字符串,默认值为 1 YEAR否要比较的时间段。
limit整数,范围为 1 至 100,默认值为 25否要比较的职位数量。

**一次比较一个组成部分:**股权和工资不能相加。以其他时间段表示的职位会单独列出,不做换算。

返回内容:rows,每个职位一行,包含用于比较的 component 和 interval、列出响应中所有币种的 currencies_present,以及列出公司未发布任何信息的职位的 not_published;未发布的信息绝不表示为零。

薪酬数字的含义

公司可以自行决定发布哪些信息。没有薪酬范围的职位不会返回任何内容,绝不会返回零。薪酬范围会以 Ashby 记录的币种和时间段返回,绝不会换算或折算成年薪:如何比较以不同时间段表示的两个职位,由了解比较目的的人自行决定。

配置

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

请求频率、超时和缓存是客户端层的设置,作为库使用一节展示了如何传递这些设置。可以在此处延长两次请求之间的间隔,但不能缩短。

错误

每个失败都带有六种代码之一、一条消息,以及在有帮助时提供的可接受值。

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

作为库使用

读取 Ashby 的这一层单独发布,有自己的节奏、缓存和错误处理,不附带任何协议。

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

const client = new Client({ minIntervalMs: 2000 });
const resolved = await client.resolveBoard("Ramp");
console.log(resolved.found);

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

请求频率与署名

请求会逐个发出,且至少间隔一秒,无论客户端如何配置,都遵守此下限。Ashby 会在一次响应中提供整个站点的数据,响应可能有数 MB,因此查询一家企业只需一次请求,此服务会短暂保留响应,而不是再次请求。User-Agent 中包含项目名称和可联系到负责人的地址,不会伪装成任何浏览器。

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

此 MCP 是一个非官方项目,与 Ashby 及其读取招聘网站的企业均无关联。

隐私

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

开发

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

测试使用生成的测试样例运行,不会发出任何请求。实时测试套件 npm run test:live 会对每条路由发出一次请求,并且每晚直接对该服务运行。

贡献

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

许可证

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

评论

支持 Markdown

第一次接触 MCP?

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

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