McpStamp Resume and Cover Letter

io.github.theluckystrike由 GitHub 账号 theluckystrike 发布v0.23.0更新于 Nov 3, 2026

只需保存一次简历,即可针对具体职位获得定制的 .docx 简历、求职信和关键词差距分析。

AI 翻译由 AI 模型根据下方的原文描述翻译,可能有误。

原文描述

Store your CV once, then get tailored .docx resumes, cover letters and keyword gaps for a job.

已验证Streamable HTTP可网页运行效率与工作流文件与存储知识与记忆

概览

McpStamp Resume and Cover Letter 的托管 MCP 服务(mcp.zovo.one);无需登录;Streamable HTTP;13 个工具。

暂无 AI 概览:以下信息来自注册中心条目和服务本身。

端点
mcp.zovo.one
最近检查

安装

在 SourceWeft 中

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

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

交给智能体安装

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

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

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

其他 MCP 客户端

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

{
  "mcpServers": {
    "mcpstamp-resume-and-cover-letter": {
      "type": "http",
      "url": "https://mcp.zovo.one/mcp/resume"
    }
  }
}

README

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 (io.github.theluckystrike/resume-cover-letter-docx-generator).

Listed on the AI Product Index - live remote endpoint at mcp.zovo.one/s/resume, free tier, no signup.

[resume demo]

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):

json
{  "mcpServers": {    "resume": {      "command": "npx",      "args": ["-y", "@theluckystrike/mcp-resume"]    }  }}

Claude Code:

sh
claude mcp add resume -- npx -y @theluckystrike/mcp-resume

(.cursor/mcp.json):

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:

sh
git clone https://github.com/theluckystrike/mcp-servers.git && cd mcp-serversnpm installnpm 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

ToolWhat it does
profile_setStore 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_getReturn the stored profile as JSON, exactly as the other tools see it
resume_createWrite 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_createA 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_jobGap 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_readRead an existing resume .docx back into the profile shape, section by heading. Best effort; nothing is saved unless save: true
resume_to_markdownThe resume as markdown, for an application form or an ATS box
resume_to_htmlPrintable HTML with a print stylesheet. Open it and print to PDF
license_statusShow free or Pro mode
license_activateActivate 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 highlights entry 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 2012 does not license a letter claiming 12.
  • 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_job never become skills. The response says so in plain words.

What you can say

You sayTool
"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

FreePro ($19 one-time)
Profile, resume_create, resume_to_markdown, resume_to_htmlYes, unlimitedYes, unlimited
Resume stylesmodernmodern, classic, compact
Cover letters3 per calendar monthUnlimited
tailor_to_jobPostings up to 2,000 charactersAny length
Profile variantsOne profileNamed variants (backend, management, ...)
Letterhead colourDefaultYour 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 .mcpb bundle or the clone-and-build path above until it lands.
  • "no profile stored": run profile_set once, or resume_read {path, save: true} from an existing resume.
  • The resume dropped a bullet I wanted: raise max_pages, or pass the posting's words in keywords so the bullet outranks the others. bullets_dropped in the response names every one that did not fit.
  • Short skill names: tailor_to_job keeps 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 own skills list, 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 go does not match Google and k8s does not match Kubernetes. 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_html writes semantic HTML with a print stylesheet; print that to PDF.
  • Node version: requires Node >= 18. Check with node -v.

MIT licensed. Support: [email protected]

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 anywhere else. An email address is only ever taken from that profile or from an explicit argument; when none is stored, documents show [add: email] and the tool says so rather than letting anyone improvise an address.

Use these docs as an MCP server

Any MCP client (Claude, Cursor, Windsurf, VS Code) can read this repository's documentation directly via GitMCP - no install:

来源:servers/resume/README.md,提交 6535b33

工具

13

profile_set

Store your CV facts

Store the profile every resume and cover letter is built from: contact details, summary, skills, roles with bullets, education, certifications and languages. Returns a count of what was stored.

