Workopia — Job Search

io.github.workopia由 GitHub 账号 workopia 发布v1.0.2更新于 Oct 25, 2026

Search 6.3M+ live jobs from companies' own career pages, plus resume tailoring & cover letters.

已验证Streamable HTTP可网页运行效率与工作流AI 与机器学习

概览

AI 生成的概览

Workopia 是一个托管式求职 MCP 服务器,让助手搜索实时职位、查看职位详情、定制简历和撰写求职信,并查看你的求职看板。

可以做什么
按职位名称、地点、薪资、工作模式或雇佣类型搜索 90 多个国家的实时职位,可细化结果或将职位保存到账户。为指定职位(按编号、公司或职位名称引用)显示完整职位详情卡片。执行两步式简历定制:服务器返回职位描述、必备技能和当前简历,再由助手撰写定制简历。执行类似的两步式求职信流程,由助手根据职位描述和个人背景撰写求职信。查看已保存、已定制和已投递职位及最新简历的看板,可按状态筛选。
适用场景
适合在积极求职时使用:跨多个国家和雇主查找职位、比较某个具体招聘信息,并针对该职位生成定制简历或求职信,同时把保存的活动集中在一个看板中。
运行要求
远程 Streamable HTTP 端点,无需本地软件包或 API 密钥。所有工具都需要通过 OAuth 2.0(授权码加 PKCE 与动态客户端注册)免费登录 Workopia,由 MCP 客户端处理并保存、刷新令牌。可通过邮箱验证码、Google、LinkedIn 或 GitHub 登录。
安装前请注意
需要 Workopia 账户和 OAuth 登录,客户端会保存令牌直到你断开连接。搜索、查看职位、保存职位、投递、简历操作和求职信等已认证操作可能与你的 Workopia 个人资料关联,并记录集成类型和客户端类型。简历内容按 Workopia 隐私政策处理。简历定制和求职信由你自己的 AI 客户端模型生成。切勿将密码、邮箱验证码、令牌或简历粘贴到公开仓库或问题中。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Workopia — Job Search,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.workopia%2Fworkopia-mcp/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "workopia-job-search": {
      "type": "http",
      "url": "https://workopia.io/api/mcp-jobs"
    }
  }
}

README

Workopia MCP Server

Job search, resume tailoring, cover letters & application tracking — available via the Model Context Protocol for Claude Code, Claude Desktop, Cursor, Windsurf, and other MCP clients.

Note: This is a hosted MCP server. Connect via the public endpoint below and sign in with Workopia (OAuth) — no API key to manage. All tools require a free Workopia sign-in; searching, job detail, resume tailoring, cover letters, and your dashboard are all scoped to your account. Resume tailoring and cover letters run on your own AI client's model — Workopia hosts no LLM and never charges for AI.

Endpoint

https://workopia.io/api/mcp-jobs
  • Transport: Streamable HTTP
  • Auth: OAuth 2.0 (Dynamic Client Registration + PKCE; handled automatically by the client)
  • Website: https://workopia.io

Install as a Claude Code plugin

/plugin marketplace add workopia/workopia-mcp/plugin install workopia-jobs

On first tool use, Claude Code opens the Workopia OAuth flow in your browser; the token is then stored and refreshed automatically.

Sign up and sign in

There is no separate GitHub-repository account and no API key to create. The first time an MCP client calls a Workopia tool, it opens the Workopia authorization page in your browser. Sign in with an email code, Google, LinkedIn, or GitHub.

  • If that verified email already has a Workopia profile, the MCP connection uses it.
  • Otherwise Workopia creates a minimal profile for that verified email.
  • The MCP client stores and refreshes its OAuth token. Disconnect or remove Workopia in the client to revoke its local connection.
  • Using the same verified email from another supported client connects activity to the same Workopia profile; it does not create a separate MCP-only account.

OAuth uses Authorization Code + PKCE and Dynamic Client Registration. Never paste a Workopia password, email code, OAuth token, or resume into this repository or a GitHub issue.

Tools

