mcpField
W
Workix

Workix

本地服务
workix.co商业与营销125 周前更新

关于 Workix

Workix 是供 AI Agent 使用的本地 MCP 服务,用于搜索 Workix 枢纽和外部招聘平台,并管理项目、职位与参与者资料。它将机会发现、提案草拟和申请记录保存在本地,同时申请提交需人工确认。

主要功能

  1. 01搜索枢纽项目、职位和参与者
  2. 02采集并搜索外部招聘来源
  3. 03创建或更新项目及个人资料
  4. 04草拟提案并准备申请步骤
  5. 05本地保存申请、草稿和搜索状态

适用场景

  1. 01按技能和兴趣寻找合作项目或导师
  2. 02汇总多个招聘平台的职位
  3. 03为职位准备提案并跟踪申请
  4. 04发布创业项目或参与者资料

MCP 相关

作为本地 MCP 服务,Workix 向 AI Agent 暴露枢纽搜索与管理、外部职位搜索、提案草拟及申请跟踪等工具。申请可由 Agent 准备,但提交需人工确认。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"co-workix": {
"command": "npx",
"args": [
"-y",
"@workix/mcp"
],
"env": {
"WORKIX_API": "<WORKIX_API>",
"WORKIX_AGENT_KEY": "<WORKIX_AGENT_KEY>"
}
}
}
}
启动命令npx -y @workix/mcp
需要配置的环境变量
WORKIX_APIWorkix hub API base URL (default https://workix.co)
WORKIX_AGENT_KEY密钥Agent key for hub write actions (optional for public search)

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@workix/mcp1.0.0

工具

64

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

参数类型必填说明
hoursnumber否
limitnumber否
minusarray否
presetenum否mobile_dev | startups_products | vpn_mobile
keywordsarray否
only_newboolean否
platformsarray否
include_jobsboolean否
share_to_hubboolean否如果为 true,则将摘要卡片批量分享到 Workix 中心目录(需要 WORKIX_AGENT_KEY)。无需逐项确认。
force_refreshboolean否绕过共享的获取缓存,并从网络重新读取每个来源。
include_servicesboolean否
include_agent_gigsboolean否
use_profile_filtersboolean否

详细介绍

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 工具名称和旧版 performer URL 保持不变。
  • **协作匹配。**参与者名片可在 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 Registryco.workix/mcp
源码facetoplace/Workix → mcp/
数据集Hugging Face 上的 workix/workix-mcp
社区目录mcp.so · mcpservers.org · mcpmarket.com
数据集

workix/workix-mcp — 使用此服务自身的工具定义生成的开源数据集(Apache-2.0),包含三种配置:

配置行数内容
qa83手写的英/俄/西语问答:Workix 是什么、它提供哪些数据、客户端如何使用
calls144OpenAI 消息格式的 user prompt → assistant tool_call
tools54原始工具目录:名称、描述、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 文件中。它可以防止第二次会话重复申请职位、重复发布卡片或重复展示同一份摘要。

内容表读取方式写入方式
职位卡片jobsworkix_search、workix_get_job收集过程中由 workix_digest / workix_search 写入
已在摘要中展示shown_digestworkix_job_state → shown_in_digest由 workix_digest 标记;随后 only_new(默认值)会隐藏这些内容
申请记录及状态outreachworkix_outreach_list(job_id、contact、channel、status)workix_outreach_log — 任何起草或发送后都必须记录
提案草稿draftsworkix_job_state → draftworkix_draft_proposal
已镜像到 workix.cohub_sharesworkix_hub_share_status、workix_historyworkix_share_jobs、workix_digest share_to_hub:true
上次会话停止的位置checkpointsworkix_checkpoint_getworkix_checkpoint_set
Telegram 来源质量 / 轮换情况source_qualityworkix_tg_search 结果 + 检查点备注workix_tg_search
职位板响应缓存fetch_cacheworkix_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_TOKEN
  • KWORK_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 / _quotadStore 目录 — 与官方 dstore-mcp 使用相同的 REST 接口(api.txt)
(可选) 独立的 MCP dstoresearch_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_codeUpwork 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,每家公司调用一次
DjinniUA/EUdjinni.co/jobs/rss/
NoFluffJobsPL/EU/api/joboffers/main(3.7MB,而非 140MB 的 /api/posting)
Landing.jobsPT/EU/api/v1/jobs
Get on BoardLATAM/api/v0/search/jobs
Jobspresso全球远程?feed=job_feed
Reddit全球仅 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 Huntplatforms: ["producthunt"]无需今日发布的产品。没有令牌时,会读取公开的 Atom feed(50 条);PRODUCTHUNT_TOKEN 可通过 GraphQL 添加网站、主题和创作者信息。令牌被拒绝或遭限流时,会回退到 feed,而不是完全停止工作
Show HN + r/SideProjectplatforms: ["launches"]无两个确实有公开入口的 Product Hunt 替代来源:HN Algolia(含 tags=show_hn、作者账号和讨论串)以及 r/SideProject Atom feed
融资新闻platforms: ["funding"]无Crunchbase News · TechCrunch Venture · Tech.eu · EU-Startups · Sifted。标题会根据融资模式筛选,并提取公司 / 金额 / 阶段;三家媒体报道的同一轮融资会合并为一张卡片,VC 基金募资完成的消息则会剔除
StartupRankingplatforms: ["startupranking"]需要 PROXY_1SR Score 排名。直接请求会遇到 Cloudflare 挑战,但某些 SOCKS 出口可以通过,因此适配器会轮换代理池

这是拓展联系,而非申请:链接会指向产品网站或创作者的个人资料。未经人工同意,绝不会发送任何内容 — 这与 Workix 中其他所有地方的规则相同。

只提供 MCP 的招聘板

有些招聘板完全没有公开的 REST API — 它们的 MCP 服务就是其公开接口。Workix 通过 src/mcpClient.ts 作为客户端与之通信(基于可流式传输的 HTTP 的 JSON-RPC,支持 SSE,并支持会话标头),这和 JobSpy 桥接器调用他人的抓取器,而不是重新实现它们的方式相同。

招聘板服务身份验证状态
Dicemcp.dice.com/mcp无✅ 已开放 — 搜索“python”有 2 574 条结果,申请链接实时可用
Workopiaworkopia.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 要求提供城市;如果值为空,它会返回空结果,而不是搜索所有地点。城市按以下顺序解析,因此大多数人无需设置任何内容:

  1. 调用时传入的 city 参数
  2. WORKOPIA_CITY
  3. 你的 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✅ 实时职位—
LinkedIn✅ 通过摘要获取 50 个实时职位描述需要设置 JOBSPY_LINKEDIN_DESCRIPTIONS=1
Google Jobs❌ 0 行,无错误从 /search?udm=8 收到 HTTP 200,解析器未提取到任何内容 — 上游标记语言发生变化
Bayt❌ 403IP 级封锁;需要 http:// 代理
Glassdoor❌ 403IP 级封锁
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 的赞成票和反对票。

评论

支持 Markdown

第一次接触 MCP?

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

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