Resume
概览
作者提供的说明(英文原文)
Tailor a resume and write a cover letter as real Word .docx files from facts you stored once.
PopNx MCP 的三大支柱
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
- 用户评价i暂无评价评价功能将在后续阶段与账户功能一起开放
- 我们的基础检查i1 项中通过 1 项依据公开信息检查;尚未扫描代码
- 使用情况i非常新★ –
它能帮你做什么
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
- 连接方式: 在你的电脑上运行
- 传输方式: stdio
- 分类: 文档、表格与办公
安装
选择你使用的 AI 应用,然后复制设置。
安装之前
- 基础检查:1 项中通过 1 项
- 在你的电脑上运行,拥有你的用户账户的权限(文件、网络、应用)。
- 注册中心没有列出需要填写的密钥。
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
链接指向作者自己的文件;我们不托管也不重新打包它。打开文件后,Claude Desktop 会进行安装。
在终端中运行这条命令
浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它能做什么
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
基础检查i
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月8日
- ✓ 通过
作者与仓库一致
注册名称已通过 GitHub 账户 theluckystrike 验证,该账户拥有此仓库
- … 尚未检查
仍在维护
我们还没有从 GitHub 读取这个仓库
- … 尚未检查
有许可证
我们还没有从 GitHub 读取这个仓库
- – 不适用
端点有响应
它在你的电脑上运行,没有互联网端点
- – 不适用
使用 OAuth 登录
在你的电脑上运行,改用本地设置
- … 尚未检查
工具描述中没有隐藏指令
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与“文档、表格与办公”中的其他服务器比较i
- 星标数多于此分类中其他 3575 个服务器的 0%
- 发布到注册中心的时间比此分类中其他 3575 个服务器的 55% 更新
- 基础检查结果等于或优于此分类中其他 3575 个服务器的 100%
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
常见问题
Resume 安全吗?
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
它需要哪些密钥或代码?
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在我的电脑上运行还是在云端?
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
它还在维护吗?
GitHub 仓库最后更新于–,最新版本(0.22.6)于25天前进入注册中心。
哪些应用可以使用它?
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 MCPB。
有什么可以替代它?
同一分类中有:Agent-Native Calendar, Excel MCP Server, MCP Server for Excel
替代选择
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:↓ 每周下载量i★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Excel MCP Server
Create and edit Excel files with AI: charts, PivotTables, formulas. No Excel needed.
MCP Server for Excel
Excel automation for AI - Sheets, Power Query, DAX, VBA, Tables, Ranges and more. Windows only.
作者的 README
打开 README
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
mcp-resume
Store your CV facts once. Then say "tailor my resume to this posting and write the cover letter" and get two real .docx files: a resume whose bullets are reordered by relevance to the posting, trimmed to fit the page count you asked for, with the posting's keywords in bold where you actually have them, and a one-page cover letter that states nothing you did not put in your profile. Where a fact is missing, the letter leaves a bracketed prompt like [add: metric] instead of inventing a number. It also reads an existing resume .docx back into the profile shape, exports markdown for an ATS box, and writes printable HTML. Everything runs locally: no upload, no account, no native dependency.
In the [official MCP Registry](https://registry.modelcontextprotocol.io/v0.1/servers/io.github.theluckystrike%2Fresume-cover-letter-docx-generator/versions/latest) (io.github.theluckystrike/resume-cover-letter-docx-generator).
Listed on the [AI Product Index](https://index.percall.dev/l/zovo-resume.html) - live remote endpoint at mcp.zovo.one/s/resume, free tier, no signup.
60-second install
npm publish for @theluckystrike/mcp-resume is pending. Until then, the .mcpb one-click bundle or a clone+build is the working path, both are verified below.
One-click (.mcpb): download resume.mcpb from the latest release and double-click it in Claude Desktop: https://github.com/theluckystrike/mcp-servers/releases/latest
(claude_desktop_config.json):
{
"mcpServers": { "resume": { "command": "npx", "args": ["-y", "@theluckystrike/mcp-resume"] } } }
Claude Code:
claude mcp add resume -- npx -y @theluckystrike/mcp-resume
(.cursor/mcp.json):
{
"mcpServers": { "resume": { "command": "npx", "args": ["-y", "@theluckystrike/mcp-resume"] } } }
The npx form above starts working the moment the package is published. Until then, use the .mcpb bundle above, or build from source with exactly these three commands:
git clone https://github.com/theluckystrike/mcp-servers.git && cd mcp-servers
npm install npm run build -w packages/mcp-license -w servers/docx -w servers/resume
Then point your client's command at node with one arg: the absolute path to servers/resume/dist/index.js. servers/docx is in that build list because this server shares the document engine with mcp-docx rather than carrying a second copy of it.
To run in Pro mode set MCP_LICENSE_KEY in the same config block, or call license_activate once with your key.
Tools
| Tool | What it does |
|---|---|
profile_set | Store the facts every output is built from: name, email, phone, location, links, summary, skills, roles with bullets, education, certifications, languages. One profile per data directory; Pro adds named variants |
profile_get | Return the stored profile as JSON, exactly as the other tools see it |
resume_create | Write the resume as .docx. Bullets are ranked by keyword hits and recency, then trimmed to max_pages against a measured word budget; matched keywords are bolded, missing ones are reported and never added. Styles: modern, classic, compact |
cover_letter_create | A one-page letter in four parts -- opening, fit, proof, close -- drawn only from the profile. Tones: formal, direct, warm. Unknowns come back as [add: ...] prompts |
tailor_to_job | Gap analysis against a posting: the keywords it actually asks for, which of them your profile already covers, which it does not, a coverage figure, and rewrites that only reorder facts you already stated |
resume_read | Read an existing resume .docx back into the profile shape, section by heading. Best effort; nothing is saved unless save: true |
resume_to_markdown | The resume as markdown, for an application form or an ATS box |
resume_to_html | Printable HTML with a print stylesheet. Open it and print to PDF |
license_status | Show free or Pro mode |
license_activate | Activate a Pro key (verified offline) |
Resource: resume://profile returns the stored profile as JSON. Prompt: apply_to_job chains tailor_to_job, resume_create and cover_letter_create against one posting, and makes the model report the gaps back to you instead of filling them in.
The cover letter does not invent facts
This is the part that matters, so it is enforced rather than requested:
- Every proof line in the letter is a verbatim bullet from your profile. The letter never paraphrases a bullet into a stronger claim.
- A
highlightsentry you pass is checked against the profile first. If the profile does not support it, it is printed as[add: "..." is not in your profile - add it there or drop it], not as a claim. - Before the file is written, every digit run in the letter is checked against your profile and the arguments you passed. A number that traces to neither is a refusal, not a warning, the tool returns an error and writes nothing. The job description is deliberately not an allowed source: the employer's revenue, headcount and throughput figures are theirs, and the letter will never restate one as yours. Comparison is on whole numbers, so a profile holding
2012does not license a letter claiming12. - Each proof bullet is printed under the role it actually belongs to. A letter that quotes work from two employers prints two headings; work from an earlier job is never listed under your current one.
- A bullet that carries no figure gets
[add: metric]appended, so the letter asks you for the result instead of guessing one. - Missing keywords from
tailor_to_jobnever become skills. The response says so in plain words.
What you can say
| You say | Tool |
|---|---|
| "Here is my CV: Ada Rowe, backend engineer, Acme Pay since 2021, ..." | profile_set |
| "Read my old resume at ~/Documents/cv.docx and set up my profile." | resume_read |
| "How well do I match this posting?" | tailor_to_job |
| "Make me a one-page resume for this Staff Engineer role." | resume_create |
| "Write the cover letter for Zeta Systems, direct tone." | cover_letter_create |
| "Give me the plain-text version for the application form." | resume_to_markdown |
| "I need a PDF to attach." | resume_to_html, then print to PDF |
| "Apply me to this job." | the apply_to_job prompt |
Worked example
You: Tailor my resume to this posting and write the letter. One page.
tailor_to_job { job_description: "...payments platform, PostgreSQL, Kubernetes..." } -> matched: payments, postgresql, kubernetes missing: rust -> coverage 75%
resume_create { style: "modern", target_role: "Staff Engineer", keywords: ["postgresql", "kubernetes", "rust"], max_pages: 1 } -> estimated_pages 1, words_used 402 of a 384-word budget for bullets -> bullets_dropped: ["Wrote the deployment pipeline"] -> keywords_missing: ["rust"] (not added anywhere) -> ~/.local/share/mcp-servers/resume/documents/ada-rowe-resume.docx
cover_letter_create { company: "Zeta Systems", role: "Staff Engineer", tone: "formal" } -> fills_required: ["[add: metric]"] -> ~/.local/share/mcp-servers/resume/documents/zeta-systems-staff-engineer-cover-letter.docx
How page trimming works
There is no page-layout engine in pure JavaScript, so this server does not pretend to measure one. It uses a word budget instead: a full A4 page at 11pt Calibri with 2cm margins holds about 520 words of body text, and a resume spends roughly a seventh of that page on headings, blank lines and the contact block. The net figure is 450 words per page (540 for the compact style). The contact block, summary, skills, role headers, education, certifications and languages are counted first; whatever budget is left goes to experience bullets, highest score first. Every role keeps its first bullet before any role gets a second one, so trimming never leaves a job on the page with nothing under it. The response reports the budget, the words used, the estimated page count and every bullet it dropped, so you can see the decision rather than discover it in Word.
Recency is part of that score, and it is read off array order, not off start/end text. profile_set enforces the ordering that makes that safe: however you list roles when you call it, the stored profile always ends up newest-first, an open role with no end first, then by end descending, then by start descending. Enter roles in any order; the stored order (and the cover-letter bullet ranking in cover_letter_create) is always correct.
Free vs Pro
| Free | Pro ($19 one-time) | |
|---|---|---|
Profile, resume_create, resume_to_markdown, resume_to_html | Yes, unlimited | Yes, unlimited |
| Resume styles | modern | modern, classic, compact |
| Cover letters | 3 per calendar month | Unlimited |
tailor_to_job | Postings up to 2,000 characters | Any length |
| Profile variants | One profile | Named variants (backend, management, ...) |
| Letterhead colour | Default | Your own accent_color |
| Footer credit | "Generated with mcp-docx by theluckystrike" | Removed |
Get Pro: https://mcp.zovo.one/buy/resume ($19 one-time, or $39 for the whole bundle).
Privacy
All data stays local. Your CV never leaves the machine: the server reads and writes files on your computer, stores the profile under your data directory, and makes no network request of any kind, not for licensing (keys are verified offline), not for fonts, not for telemetry.
Pairs with
- mcp-docx, this server imports its document engine (
@theluckystrike/mcp-docx/lib); install docx too when you also want proposals, contracts and markdown-to-Word. - office-suite, several servers behind one install, one config entry.
Troubleshooting
- `npx` hangs or fails to find the package: npm publish for this package is pending. Use the
.mcpbbundle or the clone-and-build path above until it lands. - "no profile stored": run
profile_setonce, orresume_read {path, save: true}from an existing resume. - The resume dropped a bullet I wanted: raise
max_pages, or pass the posting's words inkeywordsso the bullet outranks the others.bullets_droppedin the response names every one that did not fit. - Short skill names:
tailor_to_jobkeeps two- and one-character skills,Go,C,R,C#,C++,F#,Qt,UI,UX,QA,ML,AI,AR,VR,JS,TS,K8s,AWS,GCP,SQL,iOS, plus any short word that appears in your ownskillslist, and ranks a known skill above a longer word of the same frequency. - A keyword I have is reported missing: matching is on word boundaries, so
godoes not matchGoogleandk8sdoes not matchKubernetes. Add the exact word to your skills if it is true. - `resume_read` put a role in `unparsed`: resumes have no schema. Nothing is dropped silently, fix the fields and pass them to
profile_set. - There is no `resume_to_pdf`: every pure-JavaScript route from Word to PDF needs a native dependency or a cloud API.
resume_to_htmlwrites semantic HTML with a print stylesheet; print that to PDF. - Node version: requires Node >= 18. Check with
node -v.
MIT licensed. Support: support@zovo.one
Built by theluckystrike.
One business profile for the whole suite
Your identity is stored once, at ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/profile/business.json, and every server in the suite reads it: the invoice issuer, the docx letterhead, the recurring issuer, expense-tracker's default VAT rate, time-tracker's and timezone's home zone, and the resume and contract letterheads. Set it once with business_set (invoice or docx) - you never repeat it anywhe
只显示了开头部分;其余内容请在仓库中阅读