vagas-mcp
With vagas-mcp, you can track and manage a job search from Claude using MCP tools, resources, and prompts backed by local SQLite.
Register job openings with company, role, link, platform, work model, level, and notes; duplicate links are blocked.
List jobs, optionally filtered by status or company name.
Move applications through funnel statuses (
encontrada,aplicada,entrevista,teste_tecnico,oferta,recusada,desisti) and add dated notes.Save a job posting’s description for an already-registered job.
Summarize funnel totals and conversion rates between stages.
Find applications stuck at
aplicadafor N days as follow-up candidates.Compare a resume (PDF, DOCX, MD) against a job description for an ATS-like fit score, missing skills, and tips.
Sync jobs to a Notion database, creating new entries and updating existing ones by link.
Access a weekly Markdown report resource and a weekly review prompt.
Store data locally in SQLite, with optional Notion sync as an external view.
Sincroniza vagas de emprego com um banco do Notion, criando novas entradas e atualizando as existentes, preenchendo colunas conforme o schema do banco e evitando duplicatas pelo link.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@vagas-mcp Registra a vaga de Analista de IA Jr na Empresa X, remota, que achei na Gupy."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
vagas-mcp
Servidor MCP (Model Context Protocol) que dá ao Claude ferramentas para organizar uma busca de emprego: registrar vagas, acompanhar o status, medir o funil de conversão e lembrar dos follow-ups.
O problema
Quem está buscando emprego aplica para dezenas de vagas em plataformas diferentes (Gupy, LinkedIn, sites próprios) e perde o controle: onde já apliquei? Quem não respondeu há duas semanas? Minha taxa de entrevista está boa?
Com o vagas-mcp conectado, dá para conversar com o Claude assim:
"Registra a vaga de Analista de IA Jr da Empresa X que achei na Gupy, é remota." "Apliquei na vaga 3 hoje." "Como está meu funil?" "Quais candidaturas estão paradas há mais de 10 dias?"
E o Claude chama as ferramentas certas, com os dados guardados localmente em SQLite.
Related MCP server: JobDesk MCP Server
Demo
arthurpenedo.github.io/vagas-mcp — sessão real com o servidor rodando por stdio (como no Claude Desktop), gerada pelo CI a cada push: cada chamada de ferramenta e a resposta que o servidor devolveu, o funil e o relatório semanal. Empresas fictícias.

