Resume Builder MCP
Crie, personalize e exporte currículos a partir do chat: dados estruturados de CV, correspondência com descrições de vagas e renderização compatível com ATS.
Documentação
mcp-resume
Servidor MCP para criação de currículos e cartas de apresentação, documentos CV em formato Word. Currículos e cartas de apresentação como arquivos Word a partir de um único perfil, nunca inventados.
Funciona com Claude Desktop, Claude Code, Cursor e qualquer cliente Model Context Protocol. Roda na sua própria máquina, ou hospedado sem instalação.
Página do produto: https://mcp.zovo.one/s/resume — o que faz, as ferramentas que expõe e um endpoint de token ao vivo.
Instalação
Hospedado, nada para instalar. Obtenha um token em https://mcp.zovo.one/mcp/connect (a página de conexão) ou https://mcp.zovo.one/mcp/token (o mesmo token como JSON); um token anônimo gratuito é emitido na hora e uma chave Pro funciona da mesma forma. Em seguida, aponte um cliente MCP para https://mcp.zovo.one/mcp/resume via streamable-http e envie o token como Authorization: Bearer <token>.
Se o seu cliente não puder definir cabeçalhos, coloque o token no caminho: https://mcp.zovo.one/mcp/resume/t/<token>. Ambas as formas funcionam. A URL simples sem token responde 401 em tools/call, então o token não é opcional.
Claude Desktop, um clique. Baixe resume.mcpb do último lançamento e clique duas vezes nele.
A partir do código-fonte. O espelho é autocontido: cada dependência @theluckystrike/* é incluída, então um clone novo compila sem configuração extra.
git clone https://github.com/theluckystrike/mcp-resume.git
cd mcp-resume
npm install && npm run build
Em seguida, aponte seu cliente para o ponto de entrada compilado:
{
"mcpServers": {
"resume": {
"command": "node",
"args": ["/absolute/path/to/mcp-resume/dist/index.js"]
}
}
}
@theluckystrike/mcp-resumeainda não está publicado no npm, então um comandonpx -y @theluckystrike/mcp-resumefalhará. Os três caminhos acima são os que funcionam e cada um é testado pelo CI.

Espelho somente leitura de mcp-servers/servers/resume. Veja MIRROR.md.
Armazene seus fatos de CV uma vez. Depois diga "adapte meu currículo para esta vaga e escreva a carta de apresentação" e receba dois arquivos .docx reais: um currículo cujos marcadores são reordenados por relevância para a vaga, ajustados para caber na contagem de páginas que você pediu, com as palavras-chave da vaga em negrito onde você realmente as possui, e uma carta de apresentação de uma página que não afirma nada que você não colocou no seu perfil. Quando um fato está faltando, a carta deixa um prompt entre colchetes como [add: metric] em vez de inventar um número. Também lê um currículo existente .docx de volta para o formato de perfil, exporta markdown para uma caixa de ATS e escreve HTML imprimível. Tudo roda localmente: sem upload, sem conta, sem dependência nativa.
No Registro Oficial MCP (io.github.theluckystrike/resume-cover-letter-docx-generator).
Listado no AI Product Index — endpoint remoto ao vivo em mcp.zovo.one/s/resume, camada gratuita, sem cadastro.
Instalação em 60 segundos
A publicação no npm para @theluckystrike/mcp-resume está pendente. Até lá, o pacote de um clique .mcpb ou um clone+compilação é o caminho que funciona, ambos verificados abaixo.
Um clique (.mcpb): baixe resume.mcpb do último lançamento e clique duas vezes no 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"]
}
}
}
O formulário npx acima começa a funcionar no momento em que o pacote é publicado. Até lá, use o pacote .mcpb acima, ou compile a partir do código-fonte com exatamente estes três comandos:
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
Em seguida, aponte o command do seu cliente para node com um argumento: o caminho absoluto para servers/resume/dist/index.js.
servers/docx está nessa lista de compilação porque este servidor compartilha o mecanismo de documentos com
mcp-docx em vez de carregar uma segunda cópia dele.
Para executar no modo Pro, defina MCP_LICENSE_KEY no mesmo bloco de configuração, ou chame license_activate uma vez com sua chave.
Ferramentas
| Ferramenta | O que faz |
|---|---|
profile_set | Armazena os fatos a partir dos quais cada saída é construída: nome, e-mail, telefone, localização, links, resumo, habilidades, cargos com marcadores, educação, certificações, idiomas. Um perfil por diretório de dados; Pro adiciona variantes nomeadas |
profile_get | Retorna o perfil armazenado como JSON, exatamente como as outras ferramentas o veem |
resume_create | Escreve o currículo como .docx. Os marcadores são classificados por correspondências de palavras-chave e recência, depois ajustados para max_pages contra um orçamento de palavras medido; palavras-chave correspondentes são colocadas em negrito, as ausentes são relatadas e nunca adicionadas. Estilos: modern, classic, compact |
cover_letter_create | Uma carta de uma página em quatro partes — abertura, adequação, prova, encerramento — extraída apenas do perfil. Tons: formal, direct, warm. Desconhecidos retornam como prompts [add: ...] |
tailor_to_job | Análise de lacunas contra uma vaga: as palavras-chave que ela realmente pede, quais delas seu perfil já cobre, quais não cobre, um índice de cobertura e reescritas que apenas reordenam fatos que você já declarou |
resume_read | Lê um currículo existente .docx de volta para o formato de perfil, seção por título. Melhor esforço; nada é salvo a menos que save: true |
resume_to_markdown | O currículo como markdown, para um formulário de inscrição ou uma caixa de ATS |
resume_to_html | HTML imprimível com uma folha de estilo de impressão. Abra e imprima para PDF |
license_status | Mostra o modo gratuito ou Pro |
license_activate | Ativa uma chave Pro (verificada offline) |
Recurso: resume://profile retorna o perfil armazenado como JSON.
Prompt: apply_to_job encadeia tailor_to_job, resume_create e cover_letter_create contra uma vaga, e faz o modelo relatar as lacunas de volta para você em vez de preenchê-las.
A carta de apresentação não inventa fatos
Esta é a parte que importa, então é aplicada em vez de solicitada:
- Cada linha de prova na carta é um marcador verbatim do seu perfil. A carta nunca parafraseia um marcador em uma afirmação mais forte.
- Uma entrada
highlightsque você passa é verificada contra o perfil primeiro. Se o perfil não a suporta, ela é impressa como[add: "..." is not in your profile - add it there or drop it], não como uma afirmação. - Antes de o arquivo ser escrito, cada sequência de dígitos na carta é verificada contra seu perfil e os argumentos que você passou. Um número que não rastreia nenhum dos dois é uma recusa, não um aviso; a ferramenta retorna um erro e não escreve nada. A descrição da vaga é deliberadamente não uma fonte permitida: os números de receita, equipe e produtividade do empregador são deles, e a carta nunca os reafirmará como seus. A comparação é em números inteiros, então um perfil com
2012não autoriza uma carta que afirma12. - Cada marcador de prova é impresso sob o cargo ao qual realmente pertence. Uma carta que cita trabalho de dois empregadores imprime dois títulos; trabalho de um emprego anterior nunca é listado sob o atual.
- Um marcador sem número recebe
[add: metric]anexado, então a carta pede o resultado em vez de adivinhar um. - Palavras-chave ausentes de
tailor_to_jobnunca se tornam habilidades. A resposta diz isso em palavras simples.
O que você pode dizer
| Você diz | Ferramenta |
|---|---|
| "Aqui está meu CV: Ada Rowe, engenheira backend, Acme Pay desde 2021, ..." | profile_set |
| "Leia meu currículo antigo em ~/Documents/cv.docx e configure meu perfil." | resume_read |
| "Quão bem eu correspondo a esta vaga?" | tailor_to_job |
| "Faça um currículo de uma página para este cargo de Engenheiro Sênior." | resume_create |
| "Escreva a carta de apresentação para Zeta Systems, tom direto." | cover_letter_create |
| "Dê-me a versão em texto simples para o formulário de inscrição." | resume_to_markdown |
| "Preciso de um PDF para anexar." | resume_to_html, depois imprima para PDF |
| "Candidate-me a este emprego." | o prompt apply_to_job |
Exemplo prático
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
Como funciona o ajuste de páginas
Não há mecanismo de layout de página em JavaScript puro, então este servidor não finge medir um. Ele usa um orçamento de palavras: uma página A4 completa em Calibri 11pt com margens de 2cm comporta cerca de 520 palavras de texto do corpo, e um currículo gasta aproximadamente um sétimo dessa página em títulos, linhas em branco e o bloco de contato. O número líquido é 450 palavras por página (540 para o estilo compact). O bloco de contato, resumo, habilidades, cabeçalhos de cargo, educação, certificações e idiomas são contados primeiro; o que sobrar do orçamento vai para os marcadores de experiência, maior pontuação primeiro. Cada cargo mantém seu primeiro marcador antes de qualquer cargo receber um segundo, então o ajuste nunca deixa um emprego na página sem nada abaixo dele. A resposta relata o orçamento, as palavras usadas, a contagem estimada de páginas e cada marcador descartado, para que você veja a decisão em vez de descobri-la no Word.
A recência faz parte dessa pontuação, e é lida da ordem do array, não do texto start/end. profile_set aplica a ordenação que torna isso seguro: não importa como você liste os cargos ao chamá-la, o perfil armazenado sempre termina do mais recente para o mais antigo, um cargo aberto sem end primeiro, depois por end decrescente, depois por start decrescente. Insira os cargos em qualquer ordem; a ordem armazenada (e a classificação de marcadores da carta de apresentação em cover_letter_create) está sempre correta.
Gratuito vs Pro
| Gratuito | Pro ($19 pagamento único) | |
|---|---|---|
Perfil, resume_create, resume_to_markdown, resume_to_html | Sim, ilimitado | Sim, ilimitado |
| Estilos de currículo | modern | modern, classic, compact |
| Cartas de apresentação | 3 por mês civil | Ilimitadas |
tailor_to_job | Vagas de até 2.000 caracteres | Qualquer tamanho |
| Variantes de perfil | Um perfil | Variantes nomeadas (backend, management, ...) |
| Cor do cabeçalho | Padrão | Sua própria accent_color |
| Crédito no rodapé | "Gerado com mcp-docx por theluckystrike" | Removido |
Obtenha Pro: https://mcp.zovo.one/buy/resume ($19 pagamento único, ou $39 pelo pacote completo).
Privacidade
Todos os dados permanecem locais. Seu CV nunca sai da máquina: o servidor lê e escreve arquivos no seu computador, armazena o perfil sob seu diretório de dados e não faz nenhuma solicitação de rede de qualquer tipo, nem para licenciamento (chaves são verificadas offline), nem para fontes, nem para telemetria.
Combina com
- mcp-docx, este servidor importa seu mecanismo de documentos (
@theluckystrike/mcp-docx/lib); instale docx também quando quiser propostas, contratos e markdown para Word. - office-suite, vários servidores atrás de uma instalação, uma entrada de configuração.
Solução de problemas
npxtrava ou falha ao encontrar o pacote: a publicação no npm para este pacote está pendente. Use o pacote.mcpbou o caminho de clone-e-compilação acima até que seja publicado.- "nenhum perfil armazenado": execute
profile_setuma vez, ouresume_read {path, save: true}a partir de um currículo existente. - O currículo descartou um marcador que eu queria: aumente
max_pages, ou passe as palavras da vaga emkeywordspara que o marcador supere os outros.bullets_droppedna resposta nomeia cada um que não coube. - Nomes curtos de habilidades:
tailor_to_jobmantém habilidades de dois e um caractere,Go,C,R,C#,C++,F#,Qt,UI,UX,QA,ML,AI,AR,VR,JS,TS,K8s,AWS,GCP,SQL,iOS, além de qualquer palavra curta que apareça na sua própria listaskills, e classifica uma habilidade conhecida acima de uma palavra mais longa da mesma frequência. - Uma palavra-chave que eu tenho é relatada como ausente: a correspondência é em limites de palavras, então
gonão corresponde aGoogleek8snão corresponde aKubernetes. Adicione a palavra exata às suas habilidades se for verdade. resume_readcolocou um cargo emunparsed: currículos não têm esquema. Nada é descartado silenciosamente, corrija os campos e passe-os paraprofile_set.- Não há
resume_to_pdf: toda rota de JavaScript puro de Word para PDF precisa de uma dependência nativa ou uma API em nuvem.resume_to_htmlescreve HTML semântico com uma folha de estilo de impressão; imprima isso para PDF. - Versão do Node: requer Node >= 18. Verifique com
node -v.
Licenciado sob MIT. Suporte: support@zovo.one Built by theluckystrike.
Um perfil de negócio para toda a suíte
Sua identidade é armazenada uma única vez, em ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/profile/business.json,
e cada servidor da suíte a lê: o emissor de faturas, o cabeçalho de docx, o emissor
recorrente, a taxa de IVA padrão do expense-tracker, o fuso horário do time-tracker e do timezone, e os
cabeçalhos de currículo e contrato. Configure-a uma vez com business_set (invoice ou docx) — você nunca
a repete em nenhum outro lugar. Um endereço de e-mail é sempre obtido apenas desse perfil ou de um
argumento explícito; quando nenhum está armazenado, os documentos mostram [add: email] e a ferramenta informa isso em vez de
deixar qualquer um improvisar um endereço.
Use estes documentos como um servidor MCP
Qualquer cliente MCP (Claude, Cursor, Windsurf, VS Code) pode ler a documentação deste repositório diretamente via GitMCP — sem instalação:
- URL do MCP de Documentos: https://gitmcp.io/theluckystrike/mcp-resume