Untapped Resume

io.github.CTF-Max由 GitHub 账号 CTF-Max 发布v0.3.1更新于 Oct 24, 2026

Tailor a resume and portfolio to one job, with evidence

概览

AI 生成的概览

一个本地 MCP 服务器,仅依据你提供的文件证据,为某个职位定制简历、作品集和 LinkedIn 材料。

可以做什么
扫描证据文件夹(Markdown、文本、README、DOCX、尽力解析的 PDF、git 元数据、含 CSV 的 LinkedIn 导出 ZIP),生成带来源引用的摘录、明确日期和阅读备注。从粘贴文本或网址读取职位发布,提取必备条件、加分项和雇主条款。将简历渲染为 DOCX、PDF 或 TXT 并生成私有来源映射,将作品集渲染为自包含的 HTML 页面,项目按评分排序。对 PDF 简历做 ATS 式检查,对照职位与来源标出覆盖情况、出处和版式问题。随附技能引导助手在本地撰写 LinkedIn 材料、求职信、匹配表和 1–4 周差距计划。
适用场景
适用于针对某个具体职位投递,希望简历和作品集只基于已有证据,并把缺失资质明确列为差距而非编造。适合保存有项目笔记、README 或 LinkedIn 导出数据,并愿意自行审阅和上传输出的人。
运行要求
以 Python 3.10 及以上版本在本地通过 stdio 运行,仅用标准库,Python 需在宿主 PATH 中。可从 Codex 或 Claude Code 的 Untapped Plugins 市场安装,或在本地 MCP 配置中指向 server/resume_server.py。无需账号、密钥、配额或付费,也不需要环境变量或凭据。仅抓取职位发布时使用网络。
安装前请注意
输出文件使用固定文件名并会覆盖所选目录中的同名文件,建议每个职位使用单独的输出目录。作品集 HTML 和来源映射包含本地路径和证据,来源映射应保持私密,只上传审阅过的 index.html。引用不等于证明,需自行核对归属、日期、指标和所有权。PDF 输出仅支持 Windows-1252 文本,PDF 读取为尽力而为且不支持 OCR。

安装

在 SourceWeft 中

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

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

Untapped Resume

Build a resume, portfolio and LinkedIn kit for one job using evidence you already have. Tailored, never invented: missing qualifications stay no evidence yet and go into a practical gap plan.

Free, local, Python 3.10 or newer, standard library only. No account, licence key, monthly quota or payment. The plugin cannot post to LinkedIn; paste + upload takes about 2 minutes. It does not guarantee interviews.

No promotion in your documents

Everything it writes for you (resume, portfolio page, LinkedIn kit, cover letter, gap plan) contains only your own evidence and the job's wording. It adds no ads, no affiliate links, no links to us and no "made by" or credit line, for Find Untapped Growth or anyone else. Find Untapped Growth is named only in this README and the plugin listing, as the maker.

Install and use

Install untapped-resume from the Untapped Plugins marketplace in Codex or Claude Code. Both host manifests and the shared tailor-resume skill are included. Python must be on the host's PATH. The MCPB contains the five tools; plugin installation also includes the guided skill.

For a standalone local MCP configuration, run python with the absolute path to server/resume_server.py as its argument. No environment variables or credentials are required. The server speaks JSON-RPC on stdio; do not launch it as a web server. You can try: “Tailor my resume to this job using this project folder.”

Give the agent one job posting, a folder of selected evidence, and an output folder for this job. Supported evidence includes Markdown, text, README files, DOCX, best-effort PDF text, git metadata and LinkedIn export ZIPs containing Positions, Education, Skills, Certifications or Projects CSV files. No repository code is executed. Commit metadata does not prove the applicant's contribution or proficiency.

ToolResult
scan_evidence(folder, max_files=500)Source-linked excerpts, explicit dates and reader notes
read_job(text=...) or read_job(url=...)Stated title/company, must-haves, nice-to-haves and employer terms
render_resume(resume_json, out_dir, formats=["docx","pdf","txt"])Resume files and private sources.json
render_portfolio(portfolio_json, out_dir)Self-contained index.html and private source map
ats_check(pdf_path, job_json, sources_path)Extracted text, coverage and provenance/layout flags

Only read_job can access the network, to fetch the HTTPS posting you supply (20-second request timeout). The other tools operate on local files. The skill guides the agent to write the LinkedIn kit, cover letter, match table and a 1–4 week gap plan locally. See the workflow and JSON contracts. Directory workflows set directory_build=true, which disables the optional internship suggestion.

Source-backed output

Every factual input line has this shape:

json
{  "text": "Built a Python inventory tool.",  "source": {    "source_path": "/absolute/path/project/README.md",    "quote": "Built a Python inventory tool."  }}

resume_json contains a sourced name, optional sourced contact array and a sections object. Section keys are Summary, Experience, Projects, Education, Skills and Certifications; each holds an array of sourced lines. Experience and Projects default to bullets; set bullet:false for a role/date label. The renderer refuses missing sources on any factual line, not just bullets. The source map records wrapped lines and output hashes. The checker reads sources again and flags missing quotes and unsupported words. A citation is not proof: the agent must still check attribution, meaning, dates, metrics and ownership.

portfolio_json has sourced name, optional sourced intro, and projects. Each project has a sourced title, sourced bullets, a numeric fit_score from 0–100, and optional sourced fit_reason. The three highest scores lead, with fewer if there are fewer evidenced projects. The score is supplied by the agent for ordering. The HTML has no scripts, linked resources or branding footer. Upload only the reviewed index.html to GitHub Pages or Cloudflare Pages; keep source maps and local paths private.

Limits that stay visible

  • Resume files use a single column, standard Courier fonts and real text. More than one page triggers a warning; content is not silently removed. DOCX pagination can vary with the viewer's font metrics.
  • Built-in PDF output supports Windows-1252 text, including common Western accents. For other scripts it refuses PDF output without replacing characters; use DOCX/TXT and export from Word or LibreOffice.
  • General PDF reading is best effort: no OCR, encrypted text or custom font-map support. Hidden text, images and tagged tables are flagged when detected; arbitrary graphics and untagged tables require review.
  • Coverage uses literal terms found in both the resume and quoted local evidence, not a hiring prediction. Paraphrases may need manual review. Missing input, unknown ownership or an unreadable source is not proof.
  • Input reads are bounded. Large documents/archives and unsupported files may be skipped with notes. Keep job evidence in a small dedicated folder. The scanner never substitutes file times for stated dates.
  • Output files have fixed names and are replaced in the chosen directory. Use a separate directory per job.

Development checks

From the repository root:

text
python -m unittest discover -s plugins/untapped-resume/testspython plugins/tools/sync_shared.py --checkpython plugins/tools/manifests.py --checkclaude plugin validate --strict plugins/untapped-resumepython plugins/tools/build_mcpb.py untapped-resume

Tests use local fixtures and an injected job-page transport; they make no network requests. The vendored MCP transport comes from plugins/shared/mcp_stdio.py via plugins/tools/sync_shared.py.

By Find Untapped Growth · Homepage · MIT licence · Privacy

来源:untapped-resume/README.md,提交 9f1aabb

工具

0
SourceWeft 曾在隔离沙箱中以无凭据方式启动该软件包一次,以列出其工具,但未能完成:该软件包类型无法在沙箱中运行。

版本历史

2
  1. v0.3.1最新Oct 24, 2026
  2. v0.3.0Oct 22, 2026

评分

已满足适用检查项的 50%

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

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分