O que o servidor expõe
As três primitivas do MCP:
Tipo | Nome | O que faz |
tool |
| Cadastra uma vaga (empresa, cargo, link, plataforma, modelo, nível, notas, descrição). Bloqueia links duplicados. |
tool |
| Lista com filtro por status ou por parte do nome da empresa. |
tool |
| Move a vaga no funil ( |
tool |
| Guarda o texto do anúncio de uma vaga já registrada. |
tool |
| Quantas vagas alcançaram cada etapa e as taxas de conversão entre etapas. |
tool |
| Candidaturas "aplicadas" sem novidade há N dias, que pedem follow-up. |
tool |
| Compara um currículo (PDF, DOCX, MD) com a descrição da vaga, como um ATS: nota 0–100, habilidades que faltam e dicas. Usa o ats-match. |
tool |
| Envia as vagas para um banco do Notion (cria as novas, atualiza as existentes). |
resource |
| Resumo dos últimos 7 dias em Markdown: movimentações, funil e follow-ups. |
prompt |
| Roteiro pronto para o Claude revisar a semana e sugerir follow-ups e mudanças de estratégia. |
Arquitetura
Claude Desktop / Claude Code ──(MCP, stdio)──► server.py (MCPServer: casca fina)
│
┌──────────────────────────┼──────────────────────────┐
▼ ▼ ▼
store.py (regras + SQLite) ats-match (aderência) notion.py (API do Notion)
tabelas: vagas, historico extra opcional [ats] SQLite → Notion, upsertDecisões técnicas
Regra de negócio separada do protocolo.
store.pynão sabe o que é MCP e é testado diretamente;server.pysó traduz ferramentas em chamadas. Trocar de protocolo (API REST, CLI) não mexe na lógica.Funil pelo histórico, não pelo status atual. Uma vaga que chegou à entrevista e depois foi recusada conta como entrevista no funil. Olhar só o status atual subestimaria a conversão.
Local-first. SQLite num arquivo do usuário, sem conta nem servidor externo. As instruções do servidor orientam o modelo a não registrar dados sensíveis.
Erros que o modelo consegue corrigir. No MCP SDK 2.x, uma exceção comum vira um "Error executing tool" genérico e a mensagem fica no servidor. As regras de negócio (link duplicado, vaga inexistente, status inválido) são convertidas em
ToolError, então o Claude recebe "Já existe uma vaga com este link (id 8)" e pode se corrigir. A demo mostra esse caso.Notion sem template obrigatório. O sincronizador lê o schema do banco antes de escrever e preenche cada coluna conforme o tipo dela (título, texto, select, status, URL, data). Coluna que não existe é ignorada com aviso; opção de status que não existe no Notion (a API não deixa criar) é pulada em vez de derrubar a sincronização. Vagas já cadastradas à mão são encontradas pelo link, sem duplicar.
SQLite como fonte da verdade, Notion como vitrine. Mão única: funciona offline e é testável; o Notion serve para acompanhar pelo celular.
Migração sem perder dados. Bancos da v0.1 ganham as colunas novas na abertura (
ALTER TABLEsó se faltar).Testes pelo protocolo. Os testes usam o cliente MCP do SDK contra o servidor em memória, a API do Notion é simulada com
httpx.MockTransport, e a demo sobe o servidor por stdio de verdade no CI.
Como usar
git clone https://github.com/arthurpenedo/vagas-mcp && cd vagas-mcp
pip install -e ".[dev]" # servidor + testes
pip install -e ".[dev,ats]" # + analisar_aderencia (instala o ats-match do GitHub)
pytest -q
python scripts/demo.py site/index.html # gera a página da demoClaude Code:
claude mcp add vagas -- vagas-mcpClaude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"vagas": { "command": "vagas-mcp", "env": { "VAGAS_DB": "C:/Users/voce/vagas.sqlite3" } }
}
}O banco fica em VAGAS_DB (padrão: ~/.vagas-mcp/vagas.sqlite3).
Notion (opcional): crie uma integração interna, compartilhe o banco com ela e defina NOTION_TOKEN e NOTION_DATABASE_ID no env acima. Os nomes de coluna esperados (Vaga, Empresa, Plataforma, Nível, Modelo, Link, Status, Data, Notas) ficam em notion.CAMPOS.
Próximos passos
Sincronização com um banco do Notion
Ferramenta de aderência integrada ao ats-match
Resource com o relatório semanal e prompt de revisão
Demo pública gerada no CI com sessão stdio real
Importar do Notion (mão dupla)
Vídeo de demonstração no Claude Desktop
Feito por Arthur Penedo · LinkedIn
Available Tools
5 toolsatualizar_statusA
Muda o status de uma vaga (encontrada, aplicada, entrevista, teste_tecnico, oferta, recusada, desisti) e registra uma nota opcional com a data.
Inputs: status (required), vaga_id (required), nota.
listar_vagasA
Lista vagas, opcionalmente filtrando por status (encontrada, aplicada, entrevista, teste_tecnico, oferta, recusada, desisti) ou por parte do nome da empresa.
Inputs: status, empresa. Returns: result
registrar_vagaC
Registra uma vaga encontrada. modelo: remoto | hibrido | presencial. plataforma: ex. Gupy, LinkedIn.
Inputs: cargo (required), empresa (required), link, nivel, +3 more.
resumo_do_funilB
Totais por status e taxas de conversão do funil aplicada -> entrevista -> teste técnico -> oferta.
Inputs: no named parameters.
vagas_paradasA
Candidaturas com status 'aplicada' sem novidade há pelo menos dias dias (candidatas a follow-up).
Inputs: dias. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
Each tool targets a distinct operation: create a job record, list/filter jobs, update status, summarize funnel metrics, and surface stale applications. There is minimal overlap because vagas_paradas is a specialized follow-up query not covered by listar_vagas filters.
Most tools follow a readable Portuguese snake_case pattern, with action tools using verb_noun (registrar_vaga, listar_vagas, atualizar_status). The report/query tools resumo_do_funil and vagas_paradas use noun phrases, a minor deviation but still predictable and clear.
Five tools is well-scoped for a personal job application tracker. Each tool has a clear role in the workflow: register, list, update, analyze, and follow up.
The surface covers the core lifecycle: create, list/filter, update status, funnel summary, and stale-application detection. Minor gaps exist, such as deleting or editing a job's original details, but agents can work around them via listing and status updates.
Maintenance
Related MCP Connectors
Job search tracker for Claude and ChatGPT: applications, interviews, follow-ups, company watch.
Track job applications: find the ones to follow up on, add jobs, update status, notes and steps.
Track job applications on a board: let Claude or ChatGPT read and update jobs, interviews, notes.
Job-search tracker for AI agents: applications, stale follow-ups, skills gaps, H-1B lookup.
Related MCP Servers
- FlicenseAqualityDmaintenanceEnables tracking job applications through a pipeline, scheduling follow-ups, and summarizing job search progress via natural language.7-
- AlicenseNot gradedqualityBmaintenanceEnables Claude to read and update the local job-search tracker, adding postings from screenshots, pasted text or links, drafting application emails, syncing Gmail to log sent applications and replies, and answering questions about what's due or which jobs match a criteria. Every change is validated and appears live on the dashboard with a timeline entry.MIT
- AlicenseNot gradedqualityBmaintenanceProvides a local, append-only SQLite tracker for a disciplined job search, exposing narrow tools that move roles through a found-to-offer state machine while recording events, verification evidence, application confirmations and daily reports. It also lets an agent record drops, queue roles, and gate submissions and consent actions behind explicit approval hooks.MIT
- AlicenseNot gradedqualityCmaintenanceTurns Claude into a local job-search assistant that pulls openings from public job-board and company APIs, scores each one 0–100 against your profile with explainable reasons, and generates ATS-friendly CVs and cover letters tailored to each offer without inventing any figures. It also tracks every application and follow-up in a local SQLite database and helps prepare interviews, while leaving the actual applying to you.1MIT