Zovo Resume MCP Server
Crie e personalize currículos e CVs a partir de arquivos locais com seções estruturadas. Servidor MCP offline-first, camada gratuita, sem cadastro.
Documentação
mcp-resume
Armazene os fatos do seu currículo uma única 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 tópicos são reordenados por relevância para a vaga, ajustados para caber na contagem de páginas que você
solicitou, 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 tenha colocado no seu perfil. Quando um fato estiver ausente, a carta deixa um prompt entre colchetes como
[add: metric] em vez de inventar um número. Ela 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 de MCP (io.github.theluckystrike/resume-cover-letter-docx-generator).
Listado no Índice de Produtos de IA — endpoint remoto ativo 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 + build
é o caminho funcional, 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 for 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 build 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 tópicos, 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 tópicos 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 em relação a 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 estilos de impressão. Abra e imprima em 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 tópico verbatim do seu perfil. A carta nunca parafraseia um tópico em uma afirmação mais forte.
- Uma entrada
highlightsque você passa é verificada contra o perfil primeiro. Se o perfil não a suportar, 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 remonta a 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, quadro de funcionários e produtividade do empregador
são deles, e a carta nunca reafirmará um deles como seu. A comparação é em números inteiros, então um perfil
contendo
2012não autoriza uma carta que afirma12. - Cada tópico de prova é impresso sob o cargo ao qual realmente pertence. Uma carta que cita trabalho de dois empregadores imprime dois cabeçalhos; trabalho de um emprego anterior nunca é listado sob o atual.
- Um tópico 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 de 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 esta vaga de Engenheiro Sênior." | resume_create |
| "Escreva a carta de apresentação para a Zeta Systems, tom direto." | cover_letter_create |
| "Me dê 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 em PDF |
| "Candidate-me a esta vaga." | 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 em vez disso: 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 cabeçalhos, 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 cargos, educação,
certificações e idiomas são contados primeiro; o orçamento restante vai para os tópicos de experiência, maior pontuação
primeiro. Cada cargo mantém seu primeiro tópico antes de qualquer cargo receber um segundo, então o ajuste nunca deixa um emprego na
página sem nada sob ele. A resposta relata o orçamento, as palavras usadas, a contagem estimada de páginas e cada
tópico 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 dos tópicos 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 | Seu próprio accent_color |
| Crédito no rodapé | "Gerado com mcp-docx por theluckystrike" | Removido |
Obtenha o 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 requisiçã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 o docx também quando quiser propostas, contratos e markdown-para-Word. - office-suite, vários servidores em uma única instalação, uma entrada de configuração.
Solução de problemas
npxtrava ou não encontra o pacote: a publicação no npm para este pacote está pendente. Use o pacote.mcpbou o caminho de clone e build 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 tópico que eu queria: aumente
max_pages, ou passe as palavras da vaga emkeywordspara que o tópico 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 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 em JavaScript puro de Word para PDF precisa de uma dependência nativa ou de uma API em nuvem.resume_to_htmlescreve HTML semântico com uma folha de estilos de impressão; imprima isso em PDF. - Versão do Node: requer Node >= 18. Verifique com
node -v.
Licenciado sob MIT. Suporte: support@zovo.one
Construído por theluckystrike.
Um perfil de negócios para toda a suíte
Sua identidade é armazenada uma 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 do docx, o emissor
recorrente, a taxa de IVA padrão do expense-tracker, a zona doméstica do time-tracker e do timezone, e os
cabeçalhos de currículo e contrato. Configure uma vez com business_set (invoice ou docx) — você nunca
repete em nenhum outro lugar. Um endereço de e-mail só é obtido desse perfil ou de um argumento
explícito; quando nenhum está armazenado, os documentos mostram [add: email] e a ferramenta diz isso em vez de
deixar alguém improvisar um endereço.