ToolWhat it does
job_toolSearch millions of live jobs across 90+ countries (employer career pages + ATS feeds — Lever, Greenhouse, Workday). Save a job to your account (sign-in).
job_detail_toolFull detail for a single job — salary, requirements, skills, company.
tailor_resume_toolTailor your resume to a specific job description.
cover_letter_toolDraft a cover letter for a specific role.
dashboard_toolOpen your Workopia dashboard — saved, tailored & applied jobs + latest resume (sign-in).

Quick start (manual config)

Claude Desktop — add to claude_desktop_config.json:

json
{  "mcpServers": {    "workopia": {      "type": "streamable-http",      "url": "https://workopia.io/api/mcp-jobs"    }  }}

Cursor — .cursor/mcp.json:

json
{  "mcpServers": {    "workopia": { "url": "https://workopia.io/api/mcp-jobs" }  }}

ChatGPT — search "Workopia" in the ChatGPT App Store.

Also listed on

Live on Glama

[workopia-mcp MCP server]

Quota

Free at launch. A free Workopia sign-in (OAuth) is required to use the tools — searching, job detail, resume tailoring, cover letters, and your dashboard. Need a higher quota or a custom arrangement? Email [email protected].

Account activity and privacy

Authenticated tool actions such as job searches, job views, saved jobs, applications, resume operations, and cover-letter creation may be associated with your Workopia profile so your dashboard and history work across supported MCP clients. Workopia records the integration family (for example MCP) and, when the OAuth client identifies itself, the client type (for example Codex, Claude Code, Cursor, or Windsurf).

Conversation transcripts are not collected by this MCP server. Activity records do not contain OAuth tokens or raw resume text. Resume content needed for a requested resume operation is handled under the Workopia privacy policy linked below.

Report a bug / request a feature

Found something broken or want a tool improved? Open an issue — this repo is where we track bugs and feedback for the Workopia MCP server and Claude Code plugin. For account, billing, or anything private, email [email protected].

About

Built by HERAAI PTY LLC. Privacy policy: https://workopia.io/privacy

来源:README.md,提交 252128e

工具

5

tailor_resume_tool

Tailor Resume to Job

Tailor a resume to a SPECIFIC job — TWO steps. STEP 1 (default; action omitted or 'prepare'): the server returns the job's full JD, its must-have skills/requirements, and the candidate's current resume, plus tailoring instructions. YOU (the model) then WRITE the tailored resume as JSON Resume, following the instructions — weave JD keywords into existing bullets only where the candidate genuinely has the experience, never fabricate experience/titles/dates/employers, keep all dates and company names, and flag any keyword you couldn't honestly add. STEP 2: call this tool again with action:'save', tailored_resume:<your JSON Resume>, and job_id — the server renders a PDF and saves it to the candidate's Workopia dashboard (requires sign-in). Use whenever the user references a specific job to tailor for: 'tailor for #1', 'for Morgan Stanley', 'tailor my resume for this role: <JD>'. Resolving job_id (same rules as job_detail_tool): from the most recent prior search/refine result — (a) numeric/ordinal → the Nth job; (b) company name → Company-field match; (c) role/title phrase → Job-Title match — then pass that job's **Job Id** value VERBATIM. Do NOT use placeholders like 'JOB_1' or '#1'. For STEP 1 supply ONE of job_id (preferred — server fetches the JD from Mongo) OR job_description, plus the candidate's resume via resume_text / resume_content / resume_data. For general 'improve my resume' (no specific job), do NOT call this tool — call resume_tool action=improve instead. Note: the tailored resume is written by your AI client's own model — the assistant you are already using — so it works out of the box with nothing to configure; Workopia runs no LLM of its own and never charges for the AI.

输入参数actionjob_idcompanyjob_titleparameterssession_iduser_emailresume_dataresume_textuser_profiletailor_resumeresume_content另有 3 个

cover_letter_tool

Cover Letter

