关于 mcp-ashby
mcp-ashby 将聊天客户端连接到指定公司的公开 Ashby 招聘页面。它可解析公司对应的页面、搜索和筛选职位、读取完整招聘信息,并比较已公布的薪酬,无需 API 密钥或账户。
主要功能
- 01将公司名称解析为招聘页面
- 02搜索并筛选职位
- 03读取完整职位描述
- 04列出页面专属筛选值
- 05比较已公布的薪酬
适用场景
- 01查找指定公司的远程职位
- 02按地点、团队或发布时间筛选职位
- 03阅读完整招聘广告
- 04比较薪资或其他薪酬项目
MCP 相关
MCP 服务提供解析 Ashby 招聘页面、搜索职位、读取职位详情、列出页面筛选值和比较薪酬的工具。它访问公开页面,无需 API 密钥或账户。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
5收录的工具列表 · 更新于 2 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 公司名称,或你已知的 Ashby 看板令牌。 |
详细介绍
mcp-ashby
Ashby 是一款招聘软件,每家使用它的公司都会获得一个配套的公开职位看板。每个看板列出该公司的开放职位,包括职位名称、部门和团队、雇佣类型、工作地点、是否远程办公、完整招聘信息,以及公司选择公开的薪酬信息:薪资范围、股权、佣金或奖金,并注明对应的周期。Ashby 为每家公司设有一个看板,但不会发布汇总所有看板的索引。
此服务可将聊天客户端连接到这些看板。你只需指定感兴趣的公司,它就会将每个公司名称转换为对应看板的标识,搜索职位信息,按部门、团队、地点、国家、雇佣类型、远程办公情况、发布时间或薪酬筛选,读取完整职位信息,列出各看板实际使用的词语,并并排比较多个职位的薪酬。无需 API 密钥或账户。
安装
一键安装
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 招聘板的令牌。
| 参数 | 类型 | 必填 | 功能 |
|---|---|---|---|
name | string | 是 | 公司名称,或你已知的 Ashby 招聘板令牌。 |
返回内容:found、作出响应的招聘板,以及按顺序实际尝试过的形式 tried。每个名称会尝试 4 种形式,因此未找到结果并不能证明该公司不在 Ashby 上。
search_jobs
搜索指定公司的招聘信息。Ashby 一次提供整个招聘板,以下所有限制条件都会应用于已读取的内容。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
companies | 由 1 到 10 个字符串组成的数组 | 是 | 公司名称或职位板标记。 |
query | 字符串 | 否 | 要查找的词语。 |
search_in | title 或 title_and_description,默认值为 title | 否 | 在何处查找 query。 |
department | 一个字符串或最多包含 10 个字符串的列表 | 否 | 职位板上使用的部门名称。 |
team | 一个字符串或最多包含 10 个字符串的列表 | 否 | 职位板上使用的团队名称。 |
employment_type | 一个字符串或最多包含 6 个字符串的列表 | 否 | 雇佣类型。 |
workplace_type | 一个字符串或最多包含 4 个字符串的列表 | 否 | 工作场所类型。 |
is_remote | 布尔值 | 否 | 仅保留标记为远程的职位。 |
country | 一个国家/地区或最多包含 10 个国家/地区的列表 | 否 | 职位板上使用的国家/地区名称。 |
location_contains | 字符串 | 否 | 地点文本行中的部分内容。 |
published_after | ISO 8601 日期 | 否 | 职位发布的时间下限。 |
has_compensation | 布尔值 | 否 | 仅保留公司公布了薪酬范围的职位。 |
salary_min | 大于或等于 0 的数字 | 否 | 薪资部分的下限。 |
currency | 三字母代码 | 否 | 薪资下限所用的货币。 |
salary_interval | 字符串,默认值为 1 YEAR | 否 | 薪资下限对应的周期。 |
sort | published_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 | string | 是 | 公司名称或 Ashby 招聘板标记。 |
job_id | string | 是 | 搜索结果行中的职位标识符。 |
description | plain、html 或 none,默认值为 plain | 否 | 招聘广告的呈现方式。 |
include_compensation | boolean,默认值为 true | 否 | 包含公司发布的薪酬信息。 |
招聘广告可能长达数千个字符;html 是公司原始标记,不会经过改写。
返回内容: 搜索结果行中的职位信息,包括其描述、地点以及公司发布的薪酬组成部分。
list_filter_values
列出某个招聘板实际使用的词项及各自对应的职位数量。
| 参数 | 类型 | 必填 | 作用 |
|---|---|---|---|
board | string | 是 | 公司名称或招聘板标记。 |
facet | departments、teams、locations、countries、employment_types、workplace_types 或 all,默认值为 all | 否 | 要读取的词项类别。 |
返回内容: facets,其中列出各个词项及包含该词项的职位数量;以及 undeclared,即在该类别上未声明任何信息的职位。sibling_spellings 列出仅大小写或空格不同的写法,否则筛选时会将它们视为不同内容。
compare_compensation
并排比较多个职位中的一项薪酬组成部分。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
board | string | 是 | 公司名称或招聘板块标识。 |
job_ids | 最多包含 50 个字符串的数组 | 否 | 要比较的职位。 |
department | 一个字符串或最多包含 10 个字符串的列表 | 否 | 改为比较某个部门。 |
team | 一个字符串或最多包含 10 个字符串的列表 | 否 | 改为比较某个团队。 |
query | string | 否 | 在职位名称中查找的词语。 |
component | Salary、EquityCashValue、EquityPercentage、Commission 或 Bonus,默认为 Salary | 否 | 要比较的组成部分。 |
interval | string,默认为 1 YEAR | 否 | 比较的周期。 |
limit | 整数,范围为 1 到 100,默认为 25 | 否 | 要比较的职位数量。 |
一次比较一项组成部分: 股权和薪资不能相加。 按其他周期标注的职位会单独列出,不进行换算。
返回内容: rows,每个职位对应一行,其中包含用于比较的 component 和 interval、列出答案中所有货币的 currencies_present,以及列出公司未发布任何薪酬信息的职位的 not_published;未发布绝不等于零。
薪酬数字的含义
公司自行决定发布哪些信息。未提供薪酬范围的职位会返回空值,绝不会返回零。薪酬范围以 Ashby 记录的货币和周期返回,绝不换算或折算成年薪:对于按不同周期标注的两个职位,如何比较取决于了解比较目的的人。
配置
无需进行任何配置。服务不会读取环境变量,上方的 mcpServers 配置块按当前内容即可完整使用。
请求间隔、超时时间和缓存均为客户端层设置,作为库使用一节展示了如何传入这些设置。可以在那里延长两次请求之间的间隔,但不能缩短。
错误
每次失败都会附带六种代码之一、一条消息,以及在有帮助时提供可接受的值。
| 代码 | 发生了什么 | 应对方法 |
|---|---|---|
not_found | Ashby 已响应,但没有此类职位板或职位。 | 使用 resolve_board 检查令牌。 |
invalid_input | 请求发出前,参数已被拒绝。 | 阅读消息,其中会指出相关参数及其可接受的内容。 |
rate_limited | Ashby 要求此客户端降低请求频率。 | 等待后使用相同参数再次调用。该职位仍在职位板上。 |
parse_failure | Ashby 的响应格式不受此客户端支持。 | 在问题跟踪页报告此问题。 |
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 密钥,也无需账户。
安装
一键安装
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 会一次性提供整个网站,以下每项限制均适用于已读取的内容。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
companies | 1 到 10 个字符串组成的数组 | 是 | 公司名称或令牌。 |
query | 字符串 | 否 | 要搜索的词语。 |
search_in | title 或 title_and_description,默认值为 title | 否 | query 的搜索范围。 |
department | 一个字符串或最多包含 10 个字符串的列表 | 否 | 网站上使用的部门名称。 |
team | 一个字符串或最多包含 10 个字符串的列表 | 否 | 网站上使用的团队名称。 |
employment_type | 一个字符串或最多包含 6 个字符串的列表 | 否 | 雇佣类型。 |
workplace_type | 一个字符串或最多包含 4 个字符串的列表 | 否 | 工作方式。 |
is_remote | 布尔值 | 否 | 仅保留远程办公的职位。 |
country | 一个国家或最多包含 10 个国家的列表 | 否 | 网站上使用的国家名称。 |
location_contains | 字符串 | 否 | 地点行中的一部分内容。 |
published_after | ISO 8601 日期 | 否 | 职位的最长期限。 |
has_compensation | 布尔值 | 否 | 仅保留公司公布了薪酬范围的职位。 |
salary_min | 数字,必须大于或等于 0 | 否 | 薪资部分的下限。 |
currency | 三字母代码 | 否 | 薪资下限所用的货币。 |
salary_interval | 字符串,默认值为 1 YEAR | 否 | 薪资下限对应的周期。 |
sort | published_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 | 字符串 | 是 | 列表项中的标识符。 |
description | plain、html 或 none,默认值为 plain | 否 | 职位描述的返回方式。 |
include_compensation | 布尔值,默认值为 true | 否 | 是否包含已发布的薪酬信息。 |
职位描述可能有数千个字符;html 是公司的原始标记,不会经过改写。
返回: 搜索结果列表中的职位信息,包含描述、地点,以及公司发布的薪酬组成部分。
list_filter_values
列出招聘网站实际使用的词语,以及每个词语对应的职位数量。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
board | 字符串 | 是 | 公司名称或令牌。 |
facet | departments、teams、locations、countries、employment_types、workplace_types 或 all,默认值为 all | 否 | 要读取的词汇类别。 |
返回: facets,其中每个值都附有对应的职位数量;以及 undeclared,即未声明此类别任何信息的职位。sibling_spellings 列出仅大小写或空格不同的写法,否则筛选器会将它们视为不同的值。
compare_compensation
并排比较多个职位的一项薪酬组成部分。
| 参数 | 类型 | 必填 | 作用 |
|---|---|---|---|
board | 字符串 | 是 | 公司名称或令牌。 |
job_ids | 最多包含 50 个字符串的数组 | 否 | 要比较的职位。 |
department | 一个字符串或最多包含 10 个字符串的列表 | 否 | 比较某个部门。 |
team | 一个字符串或最多包含 10 个字符串的列表 | 否 | 比较某个团队。 |
query | 字符串 | 否 | 要在职位名称中搜索的词语。 |
component | Salary、EquityCashValue、EquityPercentage、Commission 或 Bonus,默认值为 Salary | 否 | 要比较的组成部分。 |
interval | 字符串,默认值为 1 YEAR | 否 | 要比较的时间段。 |
limit | 整数,范围为 1 至 100,默认值为 25 | 否 | 要比较的职位数量。 |
**一次比较一个组成部分:**股权和工资不能相加。以其他时间段表示的职位会单独列出,不做换算。
返回内容:rows,每个职位一行,包含用于比较的 component 和 interval、列出响应中所有币种的 currencies_present,以及列出公司未发布任何信息的职位的 not_published;未发布的信息绝不表示为零。
薪酬数字的含义
公司可以自行决定发布哪些信息。没有薪酬范围的职位不会返回任何内容,绝不会返回零。薪酬范围会以 Ashby 记录的币种和时间段返回,绝不会换算或折算成年薪:如何比较以不同时间段表示的两个职位,由了解比较目的的人自行决定。
配置
无需配置。服务不会读取任何环境变量,上方的 mcpServers 块无需修改即可使用。
请求频率、超时和缓存是客户端层的设置,作为库使用一节展示了如何传递这些设置。可以在此处延长两次请求之间的间隔,但不能缩短。
错误
每个失败都带有六种代码之一、一条消息,以及在有帮助时提供的可接受值。
| 代码 | 发生了什么 | 应该怎么做 |
|---|---|---|
not_found | Ashby 已响应,但没有此站点或此职位。 | 使用 resolve_board 检查令牌。 |
invalid_input | 请求发出前,参数就已被拒绝。 | 阅读消息,其中会指出参数名称及其可接受的内容。 |
rate_limited | Ashby 要求此客户端放慢速度。 | 等待片刻,然后使用相同的参数重试。职位仍在线。 |
parse_failure | Ashby 的响应格式无法被此客户端读取。 | 在问题跟踪页面报告此问题。 |
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。职位信息归发布它们的企业所有。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。