输入参数nameemaillinksmergephoneskillsreplacesummaryvariantlocationeducationlanguages另有 3 个

profile_get

Show the stored profile

Return the stored CV profile exactly as resume_create, cover_letter_create and tailor_to_job will use it, plus the variant read and every stored variant name. Call it before any rewrite.

输入参数variant

resume_create

Write a resume .docx

Call this tool to write the stored profile to a Word .docx. Returns the output path, the estimated page count, which bullets were dropped to fit, and which keywords matched or are missing.

输入参数stylevariantkeywordsout_pathmax_pagesoverwritetarget_role

resume_to_markdown

Resume as markdown

Return the stored profile as markdown text inline, ready to paste into a form or an ATS box. Same page-budget trimming as resume_create for max_pages. Nothing is written to disk. Free.

输入参数variantmax_pagestarget_role

resume_to_html

Printable resume HTML

Call this tool to write the resume as semantic HTML with a print stylesheet and return where it went; print it to PDF from a browser, because there is no doc_to_pdf here. Bullets are trimmed to fit max_pages. Free.

输入参数variantout_pathmax_pagesoverwritetarget_role

resume_read

Read an existing resume .docx

Call this tool to read an existing .docx resume into the profile shape, with the sections found and anything unplaced. It saves nothing unless save is true, so review it first. .doc and .rtf are refused.

输入参数pathsavevariantdocx_base64

cover_letter_create

Write a cover letter .docx

Call this tool to write a one-page cover letter .docx from the stored profile and return the path, word count and bracketed prompts. Nothing from the posting is restated as yours. Free: 3 a month.

输入参数role必填tonecompany必填out_pathoverwritehighlightshiring_managerjob_description

tailor_to_job

Gap analysis against a posting

READ-ONLY gap analysis against a posting: writes nothing, changes nothing. Returns matched keywords, missing ones, a coverage figure and orderings of facts you already stated. Act on it with resume_create.

输入参数limitvariantjob_description必填

license_status

License status

Report this endpoint's licence state for your token as JSON: the product, the tier free or pro, why it is not Pro, and the checkout URL. Call it to explain a free-tier refusal. No arguments, nothing changes.

无需输入参数。

license_activate

Activate license

Turn Pro on for this connection with key, an MCPL1.<payload>.<signature> issued at checkout for this server or the bundle. Data under your token stays; a wrong or expired key changes nothing. license_status confirms it.

输入参数key必填

doc_upload

Upload a .docx to work on

Send an existing Word document to this hosted endpoint. There is no filesystem here, so instead of a path you upload the file once with doc_upload and then pass its name as `path` to doc_read, doc_to_html and doc_fill_template. Give exactly one of docx_base64 or url. url: fetch a public file instead of pasting base64 (recommended above about 10 KB): a 13 KB base64 paste can take minutes to write out, while a url costs one line and the fetch happens here (10 second timeout, at most 3 redirects, public http(s) hosts only, 2 MB cap). Uploads are kept for your token between calls; doc_read and doc_fill_template also take docx_base64 directly; that file is stored under the name you give (default 'inline' / 'template') and can be removed with doc_delete_upload. Documents this server writes come back as a download link valid for one hour.

输入参数urlname必填docx_base64

doc_files

List uploaded documents

List the documents uploaded for your token, with their sizes.

无需输入参数。

doc_delete_upload

Delete an uploaded document

Delete one document uploaded for your token: name is the name it was uploaded under, without .docx. doc_files lists them. A name nothing is stored under is refused and nothing is deleted.

输入参数name必填

版本历史

5
  1. v0.23.0最新Nov 3, 2026
  2. v0.22.6Oct 14, 2026
  3. v0.22.1Oct 9, 2026
  4. v0.22.0Sep 17, 2026
  5. v0.21.0Sep 16, 2026

评分

已满足适用检查项的 100%

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

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