Write a cover letter for a SPECIFIC job — TWO steps. STEP 1 (default; action omitted or 'prepare'): the server returns the job's JD and the candidate's background, plus writing instructions. YOU (the model) then WRITE the cover letter (250–350 words, specific to the role, mapping the candidate's real achievements to the JD — never fabricate). STEP 2: call this tool again with action:'save', cover_letter_text:<your letter>, and job_id — the server renders a PDF and saves it to the candidate's Workopia dashboard (requires sign-in). Use whenever the user asks for a cover letter for a specific job. Resolving job_id (same rules as tailor_resume_tool / job_detail_tool): pass the **Job Id** value from the most recent prior search/refine result VERBATIM; no placeholders like 'JOB_1' or '#1'. For STEP 1 supply ONE of job_id (preferred — server fetches the JD from Mongo) OR job_description, plus the candidate's resume via resume_text / resume_content / json_resume / user_profile.

输入参数actionjob_idcompanyjob_titleparameterssession_iduser_emailjson_resumeresume_textcover_letteruser_profileresume_content另有 2 个

job_tool

Job Search

Search jobs across 90+ countries by title, location, salary, remote/hybrid work mode, or employment type. Find roles in tech, finance, product, design, marketing, and every other vertical — aggregated from 1000+ ATS sources globally. Default action is search; use refine when the user asks for more matches or gives feedback on a prior result set; use save to bookmark a job for the signed-in user (requires OAuth). REFINE PROTOCOL (action=refine has THREE distinct modes): (1) Pure continuation / 'show me more' / 'next batch' / 'another set' / 'more like these': pass refine_recommendations.exclude_ids = the full array of **Job Id** values from the most recent search/refine result's content text (verbatim) + refine_recommendations.session_id = prior response's session_id if present. Server returns next 10 unique jobs. (2) 'Show me more like #N' / 'similar to the Atlassian one' / 'jobs like #2': pass refine_recommendations.liked_indexes = [N] (1-based position from prior numbered list) + exclude_ids + session_id. Equivalently you may pass refine_recommendations.liked_job_ids = [<that job's **Job Id** value verbatim>]. Server seeds the recommendation from that job's title/skills/company profile. (3) 'Less like #N' / 'no more N-style jobs' / 'avoid jobs like that': pass refine_recommendations.disliked_indexes = [N] (or disliked_job_ids = [<Job Id>]) + exclude_ids + session_id. Server suppresses similar jobs. All three modes: if you skip exclude_ids, the user sees duplicates — that's a failure. The handler layers exclude_ids with server-side AgentKit memory, so partial lists still work. NEVER invent 'JOB_1' / '#1' as job_id values — always use the real **Job Id** string from the prior result's content text. For detail requests (user asks about a specific job from the list, e.g. 'details for #1', 'show me this job', 'tell me more about <company>'), DO NOT call this tool — call job_detail_tool instead. That separate tool binds to the job-detail widget card so the full job card

输入参数actionsave_jobparameterssearch_jobsrefine_recommendations

job_detail_tool

Job Detail

Render the full job-detail card for a specific job the user asks about. Use this whenever the user references a particular job from a prior search result — by number (#1, '1', 'first', 'the 3rd one', 'job 3'), by company name (partial or full, e.g. 'Morgan Stanley', 'Morstan'), by role/title phrase ('the analyst role', 'the credit risk one'), or by any 'show me this job' / 'tell me more about X' / 'view this role' style request. Resolving job_id from user reference: identify the right job from the most recent prior search/refine result (the numbered list you generated): (a) numeric/ordinal → the Nth job; (b) company name → substring match on Company field; (c) role/title phrase → substring match on Job Title field. Then pass that job's **Job Id** value from the prior search result's content text VERBATIM as job_id. Do NOT use a placeholder like 'JOB_1', '#1', or any synthetic id — only the real **Job Id** string from the prior result is server-valid. Required: job_id. OUTPUT BEHAVIOR: Render the response as a structured markdown card with the job's title (linked to the apply URL), company, location, salary, employment type, work mode, must-have skills, key requirements, highlights, and summary. Follow it with a brief next-step hint (e.g. 'Want to save it, find similar roles, ask about the company, or tailor your resume for this role?').

输入参数job_idparametersuser_emailget_job_detail

dashboard_tool

Dashboard

Show the signed-in user's Workopia dashboard (saved, tailored, and applied jobs + latest resume). Requires OAuth. Default action is list; optional status_filter (all | saved | tailored | applied). Use whenever the user asks to recall their Workopia activity: 'my applications', 'what jobs have I saved / applied to / tailored', 'show my dashboard', 'where did I leave off'. Returns a secure link to open the full dashboard on the web.

输入参数actionstatus_filter

版本历史

1
  1. v1.0.2最新Sep 16, 2026

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分