Workopia — Job Search

io.github.workopiaPublished by GitHub account workopiav1.0.2Updated Oct 25, 2026

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

VerifiedStreamable HTTPWeb executableProductivity & WorkflowAI & ML

Overview

AI-generated overview

Workopia is a hosted job-search MCP server that lets an assistant search live jobs, show job details, tailor resumes and draft cover letters, and review your in

What you can do
Search live jobs across 90+ countries by title, location, salary, work mode or employment type, and refine results or save a job to your account. Show a full job-detail card for a specific job referenced by number, company or title. Prepare a two-step resume tailoring flow: the server returns the job description, must-have skills and your current resume, then the assistant writes the tailored resume. Prepare a similar two-step cover-letter flow, with the assistant writing the letter from the job description and your background. Show your dashboard of saved, tailored and applied jobs plus your latest resume, filterable by status.
When to use it
Useful when you want an assistant to help with an active job search: finding roles across many countries and employers, comparing a specific posting, and producing a resume or cover letter tailored to that posting, with your saved activity kept in one dashboard.
Requirements
A remote Streamable HTTP endpoint; no local package or API key. All tools require a free Workopia sign-in via OAuth 2.0 (Authorization Code with PKCE and Dynamic Client Registration), handled by the MCP client, which stores and refreshes the token. Sign-in is by email code, Google, LinkedIn or GitHub.
Before you install
Requires a Workopia account and OAuth sign-in; the client stores the token until you disconnect. Authenticated actions such as searches, job views, saved jobs, applications, resume operations and cover letters may be associated with your Workopia profile, and the integration family and client type are recorded. Resume content is handled under Workopia's privacy policy. Resume tailoring and cover letters run on your own AI client's model. Never paste passwords, email codes, tokens or resumes into

Installation

In SourceWeft

  1. Open Workopia — Job Search in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.workopia%2Fworkopia-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "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

Source: README.md at commit 252128e

Tools

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.

Parametersactionjob_idcompanyjob_titleparameterssession_iduser_emailresume_dataresume_textuser_profiletailor_resumeresume_content+3 more

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.

Parametersactionjob_idcompanyjob_titleparameterssession_iduser_emailjson_resumeresume_textcover_letteruser_profileresume_content+2 more

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

Parametersactionsave_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?').

Parametersjob_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.

Parametersactionstatus_filter

Version history

1
  1. v1.0.2LatestSep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts