
Mcp Job Search
io.github.michalper由 GitHub 帳號 michalper 發布v0.2.0更新於 Oct 25, 2026
AI助理的求職機制:搜尋、取得招聘資訊、產生簡歷、檢查、記錄。
AI 翻譯由 AI 模型根據下方的原文描述翻譯,可能有誤。
原文描述
Job search mechanics for an AI assistant: search, fetch postings, render CVs, lint, log.
概覽
Mcp Job Search 的本機 MCP 服務;無需登入;STDIO。
暫無 AI 概覽:以下資訊來自註冊中心條目和服務本身。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Mcp Job Search,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
mcp-job-search
[CI] [PyPI] [michalper/mcp-job-search MCP server] [License: MIT] [Python 3.12+] [Ruff] [Last commit]
An MCP server that automates the repetitive mechanics around job-hunting with an AI coding assistant, while deliberately not automating the parts that need a human: drafting your CV/cover letter, fact-checking claims against your real history, and submitting an application.
It answers the question that keeps eating a job search's time: "this CV draft looks fine, but did it quietly fabricate something, and is this one specific posting even worth reading?"
Status: early stage. Built for personal use, published because the configurable anti-fabrication linter and application-registry tooling are generically useful beyond one person's job search. All seven tools are working. See
CHANGELOG.mdfor what changed and what was verified live.
How this differs from other job-search MCP servers
A few open-source MCP servers already do job search + CV tailoring
(not-boring-resume-mcp, resume-mcp, Workopia MCP, IAM MCP Server,
LinkedIn MCP Server, among others). This one targets what they don't:
- It won't scrape past a bot-detection wall, even quietly. NoFluffJobs,
JustJoin.it and similar Polish IT boards have no public search API —
fetch_job_postingreads one URL you already found instead of indexing their listings, and on boards confirmed to sit behind an active Cloudflare challenge (Pracuj.pl, Indeed), it fails loudly rather than trying to solve the challenge automatically. See the verified coverage table below — this is a documented boundary, not a silent gap. - The anti-fabrication linter is a configurable rules engine, not
hardcoded prose. None of the surveyed alternatives ship a way to
enforce your own banned-phrase list, achievement-weight rules, or
required clauses —
lint_cvreads them from a YAML file you control, so the mechanism is reusable even though the facts it checks against are personal (see "Why a configurable linter" below). - It doesn't draft or fact-check for you, on purpose. Writing the CV/cover-letter text and adversarially verifying every claim traces back to something true stays with whatever AI assistant calls these tools — this server is a mechanics layer (search, fetch, render, lint, log), not a weaker bundled LLM call duplicating judgment the calling assistant already does better with full context.
What this server doesn't pretend to be: it doesn't cover every job
board — only ones with a real API, or a single posting URL a human already
found. It never submits anything on your behalf. And a clean lint_cv run
doesn't mean a CV is honest, only that it passes the specific rules you
wrote — semantic fabrication (two true facts combined into a false-sounding
one) still needs a human or an independent adversarial review to catch.
Install
From PyPI (published as mcp-job-search-mp — mcp-job-search was already
taken by an unrelated project; the command stays mcp-job-search):
From source, for development:
Connecting to Claude Code
Configure via environment variables — all optional, every tool degrades gracefully when something is unset:
Adzuna and JSearch free-tier limits
Adzuna's free tier is 25 one-time test calls, then a paid plan (£8/month,
5,000 calls) — budget calls accordingly once past testing. JSearch's free
tier is 200 requests/month; search_jobs caches results by query
(SEARCH_CACHE_DIR/SEARCH_CACHE_TTL_SECONDS, default 6h) specifically to
protect that quota from repeated identical queries — pass use_cache=False
to force a fresh one when you actually need it.
Sites behind active bot-detection
fetch_job_posting will never try to solve a CAPTCHA or bot-detection
challenge automatically, on any site, regardless of how narrow the request
— confirmed via response headers that Pracuj.pl and Indeed (pl.indeed.com)
both sit behind an active Cloudflare challenge (cf-mitigated: challenge /
401 with a Cloudflare bot-management cookie), not just a missing-JavaScript
issue. A real, human-driven browser session passes both normally — for a
page like this, read it with a real browser instead of this tool.
Example: catching a CV the way lint_cv sees it
The CV draft here (tests/fixtures/sample_cv_with_violations.html) was
seeded on purpose, and lint_cv is pointed at the bundled generic example
rules (src/mcp_job_search/examples/lint_rules.example.yaml), not a real person's facts:
clean is false because real rules fired, not a guess — and every message
came from the YAML file, not from code that knows anything about a specific
person's career.
Tools
Verified job-board coverage (fetch_job_posting, 2026-10-19)
Why a configurable linter, not a hardcoded one
The original motivation: a CV draft once conflated two separate true facts
into one false-sounding claim, and it shipped before anyone caught it. A
grep-based mechanical check can catch a banned phrase; it can't catch
semantic conflation — that still needs a human or an independent adversarial
review. What a mechanical linter can do reliably: enforce your own
banned-phrase list, page limits, and required clauses, consistently, every
time, without you re-checking the same things by hand. lint_cv is that —
generic, so anyone can point it at their own facts.
Development
Run .venv/bin/pre-commit install once to run all of the above (except
pip-audit, which needs network access and stays CI-only) on every commit.
One manual end-to-end check (not run in CI — needs live network and a real
Chrome install), also documented in CHANGELOG.md:
search_jobs(keywords="PHP", remote_only=True, sources=["arbeitnow"])against the live Arbeitnow API.fetch_job_posting(url=...)on a URL from step 1.render_pdf(html_path=...)on a sample CV, confirmsuccessandpage_count.lint_cv(html_path=...)on a file with a seeded violation, confirm it's reported.log_application(..., dry_run=True)against your own registry, confirm the previewed row and insertion point look right before droppingdry_run.
See CHANGELOG.md for what changed in each release.
License
MIT — see LICENSE.
來源:README.md,提交 5521c52
工具
0版本歷史
2- v0.2.0最新Oct 20, 2026
- v0.1.0Oct 19, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分