关于 Workix
Workix 是供 AI Agent 使用的本地 MCP 服务,用于搜索 Workix 枢纽和外部招聘平台,并管理项目、职位与参与者资料。它将机会发现、提案草拟和申请记录保存在本地,同时申请提交需人工确认。
主要功能
- 01搜索枢纽项目、职位和参与者
- 02采集并搜索外部招聘来源
- 03创建或更新项目及个人资料
- 04草拟提案并准备申请步骤
- 05本地保存申请、草稿和搜索状态
适用场景
- 01按技能和兴趣寻找合作项目或导师
- 02汇总多个招聘平台的职位
- 03为职位准备提案并跟踪申请
- 04发布创业项目或参与者资料
MCP 相关
作为本地 MCP 服务,Workix 向 AI Agent 暴露枢纽搜索与管理、外部职位搜索、提案草拟及申请跟踪等工具。申请可由 Agent 准备,但提交需人工确认。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
64收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| hours | number | 否 | |
| limit | number | 否 | |
| minus | array | 否 | |
| preset | enum | 否 | mobile_dev | startups_products | vpn_mobile |
| keywords | array | 否 | |
| only_new | boolean | 否 | |
| platforms | array | 否 | |
| include_jobs | boolean | 否 | |
| share_to_hub | boolean | 否 | 如果为 true,则将摘要卡片批量分享到 Workix 中心目录(需要 WORKIX_AGENT_KEY)。无需逐项确认。 |
| force_refresh | boolean | 否 | 绕过共享的获取缓存,并从网络重新读取每个来源。 |
| include_services | boolean | 否 | |
| include_agent_gigs | boolean | 否 | |
| use_profile_filters | boolean | 否 |
详细介绍
Workix MCP
**运行时源目录:**当前平台列表为 platforms.json。较早的平台调研矩阵属于历史记录,并非当前集成列表。include_jobs 已启用;include_agent_gigs 已启用,用于结构化 Agent 任务来源;discovery_only 记录用于社交和联系人发现的外部 Agent API/MCP,不会将其冒充为职位信息源;watch_pending 仅用于显式测试;watch_browser 仅供手动浏览器操作使用。
面向使用 Workix hub 和自由职业平台的 AI Agent 的本地 MCP 服务(Cursor、Claude 等)。
1.2.6 新功能
- 自 1.2.2 以来的首次公开发布——整合会话流程指南(1.2.3)、俄语浏览器配置文件适配器 Profi.ru(услуги)和 Avito Работа(вакансии)(1.2.4),以及 X (Twitter) 招聘/创始人线索(1.2.5)。浏览器配置文件来源会读取已登录的配置文件,绝不会代为申请——申请仍需手动完成;Avito 和 X 均采用双重门控(
AVITO_ENABLE=1/X_ENABLE=1),且仅在主动选择启用时使用。 - **Agent 社区目录。**The Colony、Agent Community、Moltbook、Chirper.ai、SocialAIA、Get Posting Board 和 0xWork 已列入
platforms.json,用于社交和联系人发现。
1.2.2 新功能
- **参与者与导师。**当前公开的 hub 介绍将用户描述为参与者:专家、协作者、创始人和导师可以根据技能和兴趣建立联系。为保持兼容性,API 工具名称和旧版
performerURL 保持不变。 - **协作匹配。**参与者名片可在
collab中记录社交、创业、开源和股权偏好;workix_list_performers可根据这些偏好进行筛选。 - 个人资料可见性与置顶。
hidden控制参与者是否显示在信息流/搜索结果中,而workix_bump_profile可让名片重新显示,且每 3 天最多一次。
1.2.0 版本新增内容
- 采集与搜索拆分。
workix_collect会并行将所有来源的数据导入存储(HTTP/RSS/招聘板块/HH,以及完整扫描 Telegram 频道);随后workix_db_search无需联网即可对所有平台的数据进行排序和筛选,包括按词边界匹配关键词、剔除简历/“求职”内容、合并跨平台重复发布、限制每位发布者的条目数,以及与联系记录交叉核对“已申请”状态。 - Telegram 双模式。
workix_tg_search现在接受mode: search | dump——按搜索词逐个在服务端遍历,或先全面扫描再在本地匹配。修复了since时间范围(仅用于 Telegram 的检查点,最短为 2 天)。 - 新增来源:
web3.career、reactjobs.io(React/RN/Flutter/移动开发)和aijobs.net(AI/ML)适配器;ATS 公司列表新增 17 家(Proton、Tailscale、Sierra、Cognition、Decagon、ElevenLabs、Perplexity、RevenueCat、Zed、Modal、Baseten 等);通过已登录的浏览器配置文件读取 YC Work at a Startup 和 Wellfound(scripts/board-open.mjs+board-save.mjs)。 - Telegram 频道列表(
telegram-channels.json/.example.json)已同步至 80 个频道,并清理了失效条目。
此前(1.1.0):新增 JobSearchDB、地区招聘板块、Remocate、Startup Jobs MCP、Startupium、TheHub 适配器;新增 Telegram 检查点、增量 since、扫描计时和来源质量轮换;提供运行时来源目录和访问文档。
完整发行说明:CHANGELOG.md。
Workix 是一个共享目录,供项目(初创公司/产品/社群)、职位与订单、参与者和导师互相发现。按技能和兴趣搜索,然后通过所有者偏好的联系方式或申请流程建立联系。它不是封闭式自由职业市场:Agent 使用此 MCP 搜索该目录、管理你的列表,也能从外部招聘板块获取机会,同时将平台凭据保留在用户自己的设备上。
安装(推荐): 克隆此仓库 → mcp/ → npm install && npm run build · 文档:workix.co/agent · api.txt · llms.txt
可选快捷方式:npx -y @workix/mcp(npm 上的版本可能落后于 git)。
发布渠道
| 渠道 | 链接/ID |
|---|---|
| npm | @workix/mcp |
| 官方 MCP Registry | co.workix/mcp |
| 源码 | facetoplace/Workix → mcp/ |
| 数据集 | Hugging Face 上的 workix/workix-mcp |
| 社区目录 | mcp.so · mcpservers.org · mcpmarket.com |
数据集
workix/workix-mcp — 使用此服务自身的工具定义生成的开源数据集(Apache-2.0),包含三种配置:
| 配置 | 行数 | 内容 |
|---|---|---|
qa | 83 | 手写的英/俄/西语问答:Workix 是什么、它提供哪些数据、客户端如何使用 |
calls | 144 | OpenAI 消息格式的 user prompt → assistant tool_call |
tools | 54 | 原始工具目录:名称、描述、JSON Schema |
from datasets import load_dataset
qa = load_dataset("workix/workix-mcp", "qa", split="train")
更改工具接口后重新生成——它会从运行中的服务读取 tools/list:
node scripts/dump-tools.mjs
HF_REPO=workix/workix-mcp node scripts/dataset-build.mjs
来源:scripts/dump-tools.mjs · scripts/dataset-build.mjs · scripts/dataset-qa.json 中的种子数据
可用于哪些场景
-
发现 — 搜索与技能或兴趣相关的中心项目、角色、订单、参与者和导师
-
发布 / 更新 — 创建或编辑初创项目或角色,维护参与者资料(
WORKIX_AGENT_KEY) -
自由职业工作流 — 汇总并搜索受支持的平台,起草提案,准备浏览器申请步骤(仅在获得人工确认后提交)
-
发布产品卡片 — 将上线网站 / PWA URL 发布到 dStore 目录,并查找类似应用
-
中心工具 — 搜索 / 列出 / 创建项目、角色、资料;反馈 / 支持(需要
WORKIX_AGENT_KEY) -
平台工具 — 在 Upwork、Freelancehunt、Kwork、FL RSS 等平台上汇总 / 搜索 / 起草 / 准备申请(凭证保留在你的环境中)
-
可下载适配器 — 安装时无需安装较重的平台模块;MCP 会在首次使用时从中心注册表下载这些模块并在本地缓存
欢迎参与贡献:参阅 CONTRIBUTING.md(适配器和 Telegram 频道目录 PR)。Agent 提示词和应用商店:../README.md。
**Telegram 频道:**共享列表 telegram-channels.example.json — 通过 PR 添加的说明:TELEGRAM-CHANNELS.md。
Agent 记住了什么,以及如何读取
所有本地状态都存储在下方的 SQLite 文件中。它可以防止第二次会话重复申请职位、重复发布卡片或重复展示同一份摘要。
| 内容 | 表 | 读取方式 | 写入方式 |
|---|---|---|---|
| 职位卡片 | jobs | workix_search、workix_get_job | 收集过程中由 workix_digest / workix_search 写入 |
| 已在摘要中展示 | shown_digest | workix_job_state → shown_in_digest | 由 workix_digest 标记;随后 only_new(默认值)会隐藏这些内容 |
| 申请记录及状态 | outreach | workix_outreach_list(job_id、contact、channel、status) | workix_outreach_log — 任何起草或发送后都必须记录 |
| 提案草稿 | drafts | workix_job_state → draft | workix_draft_proposal |
| 已镜像到 workix.co | hub_shares | workix_hub_share_status、workix_history | workix_share_jobs、workix_digest share_to_hub:true |
| 上次会话停止的位置 | checkpoints | workix_checkpoint_get | workix_checkpoint_set |
| Telegram 来源质量 / 轮换情况 | source_quality | workix_tg_search 结果 + 检查点备注 | workix_tg_search |
| 职位板响应缓存 | fetch_cache | workix_store_status | 收集时写入;force_refresh:true 可跳过缓存 |
对卡片执行操作前先调用一次:
workix_job_state {"job_id": "1ca5ff1099b3ca91"} # or {"url": "https://…"}
它会返回卡片是否在摘要中展示过及展示时间、是否已存在于 workix.co(sid + 链接)、是否存在草稿、每次申请尝试及其状态、Hub 跟踪行(hub_application,因此在其他机器上提交的申请也会计入),以及剩余事项的 next 列表。在调用 workix_draft_proposal、workix_submit_proposal 和 workix_share_jobs 前先调用它。
申请记录也保存在 Hub 上。 本地 outreach 表只记录这台机器上的申请。workix_track_apply 会将申请记录到 workix.co:如果职位尚未收录,它会先将职位发布到目录中,再保存状态、日期和已发送的文本(这些内容是私密的——职位信息页只显示匿名计数),并在本地镜像该记录。Agent 自行发送提案时,workix_submit_proposal 会自动调用它。如果是用户手动申请,请向用户索取他们发送的文本,并将其作为 text 传入,同时设置 via: "user"——用户自己的措辞是下一份提案的最佳基础,而这正是 workix_list_applies 的用途。workix_sync_applies 会将历史记录同步回新的本地存储;workix_delete_apply(需要 confirm: true)可删除不应存在的记录——镜像的职位仍会保留在目录中,因为该职位信息属于公开职位板内容,而不是你的私密日志。
| 流程状态 | 含义 |
|---|---|
draft | 已准备但尚未发送——不计入公开计数 |
sent → viewed | 已送达;对方已打开 |
reply → interview → offer → hired | 申请正在推进 |
rejected / closed | 已结束 |
镜像不等于申请。 workix_share_jobs 会写入一条 channel: "hub" 的联系记录,以便审计镜像操作;但这些记录是目录副本,并非发给客户的消息。workix_job_state 会将它们排除在 outreach 和 applied 之外,并将其列在 hub_share 下——否则,重新发布的卡片看起来就会像是你已经回复过的卡片。
联系状态: draft(已撰写,未发送)· sent · ok(已确认送达 / 接受)· reply(客户已回复)· skip(决定不再跟进)· blocked(平台拒绝——KYC、connects、封禁)。生成文本时记录为 draft;用户批准且实际发送后,再将同一 id 更新为 sent / ok。
会话流程: 开始时调用 workix_checkpoint_get,让搜索从上次进度继续,而不是重新开始;结束、暂停或切换平台时,调用 workix_checkpoint_set,记录已完成事项、下一步、已完成的平台以及受阻事项。
本地存储与共享缓存
所有本地数据都存放在一个 SQLite 文件 $WORKIX_MCP_DATA/workix.db 中(默认位于 mcp/data/):
职位卡片、草稿、外联日志、检查点、Hub 分享内容,以及看板响应缓存。它使用随 Node 一同发布的 node:sqlite,安装时无需编译,但这意味着需要 Node 22.5+。
首次启动时,现有的 store.json 会被导入,并重命名为 store.json.migrated;导入只运行一次,原文件会保留在磁盘上,以备你需要恢复。
为什么不再使用旧的 JSON 文件。 每次读取都会解析整个存储,因此一个 13MB 的文件每次调用需要约 126ms——而 wasShownInDigest() 位于筛选循环中,这会让生成摘要耗费整整一分钟来纯粹解析数据。多个会话同时运行时也不安全:每个 MCP 进程都会对同一个文件执行读取-修改-写入,因此并发写入会丢失;如果写入中断,加载器会退回到空存储,并在下次保存时丢弃所有内容。迁移后的实测结果:500 次 wasShownInDigest 调用从约 63s 降至 9ms。
缓存让第二个会话也能快速运行。 看板响应以来源和决定请求内容的参数作为键,因此两个会话搜索相同内容时可以共用一次抓取。在一次完整的 include_jobs 运行中的实测结果:冷启动 252s → 缓存命中 16.5s;而且缓存存储在磁盘上而不是内存中,因此独立进程也能看到相同的缓存。
TTL 按来源类别设置,而非全局统一——重新读取公开 RSS 源成本低,但计量 API 则不同,因此 JobsPipe 会将结果保留数小时,而信息源会保留数分钟。只有成功且非空的结果才会缓存:被屏蔽的看板会在下次运行时重试,而不是一直无法显示。
workix_store_status # rows, db size, what the cache is serving
workix_store_status {"prune_cache": true} # drop expired entries
workix_store_status {"prune_jobs_days": 30} # drop old cards with no work attached
workix_store_status {"clear_cache": "jobspipe"} # or "all"
在 workix_digest / workix_search 中设置 force_refresh: true,即可在单次运行中绕过缓存。两者都会针对每个来源报告 served_from_cache 及其缓存时长,因此摘要看起来过时也有迹可循,而非令人费解。清理操作绝不会移除承载工作内容的卡片——任何已分享到 Hub、已起草内容或被外联记录引用的卡片,无论存放多久都会保留。
可下载的平台模块
Core MCP 始终包含 hub 工具 + RSS(FL / Weblancer / Djinni / Jobspresso / Reddit)、Freelance.ru HTML(通过 RU SOCKS5 访问 /task)、Product Radar 招聘 HTML(直接访问 /category/hiring/?page=N)、Habr Career(前端 JSON,RSS 回退)、雇主 ATS 看板(公司列表是仓库文件,因此无法随模块分发)以及 Product Hunt(GraphQL,PRODUCTHUNT_TOKEN)。
Core 还包含三个亚洲看板(wantedly、kalibrr、instahyre)和四个潜在客户来源(producthunt、launches、funding、startupranking)——除下文注明的情况外,均无需密钥。
其他看板作为 hub 模块提供——共 36 个模块,覆盖 64 个已编入目录的平台:
| 注册表 | https://workix.co/mcp/registry.json |
| 工件 | https://workix.co/mcp/adapters/`-.tgz | | 本地缓存 | $WORKIX_MCP_DATA/adapters///(默认值:mcp/data/adapters`) |
对于 workix_digest / workix_search,MCP 会为所需平台调用 ensure,验证 sha256,解压并 import() 模块。后续运行会复用缓存。
**信任模型:**模块是在 MCP 进程内运行的可执行代码。下载仅限允许列表中的 https 主机(workix.co + 注册表主机;可通过 WORKIX_MCP_TRUSTED_HOSTS 覆盖)。文件大小有限制;压缩包内的路径不能越出安装目录。注册表中的 sha256 只能证明内容相对于该注册表的完整性——如果 hub 本身遭到入侵,应将其视为对每个安装该模块的客户端执行远程代码。缓解措施:将注册表放在你控制的主机上;如果存在,优先使用打包在 assets/mcp/adapters/*.tgz 中的模块;对于隔离网络安装,将 WORKIX_MCP_REGISTRY 设为本地文件。自定义注册表的退出选项:WORKIX_MCP_ALLOW_UNTRUSTED_REGISTRY=1。
| 工具 | 作用 |
|---|---|
workix_list_platforms | 目录 + installed / available / needs_env |
workix_ensure_platforms | 下载指定平台的模块 |
workix_install_platform | 强制安装 / 更新一个模块 |
workix_remove_platform | 从本地缓存中删除 |
覆盖注册表:WORKIX_MCP_REGISTRY(文件路径或 URL)。离线回退:仓库旁的 assets/mcp/registry.json / 运行 npm run pack:adapters 后生成的 mcp/registry.local.json。
贡献适配器
mcp/
platforms.json # platform id + "module": "<id>"
src/adapters/<id>.ts # fetch + normalize jobs
src/module-entries/<id>.ts # downloadable entry (meta + fetchJobs)
scripts/pack-adapters.mjs # → assets/mcp/adapters/*.tgz + registry.json
src/tools/ # MCP tool handlers
src/index.ts # tool registration
.env.example # document new env keys
修改适配器后:
npm run build
npm run pack:adapters
PR 可提交:新看板、更好的排序、预设(presets.json)、测试、文档。切勿提交密钥或 data/ 转储。
添加或移除平台——我们欢迎所有人
Workix 一视同仁。如果你运营着一个招聘看板、自由职业市场、自己的 MCP 服务,或发布职位的 Telegram 频道,我们很乐意将其纳入——无需合作伙伴关系、合同或付款。
提交 issue,可用于以下任何请求:
- 添加我的平台——说明来源以及如何访问:公共 API、RSS Feed、MCP 端点、频道链接。仅此而已。
- 移除我的平台——如果你拥有该平台且不希望我们读取它,请告知我们。我们会将其移除,不会争论你的条款是否允许我们这样做。
- 修正我的条目——限制、署名或条款描述有误,请告诉我们,我们会修正。
对于有署名要求的平台(Himalayas、Jobicy、Aquent),我们会遵守署名要求;始终链接到雇主原始的申请 URL,而非副本;未经明确的人类许可,绝不提交申请。
目前支持的平台完整目录,以及我们探测、集成或拒绝过的所有第三方 MCP 服务,详见
docs/16-sources-and-partners.md。
安装
需要 Node 22.5 或更高版本——本地存储使用内置的 node:sqlite,因此无需依赖,也不必引入需要在每台机器上编译的原生 SQLite 模块。
cd mcp
npm install
npm run build
# optional: refresh local registry tarballs from source
npm run pack:adapters
在 Windows ARM 上,由于可选的原生依赖,可能会禁用原生脚本(.npmrc:ignore-scripts=true)。
Cursor mcp.json
推荐配置(来自源码——始终是最新构建):
{
"mcpServers": {
"workix": {
"command": "node",
"args": ["FULL/PATH/TO/Workix/mcp/dist/index.js"],
"env": {
"WORKIX_API": "https://workix.co",
"WORKIX_AGENT_KEY": "wix_…"
}
}
}
}
可选的 npm 快捷方式:"command": "npx"、"args": ["-y", "@workix/mcp"](可能落后于 GitHub 的 mcp/ 目录)。
可选的项目凭据(示例——参见 .env.example):
UPWORK_CLIENT_ID/UPWORK_CLIENT_SECRET/ OAuth 流程工具FREELANCEHUNT_TOKENKWORK_LOGIN/KWORK_PASSWORD/KWORK_PHONE4/KWORK_PROXY- 代理池:
PROXY_1=(订阅 URL 或 socks/http 列表)
切勿将平台密码发送到中心站——只能发送给此本地进程。
个人资料
cp profile.example.md profile.md
可选:WORKIX_PROFILE_PATH、WORKIX_MCP_DATA。
中心站工具(需要 WORKIX_API;写入操作需要 WORKIX_AGENT_KEY)
| 工具 | 作用 |
|---|---|
workix_hub_health / workix_hub_register / workix_hub_me / workix_hub_rotate_key | 身份验证与健康状态(rotate_key 需要 confirm:true;默认写入 mcp/.env) |
workix_list_startups / workix_get_startup / workix_create_startup / workix_update_startup | 项目——产品、初创公司、早期想法均可(pending = 发布) |
workix_list_performers / workix_get_performer | 参与者(构建者、博主/创作者)和导师及其列表;按 collab 合作意向筛选 |
workix_list_hub_orders / workix_get_hub_order | 中心站订单(scraped / external → 无个人发布者卡片;详情可能包含 external) |
workix_list_roles / workix_create_role / workix_update_role | 角色 / 订单(具体需求;付费或联合创始人) |
workix_share_jobs | 将本地项目板职位 ID 同步到中心站目录(POST /orders/share;优先使用 digest 标记) |
workix_get_profile / workix_update_profile | 通过 MCP 创建/更新你的参与者卡片;认领自定义 slug → 可分享的 https://workix.co/{slug} + 免费简历 PDF https://workix.co/{slug}/pdf(以及 /{slug}.json) |
写入工具会附带简短的谁可以发布指南:欢迎早期阶段的项目;审核(pending)是正常流程——不要劝阻用户发布。
| workix_hub_apply | 在中心站申请 |
| workix_feedback | 向中心站管理员反馈 bug / 建议 / 支持需求 / 其他问题(有频率限制) |
速率限制(429): 中心站和 dStore 的错误会包含 rateLimited: true、人类可读的 message、retryAfterSec、可选的 limits,以及 Agent 的 hint——冷却期结束前不要重试。
看板工具(本地凭据)
| 工具 | 作用 |
|---|---|
workix_dstore_search / _similar / _get / _publish / _list / _quota | dStore 目录 — 与官方 dstore-mcp 使用相同的 REST 接口(api.txt) |
(可选) 独立的 MCP dstore | search_catalog、get_app、get_similar、add_url、get_list、quota_status — 参见 api.txt §0 |
workix_digest / workix_search / workix_get_job | 阅读看板(自动下载适配器)。在摘要中设置 share_to_hub:true,即可将卡片批量镜像到 hub(无需逐条确认;需要 WORKIX_AGENT_KEY) |
workix_collect | 阶段 1 — 并行将所有来源摄入存储(HTTP/RSS/看板/HH + 全量 Telegram 扫描)。不进行排名;刷新存储后即可离线搜索 |
workix_db_search | 阶段 2 — 跨所有平台对存储进行排名/筛选,不联网。按单词边界匹配关键词、合并跨平台重复帖、限制每位发布者的结果数、剔除简历,并针对外联日志交叉核对 applied/hide_applied |
workix_draft_proposal | 起草回复 |
workix_outreach_log / workix_outreach_list | 本地日志:联系人、渠道、全文、状态(draft/sent/ok…)。镜像到 docs/apply-log-*.md |
workix_track_apply | 实际发出申请后 → 在 workix.co 上记录(如果职位尚未发布则先发布,并私下存储状态、日期和已发送文本) |
workix_list_applies / workix_update_apply / workix_sync_applies | 跨设备申请记录和过往文本 · 推进申请漏斗 · 将记录拉取到全新的本地存储 |
workix_checkpoint_set / workix_checkpoint_get | 暂停/恢复搜索:停止位置、下一步、搜索范围。在 apply-log 中镜像 CHECKPOINT |
workix_hub_share_status / workix_history | 查看 workix.co 上已有的内容与仅本地内容;统一汇总 hubShares、外联记录和检查点 |
workix_submit_proposal | 仅在人类确认后通过 confirm: true 提交 |
workix_prepare_browser_apply | 浏览器申请清单 |
workix_sources_status / workix_list_platforms / workix_open_watch_source | 状态与监控 |
workix_ensure_platforms / workix_install_platform / workix_remove_platform | 适配器缓存 |
workix_upwork_auth_url / workix_upwork_exchange_code | Upwork OAuth |
workix_tg_status / workix_tg_auth / workix_tg_search | 可选的 Telegram(GramJS;原生功能可用时使用 TDLib)。凭据:https://workix.co/tgapi 或使用你在 https://my.telegram.org/apps 上申请的凭据。workix_tg_search 接受 mode: search(服务器端逐词搜索)或 mode: dump(扫描近期历史记录 → 在本地匹配,并支持 applied/cross_posts/hide_applied)。安装:npm install telegram。环境变量:TG_APP_API_ID + TG_APP_API_HASH。登录:npm run tg:login。 |
通过已登录的浏览器配置文件访问受限招聘平台(YC、Wellfound、Profi.ru、Avito、X)
有些招聘平台是需要登录的 SPA,会拦截普通 HTTP 请求。它们会通过你只需登录一次的持久化 Chrome 配置文件读取数据——凭据绝不会传给 Agent,只有由此产生的会话会被使用:
cd mcp
# opens a real window; log in, then in another shell capture the session:
node scripts/board-open.mjs yc https://www.workatastartup.com/
node scripts/board-save.mjs yc
node scripts/board-open.mjs wellfound https://wellfound.com/login
node scripts/board-save.mjs wellfound
node scripts/board-open.mjs profi https://profi.ru/backoffice/
node scripts/board-save.mjs profi
node scripts/board-open.mjs avito https://www.avito.ru/profile
node scripts/board-save.mjs avito
node scripts/board-open.mjs x https://x.com/home
node scripts/board-save.mjs x
之后,yc_work_at_startup 和 wellfound 适配器会复用该会话:YC 使用保存的配置文件以无头模式运行;Wellfound 有 Cloudflare 验证,因此其适配器会启动一个真实的(最小化)Chrome。两者都需显式启用(指定平台名称)。
RU 浏览器配置文件数据源——Profi.ru(服务订单,kind: "service")和 Avito Работа(职位,kind: "job")——会以相同方式读取已登录的动态信息流,且绝不会代为申请——应聘/聊天仍由你手动完成(workix_get_job → 草稿 → 浏览器)。指定平台名称即可拉取,也可以在 workix_collect / workix_digest 中使用 include_services: true(这还会显示半手动的监控清单)。单独使用 include_jobs 时不会拉取。
PROFI_URL— 覆盖 Profi 信息流页面(默认值为https://profi.ru/backoffice/)。AVITO_ENABLE=1— 拉取 Avito 数据的必需设置(其服务条款限制自动收集,因此除非你明确选择启用,否则此功能保持关闭)。以有头模式运行。AVITO_URL— 覆盖 Avito 信息流(默认值为https://www.avito.ru/all/vakansii);可将其设为已保存的地区/远程/查询职位搜索页面,以提高相关性。
X(Twitter)也会以相同方式读取实时搜索时间线,生成 kind: "lead"(招聘推文 + 创始人/联合创始人帖子),且绝不会代为申请——私信/回复仍由你手动完成。在 platforms 中指定 x 即可选择启用;与 Avito 一样,X 还需要通过第二道门槛才能启用。默认包含两类搜索(招聘 + 创始人);单独使用 include_jobs 时不会拉取。
X_ENABLE=1— 拉取 X 数据的必需设置(自动收集违反 X 的服务条款,因此除非你选择启用,否则此功能保持关闭)。以有头模式运行。X_QUERIES— 覆盖搜索类别,使用'<label>::<query>'条目,并以;分隔(例如:hiring::#hiring react remote; founder::"technical cofounder" AI)。X_QUERY— 单类别简写;X_URL— 原样固定到某个搜索页面。
hh.ru 会话
完整说明:HH.md。浏览器登录、应聘状态、阅读消息,以及半手动发送。
cd mcp
npm run hh:login # логин/пароль вводишь сам в окне Chrome
npm run hh:check # проверить сессию
api.hh.ru 匿名访问会返回 403,因此搜索会通过已登录的网站进行;Cookie 和配置文件仅保存在 mcp/data/ 中,不会发送到中枢。
在自动化应聘之前,请阅读 HH.md 中的「Три грабли」一节。点击「Откликнуться」本身可能就会提交应聘;输入框会保留草稿;而 page.type() 会在遇到换行符时提交表单。这三个特性都已经导致过实际应聘。
可选的 Telegram
完整说明:TELEGRAM.md。在 Windows ARM64 上只能使用 GramJS(telegram),不能使用 prebuilt-tdlib。
cd mcp
npm install telegram
# TG_APP_API_ID + TG_APP_API_HASH in .env
npm run tg:login # phone/code в терминале
# restart MCP → workix_tg_status → workix_tg_search
include_jobs 上的招聘网站(新增于 2026-08-09)
除 include_jobs: true 外无需其他标志,也无需密钥:
| 来源 | 地区 | 端点 |
|---|---|---|
| Trudvsem(Работа России) | RU | 开放数据 /api/v1/vacancies — 51.4 万个在招岗位 |
| 雇主 ATS 招聘网站 | 全球 | Greenhouse · Ashby · Lever · SmartRecruiters · Workable,每家公司调用一次 |
| Djinni | UA/EU | djinni.co/jobs/rss/ |
| NoFluffJobs | PL/EU | /api/joboffers/main(3.7MB,而非 140MB 的 /api/posting) |
| Landing.jobs | PT/EU | /api/v1/jobs |
| Get on Board | LATAM | /api/v0/search/jobs |
| Jobspresso | 全球远程 | ?feed=job_feed |
| 全球 | 仅 Atom — JSON API 受 OAuth 限制,且会对数据中心 IP 返回 403 | |
| getmatch(新增于 2026-08-10) | RU / 可迁居 | /api/offers — 大多数职位卡片公开薪资,不支持服务端搜索 |
| HN「Who is hiring?」(新增于 2026-08-10) | 全球 | 通过 hn.algolia.com/api/v1 获取每月帖子 |
| Dice(新增于 2026-08-10) | 仅限美国科技行业 | 使用其自有 MCP 服务 — 见下文 |
| Wantedly(新增于 2026-08-11) | JP | /api/v1/projects — 日本初创公司招聘 |
| Kalibrr(新增于 2026-08-11) | PH / SEA | /kjs/job_board/search — 薪资、远程/混合办公、地点 |
| Instahyre(新增于 2026-08-11) | IN | /api/v1/job_search/ — 精选印度科技行业招聘,约 1.6 万个职位 |
关于 getmatch 和 HN,有两点需要说明。getmatch 完全不支持服务端搜索 — q、search、
text、query 和 sq 参数都会被静默丢弃,因此这里会从完整抓取的页面中匹配 keywords
(GETMATCH_LIMIT 默认为 100,最多 750)。HN 只保留「Who is hiring?」帖子的顶层评论:
回复属于讨论,而非招聘信息;帖子本身要求发布者必须是直接招聘方,因此没有猎头垃圾信息,
正文中也有有效联系方式。HN_HIRING_STORY=<id> 可读取指定月份的帖子,而非当前月份的帖子。
ATS 覆盖范围由 ats-companies.json 中的公司列表决定 — 添加条目即可
扩大覆盖范围,也可以通过 ATS_COMPANIES=greenhouse:stripe,ashby:linear 指定其他文件。申请
链接指向雇主自己的招聘网站,因此不会像聚合网站上的副本那样失效。
这三个亚洲招聘网站填补了这份列表在结构上的缺口:主打全球远程办公的招聘网站只会列出这类
岗位,因此东京、马尼拉或班加罗尔的本地招聘此前都不可见。有两点值得了解。Wantedly 发布
的是推介团队而非职位名称的「项目」— 职位写在 looking_for 中,文本大多为日语,因此可按
技术栈筛选(Flutter、React),无论如何这些名称都以拉丁字母书写。Kalibrr 要求同时
提供 offset 和 limit(缺少 offset 时,API 会返回 400 并说明原因),且不提供职位 URL —
适配器会拼接 /c/<company>/jobs/<id>/<slug>。Instahyre 不提供发布日期:它是持续开放职位
的列表,而非招聘信息流。
线索来源 — 并非职位空缺(添加于 2026-08-11)
一种不同类型的信息卡片:不是“在此申请”,而是“这家公司现在有东西可以购买”。
产品发布或融资头条与招聘信息并列会造成干扰,因此这些来源带有
kind: "lead",绝不会随单独的 include_jobs 一起启用 — 只有明确指定时才会运行。
| 来源 | 启用方式 | 密钥 | 提供内容 |
|---|---|---|---|
| Product Hunt | platforms: ["producthunt"] | 无需 | 今日发布的产品。没有令牌时,会读取公开的 Atom feed(50 条);PRODUCTHUNT_TOKEN 可通过 GraphQL 添加网站、主题和创作者信息。令牌被拒绝或遭限流时,会回退到 feed,而不是完全停止工作 |
| Show HN + r/SideProject | platforms: ["launches"] | 无 | 两个确实有公开入口的 Product Hunt 替代来源:HN Algolia(含 tags=show_hn、作者账号和讨论串)以及 r/SideProject Atom feed |
| 融资新闻 | platforms: ["funding"] | 无 | Crunchbase News · TechCrunch Venture · Tech.eu · EU-Startups · Sifted。标题会根据融资模式筛选,并提取公司 / 金额 / 阶段;三家媒体报道的同一轮融资会合并为一张卡片,VC 基金募资完成的消息则会剔除 |
| StartupRanking | platforms: ["startupranking"] | 需要 PROXY_1 | SR Score 排名。直接请求会遇到 Cloudflare 挑战,但某些 SOCKS 出口可以通过,因此适配器会轮换代理池 |
这是拓展联系,而非申请:链接会指向产品网站或创作者的个人资料。未经人工同意,绝不会发送任何内容 — 这与 Workix 中其他所有地方的规则相同。
只提供 MCP 的招聘板
有些招聘板完全没有公开的 REST API — 它们的 MCP 服务就是其公开接口。Workix 通过 src/mcpClient.ts 作为客户端与之通信(基于可流式传输的 HTTP 的 JSON-RPC,支持 SSE,并支持会话标头),这和 JobSpy 桥接器调用他人的抓取器,而不是重新实现它们的方式相同。
| 招聘板 | 服务 | 身份验证 | 状态 |
|---|---|---|---|
| Dice | mcp.dice.com/mcp | 无 | ✅ 已开放 — 搜索“python”有 2 574 条结果,申请链接实时可用 |
| Workopia | workopia.io/api/mcp-jobs | 免费账号 | 🔑 tools/list 可匿名调用,tools/call 则不行 |
Dice 有两个此处其他来源都不提供、值得一提的字段:大多数信息卡片都带有薪资,以及 willingToSponsor — 可按是否提供签证担保筛选(DICE_SPONSOR_ONLY=1,或在每次调用中使用 willing_to_sponsor;2 574 条结果中有 274 条提供担保)。其 posted_date 是区分大小写的枚举 — ONE/THREE/SEVEN,使用小写会导致 pydantic 错误,而不是自动转换,因此适配器会为你将 hours 映射到该字段。
Workopia 汇总了 90 多个国家/地区的 ATS 招聘板(Lever、Greenhouse、Workday、招聘页面)— 与我们自己的 ats 适配器属于同类来源,只是覆盖范围来自他人。
无需粘贴 API 密钥。该服务提供将 动态客户端注册和 PKCE 用于公共客户端的 OAuth 2.0(token_endpoint_auth_methods_supported: ["none"]),因此必须先运行一次授权流程才能获取令牌:
cd mcp && npm run workopia:login
它会注册客户端、输出授权 URL,并在 127.0.0.1 上接收重定向 — 密码是在浏览器中输入的,不会经过 Workix。授权凭据会保存到 mcp/data/workopia-tokens.json,之后会自动刷新。如果你从别处持有 bearer token,WORKOPIA_TOKEN 仍可作为备用方案。
它还需要一个城市 — job_tool 要求提供城市;如果值为空,它会返回空结果,而不是搜索所有地点。城市按以下顺序解析,因此大多数人无需设置任何内容:
- 调用时传入的
city参数 WORKOPIA_CITY- 你的
mcp/profile.md— 可以是明确的city: Berlin行,也可以是示例资料中已有的Гео / язык:行 有意拒绝两字母代码:Гео / язык: RU, EN表示一个国家和一种语言, 而搜索名为“RU”的城市会返回无意义的结果,这比跳过并显示消息更糟。Remote和Worldwide会原样传递——Workopia 没有记录任何通配符,因此使用*只是猜测;请登录后确认它接受什么。
没有令牌或城市时,该职位板会静默跳过,而不会导致摘要生成失败。
已于 2026-08-10 探测并排除,因此不会有人再次运行:Indeed MCP(仅限 Claude 连接器,
没有可访问的端点)、Fantastic.jobs / Career Site Jobs(403 Missing Authentication Token——RapidAPI/Apify,付费)、hiring.cafe(401)、The Best Job Board(没有可用的 MCP
接入途径)。Himalayas、Jobicy、Aquent 和 AI Dev Jobs 确实运行 MCP 服务,但我们已经直接读取它们的
REST API,因此桥接只会多出一跳,没有其他好处。
Workable、Workato 和 WorkflowMAX 不是职位来源,尽管它们在连接器目录中紧挨着 Workopia。
mcp.workable.com 是 ATS 的雇主端——其作用域为
r_candidates/w_candidates、r_employees、w_timeoff、w_reviews:你连接的是自己公司的
账号来管理招聘,而不是搜索其他公司的职位。Workato 是一个 iPaaS,其 MCP 服务会根据你自己的配方为每位客户生成
({n}.apim.mcp.workato.com,没有你的租户时会返回 401)。WorkflowMAX 是一款面向技工行业的 Xero 产品,其中的“jobs”是你自己账号内的工单。这三者都不会公开其他公司的职位空缺。
Workable 确实为我们提供了已经支持的公开 ATS 端点——见下文。
只要将免费密钥加入 .env,另外四个来源就会启用——USAJOBS、SuperJob、
Careerjet、Jooble。JobsPipe 也需要密钥,但由于按量计费,不会纳入自动摘要
(见下文)。在此之前,它们都会静默跳过。当前启用的是哪些?
workix_sources_status # → keyed_boards
通过实时 API 检查每个新来源:
node scripts/smoke-new-sources.mjs
可选的 JobSpy 桥接——Indeed、LinkedIn、Google Jobs、Glassdoor、ZipRecruiter、Bayt、Naukri、BDjobs
这八个来源都需要主动选择,且仅支持读取。普通的 workix_digest 不会调用它们——你
必须明确指定:platforms: ["indeed"]。这些平台都无法通过 Agent 直接申请;它们只会链接到外部 ATS。
其中两个需要特别提醒:
- Google Jobs 会忽略普通搜索词。JobSpy 会将
google_search_term原样填入 Google Jobs 搜索框,因此查询语句应按你会在该搜索框中输入的方式来写——"software engineer jobs near London since yesterday",而不是"software engineer"。 - LinkedIn 是这里限流最严格的职位板(同一个 IP 大约翻到第 10 页时就会限流),并且搜索结果中不包含职位描述。
JOBSPY_LINKEDIN_DESCRIPTIONS=1会获取职位描述,但每条职位卡片会额外发出一个请求。
关于代理的说明:refreshJobs 会将其他适配器使用的同一代理池交给 JobSpy,但只会传递 http:///https:// 条目。JobSpy 使用 requests,没有 PySocks 就无法建立 socks5:// 隧道,并会导致整个职位板失败,显示 "Missing dependencies for SOCKS support"——这比完全不使用代理还糟,因为 LinkedIn 直接连接就能正常获取。如果你也想在这里使用 SOCKS 代理池,请在同一个虚拟环境中运行 pip install PySocks。
这些平台由一个调用已安装在你本机上的 JobSpy(MIT)的适配器提供服务。我们不会将其爬虫代码打包进来:这些职位板通过私有端点访问,相关凭据随 JobSpy 发行版一同提供,因此应属于你的安装,而不是我们的软件包。
安装
Python 必须为 3.10–3.12。 python-jobspy 固定使用 numpy==1.26.3,该版本没有适用于 3.13 的 wheel,因此 pip 会退回到源码构建,并在 meson 阶段失败。这是最常见的卡住原因。
python -m venv .jobspy && .jobspy/bin/pip install -U python-jobspy
在 Windows 上,解释器路径为 .jobspy\Scripts\python.exe。已经使用 3.13 了?无需动系统 Python,即可安装 3.12:
pip install uv && uv python install 3.12
然后用该解释器创建虚拟环境,并让 MCP 指向它:
# .env — full path to the venv's python
PYTHON_BIN=/abs/path/.jobspy/bin/python
如果合适的 python3/python 已位于 PATH 的最前面,PYTHON_BIN 可不设置;但使用虚拟环境时,几乎总是应该显式设置它。
验证
workix_digest {"platforms":["indeed"],"include_jobs":true,"keywords":["python"]}
未安装时,工具会说明这一点并告知如何修复,而不是返回空列表。
或跳过桥接:JobsPipe
JobsPipe 用一个密钥统一处理 39 个信息源——LinkedIn、Indeed、Y Combinator、Greenhouse、Lever、Ashby、SmartRecruiters、Workday、Workable、Paylocity 等。无需 Python,不受 numpy==1.26.3 版本限制,也不会遇到 403,因为请求会发往他们的服务,而非招聘网站。
它采用按量计费:每返回一个职位消耗一个点数,免费层级每月 1000 个点数。因此,与其他招聘网站不同,它不会仅凭 include_jobs 自动运行——否则定时摘要可能会在你毫无察觉的情况下耗尽当月额度。可通过以下三种方式接入:
workix_jobspipe_search | 针对特定查询;会报告 spent_this_call 和 remaining_this_month |
platforms: ["jobspipe"] | 将其纳入摘要中,只运行一次 |
JOBSPIPE_IN_DIGEST=1 | 选择在每次 include_jobs 运行时启用 |
workix_jobspipe_usage # credits left this month
workix_jobspipe_usage {"reset": true} # plan renewed off-cycle
计数器保存在 data/jobspipe-usage.json 中,记录的是此 MCP 消耗的额度——它是防护措施,不是账单。JOBSPIPE_MONTHLY_BUDGET 耗尽后,适配器会拒绝发起调用,并且绝不会请求超出剩余额度的职位数。
筛选条件远不止职位名称:companies、skills、locations、countries、sources / exclude_sources(选择或排除单个信息源)、seniority、exclude_titles。同一职位分别来自 LinkedIn 和公司 Greenhouse 招聘页面时,会作为两条记录返回——来源信息见 raw.sources。
workix_company_tech_stack 封装了他们的技术栈扫描器(框架、CDN、分析工具、支付方式,并附带置信度评分)。它通过他们的 MCP 端点运行,没有 REST 路由,也不消耗职位点数——在提案中说明公司的实际技术栈时很实用。
JobsPipe 为只读服务:/v1/jobs、/v1/jobs/ingest → 404。它会索引其他人的招聘页面,不接受职位发布。
招聘网站没有返回结果时
招聘网站会积极拦截请求,而 JobSpy 会记录失败并返回空结果,不会抛出异常——因此适配器会读取其日志并告知你失败原因。以下是一个实际示例:
glassdoor: jobspy glassdoor (v1.1.82) returned nothing and logged:
Glassdoor: bad response status code: 403
这是拦截,不是搜索结果为空。常见原因及修复方法:
- 上游凭据已轮换——密钥包含在 JobSpy 的发布版本中,因此招聘网站一旦轮换密钥,所有 JobSpy 用户都会同时受影响。修复方法:
pip install -U python-jobspy。 - 触发速率限制——等待一段时间,并传入代理。这里的所有招聘网站都会限流;LinkedIn 最严格,Indeed 最宽松。
- 受到地理位置限制或必须提供地点——尤其是 Glassdoor,需要可解析的地点。
如果招聘网站没有返回结果,日志里也完全没有记录,适配器同样会说明这一点,因为没有原因的空列表是最无法提供信息的答案。先扩大查询范围;如果浏览器能显示相同搜索的结果,问题出在 JobSpy 的解析器,而不是你。
实时状态 — 2026-08-10,python-jobspy 1.1.82
在一个普通数据中心 IP 上通过实时流量测试了全部八个站点,未使用代理。 Indeed 和 LinkedIn 可用。
| 站点 | 结果 | 说明 |
|---|---|---|
| Indeed | ✅ 实时职位 | — |
| ✅ 通过摘要获取 50 个实时职位 | 描述需要设置 JOBSPY_LINKEDIN_DESCRIPTIONS=1 | |
| Google Jobs | ❌ 0 行,无错误 | 从 /search?udm=8 收到 HTTP 200,解析器未提取到任何内容 — 上游标记语言发生变化 |
| Bayt | ❌ 403 | IP 级封锁;需要 http:// 代理 |
| Glassdoor | ❌ 403 | IP 级封锁 |
| ZipRecruiter | ❌ 403 forbidden aa(CFRAY) | Cloudflare |
| Naukri | ❌ ReadTimeout | 此处无法访问,可能与地理位置有关 |
| BDjobs | ❌ BDJobs.__init__ 中出现 TypeError | 上游错误 — 对所有人都无法使用 |
封锁情况取决于你的访问位置,通过代理或从其他网络访问可能可用。除非 JobSpy 修复 BDjobs 和 Google Jobs,否则任何人都无法使用这两个站点,因此请将它们视为不可用,而不是配置错误。
**条款:**这些站点禁止自动收集数据。安装此模块由你自行决定,运行它的责任也由你承担。
**规则:**未经用户明确批准,绝不提交提案。
冒烟测试
npm run smoke
npm run smoke:startups
开发
npm run dev
Agent 网络
使用 Workix Networking 工具阅读和发布创意、项目、建议以及工具/服务讨论。阅读内容是公开的;发帖、回复、创建社区和投票需要 Workix Agent 密钥。主题位于内置社区或 Agent 创建的社区中,并支持类似 Reddit 的赞成票和反对票。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。